List of Copyright holders
=========================
- Copyright (C) 1997-2015 Werner Koch
- Copyright (C) 1994-2015 Free Software Foundation, Inc.
- Copyright (C) 2003-2013 g10 Code GmbH
+ Copyright (C) 1997-2016 Werner Koch
+ Copyright (C) 1994-2016 Free Software Foundation, Inc.
+ Copyright (C) 2003-2013,2015-2016 g10 Code GmbH
Copyright (C) 2002 Klarälvdalens Datakonsult AB
Copyright (C) 1995-1997, 2000-2007 Ulrich Drepper <drepper@gnu.ai.mit.edu>
Copyright (C) 1994 X Consortium
=========
- Copyright 1998-2013 Free Software Foundation, Inc.
- Copyright 1997-2014 Werner Koch
+ Copyright 1998-2016 Free Software Foundation, Inc.
+ Copyright 1997-2016 Werner Koch
This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without
dist-hook: gen-ChangeLog
+distcheck-hook:
+ set -e; ( \
+ pref="#+macro: gnupg21_" ;\
+ reldate="$$(date -u +%Y-%m-%d)" ;\
+ echo "$${pref}ver $(PACKAGE_VERSION)" ;\
+ echo "$${pref}date $${reldate}" ;\
+ list='$(DIST_ARCHIVES)'; for i in $$list; do \
+ case "$$i" in *.tar.bz2) \
+ echo "$${pref}size $$(wc -c <$$i|awk '{print int($$1/1024)}')k" ;\
+ echo "$${pref}sha1 $$(sha1sum <$$i|cut -d' ' -f1)" ;\
+ echo "$${pref}sha2 $$(sha256sum <$$i|cut -d' ' -f1)" ;;\
+ esac;\
+ done ) | tee $(distdir).swdb
+
+
if HAVE_W32_SYSTEM
install-data-hook:
set -e; \
gen_start_date = 2011-12-01T06:00:00
.PHONY: gen-ChangeLog
gen-ChangeLog:
- if test -d $(top_srcdir)/.git; then \
+ if test -e $(top_srcdir)/.git; then \
(cd $(top_srcdir) && \
$(GITLOG_TO_CHANGELOG) --append-dot --tear-off \
--amend=build-aux/git-log-fix \
+Noteworthy changes in version 2.1.11 (2016-01-26)
+-------------------------------------------------
+
+ * gpg: New command --export-ssh-key to replace the gpgkey2ssh tool.
+
+ * gpg: Allow to generate mail address only keys with --gen-key.
+
+ * gpg: "--list-options show-usage" is now the default.
+
+ * gpg: Make lookup of DNS CERT records holding an URL work.
+
+ * gpg: Emit PROGRESS status lines during key generation.
+
+ * gpg: Don't check for ambigious or non-matching key specification in
+ the config file or given to --encrypt-to. This feature will return
+ in 2.3.x.
+
+ * gpg: Lock keybox files while updating them.
+
+ * gpg: Solve rare error on Windows during keyring and Keybox updates.
+
+ * gpg: Fix possible keyring corruption. (bug#2193)
+
+ * gpg: Fix regression of "bkuptocard" sub-command in --edit-key and
+ remove "checkbkupkey" sub-command introduced with 2.1. (bug#2169)
+
+ * gpg: Fix internal error in gpgv when using default keyid-format.
+
+ * gpg: Fix --auto-key-retrieve to work with dirmngr.conf configured
+ keyservers. (bug#2147).
+
+ * agent: New option --pinentry-timeout.
+
+ * scd: Improve unplugging of USB readers under Windows.
+
+ * scd: Fix regression for generating RSA keys on card.
+
+ * dirmmgr: All configured keyservers are now searched.
+
+ * dirmngr: Install CA certificate for hkps.pool.sks-keyservers.net.
+ Use this certiticate even if --hkp-cacert is not used.
+
+ * gpgtar: Add actual encryption code. gpgtar does now fully replace
+ gpg-zip.
+
+ * gpgtar: Fix filename encoding problem on Windows.
+
+ * Print a warning if a GnuPG component is using an older version of
+ gpg-agent, dirmngr, or scdaemon.
+
+
Noteworthy changes in version 2.1.10 (2015-12-04)
-------------------------------------------------
Version 0.0.0 (1997-12-20)
- Copyright (C) 1998-2015 Free Software Foundation, Inc.
- Copyright (C) 1997-2015 Werner Koch
+ Copyright (C) 1998-2016 Free Software Foundation, Inc.
+ Copyright (C) 1997-2016 Werner Koch
This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without
=========================
Version 2.1
- Copyright 1997-2015 Werner Koch
- Copyright 1998-2015 Free Software Foundation, Inc.
+ Copyright 1997-2016 Werner Koch
+ Copyright 1998-2016 Free Software Foundation, Inc.
* INTRODUCTION
custom invisible character. */
char *pinentry_invisible_char;
+ /* The timeout value for the Pinentry in seconds. This is passed to
+ the pinentry if it is not 0. It is up to the pinentry to act
+ upon this timeout value. */
+ unsigned long pinentry_timeout;
+
/* The default and maximum TTL of cache entries. */
unsigned long def_cache_ttl; /* Default. */
unsigned long def_cache_ttl_ssh; /* for SSH. */
/*-- gpg-agent.c --*/
void agent_exit (int rc)
GPGRT_ATTR_NORETURN; /* Also implemented in other tools */
+void agent_set_progress_cb (void (*cb)(ctrl_t ctrl, const char *what,
+ int printchar, int current, int total),
+ ctrl_t ctrl);
gpg_error_t agent_copy_startup_env (ctrl_t ctrl);
const char *get_agent_socket_name (void);
const char *get_agent_ssh_socket_name (void);
}
}
+ if (opt.pinentry_timeout)
+ {
+ char *optstr;
+ if ((optstr = xtryasprintf ("SETTIMEOUT %lu", opt.pinentry_timeout)))
+ {
+ assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
+ NULL);
+ /* We ignore errors because this is just a fancy thing. */
+ xfree (optstr);
+ }
+ }
+
/* Tell the pinentry the name of a file it shall touch after having
messed with the tty. This is optional and only supported by
newer pinentries and thus we do no error checking. */
/* Local prototypes. */
-static gpg_error_t membuf_data_cb (void *opaque,
- const void *buffer, size_t length);
socket_name = NULL;
init_membuf (&data, 256);
assuan_transact (ctx, "GETINFO socket_name",
- membuf_data_cb, &data, NULL, NULL, NULL, NULL);
+ put_membuf_cb, &data, NULL, NULL, NULL, NULL);
databuf = get_membuf (&data, &datalen);
if (databuf && datalen)
\f
-static gpg_error_t
-membuf_data_cb (void *opaque, const void *buffer, size_t length)
-{
- membuf_t *data = opaque;
-
- if (buffer)
- put_membuf (data, buffer, length);
- return 0;
-}
-
/* Handle the NEEDPIN inquiry. */
static gpg_error_t
inq_needpin (void *opaque, const char *line)
snprintf (line, sizeof line, "PKSIGN %s %s",
hash_algo_option (mdalgo), keyid);
rc = assuan_transact (ctrl->scd_local->ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
inq_needpin, &inqparm,
NULL, NULL);
if (inqparm.any_inq_seen && (gpg_err_code(rc) == GPG_ERR_CANCELED ||
snprintf (line, DIM(line)-1, "PKDECRYPT %s", keyid);
line[DIM(line)-1] = 0;
rc = assuan_transact (ctrl->scd_local->ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
inq_needpin, &inqparm,
padding_info_cb, r_padding);
if (inqparm.any_inq_seen && (gpg_err_code(rc) == GPG_ERR_CANCELED ||
snprintf (line, DIM(line)-1, "READCERT %s", id);
line[DIM(line)-1] = 0;
rc = assuan_transact (ctrl->scd_local->ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
NULL, NULL,
NULL, NULL);
if (rc)
snprintf (line, DIM(line)-1, "READKEY %s", id);
line[DIM(line)-1] = 0;
rc = assuan_transact (ctrl->scd_local->ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
NULL, NULL,
NULL, NULL);
if (rc)
#define SPEC_FLAG_USE_PKCS1V2 (1 << 0)
#define SPEC_FLAG_IS_ECDSA (1 << 1)
#define SPEC_FLAG_IS_EdDSA (1 << 2) /*(lowercase 'd' on purpose.)*/
+#define SPEC_FLAG_WITH_CERT (1 << 7)
/* The name of the control file. */
#define SSH_CONTROL_FILE_NAME "sshcontrol"
"ecdsa-sha2-nistp521", "ECDSA", "ecdsa", "qd", "q", "rs", "qd",
NULL, ssh_signature_encoder_ecdsa,
"nistp521", GCRY_MD_SHA512, SPEC_FLAG_IS_ECDSA
+ },
+ {
+ "ssh-ed25519-cert-v01@openssh.com", "Ed25519",
+ "ecc", "qd", "q", "rs", "qd",
+ NULL, ssh_signature_encoder_eddsa,
+ "Ed25519", 0, SPEC_FLAG_IS_EdDSA | SPEC_FLAG_WITH_CERT
+ },
+ {
+ "ssh-rsa-cert-v01@openssh.com", "RSA",
+ "rsa", "nedupq", "en", "s", "nedpqu",
+ ssh_key_modifier_rsa, ssh_signature_encoder_rsa,
+ NULL, 0, SPEC_FLAG_USE_PKCS1V2 | SPEC_FLAG_WITH_CERT
+ },
+ {
+ "ssh-dss-cert-v01@openssh.com", "DSA",
+ "dsa", "pqgyx", "pqgy", "rs", "pqgyx",
+ NULL, ssh_signature_encoder_dsa,
+ NULL, 0, SPEC_FLAG_WITH_CERT | SPEC_FLAG_WITH_CERT
+ },
+ {
+ "ecdsa-sha2-nistp256-cert-v01@openssh.com", "ECDSA",
+ "ecdsa", "qd", "q", "rs", "qd",
+ NULL, ssh_signature_encoder_ecdsa,
+ "nistp256", GCRY_MD_SHA256, SPEC_FLAG_IS_ECDSA | SPEC_FLAG_WITH_CERT
+ },
+ {
+ "ecdsa-sha2-nistp384-cert-v01@openssh.com", "ECDSA",
+ "ecdsa", "qd", "q", "rs", "qd",
+ NULL, ssh_signature_encoder_ecdsa,
+ "nistp384", GCRY_MD_SHA384, SPEC_FLAG_IS_ECDSA | SPEC_FLAG_WITH_CERT
+ },
+ {
+ "ecdsa-sha2-nistp521-cert-v01@openssh.com", "ECDSA",
+ "ecdsa", "qd", "q", "rs", "qd",
+ NULL, ssh_signature_encoder_ecdsa,
+ "nistp521", GCRY_MD_SHA512, SPEC_FLAG_IS_ECDSA | SPEC_FLAG_WITH_CERT
}
};
/* Read a binary string from STREAM into STRING, store size of string
in STRING_SIZE. Append a hidden nul so that the result may
directly be used as a C string. Depending on SECURE use secure
- memory for STRING. */
+ memory for STRING. If STRING is NULL do only a dummy read. */
static gpg_error_t
stream_read_string (estream_t stream, unsigned int secure,
unsigned char **string, u32 *string_size)
if (err)
goto out;
- /* Allocate space. */
- if (secure)
- buffer = xtrymalloc_secure (length + 1);
- else
- buffer = xtrymalloc (length + 1);
- if (! buffer)
+ if (string)
{
- err = gpg_error_from_syserror ();
- goto out;
- }
+ /* Allocate space. */
+ if (secure)
+ buffer = xtrymalloc_secure (length + 1);
+ else
+ buffer = xtrymalloc (length + 1);
+ if (! buffer)
+ {
+ err = gpg_error_from_syserror ();
+ goto out;
+ }
- /* Read data. */
- err = stream_read_data (stream, buffer, length);
- if (err)
- goto out;
+ /* Read data. */
+ err = stream_read_data (stream, buffer, length);
+ if (err)
+ goto out;
+
+ /* Finalize string object. */
+ buffer[length] = 0;
+ *string = buffer;
+ }
+ else /* Dummy read requested. */
+ {
+ err = stream_read_skip (stream, length);
+ if (err)
+ goto out;
+ }
- /* Finalize string object. */
- buffer[length] = 0;
- *string = buffer;
if (string_size)
*string_size = length;
}
/* Receive key material MPIs from STREAM according to KEY_SPEC;
- depending on SECRET expect a public key or secret key. The newly
+ depending on SECRET expect a public key or secret key. CERT is the
+ certificate blob used if KEY_SPEC indicates the certificate format;
+ it needs to be positioned to the end of the nonce. The newly
allocated list of MPIs is stored in MPI_LIST. Returns usual error
code. */
static gpg_error_t
ssh_receive_mpint_list (estream_t stream, int secret,
- ssh_key_type_spec_t key_spec, gcry_mpi_t **mpi_list)
+ ssh_key_type_spec_t *spec, estream_t cert,
+ gcry_mpi_t **mpi_list)
{
const char *elems_public;
unsigned int elems_n;
const char *elems;
int elem_is_secret;
- gcry_mpi_t *mpis;
- gpg_error_t err;
+ gcry_mpi_t *mpis = NULL;
+ gpg_error_t err = 0;
unsigned int i;
- mpis = NULL;
- err = 0;
-
if (secret)
- elems = key_spec.elems_key_secret;
+ elems = spec->elems_key_secret;
else
- elems = key_spec.elems_key_public;
+ elems = spec->elems_key_public;
elems_n = strlen (elems);
+ elems_public = spec->elems_key_public;
- elems_public = key_spec.elems_key_public;
+ /* Check that either noth, CERT and the WITH_CERT flag, are given or
+ none of them. */
+ if (!(!!(spec->flags & SPEC_FLAG_WITH_CERT) ^ !cert))
+ {
+ err = gpg_error (GPG_ERR_INV_CERT_OBJ);
+ goto out;
+ }
mpis = xtrycalloc (elems_n + 1, sizeof *mpis );
if (!mpis)
for (i = 0; i < elems_n; i++)
{
if (secret)
- elem_is_secret = ! strchr (elems_public, elems[i]);
- err = stream_read_mpi (stream, elem_is_secret, &mpis[i]);
+ elem_is_secret = !strchr (elems_public, elems[i]);
+
+ if (cert && !elem_is_secret)
+ err = stream_read_mpi (cert, elem_is_secret, &mpis[i]);
+ else
+ err = stream_read_mpi (stream, elem_is_secret, &mpis[i]);
if (err)
- break;
+ goto out;
}
- if (err)
- goto out;
*mpi_list = mpis;
+ mpis = NULL;
out:
-
if (err)
mpint_list_free (mpis);
gpg_error_t err;
char *key_type = NULL;
char *comment = NULL;
+ estream_t cert = NULL;
gcry_sexp_t key = NULL;
ssh_key_type_spec_t spec;
gcry_mpi_t *mpi_list = NULL;
if (err)
goto out;
+ if ((spec.flags & SPEC_FLAG_WITH_CERT))
+ {
+ /* This is an OpenSSH certificate+private key. The certificate
+ is an SSH string and which we store in an estream object. */
+ unsigned char *buffer;
+ u32 buflen;
+ char *cert_key_type;
+
+ err = stream_read_string (stream, 0, &buffer, &buflen);
+ if (err)
+ goto out;
+ cert = es_fopenmem_init (0, "rb", buffer, buflen);
+ xfree (buffer);
+ if (!cert)
+ {
+ err = gpg_error_from_syserror ();
+ goto out;
+ }
+
+ /* Check that the key type matches. */
+ err = stream_read_cstring (cert, &cert_key_type);
+ if (err)
+ goto out;
+ if (strcmp (cert_key_type, key_type) )
+ {
+ xfree (cert_key_type);
+ log_error ("key types in received ssh certificate do not match\n");
+ err = gpg_error (GPG_ERR_INV_CERT_OBJ);
+ goto out;
+ }
+ xfree (cert_key_type);
+
+ /* Skip the nonce. */
+ err = stream_read_string (cert, 0, NULL, NULL);
+ if (err)
+ goto out;
+ }
+
if ((spec.flags & SPEC_FLAG_IS_EdDSA))
{
/* The format of an EdDSA key is:
goto out;
}
- err = stream_read_blob (stream, 0, &mpi_list[0]);
+ err = stream_read_blob (cert? cert : stream, 0, &mpi_list[0]);
if (err)
goto out;
if (secret)
* mpint ecdsa_private
*
* Note that we use the mpint reader instead of the string
- * reader for ecsa_public_key.
+ * reader for ecsa_public_key. For the certificate variante
+ * ecdsa_curve_name+ecdsa_public_key are replaced by the
+ * certificate.
*/
unsigned char *buffer;
const char *mapped;
- err = stream_read_string (stream, 0, &buffer, NULL);
+ err = stream_read_string (cert? cert : stream, 0, &buffer, NULL);
if (err)
goto out;
curve_name = buffer;
}
}
- err = ssh_receive_mpint_list (stream, secret, spec, &mpi_list);
+ err = ssh_receive_mpint_list (stream, secret, &spec, cert, &mpi_list);
if (err)
goto out;
}
else
{
- err = ssh_receive_mpint_list (stream, secret, spec, &mpi_list);
+ err = ssh_receive_mpint_list (stream, secret, &spec, cert, &mpi_list);
if (err)
goto out;
}
*key_new = key;
out:
+ es_fclose (cert);
mpint_list_free (mpi_list);
xfree (curve_name);
xfree (key_type);
}
+/* An agent progress callback for Libgcrypt. This has been registered
+ * to be called via the progress dispatcher mechanism from
+ * gpg-agent.c */
+static void
+progress_cb (ctrl_t ctrl, const char *what, int printchar,
+ int current, int total)
+{
+ if (!ctrl || !ctrl->server_local || !ctrl->server_local->assuan_ctx)
+ ;
+ else if (printchar == '\n' && what && !strcmp (what, "primegen"))
+ agent_print_status (ctrl, "PROGRESS", "%.20s X 100 100", what);
+ else
+ agent_print_status (ctrl, "PROGRESS", "%.20s %c %d %d",
+ what, printchar=='\n'?'X':printchar, current, total);
+}
+
+
/* Helper to print a message while leaving a command. */
static gpg_error_t
leave_cmd (assuan_context_t ctx, gpg_error_t err)
\f
static const char hlp_import_key[] =
- "IMPORT_KEY [--unattended] [<cache_nonce>]\n"
+ "IMPORT_KEY [--unattended] [--force] [<cache_nonce>]\n"
"\n"
"Import a secret key into the key store. The key is expected to be\n"
"encrypted using the current session's key wrapping key (cf. command\n"
"no arguments but uses the inquiry \"KEYDATA\" to ask for the actual\n"
"key data. The unwrapped key must be a canonical S-expression. The\n"
"option --unattended tries to import the key as-is without any\n"
- "re-encryption";
+ "re-encryption. Existing key can be overwritten with --force.";
static gpg_error_t
cmd_import_key (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
gpg_error_t err;
int opt_unattended;
+ int force;
unsigned char *wrappedkey = NULL;
size_t wrappedkeylen;
gcry_cipher_hd_t cipherhd = NULL;
}
opt_unattended = has_option (line, "--unattended");
+ force = has_option (line, "--force");
line = skip_options (line);
p = line;
xfree (key);
key = NULL;
- err = convert_from_openpgp (ctrl, openpgp_sexp, grip,
+ err = convert_from_openpgp (ctrl, openpgp_sexp, force, grip,
ctrl->server_local->keydesc, cache_nonce,
&key, opt_unattended? NULL : &passphrase);
if (err)
}
else
{
- if (!agent_key_available (grip))
+ if (!force && !agent_key_available (grip))
err = gpg_error (GPG_ERR_EEXIST);
else
{
err = agent_protect (key, passphrase, &finalkey, &finalkeylen,
ctrl->s2k_count);
if (!err)
- err = agent_write_private_key (grip, finalkey, finalkeylen, 0);
+ err = agent_write_private_key (grip, finalkey, finalkeylen, force);
}
else
- err = agent_write_private_key (grip, key, realkeylen, 0);
+ err = agent_write_private_key (grip, key, realkeylen, force);
leave:
gcry_sexp_release (openpgp_sexp);
ctrl->digest.raw_value = 0;
assuan_set_io_monitor (ctx, io_monitor, NULL);
+ agent_set_progress_cb (progress_cb, ctrl);
for (;;)
{
silently decrypt the key; CACHE_NONCE and R_PASSPHRASE must both be
NULL in this mode. */
static gpg_error_t
-convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp,
+convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, int dontcare_exist,
unsigned char *grip, const char *prompt,
const char *cache_nonce, const char *passphrase,
unsigned char **r_key, char **r_passphrase)
if (err)
goto leave;
- if (!from_native && !agent_key_available (grip))
+ if (!dontcare_exist && !from_native && !agent_key_available (grip))
{
err = gpg_error (GPG_ERR_EEXIST);
goto leave;
the key. The keygrip will be stored at the 20 byte buffer pointed
to by GRIP. On error NULL is stored at all return arguments. */
gpg_error_t
-convert_from_openpgp (ctrl_t ctrl, gcry_sexp_t s_pgp,
+convert_from_openpgp (ctrl_t ctrl, gcry_sexp_t s_pgp, int dontcare_exist,
unsigned char *grip, const char *prompt,
const char *cache_nonce,
unsigned char **r_key, char **r_passphrase)
{
- return convert_from_openpgp_main (ctrl, s_pgp, grip, prompt,
+ return convert_from_openpgp_main (ctrl, s_pgp, dontcare_exist, grip, prompt,
cache_nonce, NULL,
r_key, r_passphrase);
}
if (!passphrase)
return gpg_error (GPG_ERR_INTERNAL);
- err = convert_from_openpgp_main (ctrl, s_pgp, grip, NULL,
+ err = convert_from_openpgp_main (ctrl, s_pgp, 0, grip, NULL,
NULL, passphrase,
r_key, NULL);
#define GNUPG_AGENT_CVT_OPENPGP_H
gpg_error_t convert_from_openpgp (ctrl_t ctrl, gcry_sexp_t s_pgp,
+ int dontcare_exist,
unsigned char *grip, const char *prompt,
const char *cache_nonce,
unsigned char **r_key, char **r_passphrase);
oPinentryProgram,
oPinentryTouchFile,
oPinentryInvisibleChar,
+ oPinentryTimeout,
oDisplay,
oTTYname,
oTTYtype,
/* */ N_("|PGM|use PGM as the PIN-Entry program")),
ARGPARSE_s_s (oPinentryTouchFile, "pinentry-touch-file", "@"),
ARGPARSE_s_s (oPinentryInvisibleChar, "pinentry-invisible-char", "@"),
+ ARGPARSE_s_u (oPinentryTimeout, "pinentry-timeout", "@"),
ARGPARSE_s_s (oScdaemonProgram, "scdaemon-program",
/* */ N_("|PGM|use PGM as the SCdaemon program") ),
ARGPARSE_s_n (oDisableScdaemon, "disable-scdaemon",
/* Number of active connections. */
static int active_connections;
+/* This object is used to dispatch progress messages from Libgcrypt to
+ * the right thread. Given that we won't have at max a few dozen
+ * connections at the same time using a linked list is the easiest way
+ * to handle this. */
+struct progress_dispatch_s
+{
+ struct progress_dispatch_s *next;
+ /* The control object of the connection. If this is NULL no
+ * connection is associated with this item and it is free for reuse
+ * by new connections. */
+ ctrl_t ctrl;
+
+ /* The thread id of (npth_self) of the connection. */
+ npth_t tid;
+
+ /* The callback set by the connection. This is similar to the
+ * Libgcrypt callback but with the control object passed as the
+ * first argument. */
+ void (*cb)(ctrl_t ctrl,
+ const char *what, int printchar,
+ int current, int total);
+};
+struct progress_dispatch_s *progress_dispatch_list;
+
+
+
\f
/*
Local prototypes.
assuan_sock_nonce_t *nonce);
static void create_directories (void);
+static void agent_libgcrypt_progress_cb (void *data, const char *what,
+ int printchar,
+ int current, int total);
static void agent_init_default_ctrl (ctrl_t ctrl);
static void agent_deinit_default_ctrl (ctrl_t ctrl);
opt.pinentry_touch_file = NULL;
xfree (opt.pinentry_invisible_char);
opt.pinentry_invisible_char = NULL;
+ opt.pinentry_timeout = 0;
opt.scdaemon_program = NULL;
opt.def_cache_ttl = DEFAULT_CACHE_TTL;
opt.def_cache_ttl_ssh = DEFAULT_CACHE_TTL_SSH;
xfree (opt.pinentry_invisible_char);
opt.pinentry_invisible_char = xtrystrdup (pargs->r.ret_str); break;
break;
+ case oPinentryTimeout: opt.pinentry_timeout = pargs->r.ret_ulong; break;
case oScdaemonProgram: opt.scdaemon_program = pargs->r.ret_str; break;
case oDisableScdaemon: opt.disable_scdaemon = 1; break;
case oDisableCheckOwnSocket: disable_check_own_socket = 1; break;
setup_libgcrypt_logging ();
gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);
+ gcry_set_progress_handler (agent_libgcrypt_progress_cb, NULL);
disable_core_dumps ();
GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME);
es_printf ("allow-emacs-pinentry:%lu:\n",
GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME);
+ es_printf ("pinentry-timeout:%lu:0:\n",
+ GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME);
agent_exit (0);
}
}
+/* This is our callback function for gcrypt progress messages. It is
+ set once at startup and dispatches progress messages to the
+ corresponding threads of the agent. */
+static void
+agent_libgcrypt_progress_cb (void *data, const char *what, int printchar,
+ int current, int total)
+{
+ struct progress_dispatch_s *dispatch;
+ npth_t mytid = npth_self ();
+
+ (void)data;
+
+ for (dispatch = progress_dispatch_list; dispatch; dispatch = dispatch->next)
+ if (dispatch->ctrl && dispatch->tid == mytid)
+ break;
+ if (dispatch && dispatch->cb)
+ dispatch->cb (dispatch->ctrl, what, printchar, current, total);
+}
+
+
+/* If a progress dispatcher callback has been associated with the
+ * current connection unregister it. */
+static void
+unregister_progress_cb (void)
+{
+ struct progress_dispatch_s *dispatch;
+ npth_t mytid = npth_self ();
+
+ for (dispatch = progress_dispatch_list; dispatch; dispatch = dispatch->next)
+ if (dispatch->ctrl && dispatch->tid == mytid)
+ break;
+ if (dispatch)
+ {
+ dispatch->ctrl = NULL;
+ dispatch->cb = NULL;
+ }
+}
+
+
+/* Setup a progress callback CB for the current connection. Using a
+ * CB of NULL disables the callback. */
+void
+agent_set_progress_cb (void (*cb)(ctrl_t ctrl, const char *what,
+ int printchar, int current, int total),
+ ctrl_t ctrl)
+{
+ struct progress_dispatch_s *dispatch, *firstfree;
+ npth_t mytid = npth_self ();
+
+ firstfree = NULL;
+ for (dispatch = progress_dispatch_list; dispatch; dispatch = dispatch->next)
+ {
+ if (dispatch->ctrl && dispatch->tid == mytid)
+ break;
+ if (!dispatch->ctrl && !firstfree)
+ firstfree = dispatch;
+ }
+ if (!dispatch) /* None allocated: Reuse or allocate a new one. */
+ {
+ if (firstfree)
+ {
+ dispatch = firstfree;
+ }
+ else if ((dispatch = xtrycalloc (1, sizeof *dispatch)))
+ {
+ dispatch->next = progress_dispatch_list;
+ progress_dispatch_list = dispatch;
+ }
+ else
+ {
+ log_error ("error allocating new progress dispatcher slot: %s\n",
+ gpg_strerror (gpg_error_from_syserror ()));
+ return;
+ }
+ dispatch->ctrl = ctrl;
+ dispatch->tid = mytid;
+ }
+
+ dispatch->cb = cb;
+}
+
+
/* Each thread has its own local variables conveyed by a control
structure usually identified by an argument named CTRL. This
function is called immediately after allocating the control
static void
agent_deinit_default_ctrl (ctrl_t ctrl)
{
+ unregister_progress_cb ();
session_env_release (ctrl->session_env);
if (ctrl->lc_ctype)
passphrase. If OVERRIDEDATA is not NULL, OVERRIDEDATALEN bytes
from this buffer are used instead of the data in CTRL. The
override feature is required to allow the use of Ed25519 with ssh
- because Ed25519 dies the hashing itself. */
+ because Ed25519 does the hashing itself. */
int
agent_pksign_do (ctrl_t ctrl, const char *cache_nonce,
const char *desc_text,
* for RSA internally there is no need to do it here again. */
if (check_signature)
{
+ gcry_sexp_t sexp_key = s_pkey? s_pkey: s_skey;
+
if (s_hash == NULL)
{
if (ctrl->digest.algo == MD_USER_TLS_MD5SHA1)
rc = do_encode_raw_pkcs1 (data, datalen,
- gcry_pk_get_nbits (s_skey),
- &s_hash);
+ gcry_pk_get_nbits (sexp_key), &s_hash);
else
- rc = do_encode_md (data, datalen,
- ctrl->digest.algo,
- &s_hash,
+ rc = do_encode_md (data, datalen, ctrl->digest.algo, &s_hash,
ctrl->digest.raw_value);
}
- rc = gcry_pk_verify (s_sig, s_hash, s_pkey? s_pkey: s_skey);
+ if (! rc)
+ rc = gcry_pk_verify (s_sig, s_hash, sexp_key);
if (rc)
{
esac
beta=no
- if [ -d .git ]; then
+ if [ -e .git ]; then
ingit=yes
tmp=$(git describe --match "${matchstr1}" --long 2>/dev/null)
if [ -n "$tmp" ]; then
--skip-verify Do not check signatures
--skip-selfcheck Do not check GnuPG version
--find-sha1sum Print the name of the sha1sum utility
+ --find-sha256sum Print the name of the sha256sum utility
--help Print this help.
EOF
exit $1
skip_verify=no
skip_selfcheck=no
find_sha1sum=no
+find_sha256sum=no
while test $# -gt 0; do
case "$1" in
# Set up `optarg'.
--find-sha1sum)
find_sha1sum=yes
;;
+ --find-sha256sum)
+ find_sha256sum=yes
+ ;;
*)
usage 1 1>&2
;;
exit 1
fi
+# Mac OSX has only a shasum and not sha256sum
+if [ ${find_sha256sum} = yes ]; then
+ for i in 'shasum -a 256' sha256sum ; do
+ tmp=$($i </dev/null 2>/dev/null | cut -d ' ' -f1)
+ tmp2="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ if [ x"$tmp" = x"$tmp2" ]; then
+ echo "$i"
+ exit 0
+ fi
+ done
+ echo "false"
+ exit 1
+fi
+
+
# Get GnuPG version from VERSION file. For a GIT checkout this means
# that ./autogen.sh must have been run first. For a regular tarball
# VERSION is always available.
libgpg_error_ver := $(shell awk '$$1=="libgpg_error_ver" {print $$2}' swdb.lst)
libgpg_error_sha1:= $(shell awk '$$1=="libgpg_error_sha1" {print $$2}' swdb.lst)
+libgpg_error_sha2:= $(shell awk '$$1=="libgpg_error_sha2" {print $$2}' swdb.lst)
npth_ver := $(shell awk '$$1=="npth_ver" {print $$2}' swdb.lst)
npth_sha1 := $(shell awk '$$1=="npth_sha1" {print $$2}' swdb.lst)
+npth_sha2 := $(shell awk '$$1=="npth_sha2" {print $$2}' swdb.lst)
libgcrypt_ver := $(shell awk '$$1=="libgcrypt_ver" {print $$2}' swdb.lst)
libgcrypt_sha1 := $(shell awk '$$1=="libgcrypt_sha1" {print $$2}' swdb.lst)
+libgcrypt_sha2 := $(shell awk '$$1=="libgcrypt_sha2" {print $$2}' swdb.lst)
libassuan_ver := $(shell awk '$$1=="libassuan_ver" {print $$2}' swdb.lst)
libassuan_sha1 := $(shell awk '$$1=="libassuan_sha1" {print $$2}' swdb.lst)
+libassuan_sha2 := $(shell awk '$$1=="libassuan_sha2" {print $$2}' swdb.lst)
libksba_ver := $(shell awk '$$1=="libksba_ver" {print $$2}' swdb.lst)
libksba_sha1 := $(shell awk '$$1=="libksba_sha1" {print $$2}' swdb.lst)
+libksba_sha2 := $(shell awk '$$1=="libksba_sha2" {print $$2}' swdb.lst)
gpgme_ver := $(shell awk '$$1=="gpgme_ver" {print $$2}' swdb.lst)
gpgme_sha1 := $(shell awk '$$1=="gpgme_sha1" {print $$2}' swdb.lst)
+gpgme_sha2 := $(shell awk '$$1=="gpgme_sha2" {print $$2}' swdb.lst)
pinentry_ver := $(shell awk '$$1=="pinentry_ver" {print $$2}' swdb.lst)
pinentry_sha1 := $(shell awk '$$1=="pinentry_sha1" {print $$2}' swdb.lst)
+pinentry_sha2 := $(shell awk '$$1=="pinentry_sha2" {print $$2}' swdb.lst)
gpa_ver := $(shell awk '$$1=="gpa_ver" {print $$2}' swdb.lst)
gpa_sha1 := $(shell awk '$$1=="gpa_sha1" {print $$2}' swdb.lst)
+gpa_sha2 := $(shell awk '$$1=="gpa_sha2" {print $$2}' swdb.lst)
gpgex_ver := $(shell awk '$$1=="gpgex_ver" {print $$2}' swdb.lst)
gpgex_sha1 := $(shell awk '$$1=="gpgex_sha1" {print $$2}' swdb.lst)
+gpgex_sha2 := $(shell awk '$$1=="gpgex_sha2" {print $$2}' swdb.lst)
zlib_ver := $(shell awk '$$1=="zlib_ver" {print $$2}' swdb.lst)
zlib_sha1 := $(shell awk '$$1=="zlib_sha1_gz" {print $$2}' swdb.lst)
+zlib_sha2 := $(shell awk '$$1=="zlib_sha2_gz" {print $$2}' swdb.lst)
bzip2_ver := $(shell awk '$$1=="bzip2_ver" {print $$2}' swdb.lst)
bzip2_sha1 := $(shell awk '$$1=="bzip2_sha1_gz" {print $$2}' swdb.lst)
+bzip2_sha2 := $(shell awk '$$1=="bzip2_sha2_gz" {print $$2}' swdb.lst)
adns_ver := $(shell awk '$$1=="adns_ver" {print $$2}' swdb.lst)
adns_sha1 := $(shell awk '$$1=="adns_sha1" {print $$2}' swdb.lst)
+adns_sha2 := $(shell awk '$$1=="adns_sha2" {print $$2}' swdb.lst)
$(info Information from the version database)
$(info GnuPG ..........: $(gnupg_ver) (building $(gnupg_ver_this)))
ifeq ($(SHA1SUM),false)
$(error The sha1sum tool is missing)
endif
+SHA2SUM := $(shell $(topsrc)/build-aux/getswdb.sh --find-sha256sum)
+ifeq ($(SHA2SUM),false)
+$(error The sha256sum tool is missing)
+endif
BUILD_ISODATE=$(shell date -u +%Y-%m-%d)
git="$(call GETVAR,speedo_pkg_$(1)_git)"; \
gitref="$(call GETVAR,speedo_pkg_$(1)_gitref)"; \
tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \
+ sha2="$(call GETVAR,$(1)_sha2)"; \
sha1="$(call GETVAR,$(1)_sha1)"; \
pkgsdir="$(sdir)/$(1)"; \
if [ "$(1)" = "gnupg" ]; then \
git="$(call GETVAR,speedo_pkg_$(1)_git)"; \
gitref="$(call GETVAR,speedo_pkg_$(1)_gitref)"; \
tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \
+ sha2="$(call GETVAR,$(1)_sha2)"; \
sha1="$(call GETVAR,$(1)_sha1)"; \
pkgsdir="$(sdir)/$(1)"; \
if [ "$(1)" = "gnupg" ]; then \
| $$$${pretar} | tar x$$$${opt}f - ;; \
esac; \
if [ -f tmp.tgz ]; then \
- if [ -n "$$$${sha1}" ]; then \
+ if [ -n "$$$${sha2}" ]; then \
+ tmp=$$$$($(SHA2SUM) <tmp.tgz|cut -d' ' -f1);\
+ if [ "$$$${tmp}" != "$$$${sha2}" ]; then \
+ echo "speedo:"; \
+ echo "speedo: ERROR: SHA-256 checksum mismatch for $(1)";\
+ echo "speedo:"; \
+ exit 1; \
+ fi; \
+ elif [ -n "$$$${sha1}" ]; then \
tmp=$$$$($(SHA1SUM) <tmp.tgz|cut -d' ' -f1);\
if [ "$$$${tmp}" != "$$$${sha1}" ]; then \
echo "speedo:"; \
- echo "speedo: ERROR: checksum mismatch for $(1)";\
+ echo "speedo: ERROR: SHA-1 checksum mismatch for $(1)";\
echo "speedo:"; \
exit 1; \
fi; \
tar xJf "../$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).tar.xz";\
cd $(INST_NAME)-$(INST_VERSION); \
$(MAKE) -f build-aux/speedo.mk this-w32-installer SELFCHECK=0;\
- mv "PLAY/inst/$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).exe" ../.. ;\
+ reldate="$$(date -u +%Y-%m-%d)" ;\
+ exefile="$(INST_NAME)-$(INST_VERSION)_$(BUILD_DATESTR).exe" ;\
+ mv "PLAY/inst/$$exefile" ../.. ;\
+ exefile="../../$$exefile" ;\
+ ( pref="#+macro: gnupg21_w32_" ;\
+ echo "$${pref}ver $(INST_VERSION)_$(BUILD_DATESTR)" ;\
+ echo "$${pref}date $${reldate}" ;\
+ echo "$${pref}size $$(wc -c <$$exefile|awk '{print int($$1/1024)}')k";\
+ echo "$${pref}sha1 $$(sha1sum <$$exefile|cut -d' ' -f1)" ;\
+ echo "$${pref}sha2 $$(sha256sum <$$exefile|cut -d' ' -f1)" ;\
+ ) | tee $$exefile.swdb ;\
)
endif
common_sources = \
common-defs.h \
- util.h i18n.c i18n.h \
+ util.h fwddecl.h i18n.c i18n.h \
types.h host2net.h dynload.h w32help.h \
mapstrings.c stringhelp.c stringhelp.h \
strlist.c strlist.h \
helpfile.c \
mkdir_p.c mkdir_p.h \
strlist.c strlist.h \
- call-gpg.c call-gpg.h
+ call-gpg.c call-gpg.h \
+ exectool.c exectool.h
if HAVE_W32_SYSTEM
common_sources += w32-reg.c w32-afunix.c w32-afunix.h
/* [argparse.c wk 17.06.97] Argument Parser for option handling
* Copyright (C) 1998-2001, 2006-2008, 2012 Free Software Foundation, Inc.
- * Copyright (C) 1997-2001, 2006-2008, 2013-2015 Werner Koch
+ * Copyright (C) 1997-2001, 2006-2008, 2013-2016 Werner Koch
*
* This file is part of GnuPG.
*
#else /* Used by GnuPG */
# define ARGPARSE_GPL_VERSION 3
-# define ARGPARSE_CRIGHT_STR "Copyright (C) 2015 Free Software Foundation, Inc."
+# define ARGPARSE_CRIGHT_STR "Copyright (C) 2016 Free Software Foundation, Inc."
#endif /*GNUPG_MAJOR_VERSION*/
#include "exechelp.h"
#include "sysutils.h"
#include "status.h"
+#include "membuf.h"
#include "asshelp.h"
/* The type we use for lock_agent_spawning. */
*r_ctx = ctx;
return 0;
}
+
+
+/* Return the version of a server using "GETINFO version". On success
+ 0 is returned and R_VERSION receives a malloced string with the
+ version which must be freed by the caller. On error NULL is stored
+ at R_VERSION and an error code returned. Mode is in general 0 but
+ certian values may be used to modify the used version command:
+
+ MODE == 0 = Use "GETINFO version"
+ MODE == 2 - Use "SCD GETINFO version"
+ */
+gpg_error_t
+get_assuan_server_version (assuan_context_t ctx, int mode, char **r_version)
+{
+ gpg_error_t err;
+ membuf_t data;
+
+ init_membuf (&data, 64);
+ err = assuan_transact (ctx,
+ mode == 2? "SCD GETINFO version"
+ /**/ : "GETINFO version",
+ put_membuf_cb, &data,
+ NULL, NULL, NULL, NULL);
+ if (err)
+ {
+ xfree (get_membuf (&data, NULL));
+ *r_version = NULL;
+ }
+ else
+ {
+ put_membuf (&data, "", 1);
+ *r_version = get_membuf (&data, NULL);
+ if (!*r_version)
+ err = gpg_error_from_syserror ();
+ }
+ return err;
+}
gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg);
+/* Return the version of a server using "GETINFO version". */
+gpg_error_t get_assuan_server_version (assuan_context_t ctx,
+ int mode, char **r_version);
+
/*-- asshelp2.c --*/
{
for (idx=0; idx < 4; idx++)
es_putc (tmp[idx], state->stream);
- idx = 0;
if (es_ferror (state->stream))
goto write_error;
}
{
for (idx=0; idx < 4; idx++)
putc (tmp[idx], state->fp);
- idx = 0;
if (ferror (state->fp))
goto write_error;
}
#include "strlist.h"
#include "util.h"
+
+static GPGRT_INLINE gpg_error_t
+my_error_from_syserror (void)
+{
+ return gpg_err_make (default_errsource, gpg_err_code_from_syserror ());
+}
+
+static GPGRT_INLINE gpg_error_t
+my_error_from_errno (int e)
+{
+ return gpg_err_make (default_errsource, gpg_err_code_from_errno (e));
+}
+
\f
/* Fire up a new GPG. Handle the server's initial greeting. Returns
0 on success and stores the assuan context at R_CTX. */
if (fflush (NULL))
{
- err = gpg_error_from_syserror ();
+ err = my_error_from_syserror ();
log_error ("error flushing pending output: %s\n", gpg_strerror (err));
return err;
}
argv = xtrycalloc (strlist_length (gpg_arguments) + 3, sizeof *argv);
if (argv == NULL)
{
- err = gpg_error_from_syserror ();
+ err = my_error_from_syserror ();
return err;
}
i = 0;
{
if (errno == EINTR)
continue;
- err = gpg_error_from_syserror ();
+ err = my_error_from_syserror ();
break; /* Write error. */
}
length -= nwritten;
parm = xtrymalloc (sizeof *parm);
if (!parm)
- return gpg_error_from_syserror ();
+ return my_error_from_syserror ();
parm->fd = fd;
parm->data = data;
parm->datalen = datalen;
ret = npth_create (&thread, &tattr, writer_thread_main, parm);
if (ret)
{
- err = gpg_error_from_errno (ret);
+ err = my_error_from_errno (ret);
log_error ("error spawning writer thread: %s\n", gpg_strerror (err));
}
else
{
if (errno == EINTR)
continue;
- err = gpg_error_from_syserror ();
+ err = my_error_from_syserror ();
break; /* Read error. */
}
parm = xtrymalloc (sizeof *parm);
if (!parm)
- return gpg_error_from_syserror ();
+ return my_error_from_syserror ();
parm->fd = fd;
parm->mb = mb;
parm->stream = stream;
ret = npth_create (&thread, &tattr, reader_thread_main, parm);
if (ret)
{
- err = gpg_error_from_errno (ret);
+ err = my_error_from_errno (ret);
log_error ("error spawning reader thread: %s\n", gpg_strerror (err));
}
else
ret = npth_join (reader_thread, NULL);
if (ret)
{
- err = gpg_error_from_errno (ret);
+ err = my_error_from_errno (ret);
log_error ("waiting for reader thread failed: %s\n", gpg_strerror (err));
goto leave;
}
ret = npth_join (writer_thread, NULL);
if (ret)
{
- err = gpg_error_from_errno (ret);
+ err = my_error_from_errno (ret);
log_error ("waiting for writer thread failed: %s\n", gpg_strerror (err));
goto leave;
}
*r_ciph = get_membuf (&reader_mb, r_ciphlen);
if (!*r_ciph)
{
- err = gpg_error_from_syserror ();
+ err = my_error_from_syserror ();
log_error ("error while storing the data in the reader thread: %s\n",
gpg_strerror (err));
}
ret = npth_join (reader_thread, NULL);
if (ret)
{
- err = gpg_error_from_errno (ret);
+ err = my_error_from_errno (ret);
log_error ("waiting for reader thread failed: %s\n", gpg_strerror (err));
goto leave;
}
ret = npth_join (writer_thread, NULL);
if (ret)
{
- err = gpg_error_from_errno (ret);
+ err = my_error_from_errno (ret);
log_error ("waiting for writer thread failed: %s\n", gpg_strerror (err));
goto leave;
}
*r_plain = get_membuf (&reader_mb, r_plainlen);
if (!*r_plain)
{
- err = gpg_error_from_syserror ();
+ err = my_error_from_syserror ();
log_error ("error while storing the data in the reader thread: %s\n",
gpg_strerror (err));
}
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef G13_CALL_GPG_H
-#define G13_CALL_GPG_H
+#ifndef GNUPG_COMMON_CALL_GPG_H
+#define GNUPG_COMMON_CALL_GPG_H
#include <gpg-error.h>
+#include "fwddecl.h"
#include "strlist.h"
-typedef struct server_control_s *ctrl_t;
-
gpg_error_t gpg_encrypt_blob (ctrl_t ctrl,
const char *gpg_program,
strlist_t gpg_arguments,
estream_t cipher_stream,
estream_t plain_stream);
-#endif /*G13_CALL_GPG_H*/
+#endif /*GNUPG_COMMON_CALL_GPG_H*/
*
* This file is part of GnuPG.
*
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
*
- * GnuPG is distributed in the hope that it will be useful,
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
/* A list of of all lock handles. The volatile attribute might help
- if used in an atexit handler. */
+ if used in an atexit handler. Note that [UN]LOCK_all_lockfiles
+ must not change ERRNO. */
static volatile dotlock_t all_lockfiles;
#ifdef DOTLOCK_USE_PTHREAD
static pthread_mutex_t all_lockfiles_mutex = PTHREAD_MUTEX_INITIALIZER;
+\f
+#ifdef HAVE_DOSISH_SYSTEM
+static int
+map_w32_to_errno (DWORD w32_err)
+{
+ switch (w32_err)
+ {
+ case 0:
+ return 0;
+
+ case ERROR_FILE_NOT_FOUND:
+ return ENOENT;
+
+ case ERROR_PATH_NOT_FOUND:
+ return ENOENT;
+
+ case ERROR_ACCESS_DENIED:
+ return EPERM;
+
+ case ERROR_INVALID_HANDLE:
+ case ERROR_INVALID_BLOCK:
+ return EINVAL;
+
+ case ERROR_NOT_ENOUGH_MEMORY:
+ return ENOMEM;
+
+ case ERROR_NO_DATA:
+ case ERROR_BROKEN_PIPE:
+ return EPIPE;
+
+ default:
+ return EIO;
+ }
+}
+#endif /*HAVE_DOSISH_SYSTEM*/
\f
/* Entirely disable all locking. This function should be called
continue;
if (res < 0)
{
+ int e = errno;
my_info_1 ("error reading lockfile '%s'\n", h->lockname );
close (fd);
if (buffer != buffer_space)
xfree (buffer);
- my_set_errno (0); /* Do not return an inappropriate ERRNO. */
+ my_set_errno (e);
return -1;
}
p += res;
my_info_1 ("invalid size of lockfile '%s'\n", h->lockname);
if (buffer != buffer_space)
xfree (buffer);
- my_set_errno (0); /* Better don't return an inappropriate ERRNO. */
+ my_set_errno (EINVAL);
return -1;
}
my_error_2 ("invalid pid %d in lockfile '%s'\n", pid, h->lockname);
if (buffer != buffer_space)
xfree (buffer);
- my_set_errno (0);
+ my_set_errno (EINVAL);
return -1;
}
if ( fd == -1 )
{
+ int saveerrno = errno;
all_lockfiles = h->next;
UNLOCK_all_lockfiles ();
my_error_2 (_("failed to create temporary file '%s': %s\n"),
- h->tname, strerror(errno));
+ h->tname, strerror (errno));
xfree (h->tname);
xfree (h);
+ my_set_errno (saveerrno);
return NULL;
}
if ( write (fd, pidstr, 11 ) != 11 )
h->use_o_excl = 1;
break;
default:
- my_error_2 ("can't check whether hardlinks are supported for '%s': %s\n",
- h->tname, strerror(errno));
+ {
+ int saveerrno = errno;
+ my_error_2 ("can't check whether hardlinks are supported for '%s': %s\n"
+ , h->tname, strerror (saveerrno));
+ my_set_errno (saveerrno);
+ }
goto write_failed;
}
h->lockname = xtrymalloc (strlen (file_to_lock) + 6 );
if (!h->lockname)
{
+ int saveerrno = errno;
all_lockfiles = h->next;
UNLOCK_all_lockfiles ();
unlink (h->tname);
xfree (h->tname);
xfree (h);
+ my_set_errno (saveerrno);
return NULL;
}
strcpy (stpcpy (h->lockname, file_to_lock), EXTSEP_S "lock");
return h;
write_failed:
- all_lockfiles = h->next;
- UNLOCK_all_lockfiles ();
- my_error_2 (_("error writing to '%s': %s\n"), h->tname, strerror (errno));
- if ( fd != -1 )
- close (fd);
- unlink (h->tname);
- xfree (h->tname);
- xfree (h);
+ {
+ int saveerrno = errno;
+ all_lockfiles = h->next;
+ UNLOCK_all_lockfiles ();
+ my_error_2 (_("error writing to '%s': %s\n"), h->tname, strerror (errno));
+ if ( fd != -1 )
+ close (fd);
+ unlink (h->tname);
+ xfree (h->tname);
+ xfree (h);
+ my_set_errno (saveerrno);
+ }
return NULL;
}
#endif /*HAVE_POSIX_SYSTEM*/
}
if (h->lockhd == INVALID_HANDLE_VALUE)
{
+ int saveerrno = map_w32_to_errno (GetLastError ());
all_lockfiles = h->next;
UNLOCK_all_lockfiles ();
my_error_2 (_("can't create '%s': %s\n"), h->lockname, w32_strerror (-1));
xfree (h->lockname);
xfree (h);
+ my_set_errno (saveerrno);
return NULL;
}
return h;
#endif /*HAVE_DOSISH_SYSTEM*/
-/* Destroy the locck handle H and release the lock. */
+/* Destroy the lock handle H and release the lock. */
void
dotlock_destroy (dotlock_t h)
{
int ownerchanged;
const char *maybe_dead="";
int same_node;
+ int saveerrno;
again:
if (h->use_o_excl)
; /* Lock held by another process. */
else if (fd == -1)
{
+ saveerrno = errno;
my_error_2 ("lock not made: open(O_EXCL) of '%s' failed: %s\n",
- h->lockname, strerror (errno));
+ h->lockname, strerror (saveerrno));
+ my_set_errno (saveerrno);
return -1;
}
else
return 0;
}
/* Write error. */
+ saveerrno = errno;
my_error_2 ("lock not made: writing to '%s' failed: %s\n",
h->lockname, strerror (errno));
close (fd);
unlink (h->lockname);
+ my_set_errno (saveerrno);
return -1;
}
}
if (stat (h->tname, &sb))
{
+ saveerrno = errno;
my_error_1 ("lock not made: Oops: stat of tmp file failed: %s\n",
strerror (errno));
/* In theory this might be a severe error: It is possible
that link succeeded but stat failed due to changed
permissions. We can't do anything about it, though. */
+ my_set_errno (saveerrno);
return -1;
}
{
if ( errno != ENOENT )
{
+ saveerrno = errno;
my_info_0 ("cannot read lockfile\n");
+ my_set_errno (saveerrno);
return -1;
}
my_info_0 ("lockfile disappeared\n");
{
my_error_2 (_("lock '%s' not made: %s\n"),
h->lockname, w32_strerror (w32err));
+ my_set_errno (map_w32_to_errno (w32err));
return -1;
}
goto again;
}
+ my_set_errno (EACCES);
return -1;
}
#endif /*HAVE_DOSISH_SYSTEM*/
dotlock_release_unix (dotlock_t h)
{
int pid, same_node;
+ int saveerrno;
pid = read_lockfile (h, &same_node);
if ( pid == -1 )
{
+ saveerrno = errno;
my_error_0 ("release_dotlock: lockfile error\n");
+ my_set_errno (saveerrno);
return -1;
}
if ( pid != getpid() || !same_node )
{
my_error_1 ("release_dotlock: not our lock (pid=%d)\n", pid);
+ my_set_errno (EACCES);
return -1;
}
if ( unlink( h->lockname ) )
{
+ saveerrno = errno;
my_error_1 ("release_dotlock: error removing lockfile '%s'\n",
h->lockname);
+ my_set_errno (saveerrno);
return -1;
}
/* Fixme: As an extra check we could check whether the link count is
memset (&ovl, 0, sizeof ovl);
if (!UnlockFileEx (h->lockhd, 0, 1, 0, &ovl))
{
+ int saveerrno = map_w32_to_errno (GetLastError ());
my_error_2 ("release_dotlock: error removing lockfile '%s': %s\n",
h->lockname, w32_strerror (-1));
+ my_set_errno (saveerrno);
return -1;
}
--- /dev/null
+/* exectool.c - Utility functions to execute a helper tool
+ * Copyright (C) 2015 Werner Koch
+ *
+ * This file is part of GnuPG.
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
+ *
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <assert.h>
+#include <gpg-error.h>
+
+#include <assuan.h>
+#include "i18n.h"
+#include "logging.h"
+#include "membuf.h"
+#include "mischelp.h"
+#include "exechelp.h"
+#include "sysutils.h"
+#include "util.h"
+
+typedef struct
+{
+ const char *pgmname;
+ int cont;
+ int used;
+ char buffer[256];
+} read_and_log_buffer_t;
+
+
+static inline gpg_error_t
+my_error_from_syserror (void)
+{
+ return gpg_err_make (default_errsource, gpg_err_code_from_syserror ());
+}
+
+
+static void
+read_and_log_stderr (read_and_log_buffer_t *state, es_poll_t *fderr)
+{
+ gpg_error_t err;
+ int c;
+
+ if (!fderr)
+ {
+ /* Flush internal buffer. */
+ if (state->used)
+ {
+ const char *pname;
+ int len;
+
+ state->buffer[state->used] = 0;
+ state->used = 0;
+
+ pname = strrchr (state->pgmname, '/');
+ if (pname && pname != state->pgmname && pname[1])
+ pname++;
+ else
+ pname = state->pgmname;
+ /* If our pgmname plus colon is identical to the start of
+ the output, print only the output. */
+ len = strlen (pname);
+ if (!state->cont
+ && !strncmp (state->buffer, pname, len)
+ && strlen (state->buffer) > strlen (pname)
+ && state->buffer[len] == ':' )
+ log_info ("%s\n", state->buffer);
+ else
+ log_info ("%s%c %s\n",
+ pname, state->cont? '+':':', state->buffer);
+ }
+ state->cont = 0;
+ return;
+ }
+ for (;;)
+ {
+ c = es_fgetc (fderr->stream);
+ if (c == EOF)
+ {
+ if (es_feof (fderr->stream))
+ {
+ fderr->ignore = 1; /* Not anymore needed. */
+ }
+ else if (es_ferror (fderr->stream))
+ {
+ err = my_error_from_syserror ();
+ log_error ("error reading stderr of '%s': %s\n",
+ state->pgmname, gpg_strerror (err));
+ fderr->ignore = 1; /* Disable. */
+ }
+
+ break;
+ }
+ else if (c == '\n')
+ {
+ read_and_log_stderr (state, NULL);
+ }
+ else
+ {
+ if (state->used >= sizeof state->buffer - 1)
+ {
+ read_and_log_stderr (state, NULL);
+ state->cont = 1;
+ }
+ state->buffer[state->used++] = c;
+ }
+ }
+}
+
+\f
+
+/* A buffer to copy from one stream to another. */
+struct copy_buffer
+{
+ char buffer[4096];
+ char *writep;
+ size_t nread;
+};
+
+
+/* Initialize a copy buffer. */
+static void
+copy_buffer_init (struct copy_buffer *c)
+{
+ c->writep = c->buffer;
+ c->nread = 0;
+}
+
+
+/* Securely wipe a copy buffer. */
+static void
+copy_buffer_shred (struct copy_buffer *c)
+{
+ wipememory (c->buffer, sizeof c->buffer);
+ c->writep = NULL;
+ c->nread = ~0U;
+}
+
+
+/* Copy data from SOURCE to SINK using copy buffer C. */
+static gpg_error_t
+copy_buffer_do_copy (struct copy_buffer *c, estream_t source, estream_t sink)
+{
+ gpg_error_t err;
+ size_t nwritten;
+
+ if (c->nread == 0)
+ {
+ c->writep = c->buffer;
+ err = es_read (source, c->buffer, sizeof c->buffer, &c->nread);
+ if (err)
+ {
+ if (errno == EAGAIN)
+ return 0; /* We will just retry next time. */
+
+ return my_error_from_syserror ();
+ }
+
+ assert (c->nread <= sizeof c->buffer);
+ }
+
+ if (c->nread == 0)
+ return 0; /* Done copying. */
+
+ err = es_write (sink, c->writep, c->nread, &nwritten);
+ if (err)
+ {
+ if (errno == EAGAIN)
+ return 0; /* We will just retry next time. */
+
+ return my_error_from_syserror ();
+ }
+
+ assert (nwritten <= c->nread);
+ c->writep += nwritten;
+ c->nread -= nwritten;
+ assert (c->writep - c->buffer <= sizeof c->buffer);
+
+ if (es_fflush (sink) && errno != EAGAIN)
+ err = my_error_from_syserror ();
+
+ return err;
+}
+
+
+/* Flush the remaining data to SINK. */
+static gpg_error_t
+copy_buffer_flush (struct copy_buffer *c, estream_t sink)
+{
+ gpg_error_t err;
+
+ while (c->nread > 0)
+ {
+ err = copy_buffer_do_copy (c, NULL, sink);
+ if (err)
+ return err;
+ }
+
+ return 0;
+}
+
+\f
+
+/* Run the program PGMNAME with the command line arguments given in
+ the NULL terminates array ARGV. If INPUT is not NULL it will be
+ fed to stdin of the process. stderr is logged using log_info and
+ the process' stdout is written to OUTPUT. On error a diagnostic is
+ printed, and an error code returned. */
+gpg_error_t
+gnupg_exec_tool_stream (const char *pgmname, const char *argv[],
+ estream_t input,
+ estream_t output)
+{
+ gpg_error_t err;
+ pid_t pid;
+ estream_t infp = NULL;
+ estream_t outfp, errfp;
+ es_poll_t fds[3];
+ int count;
+ read_and_log_buffer_t fderrstate;
+ struct copy_buffer cpbuf[2];
+
+ memset (fds, 0, sizeof fds);
+ memset (&fderrstate, 0, sizeof fderrstate);
+ copy_buffer_init (&cpbuf[0]);
+ copy_buffer_init (&cpbuf[1]);
+
+ err = gnupg_spawn_process (pgmname, argv, GPG_ERR_SOURCE_DEFAULT,
+ NULL, GNUPG_SPAWN_NONBLOCK,
+ input? &infp : NULL,
+ &outfp, &errfp, &pid);
+ if (err)
+ {
+ log_error ("error running '%s': %s\n", pgmname, gpg_strerror (err));
+ return err;
+ }
+
+ fderrstate.pgmname = pgmname;
+
+ fds[0].stream = infp;
+ fds[0].want_write = 1;
+ if (!input)
+ fds[0].ignore = 1;
+ fds[1].stream = outfp;
+ fds[1].want_read = 1;
+ fds[2].stream = errfp;
+ fds[2].want_read = 1;
+ /* Now read as long as we have something to poll. We continue
+ reading even after EOF or error on stdout so that we get the
+ other error messages or remaining outut. */
+ while (!fds[1].ignore && !fds[2].ignore)
+ {
+ count = es_poll (fds, DIM(fds), -1);
+ if (count == -1)
+ {
+ err = my_error_from_syserror ();
+ log_error ("error polling '%s': %s\n", pgmname, gpg_strerror (err));
+ goto leave;
+ }
+ if (!count)
+ {
+ log_debug ("unexpected timeout while polling '%s'\n", pgmname);
+ break;
+ }
+
+ if (fds[0].got_write)
+ {
+ err = copy_buffer_do_copy (&cpbuf[0], input, fds[0].stream);
+ if (err)
+ {
+ log_error ("error feeding data to '%s': %s\n",
+ pgmname, gpg_strerror (err));
+ goto leave;
+ }
+
+ if (es_feof (input))
+ {
+ err = copy_buffer_flush (&cpbuf[0], fds[0].stream);
+ if (err)
+ {
+ log_error ("error feeding data to '%s': %s\n",
+ pgmname, gpg_strerror (err));
+ goto leave;
+ }
+
+ fds[0].ignore = 1; /* ready. */
+ es_fclose (infp); infp = NULL;
+ }
+ }
+
+ if (fds[1].got_read)
+ {
+ err = copy_buffer_do_copy (&cpbuf[1], fds[1].stream, output);
+ if (err)
+ {
+ log_error ("error reading data from '%s': %s\n",
+ pgmname, gpg_strerror (err));
+ goto leave;
+ }
+ }
+
+ if (fds[2].got_read)
+ read_and_log_stderr (&fderrstate, fds + 2);
+ }
+
+ err = copy_buffer_flush (&cpbuf[1], output);
+ if (err)
+ {
+ log_error ("error reading data from '%s': %s\n",
+ pgmname, gpg_strerror (err));
+ goto leave;
+ }
+
+ read_and_log_stderr (&fderrstate, NULL); /* Flush. */
+ es_fclose (infp); infp = NULL;
+ es_fclose (outfp); outfp = NULL;
+ es_fclose (errfp); errfp = NULL;
+
+ err = gnupg_wait_process (pgmname, pid, 1, NULL);
+ pid = (pid_t)(-1);
+
+ leave:
+ if (err)
+ gnupg_kill_process (pid);
+
+ es_fclose (infp);
+ es_fclose (outfp);
+ es_fclose (errfp);
+ if (pid != (pid_t)(-1))
+ gnupg_wait_process (pgmname, pid, 1, NULL);
+ gnupg_release_process (pid);
+
+ copy_buffer_shred (&cpbuf[0]);
+ copy_buffer_shred (&cpbuf[1]);
+ return err;
+}
+
+
+/* A dummy free function to pass to 'es_mopen'. */
+static void
+nop_free (void *ptr)
+{
+ (void) ptr;
+}
+
+/* Run the program PGMNAME with the command line arguments given in
+ the NULL terminates array ARGV. If INPUT_STRING is not NULL it
+ will be fed to stdin of the process. stderr is logged using
+ log_info and the process' stdout is returned in a newly malloced
+ buffer RESULT with the length stored at RESULTLEN if not given as
+ NULL. A hidden Nul is appended to the output. On error NULL is
+ stored at RESULT, a diagnostic is printed, and an error code
+ returned. */
+gpg_error_t
+gnupg_exec_tool (const char *pgmname, const char *argv[],
+ const char *input_string,
+ char **result, size_t *resultlen)
+{
+ gpg_error_t err;
+ estream_t input = NULL;
+ estream_t output;
+ size_t len;
+ size_t nread;
+
+ *result = NULL;
+ if (resultlen)
+ *resultlen = 0;
+
+ if (input_string)
+ {
+ len = strlen (input_string);
+ input = es_mopen ((char *) input_string, len, len,
+ 0 /* don't grow */, NULL, nop_free, "rb");
+ if (! input)
+ return my_error_from_syserror ();
+ }
+
+ output = es_fopenmem (0, "wb");
+ if (! output)
+ {
+ err = my_error_from_syserror ();
+ goto leave;
+ }
+
+ err = gnupg_exec_tool_stream (pgmname, argv, input, output);
+ if (err)
+ goto leave;
+
+ len = es_ftello (output);
+ err = es_fseek (output, 0, SEEK_SET);
+ if (err)
+ goto leave;
+
+ *result = xtrymalloc (len);
+ if (*result == NULL)
+ {
+ err = my_error_from_syserror ();
+ goto leave;
+ }
+
+ err = es_read (output, *result, len, &nread);
+ if (! err)
+ {
+ assert (nread == len || !"short read on memstream");
+ if (resultlen)
+ *resultlen = len;
+ }
+
+ leave:
+ if (input)
+ es_fclose (input);
+ es_fclose (output);
+ return err;
+}
--- /dev/null
+/* sh-exectool.h - Utility functions to execute a helper tool
+ * Copyright (C) 2015 g10 Code GmbH
+ *
+ * This file is part of GnuPG.
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
+ *
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GNUPG_COMMON_EXECTOOL_H
+#define GNUPG_COMMON_EXECTOOL_H
+
+#include <gpg-error.h>
+
+/* Run the program PGMNAME with the command line arguments given in
+ the NULL terminates array ARGV. If INPUT_STRING is not NULL it
+ will be fed to stdin of the process. stderr is logged using
+ log_info and the process' stdout is returned in a newly malloced
+ buffer RESULT with the length stored at RESULTLEN if not given as
+ NULL. A hidden Nul is appended to the output. On error NULL is
+ stored at RESULT, a diagnostic is printed, and an error code
+ returned. */
+gpg_error_t gnupg_exec_tool (const char *pgmname, const char *argv[],
+ const char *input_string,
+ char **result, size_t *resultlen);
+
+/* Run the program PGMNAME with the command line arguments given in
+ the NULL terminates array ARGV. If INPUT is not NULL it will be
+ fed to stdin of the process. stderr is logged using log_info and
+ the process' stdout is written to OUTPUT. On error a diagnostic is
+ printed, and an error code returned. */
+gpg_error_t gnupg_exec_tool_stream (const char *pgmname, const char *argv[],
+ estream_t input,
+ estream_t output);
+
+#endif /* GNUPG_COMMON_EXECTOOL_H */
--- /dev/null
+/* fwddecl.h - Formward declarations
+ * Copyright (C) 2015 Werner Koch
+ *
+ * This file is part of GnuPG.
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
+ *
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GNUPG_COMMON_FWDDECL_H
+#define GNUPG_COMMON_FWDDECL_H
+
+
+/*-- Forward declaration of the commonly used server control structure. */
+struct server_control_s;
+typedef struct server_control_s *ctrl_t;
+
+
+#endif /*GNUPG_COMMON_FWDDECL_H*/
}
-static gpg_error_t
-membuf_data_cb (void *opaque, const void *buffer, size_t length)
-{
- membuf_t *data = opaque;
-
- if (buffer)
- put_membuf (data, buffer, length);
- return 0;
-}
-
-
/* Ask for a passphrase via gpg-agent. On success the caller needs to
free the string stored at R_PASSPHRASE. On error NULL will be
stored at R_PASSPHRASE and an appropriate gpg error code is
else
init_membuf (&data, 64);
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, NULL, NULL, NULL);
/* Older Pinentries return the old assuan error code for canceled
*
* This file is part of GnuPG.
*
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
*
- * GnuPG is distributed in the hope that it will be useful,
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
}
else if (control == IOBUFCTRL_DESC)
{
- *(char **) buf = "file_filter(fd)";
+ mem2str (buf, "file_filter(fd)", *ret_len);
}
else if (control == IOBUFCTRL_FREE)
{
if (!a->keep_open)
fd_cache_close (a->no_cache ? NULL : a->fname, f);
}
- f = GNUPG_INVALID_FD;
xfree (a); /* We can free our context now. */
}
}
else if (control == IOBUFCTRL_DESC)
{
- *(char **) buf = "estream_filter";
+ mem2str (buf, "estream_filter", *ret_len);
}
else if (control == IOBUFCTRL_FREE)
{
}
else if (control == IOBUFCTRL_DESC)
{
- *(char **) buf = "sock_filter";
+ mem2str (buf, "sock_filter", *ret_len);
}
else if (control == IOBUFCTRL_FREE)
{
}
else if (control == IOBUFCTRL_DESC)
{
- *(char **) buf = "block_filter";
+ mem2str (buf, "block_filter", *ret_len);
}
else if (control == IOBUFCTRL_FREE)
{
return rc;
}
+#define MAX_IOBUF_DESC 32
+/*
+ * Fill the buffer by the description of iobuf A.
+ * The buffer size should be MAX_IOBUF_DESC (or larger).
+ * Returns BUF as (const char *).
+ */
static const char *
-iobuf_desc (iobuf_t a)
+iobuf_desc (iobuf_t a, byte *buf)
{
- size_t dummy_len = 0;
- const char *desc = "?";
+ size_t len = MAX_IOBUF_DESC;
if (! a || ! a->filter)
- return desc;
-
- a->filter (a->filter_ov, IOBUFCTRL_DESC, NULL,
- (byte *) & desc, &dummy_len);
+ memcpy (buf, "?", 2);
+ else
+ a->filter (a->filter_ov, IOBUFCTRL_DESC, NULL, buf, &len);
- return desc;
+ return buf;
}
static void
return;
for (; a; a = a->chain)
{
+ byte desc[MAX_IOBUF_DESC];
log_debug ("iobuf chain: %d.%d '%s' filter_eof=%d start=%d len=%d\n",
- a->no, a->subno, iobuf_desc (a), a->filter_eof,
+ a->no, a->subno, iobuf_desc (a, desc), a->filter_eof,
(int) a->d.start, (int) a->d.len);
}
}
for (; a; a = a_chain)
{
+ byte desc[MAX_IOBUF_DESC];
int rc2 = 0;
a_chain = a->chain;
if (DBG_IOBUF)
log_debug ("iobuf-%d.%d: close '%s'\n",
- a->no, a->subno, iobuf_desc (a));
+ a->no, a->subno, iobuf_desc (a, desc));
if (a->filter && (rc2 = a->filter (a->filter_ov, IOBUFCTRL_FREE,
a->chain, NULL, &dummy_len)))
size_t len = 0;
int print_only = 0;
int fd;
+ byte desc[MAX_IOBUF_DESC];
assert (use == IOBUF_INPUT || use == IOBUF_OUTPUT);
file_filter (fcx, IOBUFCTRL_INIT, NULL, NULL, &len);
if (DBG_IOBUF)
log_debug ("iobuf-%d.%d: open '%s' desc=%s fd=%d\n",
- a->no, a->subno, fname, iobuf_desc (a), FD2INT (fcx->fp));
+ a->no, a->subno, fname, iobuf_desc (a, desc), FD2INT (fcx->fp));
return a;
}
int
iobuf_ioctl (iobuf_t a, iobuf_ioctl_t cmd, int intval, void *ptrval)
{
+ byte desc[MAX_IOBUF_DESC];
+
if (cmd == IOBUF_IOCTL_KEEP_OPEN)
{
/* Keep system filepointer/descriptor open. This was used in
anymore. */
if (DBG_IOBUF)
log_debug ("iobuf-%d.%d: ioctl '%s' keep_open=%d\n",
- a ? a->no : -1, a ? a->subno : -1, iobuf_desc (a),
+ a ? a->no : -1, a ? a->subno : -1, iobuf_desc (a, desc),
intval);
for (; a; a = a->chain)
if (!a->chain && a->filter == file_filter)
{
if (DBG_IOBUF)
log_debug ("iobuf-%d.%d: ioctl '%s' no_cache=%d\n",
- a ? a->no : -1, a ? a->subno : -1, iobuf_desc (a),
+ a ? a->no : -1, a ? a->subno : -1, iobuf_desc (a, desc),
intval);
for (; a; a = a->chain)
if (!a->chain && a->filter == file_filter)
if (DBG_IOBUF)
{
+ byte desc[MAX_IOBUF_DESC];
log_debug ("iobuf-%d.%d: push '%s'\n",
- a->no, a->subno, iobuf_desc (a));
+ a->no, a->subno, iobuf_desc (a, desc));
print_chain (a);
}
iobuf_t b;
size_t dummy_len = 0;
int rc = 0;
+ byte desc[MAX_IOBUF_DESC];
if (DBG_IOBUF)
log_debug ("iobuf-%d.%d: pop '%s'\n",
- a->no, a->subno, iobuf_desc (a));
+ a->no, a->subno, iobuf_desc (a, desc));
if (a->use == IOBUF_INPUT_TEMP || a->use == IOBUF_OUTPUT_TEMP)
{
/* This should be the last filter in the pipeline. */
size_t
iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen)
{
+ byte desc[MAX_IOBUF_DESC];
size_t n;
while (1)
int rc = filter_flush (a);
if (rc)
log_bug ("Flushing iobuf %d.%d (%s) from iobuf_temp_to_buffer failed. Ignoring.\n",
- a->no, a->subno, iobuf_desc (a));
+ a->no, a->subno, iobuf_desc (a, desc));
if (! a->chain)
break;
a = a->chain;
called on the pipeline.
IOBUFCTRL_DESC: Called with this value to get a human-readable
- description of the filter. * (char **) BUF should set to the
- NUL-terminated string. Note: you need to keep track of this
- value and, if necessary, free it when the filter function is
- called with control set to IOBUFCTRL_FREE.
+ description of the filter. *LEN is the size of the buffer.
+ The description is filled into BUF, NUL-terminated. Always
+ returns 0.
*/
int iobuf_push_filter (iobuf_t a, int (*f) (void *opaque, int control,
iobuf_t chain, byte * buf,
/* isascii.c - Replacement for isascii.
* Copyright (C) 2002 Free Software Foundation, Inc.
*
- * This file is part of GnuPG.
+ * 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.
*
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * This file 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.
*/
#ifdef HAVE_CONFIG_H
*
* This file is part of GnuPG.
*
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
*
- * GnuPG is distributed in the hope that it will be useful,
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
}
+/* A variant of put_membuf accepting a void * and returning a
+ gpg_error_t (which will always return 0) to be used as a generic
+ callback handler. This function also allows buffer to be NULL. */
+gpg_error_t
+put_membuf_cb (void *opaque, const void *buf, size_t len)
+{
+ membuf_t *data = opaque;
+
+ if (buf)
+ put_membuf (data, buf, len);
+ return 0;
+}
+
+
void
put_membuf_str (membuf_t *mb, const char *string)
{
void init_membuf_secure (membuf_t *mb, int initiallen);
void clear_membuf (membuf_t *mb, size_t amount);
void put_membuf (membuf_t *mb, const void *buf, size_t len);
+gpg_error_t put_membuf_cb (void *opaque, const void *buf, size_t len);
void put_membuf_str (membuf_t *mb, const char *string);
void put_membuf_printf (membuf_t *mb, const char *format,
...) GPGRT_ATTR_PRINTF(2,3);
#define DIM(v) (sizeof(v)/sizeof((v)[0]))
#define DIMof(type,member) DIM(((type *)0)->member)
-
-/* Replacements for macros not available with libgpg-error < 1.20. */
-#ifndef GPGRT_GCC_VERSION
-
-# undef GPGRT_HAVE_PRAGMA_GCC_PUSH
-# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
-# define GPGRT_HAVE_MACRO_FUNCTION 1 /* __FUNCTION__ macro is available. */
-# define GPGRT_ATTR_NORETURN __attribute__ ((noreturn))
-# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4 )
-# define GPGRT_HAVE_PRAGMA_GCC_PUSH 1
-# define GPGRT_ATTR_PRINTF(f,a) \
- __attribute__ ((format (__gnu_printf__,f,a)))
-# define GPGRT_ATTR_NR_PRINTF(f,a) \
- __attribute__ ((noreturn, format (__gnu_printf__,f,a)))
-# else
-# define GPGRT_ATTR_PRINTF(f, a) \
- __attribute__ ((format (printf,f,a)))
-# define GPGRT_ATTR_NR_PRINTF(f, a) \
- __attribute__ ((noreturn, format (printf,f,a)))
-# endif
-# else
-# define GPGRT_ATTR_NORETURN
-# define GPGRT_ATTR_PRINTF( f, a )
-# define GPGRT_ATTR_NR_PRINTF( f, a )
-# endif
-
-#endif /*Older libgpg-error. */
-
/* To avoid that a compiler optimizes certain memset calls away, these
macros may be used instead. */
#define wipememory2(_ptr,_set,_len) do { \
*
* This file is part of GnuPG.
*
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
*
- * GnuPG is distributed in the hope that it will be useful,
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This file is part of GnuPG.
*
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
*
- * GnuPG is distributed in the hope that it will be useful,
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
STATUS_PLAINTEXT_FOLLOWS, /* Used by g13-syshelp */
STATUS_ERROR,
+ STATUS_WARNING,
STATUS_SUCCESS,
STATUS_FAILURE,
}
+\f
+/* Version number parsing. */
+
+/* This function parses the first portion of the version number S and
+ stores it in *NUMBER. On success, this function returns a pointer
+ into S starting with the first character, which is not part of the
+ initial number portion; on failure, NULL is returned. */
+static const char*
+parse_version_number (const char *s, int *number)
+{
+ int val = 0;
+
+ if (*s == '0' && digitp (s+1))
+ return NULL; /* Leading zeros are not allowed. */
+ for (; digitp (s); s++)
+ {
+ val *= 10;
+ val += *s - '0';
+ }
+ *number = val;
+ return val < 0 ? NULL : s;
+}
+
+
+/* This function breaks up the complete string-representation of the
+ version number S, which is of the following struture: <major
+ number>.<minor number>.<micro number><patch level>. The major,
+ minor and micro number components will be stored in *MAJOR, *MINOR
+ and *MICRO.
+
+ On success, the last component, the patch level, will be returned;
+ in failure, NULL will be returned. */
+static const char *
+parse_version_string (const char *s, int *major, int *minor, int *micro)
+{
+ s = parse_version_number (s, major);
+ if (!s || *s != '.')
+ return NULL;
+ s++;
+ s = parse_version_number (s, minor);
+ if (!s)
+ return NULL;
+ if (*s == '.')
+ {
+ s++;
+ s = parse_version_number (s, micro);
+ if (!s)
+ return NULL;
+ }
+ else
+ *micro = 0;
+ return s; /* Patchlevel. */
+}
+
+
+/* Check that the version string MY_VERSION is greater or equal than
+ REQ_VERSION. Returns true if the condition is satisfied or false
+ if not. This works with 3 part and two part version strings; for a
+ two part version string the micor part is assumed to be 0. */
+int
+compare_version_strings (const char *my_version, const char *req_version)
+{
+ int my_major, my_minor, my_micro;
+ int rq_major, rq_minor, rq_micro;
+
+ if (!my_version || !req_version)
+ return 0;
+
+ if (!parse_version_string (my_version, &my_major, &my_minor, &my_micro))
+ return 0;
+ if (!parse_version_string(req_version, &rq_major, &rq_minor, &rq_micro))
+ return 0;
+
+ if (my_major > rq_major
+ || (my_major == rq_major && my_minor > rq_minor)
+ || (my_major == rq_major && my_minor == rq_minor
+ && my_micro >= rq_micro))
+ {
+ return 1;
+ }
+ return 0;
+}
+
+
+\f
/* Format a string so that it fits within about TARGET_COLS columns.
If IN_PLACE is 0, then TEXT is copied to a new buffer, which is
returned. Otherwise, TEXT is modified in place and returned.
/* Tokenize STRING using the set of delimiters in DELIM. */
char **strtokenize (const char *string, const char *delim);
+/* Return True if MYVERSION is greater or equal than REQ_VERSION. */
+int compare_version_strings (const char *my_version, const char *req_version);
+
/* Format a string so that it fits within about TARGET_COLS columns. */
char *format_text (char *text, int in_place, int target_cols, int max_cols);
p = bin2hex (stuff, 20, NULL);
if (!p)
fail (0);
- if (strcmp (p, hexstuff))
+ else if (strcmp (p, hexstuff))
fail (0);
p = bin2hex (stuff, (size_t)(-1), NULL);
if (p)
fail (0);
- if (errno != ENOMEM)
+ else if (errno != ENOMEM)
fail (1);
}
p = bin2hexcolon (stuff, 20, NULL);
if (!p)
fail (0);
- if (strcmp (p, hexstuff))
+ else if (strcmp (p, hexstuff))
fail (0);
p = bin2hexcolon (stuff, (size_t)(-1), NULL);
if (p)
fail (0);
- if (errno != ENOMEM)
+ else if (errno != ENOMEM)
fail (1);
}
#include <stdlib.h>
#include "iobuf.h"
+#include "stringhelp.h"
/* Return every other byte. In particular, reads two bytes, returns
the second one. */
if (control == IOBUFCTRL_DESC)
{
- *(char **) buf = "every_other_filter";
+ mem2str (buf, "every_other_filter", *len);
}
if (control == IOBUFCTRL_UNDERFLOW)
{
if (control == IOBUFCTRL_DESC)
{
- * (char **) buf = "double_filter";
+ mem2str (buf, "double_filter", *len);
}
if (control == IOBUFCTRL_FLUSH)
{
#include <stdlib.h>
#include <string.h>
-#include "stringhelp.h"
-
#include "t-support.h"
+#include "stringhelp.h"
static void
test_map_static_macro_string (void)
result = map_static_macro_string (tests[testno].string);
if (!result)
fail (testno);
- if (strcmp (result, tests[testno].expected))
+ else if (strcmp (result, tests[testno].expected))
fail (testno);
if (!tests[testno].lastresult)
tests[testno].lastresult = result;
result = map_static_macro_string (tests[testno].string);
if (!result)
fail (testno);
- if (strcmp (result, tests[testno].expected))
+ else if (strcmp (result, tests[testno].expected))
fail (testno);
if (result != tests[testno].lastresult)
fail (testno);
#include <unistd.h>
#include <sys/types.h>
-#include "stringhelp.h"
-
#include "t-support.h"
+#include "stringhelp.h"
static char *home_buffer;
result = percent_escape (tests[testno].value, tests[testno].extra);
if (!result)
fail (testno);
- if (strcmp (result, tests[testno].expected))
+ else if (strcmp (result, tests[testno].expected))
fail (testno);
xfree (result);
}
out = make_filename_try ("~/foo", "bar", NULL);
if (!out)
fail (2);
- if (home)
+ else if (home)
{
if (strlen (out) < homelen + 7)
fail (2);
- if (strncmp (out, home, homelen))
+ else if (strncmp (out, home, homelen))
fail (2);
- if (strcmp (out+homelen, "/foo/bar"))
+ else if (strcmp (out+homelen, "/foo/bar"))
fail (2);
}
else
out = make_filename_try ("~", "bar", NULL);
if (!out)
fail (2);
- if (home)
+ else if (home)
{
if (strlen (out) < homelen + 3)
fail (2);
- if (strncmp (out, home, homelen))
+ else if (strncmp (out, home, homelen))
fail (2);
- if (strcmp (out+homelen, "/bar"))
+ else if (strcmp (out+homelen, "/bar"))
fail (2);
}
else
out = make_absfilename_try ("foo", "bar", NULL);
if (!out)
fail (0);
- if (strlen (out) < cwdlen + 7)
+ else if (strlen (out) < cwdlen + 7)
fail (0);
- if (strncmp (out, cwd, cwdlen))
+ else if (strncmp (out, cwd, cwdlen))
fail (0);
- if (strcmp (out+cwdlen, "/foo/bar"))
+ else if (strcmp (out+cwdlen, "/foo/bar"))
fail (0);
xfree (out);
out = make_absfilename_try ("./foo", NULL);
if (!out)
fail (1);
- if (strlen (out) < cwdlen + 5)
+ else if (strlen (out) < cwdlen + 5)
fail (1);
- if (strncmp (out, cwd, cwdlen))
+ else if (strncmp (out, cwd, cwdlen))
fail (1);
- if (strcmp (out+cwdlen, "/./foo"))
+ else if (strcmp (out+cwdlen, "/./foo"))
fail (1);
xfree (out);
out = make_absfilename_try (".", NULL);
if (!out)
fail (2);
- if (strlen (out) < cwdlen)
+ else if (strlen (out) < cwdlen)
fail (2);
- if (strncmp (out, cwd, cwdlen))
+ else if (strncmp (out, cwd, cwdlen))
fail (2);
- if (strcmp (out+cwdlen, ""))
+ else if (strcmp (out+cwdlen, ""))
fail (2);
xfree (out);
return p;
}
+
static void
test_format_text (void)
{
fail(0);
}
+
+static void
+test_compare_version_strings (void)
+{
+ struct { const char *a; const char *b; int okay; } tests[] = {
+ { "1.0.0", "1.0.0", 1 },
+ { "1.0.0-", "1.0.0", 1 },
+ { "1.0.0-1", "1.0.0", 1 },
+ { "1.0.0.1", "1.0.0", 1 },
+ { "1.0.0", "1.0.1", 0 },
+ { "1.0.0-", "1.0.1", 0 },
+ { "1.0.0-1", "1.0.1", 0 },
+ { "1.0.0.1", "1.0.1", 0 },
+ { "1.0.0", "1.1.0", 0 },
+ { "1.0.0-", "1.1.0", 0 },
+ { "1.0.0-1", "1.1.0", 0 },
+ { "1.0.0.1", "1.1.0", 0 },
+
+ { "1.0.0", "1.0.0-", 1 },
+ { "1.0.0", "1.0.0-1", 1 },
+ { "1.0.0", "1.0.0.1", 1 },
+ { "1.1.0", "1.0.0", 1 },
+ { "1.1.1", "1.1.0", 1 },
+ { "1.1.2", "1.1.2", 1 },
+ { "1.1.2", "1.0.2", 1 },
+ { "1.1.2", "0.0.2", 1 },
+ { "1.1.2", "1.1.3", 0 },
+
+ { "0.99.1", "0.9.9", 1 },
+ { "0.9.1", "0.91.0", 0 },
+
+ { "1.5.3", "1.5", 1 },
+ { "1.5.0", "1.5", 1 },
+ { "1.4.99", "1.5", 0 },
+ { "1.5", "1.4.99", 1 },
+ { "1.5", "1.5.0", 1 },
+ { "1.5", "1.5.1", 0 },
+
+ { "1.5.3-x17", "1.5-23", 1 },
+
+ { "1.5.3a", "1.5.3", 1 },
+ { "1.5.3a", "1.5.3b", 1 },
+
+ { NULL, NULL, 0 }
+ };
+ int idx;
+ int res;
+
+ for (idx=0; idx < DIM(tests); idx++)
+ {
+ res = compare_version_strings (tests[idx].a, tests[idx].b);
+ /* printf ("test %d: '%s' '%s' %d -> %d\n", */
+ /* idx, tests[idx].a, tests[idx].b, tests[idx].okay, res); */
+ if (res != tests[idx].okay)
+ fail (idx);
+ }
+}
+
+
int
main (int argc, char **argv)
{
test_make_absfilename_try ();
test_strsplit ();
test_strtokenize ();
+ test_compare_version_strings ();
test_format_text ();
xfree (home_buffer);
- return 0;
+ return !!errcount;
}
#include <stdlib.h>
#include <stdio.h>
-#ifdef HAVE_W32CE_SYSTEM
-#include <gpg-error.h> /* Defines strerror. */
-#endif
+#include <gpg-error.h>
#ifndef HAVE_GETENV
tp = gmtime (&now);
if (!tp)
fail (tidx);
- tbuf = *tp;
- tbuf2 = tbuf;
+ else
+ {
+ tbuf = *tp;
+ tbuf2 = tbuf;
#ifdef HAVE_TIMEGM
- atime = timegm (&tbuf);
+ atime = timegm (&tbuf);
#else
- atime = mktime (&tbuf);
+ atime = mktime (&tbuf);
#endif
- if (atime == (time_t)(-1))
- fail (tidx);
- if (atime != now)
- fail (tidx);
-
- tp = gmtime (&atime);
- if (!tp)
- fail (tidx);
- if (cmp_time_s (tp, &tbuf))
- fail (tidx);
- if (cmp_time_s (tp, &tbuf2))
- fail (tidx);
+ if (atime == (time_t)(-1))
+ fail (tidx);
+ else if (atime != now)
+ fail (tidx);
+
+ tp = gmtime (&atime);
+ if (!tp)
+ fail (tidx);
+ else if (cmp_time_s (tp, &tbuf))
+ fail (tidx);
+ else if (cmp_time_s (tp, &tbuf2))
+ fail (tidx);
+ }
}
}
for (;;)
{
- buffer = s;
if (n < 2)
return NULL; /* Buffer definitely too short for tag and length. */
if (!*s || *s == 0xff)
# define HAVE_U32_TYPEDEF
#endif
-
-/* Some GCC attributes. These are replacements for libgpg-error < 1.20. */
-#ifndef GPGRT_GCC_VERSION
-# if __GNUC__ >= 4
-# define GPGRT_ATTR_SENTINEL(a) __attribute__ ((sentinel(a)))
-# else
-# define GPGRT_ATTR_SENTINEL(a)
-# endif
-#endif
-
#endif /*GNUPG_COMMON_TYPES_H*/
desc->u.fpr[i] = hextobyte(si);
for (; i < 20; i++)
desc->u.fpr[i]= 0;
- s = se + 1;
mode = KEYDB_SEARCH_MODE_FPR;
}
break;
#ifdef HAVE_W32_SYSTEM
-/* Return a malloced string encoded in UTF-8 from the wide char input
+/* Return a malloced string encoded for CODEPAGE from the wide char input
string STRING. Caller must free this value. Returns NULL and sets
ERRNO on failure. Calling this function with STRING set to NULL is
not defined. */
-char *
-wchar_to_utf8 (const wchar_t *string)
+static char *
+wchar_to_cp (const wchar_t *string, unsigned int codepage)
{
int n;
char *result;
- n = WideCharToMultiByte (CP_UTF8, 0, string, -1, NULL, 0, NULL, NULL);
+ n = WideCharToMultiByte (codepage, 0, string, -1, NULL, 0, NULL, NULL);
if (n < 0)
{
gpg_err_set_errno (EINVAL);
if (!result)
return NULL;
- n = WideCharToMultiByte (CP_UTF8, 0, string, -1, result, n, NULL, NULL);
+ n = WideCharToMultiByte (codepage, 0, string, -1, result, n, NULL, NULL);
if (n < 0)
{
xfree (result);
}
-/* Return a malloced wide char string from an UTF-8 encoded input
+/* Return a malloced wide char string from a CODEPAGE encoded input
string STRING. Caller must free this value. Returns NULL and sets
ERRNO on failure. Calling this function with STRING set to NULL is
not defined. */
-wchar_t *
-utf8_to_wchar (const char *string)
+static wchar_t *
+cp_to_wchar (const char *string, unsigned int codepage)
{
int n;
size_t nbytes;
wchar_t *result;
- n = MultiByteToWideChar (CP_UTF8, 0, string, -1, NULL, 0);
+ n = MultiByteToWideChar (codepage, 0, string, -1, NULL, 0);
if (n < 0)
{
gpg_err_set_errno (EINVAL);
if (!result)
return NULL;
- n = MultiByteToWideChar (CP_UTF8, 0, string, -1, result, n);
+ n = MultiByteToWideChar (codepage, 0, string, -1, result, n);
if (n < 0)
{
xfree (result);
}
return result;
}
+
+
+/* Return a malloced string encoded in the active code page from the
+ * wide char input string STRING. Caller must free this value.
+ * Returns NULL and sets ERRNO on failure. Calling this function with
+ * STRING set to NULL is not defined. */
+char *
+wchar_to_native (const wchar_t *string)
+{
+ return wchar_to_cp (string, CP_ACP);
+}
+
+
+/* Return a malloced wide char string from an UTF-8 encoded input
+ * string STRING. Caller must free this value. Returns NULL and sets
+ * ERRNO on failure. Calling this function with STRING set to NULL is
+ * not defined. */
+wchar_t *
+native_to_wchar (const char *string)
+{
+ return cp_to_wchar (string, CP_ACP);
+}
+
+
+/* Return a malloced string encoded in UTF-8 from the wide char input
+ * string STRING. Caller must free this value. Returns NULL and sets
+ * ERRNO on failure. Calling this function with STRING set to NULL is
+ * not defined. */
+char *
+wchar_to_utf8 (const wchar_t *string)
+{
+ return wchar_to_cp (string, CP_UTF8);
+}
+
+
+/* Return a malloced wide char string from an UTF-8 encoded input
+ * string STRING. Caller must free this value. Returns NULL and sets
+ * ERRNO on failure. Calling this function with STRING set to NULL is
+ * not defined. */
+wchar_t *
+utf8_to_wchar (const char *string)
+{
+ return cp_to_wchar (string, CP_UTF8);
+}
+
#endif /*HAVE_W32_SYSTEM*/
int jnlib_iconv_close (jnlib_iconv_t cd);
#ifdef HAVE_W32_SYSTEM
+char *wchar_to_native (const wchar_t *string);
+wchar_t *native_to_wchar (const char *string);
char *wchar_to_utf8 (const wchar_t *string);
wchar_t *utf8_to_wchar (const char *string);
#endif /*HAVE_W32_SYSTEM*/
/* These error codes are used but not defined in the required
libgpg-error version. Define them here. */
-#if GPG_ERROR_VERSION_NUMBER < 0x011200 /* 1.18 */
-# define GPG_ERR_LEGACY_KEY 222
-# define GPG_ERR_OBJ_TERM_STATE 225
-# define GPG_ERR_FORBIDDEN 251
-#endif
-#if GPG_ERROR_VERSION_NUMBER < 0x011300 /* 1.19 */
-# define GPG_ERR_LDAP_GENERAL 721
-# define GPG_ERR_LDAP_ATTR_GENERAL 722
-# define GPG_ERR_LDAP_NAME_GENERAL 723
-# define GPG_ERR_LDAP_SECURITY_GENERAL 724
-# define GPG_ERR_LDAP_SERVICE_GENERAL 725
-# define GPG_ERR_LDAP_UPDATE_GENERAL 726
-# define GPG_ERR_LDAP_E_GENERAL 727
-# define GPG_ERR_LDAP_X_GENERAL 728
-# define GPG_ERR_LDAP_OTHER_GENERAL 729
-# define GPG_ERR_LDAP_X_CONNECTING 750
-# define GPG_ERR_LDAP_REFERRAL_LIMIT 751
-# define GPG_ERR_LDAP_CLIENT_LOOP 752
-# define GPG_ERR_LDAP_NO_RESULTS 754
-# define GPG_ERR_LDAP_CONTROL_NOT_FOUND 755
-# define GPG_ERR_LDAP_NOT_SUPPORTED 756
-# define GPG_ERR_LDAP_CONNECT 757
-# define GPG_ERR_LDAP_NO_MEMORY 758
-# define GPG_ERR_LDAP_PARAM 759
-# define GPG_ERR_LDAP_USER_CANCELLED 760
-# define GPG_ERR_LDAP_FILTER 761
-# define GPG_ERR_LDAP_AUTH_UNKNOWN 762
-# define GPG_ERR_LDAP_TIMEOUT 763
-# define GPG_ERR_LDAP_DECODING 764
-# define GPG_ERR_LDAP_ENCODING 765
-# define GPG_ERR_LDAP_LOCAL 766
-# define GPG_ERR_LDAP_SERVER_DOWN 767
-# define GPG_ERR_LDAP_SUCCESS 768
-# define GPG_ERR_LDAP_OPERATIONS 769
-# define GPG_ERR_LDAP_PROTOCOL 770
-# define GPG_ERR_LDAP_TIMELIMIT 771
-# define GPG_ERR_LDAP_SIZELIMIT 772
-# define GPG_ERR_LDAP_COMPARE_FALSE 773
-# define GPG_ERR_LDAP_COMPARE_TRUE 774
-# define GPG_ERR_LDAP_UNSUPPORTED_AUTH 775
-# define GPG_ERR_LDAP_STRONG_AUTH_RQRD 776
-# define GPG_ERR_LDAP_PARTIAL_RESULTS 777
-# define GPG_ERR_LDAP_REFERRAL 778
-# define GPG_ERR_LDAP_ADMINLIMIT 779
-# define GPG_ERR_LDAP_UNAVAIL_CRIT_EXTN 780
-# define GPG_ERR_LDAP_CONFIDENT_RQRD 781
-# define GPG_ERR_LDAP_SASL_BIND_INPROG 782
-# define GPG_ERR_LDAP_NO_SUCH_ATTRIBUTE 784
-# define GPG_ERR_LDAP_UNDEFINED_TYPE 785
-# define GPG_ERR_LDAP_BAD_MATCHING 786
-# define GPG_ERR_LDAP_CONST_VIOLATION 787
-# define GPG_ERR_LDAP_TYPE_VALUE_EXISTS 788
-# define GPG_ERR_LDAP_INV_SYNTAX 789
-# define GPG_ERR_LDAP_NO_SUCH_OBJ 800
-# define GPG_ERR_LDAP_ALIAS_PROBLEM 801
-# define GPG_ERR_LDAP_INV_DN_SYNTAX 802
-# define GPG_ERR_LDAP_IS_LEAF 803
-# define GPG_ERR_LDAP_ALIAS_DEREF 804
-# define GPG_ERR_LDAP_X_PROXY_AUTH_FAIL 815
-# define GPG_ERR_LDAP_BAD_AUTH 816
-# define GPG_ERR_LDAP_INV_CREDENTIALS 817
-# define GPG_ERR_LDAP_INSUFFICIENT_ACC 818
-# define GPG_ERR_LDAP_BUSY 819
-# define GPG_ERR_LDAP_UNAVAILABLE 820
-# define GPG_ERR_LDAP_UNWILL_TO_PERFORM 821
-# define GPG_ERR_LDAP_LOOP_DETECT 822
-# define GPG_ERR_LDAP_NAMING_VIOLATION 832
-# define GPG_ERR_LDAP_OBJ_CLS_VIOLATION 833
-# define GPG_ERR_LDAP_NOT_ALLOW_NONLEAF 834
-# define GPG_ERR_LDAP_NOT_ALLOW_ON_RDN 835
-# define GPG_ERR_LDAP_ALREADY_EXISTS 836
-# define GPG_ERR_LDAP_NO_OBJ_CLASS_MODS 837
-# define GPG_ERR_LDAP_RESULTS_TOO_LARGE 838
-# define GPG_ERR_LDAP_AFFECTS_MULT_DSAS 839
-# define GPG_ERR_LDAP_VLV 844
-# define GPG_ERR_LDAP_OTHER 848
-# define GPG_ERR_LDAP_CUP_RESOURCE_LIMIT 881
-# define GPG_ERR_LDAP_CUP_SEC_VIOLATION 882
-# define GPG_ERR_LDAP_CUP_INV_DATA 883
-# define GPG_ERR_LDAP_CUP_UNSUP_SCHEME 884
-# define GPG_ERR_LDAP_CUP_RELOAD 885
-# define GPG_ERR_LDAP_CANCELLED 886
-# define GPG_ERR_LDAP_NO_SUCH_OPERATION 887
-# define GPG_ERR_LDAP_TOO_LATE 888
-# define GPG_ERR_LDAP_CANNOT_CANCEL 889
-# define GPG_ERR_LDAP_ASSERTION_FAILED 890
-# define GPG_ERR_LDAP_PROX_AUTH_DENIED 891
-#endif /*GPG_ERROR_VERSION_NUMBER < 0x011300*/
-#if GPG_ERROR_VERSION_NUMBER < 0x011500 /* 1.21 */
-# define GPG_ERR_SERVER_FAILED 219
-# define GPG_ERR_NO_KEY 220
-# define GPG_ERR_NO_NAME 221
-# define GPG_ERR_TRUE 255
-# define GPG_ERR_FALSE 256
-#endif
+/* Example: (#if GPG_ERROR_VERSION_NUMBER < 0x011500 // 1.21) */
+#if GPG_ERROR_VERSION_NUMBER < 0x011600 /* 1.22 */
+# define GPG_ERR_DB_CORRUPTED 218
+#endif /* gpg_error < 1.22 */
/* Hash function used with libksba. */
#define HASH_FNC ((void (*)(void *, const void*,size_t))gcry_md_write)
#include "../common/dotlock.h"
#include "../common/utf8conv.h"
#include "../common/dynload.h"
+#include "../common/fwddecl.h"
#include "gettime.h"
/* Replacements for macros not available with libgpg-error < 1.20. */
-#ifndef GPGRT_GCC_VERSION
-
-# ifndef GPGRT_ATTR_FORMAT_ARG
-# if __GNUC__ >= 3 /* Actually 2.8 but testing the major is easier. */
-# define GPGRT_ATTR_FORMAT_ARG(a) __attribute__ ((__format_arg__ (a)))
-# else
-# define GPGRT_ATTR_FORMAT_ARG(a)
-# endif
-# endif
-
-# if __GNUC__ >= 4
-# define GPGRT_ATTR_SENTINEL(a) __attribute__ ((sentinel(a)))
-# else
-# define GPGRT_ATTR_SENTINEL(a)
-# endif
-
-# if __GNUC__ >= 4
-# define GPGRT_ATTR_USED __attribute__ ((used))
-# else
-# define GPGRT_ATTR_USED
-# endif
-
-#endif /*libgpg-error < 1.20 */
-
/* We need this type even if we are not using libreadline and or we
did not include libreadline in the current file. */
#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
#define xtoi_4(p) ((xtoi_2(p) * 256) + xtoi_2((p)+2))
-
-/*-- Forward declaration of the commonly used server control structure. */
-/* (We need it here as it is used by some callback prototypes.) */
-struct server_control_s;
-typedef struct server_control_s *ctrl_t;
-
-
#endif /*GNUPG_COMMON_UTIL_H*/
*
* This file is part of GnuPG.
*
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
*
- * GnuPG is distributed in the hope that it will be useful,
+ * - the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * or
+ *
+ * - the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
m4_define([mym4_package],[gnupg])
m4_define([mym4_major], [2])
m4_define([mym4_minor], [1])
-m4_define([mym4_micro], [10])
+m4_define([mym4_micro], [11])
# 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
m4_esyscmd([echo ]mym4_version[>VERSION])
AC_INIT([mym4_package],[mym4_version], [http://bugs.gnupg.org])
-NEED_GPG_ERROR_VERSION=1.16
+NEED_GPG_ERROR_VERSION=1.21
NEED_LIBGCRYPT_API=1
NEED_LIBGCRYPT_VERSION=1.6.0
AC_GNU_SOURCE
+# Before we do anything with the C compiler, we first save the user's
+# CFLAGS (they are restored at the end of the configure script). This
+# is because some configure checks don't work with -Werror, but we'd
+# like to use -Werror with our build.
+CFLAGS_orig=$CFLAGS
+CFLAGS=
+
# Some status variables.
have_gpg_error=no
have_libgcrypt=no
AC_SYS_LARGEFILE
GNUPG_CHECK_USTAR
+
# We need to compile and run a program on the build machine. A
# comment in libgpg-error says that the AC_PROG_CC_FOR_BUILD macro in
# the AC archive is broken for autoconf 2.57. Given that there is no
AC_MSG_RESULT($CC_FOR_BUILD)
AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
+# We need to call this macro because other pkg-config macros are
+# not always used.
+PKG_PROG_PKG_CONFIG
try_gettext=yes
fi])
#
+# Add user CFLAGS.
+#
+CFLAGS="$CFLAGS $CFLAGS_orig"
+
+#
# Decide what to build
#
## Process this file with automake to produce Makefile.in
EXTRA_DIST = OAUTHORS ONEWS ChangeLog-2011 tls-ca.pem
+dist_pkgdata_DATA = sks-keyservers.netCA.pem
bin_PROGRAMS = dirmngr dirmngr-client
if (n != 16)
{
log_error (_("WARNING: invalid cache record length for S/N "));
+ log_printf ("0x");
log_printhex ("", sn, snlen);
}
else if (opt.verbose)
{
unsigned char record[16];
- char *tmp = hexify_data (sn, snlen);
+ char *tmp = hexify_data (sn, snlen, 1);
if (cdb_read (cdb, record, n, cdb_datapos (cdb)))
log_error (_("problem reading cache record for S/N %s: %s\n"),
{
if (opt.verbose)
{
- char *serialno = hexify_data (sn, snlen);
+ char *serialno = hexify_data (sn, snlen, 1);
log_info (_("S/N %s is valid, it is not listed in the CRL\n"),
serialno );
xfree (serialno);
err = gpg_error (GPG_ERR_CHECKSUM);
goto leave;
}
- checksum = hexify_data (md5buf, 16);
+ checksum = hexify_data (md5buf, 16, 0);
}
gpg_error_t
enable_dns_tormode (int new_circuit)
{
+ (void) new_circuit;
+
#if defined(USE_DNS_CERT) && defined(USE_ADNS)
# if HAVE_ADNS_IF_TORMODE
if (!*tor_credentials || new_circuit)
/* Create a new session object which is currently used to enable TLS
support. It may eventually allow reusing existing connections. */
gpg_error_t
-http_session_new (http_session_t *r_session, const char *tls_priority)
+http_session_new (http_session_t *r_session, const char *tls_priority,
+ const char *intended_hostname)
{
gpg_error_t err;
http_session_t sess;
goto leave;
}
+ /* 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
+ && intended_hostname
+ && !ascii_strcasecmp (intended_hostname,
+ "hkps.pool.sks-keyservers.net"))
+ {
+ char *pemname = make_filename_try (gnupg_datadir (),
+ "sks-keyservers.netCA.pem", NULL);
+ if (!pemname)
+ {
+ err = gpg_error_from_syserror ();
+ log_error ("setting CA from file '%s' failed: %s\n",
+ pemname, gpg_strerror (err));
+ }
+ else
+ {
+ rc = gnutls_certificate_set_x509_trust_file
+ (sess->certcred, pemname, GNUTLS_X509_FMT_PEM);
+ if (rc < 0)
+ log_info ("setting CA from file '%s' failed: %s\n",
+ pemname, gnutls_strerror (rc));
+ xfree (pemname);
+ }
+ }
+
+ /* Add configured certificates to the session. */
for (sl = tls_ca_certlist; sl; sl = sl->next)
{
rc = gnutls_certificate_set_x509_trust_file
void http_register_tls_ca (const char *fname);
gpg_error_t http_session_new (http_session_t *r_session,
- const char *tls_priority);
+ const char *tls_priority,
+ const char *intended_hostname);
http_session_t http_session_ref (http_session_t sess);
void http_session_release (http_session_t sess);
{
gpg_error_t err = 0;
int any_server = 0;
+ int any_results = 0;
uri_item_t uri;
estream_t infp;
parallel and merge them. We also need to decide what to do with
errors - it might not be the best idea to ignore an error from
one server and silently continue with another server. For now we
- stop at the first error. */
+ stop at the first error, unless the server responds with '404 Not
+ Found', in which case we try the next server. */
for (uri = keyservers; !err && uri; uri = uri->next)
{
int is_http = uri->parsed_uri->is_http;
int is_ldap = 0;
+ unsigned int http_status = 0;
#if USE_LDAP
is_ldap = (strcmp (uri->parsed_uri->scheme, "ldap") == 0
|| strcmp (uri->parsed_uri->scheme, "ldaps") == 0
else
#endif
{
- err = ks_hkp_search (ctrl, uri->parsed_uri, patterns->d, &infp);
+ err = ks_hkp_search (ctrl, uri->parsed_uri, patterns->d,
+ &infp, &http_status);
}
+ if (err == gpg_error (GPG_ERR_NO_DATA)
+ && http_status == 404 /* not found */)
+ {
+ /* No record found. Clear error and try next server. */
+ err = 0;
+ continue;
+ }
+
if (!err)
{
err = copy_stream (infp, outfp);
es_fclose (infp);
+ any_results = 1;
break;
}
}
if (!any_server)
err = gpg_error (GPG_ERR_NO_KEYSERVER);
+ else if (err == 0 && !any_results)
+ err = gpg_error (GPG_ERR_NO_DATA);
return err;
}
if (hi->pool)
{
/* Deal with the pool name before selecting a host. */
- if (r_poolname && hi->cname)
+ if (r_poolname)
{
- *r_poolname = xtrystrdup (hi->cname);
+ *r_poolname = xtrystrdup (hi->cname? hi->cname : hi->name);
if (!*r_poolname)
return gpg_error_from_syserror ();
}
R_FP. HOSTPORTSTR is only used for diagnostics. If HTTPHOST is
not NULL it will be used as HTTP "Host" header. If POST_CB is not
NULL a post request is used and that callback is called to allow
- writing the post data. */
+ writing the post data. If R_HTTP_STATUS is not NULL, the http
+ status code will be stored there. */
static gpg_error_t
send_request (ctrl_t ctrl, const char *request, const char *hostportstr,
const char *httphost, unsigned int httpflags,
gpg_error_t (*post_cb)(void *, http_t), void *post_cb_value,
- estream_t *r_fp)
+ estream_t *r_fp, unsigned int *r_http_status)
{
gpg_error_t err;
http_session_t session = NULL;
*r_fp = NULL;
- err = http_session_new (&session, NULL);
+ err = http_session_new (&session, NULL, httphost);
if (err)
goto leave;
http_session_set_log_cb (session, cert_log_cb);
httpflags |= HTTP_FLAG_FORCE_TLS;
}
+ if (r_http_status)
+ *r_http_status = http_get_status_code (http);
+
switch (http_get_status_code (http))
{
case 200:
}
goto leave;
+ case 501:
+ err = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+ goto leave;
+
default:
log_error (_("error accessing '%s': http status %u\n"),
request, http_get_status_code (http));
\f
/* Search the keyserver identified by URI for keys matching PATTERN.
- On success R_FP has an open stream to read the data. */
+ On success R_FP has an open stream to read the data. If
+ R_HTTP_STATUS is not NULL, the http status code will be stored
+ there. */
gpg_error_t
ks_hkp_search (ctrl_t ctrl, parsed_uri_t uri, const char *pattern,
- estream_t *r_fp)
+ estream_t *r_fp, unsigned int *r_http_status)
{
gpg_error_t err;
KEYDB_SEARCH_DESC desc;
/* Send the request. */
err = send_request (ctrl, request, hostport, httphost, httpflags,
- NULL, NULL, &fp);
+ NULL, NULL, &fp, r_http_status);
if (handle_send_request_error (err, request, &tries))
{
reselect = 1;
/* Send the request. */
err = send_request (ctrl, request, hostport, httphost, httpflags,
- NULL, NULL, &fp);
+ NULL, NULL, &fp, NULL);
if (handle_send_request_error (err, request, &tries))
{
reselect = 1;
/* Send the request. */
err = send_request (ctrl, request, hostport, httphost, 0,
- put_post_cb, &parm, &fp);
+ put_post_cb, &parm, &fp, NULL);
if (handle_send_request_error (err, request, &tries))
{
reselect = 1;
estream_t fp = NULL;
char *request_buffer = NULL;
- err = http_session_new (&session, NULL);
+ err = http_session_new (&session, NULL, NULL);
if (err)
goto leave;
http_session_set_log_cb (session, cert_log_cb);
gpg_error_t ks_hkp_print_hosttable (ctrl_t ctrl);
gpg_error_t ks_hkp_help (ctrl_t ctrl, parsed_uri_t uri);
gpg_error_t ks_hkp_search (ctrl_t ctrl, parsed_uri_t uri, const char *pattern,
- estream_t *r_fp);
+ estream_t *r_fp, unsigned int *r_http_status);
gpg_error_t ks_hkp_get (ctrl_t ctrl, parsed_uri_t uri,
const char *keyspec, estream_t *r_fp);
gpg_error_t ks_hkp_put (ctrl_t ctrl, parsed_uri_t uri,
{
unsigned char buf[20];
gcry_md_hash_buffer (GCRY_MD_SHA1, buf, data, len);
- return hexify_data( buf, 20 );
+ return hexify_data (buf, 20, 0);
}
char*
-hexify_data( const unsigned char* data, size_t len )
+hexify_data (const unsigned char* data, size_t len, int with_prefix)
{
int i;
- char* result = xmalloc( sizeof( char ) * (2*len+1));
+ char *result = xmalloc (2*len + (with_prefix?2:0) + 1);
+ char *p;
+
+ if (with_prefix)
+ p = stpcpy (result, "0x");
+ else
+ p = result;
- for( i = 0; i < 2*len; i+=2 )
- sprintf( result+i, "%02X", *data++);
+ for (i = 0; i < 2*len; i+=2 )
+ snprintf (p+i, 3, "%02X", *data++);
return result;
}
char* hashify_data( const char* data, size_t len );
/* Returns data as a hex string. */
-char* hexify_data( const unsigned char* data, size_t len );
+char* hexify_data (const unsigned char* data, size_t len, int with_prefix);
/* Returns the serial number as a hex string. */
char* serial_hex ( ksba_sexp_t serial );
void *key;
size_t keylen;
- printf ("CERT lookup on '%s'\n", name);
+ if (verbose || any_options)
+ printf ("CERT lookup on '%s'\n", name);
err = get_dns_cert (name, DNS_CERTTYPE_ANY, &key, &keylen,
&fpr, &fpr_len, &url);
gpg_strerror (err), gpg_strsource (err));
else if (key)
{
- printf ("Key found (%u bytes)\n", (unsigned int)keylen);
+ if (verbose || any_options)
+ printf ("Key found (%u bytes)\n", (unsigned int)keylen);
}
else
{
http_register_tls_callback (verify_callback);
http_register_tls_ca (cafile);
- err = http_session_new (&session, NULL);
+ err = http_session_new (&session, NULL, NULL);
if (err)
log_error ("http_session_new failed: %s\n", gpg_strerror (err));
should not contain spaces. The error code is a either a string
commencing with a letter or such a string prefixed with a
numerical error code and an underscore; e.g.: "151011327_EOF".
-
+*** WARNING <location> <error code> [<text>]
+ This is a generic warning status message, it might be followed by
+ error location specific data. <error code> and <location>
+ should not contain spaces. The error code is a either a string
+ commencing with a letter or such a string prefixed with a
+ numerical error code and an underscore; e.g.: "151011327_EOF".
*** SUCCESS [<location>]
Postive confirmation that an operation succeeded. It is used
similar to ISO-C's EXIT_SUCCESS. <location> is optional but if
All other data after this header is raw image (JPEG) data.
-* Unattended key generation
-
- Please see the GnuPG manual for a description.
-
-
* Layout of the TrustDB
The TrustDB is built from fixed length records, where the first byte
CLEANFILES = yat2m mkdefsinc defs.inc
DISTCLEANFILES = gnupg.tmp gnupg.ops yat2m-stamp.tmp yat2m-stamp \
- $(myman_pages) gpg-zip.1 gpgkey2ssh.1 gnupg.7
+ $(myman_pages) gpg-zip.1 gnupg.7
yat2m: yat2m.c
$(CC_FOR_BUILD) -o $@ $(srcdir)/yat2m.c
defsincdate: $(gnupg_TEXINFOS)
: >defsincdate ; \
- if test -d $(top_srcdir)/.git; then \
+ if test -e $(top_srcdir)/.git; then \
(cd $(srcdir) && git log -1 --format='%ct' \
-- $(gnupg_TEXINFOS) 2>/dev/null) >>defsincdate; \
fi
characters. @var{char} must be one character UTF-8 string. A
Pinentry may or may not honor this request.
+@item --pinentry-timeout @var{n}
+@opindex pinentry-timeout
+This option asks the Pinentry to timeout after @var{n} seconds with no
+user input. The default value of 0 does not ask the pinentry to
+timeout, however a Pinentry may use its own default timeout value in
+this case. A Pinentry may or may not honor this request.
+
@item --pinentry-program @var{filename}
@opindex pinentry-program
Use program @var{filename} as the PIN entry. The default is
@item --store
@opindex store
-Store only (make a simple RFC1991 literal data packet).
+Store only (make a simple literal data packet).
@item --decrypt
@itemx -d
required because the internal protection method of the secret key is
different from the one specified by the OpenPGP protocol.
+@item --export-ssh-key
+@opindex export-ssh-key
+This command is used to export a key in the OpenSSH public key format.
+It requires the specification of one key by the usual means and
+exports the latest valid subkey which has an authentication capability
+to STDOUT or to the file given with option @option{--output}. That
+output can directly be added to ssh's @file{authorized_key} file.
+
+By specifying the key to export using a key ID or a fingerprint
+suffixed with an exclamation mark (!), a specific subkey or the
+primary key can be exported. This does not even require that the key
+has the authentication capability flag set.
+
@item --import
@itemx --fast-import
@opindex import
@item --gen-key
@opindex gen-key
Generate a new key pair using the current default parameters. This is
-the standard command to create a new key.
+the standard command to create a new key. In addition to the key a
+revocation certificate is created and stored in the
+@file{openpgp-revocs.d} directory below the GnuPG home directory.
@item --full-gen-key
@opindex gen-key
extended version of @option{--gen-key}.
There is also a feature which allows you to create keys in batch
-mode. See the the manual section ``Unattended key generation'' on how
+mode. See the manual section ``Unattended key generation'' on how
to use this.
@item --gen-revoke @code{name}
@opindex gen-revoke
-Generate a revocation certificate for the complete key. To revoke
-a subkey or a signature, use the @option{--edit} command.
+Generate a revocation certificate for the complete key. To only revoke
+a subkey or a key signature, use the @option{--edit} command.
+
+This command merely creates the revocation certificate so that it can
+be used to revoke the key if that is ever needed. To actually revoke
+a key the created revocation certificate needs to be merged with the
+key to revoke. This is done by importing the revocation certificate
+using the @option{--import} command. Then the revoked key needs to be
+published, which is best done by sending the key to a keyserver
+(command @option{--send-key}) and by exporting (@option{--export}) it
+to a file which is then send to frequent communication partners.
+
@item --desig-revoke @code{name}
@opindex desig-revoke
Show usage information for keys and subkeys in the standard key
listing. This is a list of letters indicating the allowed usage for a
key (@code{E}=encryption, @code{S}=signing, @code{C}=certification,
- @code{A}=authentication). Defaults to no.
+ @code{A}=authentication). Defaults to yes.
@item show-policy-urls
@opindex list-options:show-policy-urls
@item --s2k-cipher-algo @code{name}
@opindex s2k-cipher-algo
-Use @code{name} as the cipher algorithm used to protect secret keys.
-The default cipher is @value{GPGSYMENCALGO}. This cipher is also used
-for symmetric encryption with a passphrase if
-@option{--personal-cipher-preferences} and @option{--cipher-algo} is
-not given.
+Use @code{name} as the cipher algorithm for symmetric encryption with
+a passphrase if @option{--personal-cipher-preferences} and
+@option{--cipher-algo} are not given. The default is @value{GPGSYMENCALGO}.
@item --s2k-digest-algo @code{name}
@opindex s2k-digest-algo
-Use @code{name} as the digest algorithm used to mangle the passphrases.
-The default algorithm is SHA-1.
+Use @code{name} as the digest algorithm used to mangle the passphrases
+for symmetric encryption. The default is SHA-1.
@item --s2k-mode @code{n}
@opindex s2k-mode
-Selects how passphrases are mangled. If @code{n} is 0 a plain
-passphrase (which is not recommended) will be used, a 1 adds a salt to
-the passphrase and a 3 (the default) iterates the whole process a
-number of times (see --s2k-count). Unless @option{--rfc1991} is used,
-this mode is also used for symmetric encryption with a passphrase.
+Selects how passphrases for symmetric encryption are mangled. If
+@code{n} is 0 a plain passphrase (which is in general not recommended)
+will be used, a 1 adds a salt (which should not be used) to the
+passphrase and a 3 (the default) iterates the whole process a number
+of times (see @option{--s2k-count}).
@item --s2k-count @code{n}
@opindex s2k-count
-Specify how many times the passphrase mangling is repeated. This
-value may range between 1024 and 65011712 inclusive. The default is
-inquired from gpg-agent. Note that not all values in the
-1024-65011712 range are legal and if an illegal value is selected,
-GnuPG will round up to the nearest legal value. This option is only
-meaningful if @option{--s2k-mode} is 3.
+Specify how many times the passphrases mangling for symmetric
+encryption is repeated. This value may range between 1024 and
+65011712 inclusive. The default is inquired from gpg-agent. Note
+that not all values in the 1024-65011712 range are legal and if an
+illegal value is selected, GnuPG will round up to the nearest legal
+value. This option is only meaningful if @option{--s2k-mode} is set
+to the default of 3.
@end table
Reset all packet, cipher and digest options to strict RFC-2440
behavior.
-@ifclear gpgtowone
-@item --rfc1991
-@opindex rfc1991
-Try to be more RFC-1991 (PGP 2.x) compliant. This option is
-deprecated will be removed in GnuPG 2.1.
-
-@item --pgp2
-@opindex pgp2
-Set up all options to be as PGP 2.x compliant as possible, and warn if
-an action is taken (e.g. encrypting to a non-RSA key) that will create
-a message that PGP 2.x will not be able to handle. Note that `PGP
-2.x' here means `MIT PGP 2.6.2'. There are other versions of PGP 2.x
-available, but the MIT release is a good common baseline.
-
-This option implies
-@option{--rfc1991 --disable-mdc --no-force-v4-certs
- --escape-from-lines --force-v3-sigs --allow-weak-digest-algos
- --cipher-algo IDEA --digest-algo MD5 --compress-algo ZIP}.
-It also disables @option{--textmode} when encrypting.
-
-This option is deprecated will be removed in GnuPG 2.1. The reason
-for dropping PGP-2 support is that the PGP 2 format is not anymore
-considered safe (for example due to the use of the broken MD5 algorithm).
-Note that the decryption of PGP-2 created messages will continue to work.
-@end ifclear
-
@item --pgp6
@opindex pgp6
Set up all options to be as PGP 6 compliant as possible. This
* gpgparsemail:: Parse a mail message into an annotated format
* symcryptrun:: Call a simple symmetric encryption tool.
* gpg-zip:: Encrypt or sign files into an archive.
-* gpgkey2ssh:: Emit GPG public keys in OpenSSH format.
@end menu
@c
@command{tar}(1),
@end ifset
@include see-also-note.texi
-
-
-@c
-@c GPGKEY2SSH
-@c
-@manpage gpgkey2ssh.1
-@node gpgkey2ssh
-@section Emit GPG public keys in OpenSSH format
-@ifset manverb
-.B gpgkey2ssh \- Emit GPG public keys in OpenSSH format
-@end ifset
-
-@mansect synopsis
-@ifset manverb
-.B gpgkey2ssh
-.I keyid
-@end ifset
-
-@mansect description
-This tool is deprecated and will be removed soon.
-
-@command{gpgkey2ssh} emits the public key of an OpenPGP RSA or DSA key
-in a format readable by OpenSSH clients and servers.
-
-It takes only a single argument, a key ID, which designates the
-primary key or subkey whose public key should be converted.
-
-The key ID should use upper-case (A-F, not a-f) for all hex digits
-greater than 9, and the key in question must be present in
-@code{gpg}'s public keyring.
-
-The output of a successful run can be used verbatim as an entry in an
-@code{authorized_keys} file for @code{sshd}, or can be prefixed with a
-host name and appended to a @code{known_hosts} file for @code{ssh}.
-
-@mansect return value
-
-The program returns 0 if the key was successfully converted and
-non-zero if there was an error (e.g., if the key ID was malformed, the
-key was not present in the public keyring, or if the key is not an RSA
-or DSA key).
-
-@mansect environment
-@subsection Environment
-
-@table @asis
-
-@item HOME
-Used to locate the default home directory.
-
-@item GNUPGHOME
-If set directory used instead of "~/.gnupg".
-
-@end table
-
-@mansect files
-@subsection FILES
-
-@table @asis
-
-@item gpg2
-The command used to search the user's keyring.
-
-@end table
-
-@mansect see also
-@ifset isman
-@command{gpg2}(1),
-@command{sshd}(8),
-@command{ssh}(1)
-@end ifset
-@include see-also-note.texi
━━━━━━━━━━━━━━━━━━━━━━━━━━━
- 2014-11-04
+ 2016-01-14
Table of Contents
.. 1.13 Improved card support
.. 1.14 New format for key listings
.. 1.15 Support for Putty
-.. 1.16 Improved X.509 certificate creation
-.. 1.17 Scripts to create a Windows installer
+.. 1.16 Export of SSH public keys
+.. 1.17 Improved X.509 certificate creation
+.. 1.18 Scripts to create a Windows installer
A possibly revised version of this article can be found at:
possible to export them directly in PKCS#8 and PEM format for use on
TLS servers.
+ • Export of /ssh/ keys has been integrated.
+
• The scripts to create a Windows installer are now part of GnuPG.
Now for the detailed description of these new features:
This is best shown with an example:
- â\95────
+ â\94\8c────
│ $ gpg2 --gen-key
│ gpg (GnuPG) 2.1.0; Copyright (C) 2014 Free Software Foundation, Inc.
│ This is free software: you are free to change and redistribute it.
│ Key fingerprint = 0290 5ABF 17C7 81FB C390 9B00 636A 1BBD 68FD 0088
│ uid [ultimate] Glenn Greenwald <glenn@example.org>
│ sub rsa2048/84439DCD 2014-11-03
- â\95°────
+ â\94\94────
Thus only the name and the mail address are required. For all other
parameters the default values are used. Many graphical frontends
options to create an ECC key.
For those who want to experiment with ECC or already want to prepare a
- key for future use, the command `--gen-full-key' along with the option
+ key for future use, the command `--full-gen-key' along with the option
`--expert' is the enabler:
- â\95────
+ â\94\8c────
│ $ gpg2 --expert --full-gen-key
│ gpg (GnuPG) 2.1.0; Copyright (C) 2014 Free Software Foundation, Inc.
│ This is free software: you are free to change and redistribute it.
│ Key fingerprint = E630 27CF 3D68 22A7 6FF2 093E D179 9E72 3826 60E3
│ uid [ultimate] Edward Snowden <edward@example.org>
│ sub nistp256/48C9A997 2014-11-03 nistp256
- â\95°────
+ â\94\94────
In this example we created a primary ECC key for signing and an subkey
for encryption. For both we use the NIST P-256 curve. The key may
releases. Recall that an encryption subkey can be added to a key at
any time. If you want to create a signing key you may do it this way:
- â\95────
+ â\94\8c────
│ $ gpg2 --expert --full-gen-key
│ gpg (GnuPG) 2.1.0; Copyright (C) 2014 Free Software Foundation, Inc.
│ This is free software: you are free to change and redistribute it.
│ pub ed25519/5C1AFC2A 2014-11-03
│ Key fingerprint = ED85 4D98 5D8F 502F C6C5 FFB2 AA81 319E 5C1A FC2A
│ uid [ultimate] Laura Poitras <laura@example.org>
- â\95°────
+ â\94\94────
Support for ECC keys is available only on some keyservers but it is
expected that this will be fixed over the next few months.
parameter file or interactive prompts for generating a key or to sign
a key. This can now be accomplished with a few new commands:
- â\95────
+ â\94\8c────
│ $ gpg2 --batch --quick-gen-key 'Daniel Ellsberg <ellsberg@example.org>'
│ gpg: key 911B90A9 marked as ultimately trusted
- â\95°────
+ â\94\94────
If a key with that user id already exists, gpg bails out with an error
message. You can force creation using the option `--yes'. If you
want some more control, you may not use `--batch' and gpg will ask for
confirmation and show the resulting key:
- â\95────
+ â\94\8c────
│ $ gpg2 --quick-gen-key 'Daniel Ellsberg <ellsberg@example.org>'
│ About to create a key for:
│ "Daniel Ellsberg <ellsberg@example.org>"
│ Key fingerprint = 15CB 723E 2000 A1A8 2505 F3B7 CC00 B501 BD19 AC1C
│ uid [ultimate] Daniel Ellsberg <ellsberg@example.org>
│ sub rsa2048/72A4D018 2014-11-04
- â\95°────
+ â\94\94────
Another common operation is to sign a key. /gpg/ can do this directly
from the command line by giving the fingerprint of the to-be-signed
key:
- â\95────
+ â\94\8c────
│ $ gpg2 --quick-sign-key '15CB 723E 2000 A1A8 2505 F3B7 CC00 B501 BD19 AC1C'
│
│ pub rsa2048/BD19AC1C
│ Primary key fingerprint: 15CB 723E 2000 A1A8 2505 F3B7 CC00 B501 BD19 AC1C
│
│ Daniel Ellsberg <ellsberg@example.org>
- â\95°────
+ â\94\94────
In case the key has already been signed, the command prints a note and
exits with success. In case you want to check that it really worked,
use `=--check-sigs' as usual:
- â\95────
+ â\94\8c────
│ $ gpg2 --check-sigs '15CB 723E 2000 A1A8 2505 F3B7 CC00 B501 BD19 AC1C'
│ gpg: checking the trustdb
│ gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
│ sig! 68FD0088 2014-11-04 Glenn Greenwald <glenn@example.org>
│ sub rsa2048/72A4D018 2014-11-04
│ sig! BD19AC1C 2014-11-04 Daniel Ellsberg <ellsberg@example.org>
- â\95°────
+ â\94\94────
The fingerprint may also be given without the spaces in which case
To create a non-exportable key signature, use the command
`--quick-lsign-key' instead.
+ Since version 2.1.4 it possible to directly add another user id to an
+ existing key:
+
+ ┌────
+ │ $ gpg2 -k 8CFDE12197965A9A
+ │ pub ed25519/8CFDE12197965A9A 2014-08-19
+ │ uid [ unknown] EdDSA sample key 1
+ │ $ gpg2 --quick-adduid 8CFDE12197965A9A 'Sample 2 <me@example.org>'
+ │ $ gpg2 -k 8CFDE12197965A9A
+ │ pub ed25519/8CFDE12197965A9A 2014-08-19
+ │ uid [ unknown] Sample 2 <me@example.org>
+ │ uid [ unknown] EdDSA sample key 1
+ └────
+
1.6 Improved Pinentry support
─────────────────────────────
dead so that it won’t be used in future. To interact with the
/dirmngr/ the `gpg-connect-agent' tool is used:
- â\95────
+ â\94\8c────
│ $ gpg-connect-agent --dirmngr 'help keyserver' /bye
│ $ gpg-connect-agent --dirmngr 'keyserver --hosttable' /bye
- â\95°────
+ â\94\94────
The first command prints a help screen for the keyserver command and
the second command prints the current host table.
keybox file.
To convert an existing `pubring.gpg' file to the keybox format, you
- first rename the file to (for example) `publickeys' so it won’t be
- recognized by any GnuPG version and then you run the command
-
- ╭────
- │ $ gpg2 --import publickeys
- ╰────
+ first backup the ownertrust values, then rename the file to (for
+ example) `publickeys', so it won’t be recognized by any GnuPG version,
+ then run import, and finally restore the ownertrust values:
+
+ ┌────
+ │ $ cd ~/.gnupg
+ │ $ gpg --export-ownertrust >otrust.lst
+ │ $ mv pubring.gpg publickeys
+ │ $ gpg2 --import-options import-local-sigs --import publickeys
+ │ $ gpg2 --import-ownertrust otrust.lst
+ └────
You may then rename the `publickeys' file back so that it can be used
by older GnuPG versions. Remember that in this case you have two
- independent copies of the public keys.
+ independent copies of the public keys. The ownertrust values are kept
+ by all gpg versions in the file `trustdb.gpg' but the above
+ precautions need to be taken to keep them over an import.
1.12 Auto-generated revocation certificates
──────────────────────────
The /scdaemon/, which is responsible for accessing smardcards and
- other tokens, has received may updates. In particular plugable USB
+ other tokens, has received many updates. In particular plugable USB
readers with a fixed card now work smoothless and similar to standard
- readers. The latest features of the /gnuk/ token are supported. Code
- for the HSM smartcard has been added. More card readers with a PIN
+ readers. The latest features of the [gnuk] token are supported. Code
+ for the SmartCard-HSM has been added. More card readers with a PIN
pad are supported. The internal CCID driver does now also work with
certain non-auto configuration equipped readers.
+ [gnuk] http://www.fsij.org/doc-gnuk/
+
+
1.14 New format for key listings
────────────────────────────────
either use the algorithm name with appended key length or use the name
of the curve:
- â\95────
+ â\94\8c────
│ pub 2048D/1E42B367 2007-12-31 [expires: 2018-12-31]
│ pub dsa2048/1E42B367 2007-12-31 [expires: 2018-12-31]
│ pub ed25519/0AA914C9 2014-10-18
- â\95°────
+ â\94\94────
The first two lines show the same key in the old format and in the new
format. The third line shows an example of an ECC key using the
[Putty] http://www.chiark.greenend.org.uk/~sgtatham/putty/
-1.16 Improved X.509 certificate creation
+1.16 Export of SSH public keys
+──────────────────────────────
+
+ The new command `--export-ssh-key' makes it easy to export an /ssh/
+ public key in the format used for ssh’s `authorized_keys' file. By
+ default the command exports the newest subkey with an authorization
+ usage flags. A special syntax can be used to export other subkeys.
+ This command is available since 2.1.11 and replaces the former debug
+ utility /gpgkey2ssh/.
+
+
+1.17 Improved X.509 certificate creation
────────────────────────────────────────
In addition to an improved certificate signing request menu, it is now
and directly exported in a format suitable for OpenSSL based servers.
-1.17 Scripts to create a Windows installer
+1.18 Scripts to create a Windows installer
──────────────────────────────────────────
GnuPG now comes with the /speedo/ build system which may be used to
and GpgEX as a Windows Explorer extension. GnuPG needs to be unpacked
and from the top source directory you run this command
- â\95────
+ â\94\8c────
│ make -f build-aux/speedo.mk w32-installer
- â\95°────
+ â\94\94────
This command downloads all direct dependencies, checks the signatures
using the GnuPG version from the build system (all Linux distros
uses NSIS to create the installer. Although this sounds easy, some
experience in setting up a development machine is still required.
Some versions of the toolchain exhibit bugs and thus your mileage may
- vary. Support for keyserver access over TLS is currently not
- available but will be added with one of the next point releases.
+ vary. See the [Wiki] for more info.
+
+ Support for keyserver access over TLS is currently not available but
+ will be added with one of the next point releases.
+ [Wiki] https://wiki.gnupg.org/Build2.1_Windows
- # Copyright 2014 The GnuPG Project.
+ # Copyright 2014--2016 The GnuPG Project.
# This work is licensed under the Creative Commons
# Attribution-ShareAlike 4.0 International License. To view a copy of
# this license, visit http://creativecommons.org/licenses/by-sa/4.0/
return 0; /* too short or too long */
if( memcmp( line, "Hash:", 5 ) )
return 0; /* invalid header */
- s = line+5;
+
for(s=line+5;;s=s2) {
for(; *s && (*s==' ' || *s == '\t'); s++ )
;
release_armor_context (afx);
}
else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "armor_filter";
+ mem2str (buf, "armor_filter", *ret_len);
return rc;
}
}
-static gpg_error_t
-membuf_data_cb (void *opaque, const void *buffer, size_t length)
-{
- membuf_t *data = opaque;
-
- if (buffer)
- put_membuf (data, buffer, length);
- return 0;
-}
-
-
-
/* This is the default inquiry callback. It mainly handles the
Pinentry notifications. */
static gpg_error_t
/* AGENT_ID is a command implemented by gnome-keyring-daemon. It
does not return any data but an OK line with a remark. */
if (assuan_transact (ctx, "AGENT_ID",
- membuf_data_cb, &mb, NULL, NULL, NULL, NULL))
+ put_membuf_cb, &mb, NULL, NULL, NULL, NULL))
{
xfree (get_membuf (&mb, NULL));
return; /* Error - Probably not hijacked. */
+/* Print a warning if the server's version number is less than our
+ version number. Returns an error code on a connection problem. */
+static gpg_error_t
+warn_version_mismatch (assuan_context_t ctx, const char *servername, int mode)
+{
+ gpg_error_t err;
+ char *serverversion;
+ const char *myversion = strusage (13);
+
+ err = get_assuan_server_version (ctx, mode, &serverversion);
+ if (err)
+ log_error (_("error getting version from '%s': %s\n"),
+ servername, gpg_strerror (err));
+ else if (!compare_version_strings (serverversion, myversion))
+ {
+ char *warn;
+
+ warn = xtryasprintf (_("server '%s' is older than us (%s < %s)"),
+ servername, serverversion, myversion);
+ if (!warn)
+ err = gpg_error_from_syserror ();
+ else
+ {
+ log_info (_("WARNING: %s\n"), warn);
+ write_status_strings (STATUS_WARNING, "server_version_mismatch 0",
+ " ", warn, NULL);
+ xfree (warn);
+ }
+ }
+ xfree (serverversion);
+ return err;
+}
+
+
/* Try to connect to the agent via socket or fork it off and work by
pipes. Handle the server's initial greeting */
static int
log_info (_("no gpg-agent running in this session\n"));
}
}
- else if (!rc)
+ else if (!rc
+ && !(rc = warn_version_mismatch (agent_ctx, GPG_AGENT_NAME, 0)))
{
/* Tell the agent that we support Pinentry notifications.
No error checking so that it will work also with older
struct agent_card_info_s info;
memset (&info, 0, sizeof info);
- rc = assuan_transact (agent_ctx, "SCD SERIALNO openpgp",
- NULL, NULL, NULL, NULL,
- learn_status_cb, &info);
+
+ rc = warn_version_mismatch (agent_ctx, SCDAEMON_NAME, 2);
+ if (!rc)
+ rc = assuan_transact (agent_ctx, "SCD SERIALNO openpgp",
+ NULL, NULL, NULL, NULL,
+ learn_status_cb, &info);
if (rc)
{
switch (gpg_err_code (rc))
{
const char *curve;
- i = 0;
- do
- {
- curve = openpgp_enum_curves (&i);
- if (!strcmp (curve, line+n))
- break;
- }
- while (curve != NULL);
+ for (i = 0; (curve = openpgp_enum_curves (&i));)
+ if (!strcmp (curve, line+n))
+ break;
+
parm->key_attr[keyno].curve = curve;
}
}
snprintf (line, DIM(line)-1, "SCD APDU %s", hexapdu);
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &mb, NULL, NULL, NULL, NULL);
+ put_membuf_cb, &mb, NULL, NULL, NULL, NULL);
if (!err)
{
data = get_membuf (&mb, &datalen);
snprintf (line, DIM(line)-1, "SCD READCERT %s", certidstr);
line[DIM(line)-1] = 0;
rc = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, &dfltparm,
NULL, NULL);
if (rc)
init_membuf_secure (&data, 64);
rc = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, &dfltparm,
NULL, NULL);
init_membuf (&data, 32);
err = assuan_transact (agent_ctx, "GETINFO s2k_count",
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
NULL, NULL, NULL, NULL);
if (err)
xfree (get_membuf (&data, NULL));
cache_nonce_status_cb (void *opaque, const char *line)
{
struct cache_nonce_parm_s *parm = opaque;
- const char *keyword = line;
- int keywordlen;
-
- for (keywordlen=0; *line && !spacep (line); line++, keywordlen++)
- ;
- while (spacep (line))
- line++;
+ const char *s;
- if (keywordlen == 11 && !memcmp (keyword, "CACHE_NONCE", keywordlen))
+ if ((s = has_leading_keyword (line, "CACHE_NONCE")))
{
if (parm->cache_nonce_addr)
{
xfree (*parm->cache_nonce_addr);
- *parm->cache_nonce_addr = xtrystrdup (line);
+ *parm->cache_nonce_addr = xtrystrdup (s);
}
}
- else if (keywordlen == 12 && !memcmp (keyword, "PASSWD_NONCE", keywordlen))
+ else if ((s = has_leading_keyword (line, "PASSWD_NONCE")))
{
if (parm->passwd_nonce_addr)
{
xfree (*parm->passwd_nonce_addr);
- *parm->passwd_nonce_addr = xtrystrdup (line);
+ *parm->passwd_nonce_addr = xtrystrdup (s);
}
}
+ else if ((s = has_leading_keyword (line, "PROGRESS")))
+ {
+ if (opt.enable_progress_filter)
+ write_status_text (STATUS_PROGRESS, s);
+ }
return 0;
}
cn_parm.cache_nonce_addr = cache_nonce_addr;
cn_parm.passwd_nonce_addr = NULL;
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
inq_genkey_parms, &gk_parm,
cache_nonce_status_cb, &cn_parm);
if (err)
init_membuf (&data, 1024);
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, &dfltparm,
NULL, NULL);
if (err)
cache_nonce? " -- ":"",
cache_nonce? cache_nonce:"");
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, &dfltparm,
NULL, NULL);
if (err)
if (err)
return err;
err = assuan_transact (agent_ctx, "PKDECRYPT",
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
inq_ciphertext_cb, &parm,
padding_info_cb, r_padding);
xfree (parm.ciphertext);
init_membuf_secure (&data, 64);
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, &dfltparm,
NULL, NULL);
if (err)
/* Call the agent to import a key into the agent. */
gpg_error_t
agent_import_key (ctrl_t ctrl, const char *desc, char **cache_nonce_addr,
- const void *key, size_t keylen, int unattended)
+ const void *key, size_t keylen, int unattended, int force)
{
gpg_error_t err;
struct import_key_parm_s parm;
parm.key = key;
parm.keylen = keylen;
- snprintf (line, sizeof line, "IMPORT_KEY%s%s%s",
+ snprintf (line, sizeof line, "IMPORT_KEY%s%s%s%s",
unattended? " --unattended":"",
+ force? " --force":"",
cache_nonce_addr && *cache_nonce_addr? " ":"",
cache_nonce_addr && *cache_nonce_addr? *cache_nonce_addr:"");
cn_parm.cache_nonce_addr = cache_nonce_addr;
cn_parm.cache_nonce_addr = cache_nonce_addr;
cn_parm.passwd_nonce_addr = NULL;
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, &dfltparm,
cache_nonce_status_cb, &cn_parm);
if (err)
agent_get_version (ctrl_t ctrl, char **r_version)
{
gpg_error_t err;
- membuf_t data;
err = start_agent (ctrl, 0);
if (err)
return err;
- init_membuf (&data, 64);
- err = assuan_transact (agent_ctx, "GETINFO version",
- membuf_data_cb, &data,
- NULL, NULL, NULL, NULL);
- if (err)
- {
- xfree (get_membuf (&data, NULL));
- *r_version = NULL;
- }
- else
- {
- put_membuf (&data, "", 1);
- *r_version = get_membuf (&data, NULL);
- if (!*r_version)
- err = gpg_error_from_syserror ();
- }
+ err = get_assuan_server_version (agent_ctx, 0, r_version);
return err;
}
/* Send a key to the agent. */
gpg_error_t agent_import_key (ctrl_t ctrl, const char *desc,
- char **cache_nonce_addr,
- const void *key, size_t keylen, int unattended);
+ char **cache_nonce_addr, const void *key,
+ size_t keylen, int unattended, int force);
/* Receive a key from the agent. */
gpg_error_t agent_export_key (ctrl_t ctrl, const char *keygrip,
#include "i18n.h"
#include "asshelp.h"
#include "keyserver.h"
+#include "status.h"
#include "call-dirmngr.h"
}
+/* Print a warning if the server's version number is less than our
+ version number. Returns an error code on a connection problem. */
+static gpg_error_t
+warn_version_mismatch (assuan_context_t ctx, const char *servername)
+{
+ gpg_error_t err;
+ char *serverversion;
+ const char *myversion = strusage (13);
+
+ err = get_assuan_server_version (ctx, 0, &serverversion);
+ if (err)
+ log_error (_("error getting version from '%s': %s\n"),
+ servername, gpg_strerror (err));
+ else if (!compare_version_strings (serverversion, myversion))
+ {
+ char *warn;
+
+ warn = xtryasprintf (_("server '%s' is older than us (%s < %s)"),
+ servername, serverversion, myversion);
+ if (!warn)
+ err = gpg_error_from_syserror ();
+ else
+ {
+ log_info (_("WARNING: %s\n"), warn);
+ write_status_strings (STATUS_WARNING, "server_version_mismatch 0",
+ " ", warn, NULL);
+ xfree (warn);
+ }
+ }
+ xfree (serverversion);
+ return err;
+}
+
+
/* Try to connect to the Dirmngr via a socket or spawn it if possible.
Handle the server's initial greeting and set global options. */
static gpg_error_t
log_info (_("no dirmngr running in this session\n"));
}
}
- else if (!err)
+ else if (!err && !(err = warn_version_mismatch (ctx, DIRMNGR_NAME)))
{
char *line;
memset (&stparm, 0, sizeof stparm);
stparm.keyword = "KEYSERVER";
- *r_keyserver = NULL;
+ if (r_keyserver)
+ *r_keyserver = NULL;
err = open_context (ctrl, &ctx);
if (err)
goto leave;
}
- *r_keyserver = stparm.source;
+ if (r_keyserver)
+ *r_keyserver = stparm.source;
+ else
+ xfree (stparm.source);
stparm.source = NULL;
leave:
{
if (parm->url)
err = gpg_error (GPG_ERR_DUP_KEY);
- else if (!(parm->fpr = xtrymalloc (nbytes)))
+ else if (!(parm->url = xtrystrdup (s)))
err = gpg_error_from_syserror ();
- else
- memcpy (parm->fpr, line, (parm->fprlen = nbytes));
}
return err;
if (strlen (answer) != 1)
continue;
- rc = 0;
if (*answer == '1')
{
/* Change PIN. */
gcry_cipher_close (cfx->cipher_hd);
}
else if( control == IOBUFCTRL_DESC ) {
- *(char**)buf = "cipher_filter";
+ mem2str (buf, "cipher_filter", *ret_len);
}
return rc;
}
zfx->release (zfx);
}
else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "compress_filter";
+ mem2str (buf, "compress_filter", *ret_len);
return rc;
}
zfx->release (zfx);
}
else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "compress_filter";
+ mem2str (buf, "compress_filter", *ret_len);
return rc;
}
#endif /*HAVE_ZIP*/
}
else if ( control == IOBUFCTRL_DESC )
{
- *(char**)buf = "mdc_decode_filter";
+ mem2str (buf, "mdc_decode_filter", *ret_len);
}
return rc;
}
}
else if ( control == IOBUFCTRL_DESC )
{
- *(char**)buf = "decode_filter";
+ mem2str (buf, "decode_filter", *ret_len);
}
return rc;
}
firsterr = err;
if (gpg_err_code (err) == GPG_ERR_CANCELED
|| gpg_err_code (err) == GPG_ERR_FULLY_CANCELED)
- break;
+ {
+ write_status_error ("delete_key.secret", err);
+ break;
+ }
}
}
# Example HKP keyservers:
# hkp://keys.gnupg.net
#
-# Example HKP keyserver using a Tor hidden service
-# hkp://dyh2j3qyrirn43iw.onion
+# Example HKP keyserver using a Tor OnionBalance service
+# hkp://jirk5u4osbsr34t5.onion
#
# Example HKPS keyservers (see --hkp-cacert below):
# hkps://hkps.pool.sks-keyservers.net
# service, Dirmngr selects the keyserver to use depending on whether
# Tor is locally running or not (on a per session base).
-keyserver hkp://dyh2j3qyrirn43iw.onion
+keyserver hkp://jirk5u4osbsr34t5.onion
keyserver hkp://keys.gnupg.net
# --hkp-cacert FILENAME
if (!opt.no_literal)
{
+ /* Note that PT has been initialized above in no_literal mode. */
pt->timestamp = make_timestamp();
pt->mode = opt.textmode? 't' : 'b';
pt->len = filesize;
pk_list = provided_keys;
else
{
- if ((rc = build_pk_list (ctrl, remusr, &pk_list, PUBKEY_USAGE_ENC)))
+ if ((rc = build_pk_list (ctrl, remusr, &pk_list)))
{
release_progress_context (pfx);
return rc;
}
else if ( control == IOBUFCTRL_DESC )
{
- *(char**)buf = "encrypt_filter";
+ mem2str (buf, "encrypt_filter", *ret_len);
}
return rc;
}
/* export.c - Export keys in the OpenPGP defined format.
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
* 2005, 2010 Free Software Foundation, Inc.
- * Copyright (C) 1998-2015 Werner Koch
+ * Copyright (C) 1998-2016 Werner Koch
*
* This file is part of GnuPG.
*
#include "util.h"
#include "main.h"
#include "i18n.h"
+#include "membuf.h"
+#include "host2net.h"
#include "trustdb.h"
#include "call-agent.h"
}
+/*
+ * Receive a secret key from agent specified by HEXGRIP.
+ *
+ * Since the key data from agant is encrypted, decrypt it by CIPHERHD.
+ * Then, parse the decrypted key data in transfer format, and put
+ * secret papameters into PK.
+ *
+ * CACHE_NONCE_ADDR is used to share nonce for multple key retrievals.
+ */
+gpg_error_t
+receive_seckey_from_agent (ctrl_t ctrl, gcry_cipher_hd_t cipherhd,
+ char **cache_nonce_addr, const char *hexgrip,
+ PKT_public_key *pk)
+{
+ gpg_error_t err = 0;
+ unsigned char *wrappedkey = NULL;
+ size_t wrappedkeylen;
+ unsigned char *key = NULL;
+ size_t keylen, realkeylen;
+ gcry_sexp_t s_skey;
+ char *prompt;
+
+ if (opt.verbose)
+ log_info ("key %s: asking agent for the secret parts\n", hexgrip);
+
+ prompt = gpg_format_keydesc (pk, FORMAT_KEYDESC_EXPORT,1);
+ err = agent_export_key (ctrl, hexgrip, prompt, cache_nonce_addr,
+ &wrappedkey, &wrappedkeylen);
+ xfree (prompt);
+
+ if (err)
+ goto unwraperror;
+ if (wrappedkeylen < 24)
+ {
+ err = gpg_error (GPG_ERR_INV_LENGTH);
+ goto unwraperror;
+ }
+ keylen = wrappedkeylen - 8;
+ key = xtrymalloc_secure (keylen);
+ if (!key)
+ {
+ err = gpg_error_from_syserror ();
+ goto unwraperror;
+ }
+ err = gcry_cipher_decrypt (cipherhd, key, keylen, wrappedkey, wrappedkeylen);
+ if (err)
+ goto unwraperror;
+ realkeylen = gcry_sexp_canon_len (key, keylen, NULL, &err);
+ if (!realkeylen)
+ goto unwraperror; /* Invalid csexp. */
+
+ err = gcry_sexp_sscan (&s_skey, NULL, key, realkeylen);
+ if (!err)
+ {
+ err = transfer_format_to_openpgp (s_skey, pk);
+ gcry_sexp_release (s_skey);
+ }
+
+ unwraperror:
+ xfree (key);
+ xfree (wrappedkey);
+ if (err)
+ {
+ log_error ("key %s: error receiving key from agent:"
+ " %s%s\n", hexgrip, gpg_strerror (err),
+ gpg_err_code (err) == GPG_ERR_FULLY_CANCELED?
+ "":_(" - skipped"));
+ }
+ return err;
+}
+
+
/* Export the keys identified by the list of strings in USERS to the
stream OUT. If Secret is false public keys will be exported. With
secret true secret keys will be exported; in this case 1 means the
}
else if (!err)
{
- /* FIXME: Move this spaghetti code into a separate
- function. */
- unsigned char *wrappedkey = NULL;
- size_t wrappedkeylen;
- unsigned char *key = NULL;
- size_t keylen, realkeylen;
- gcry_sexp_t s_skey;
-
- if (opt.verbose)
- log_info ("key %s: asking agent for the secret parts\n",
- keystr_with_sub (keyid, subkid));
-
- {
- char *prompt = gpg_format_keydesc (pk,
- FORMAT_KEYDESC_EXPORT,1);
- err = agent_export_key (ctrl, hexgrip, prompt, &cache_nonce,
- &wrappedkey, &wrappedkeylen);
- xfree (prompt);
- }
+ err = receive_seckey_from_agent (ctrl, cipherhd, &cache_nonce,
+ hexgrip, pk);
if (err)
- goto unwraperror;
- if (wrappedkeylen < 24)
{
- err = gpg_error (GPG_ERR_INV_LENGTH);
- goto unwraperror;
- }
- keylen = wrappedkeylen - 8;
- key = xtrymalloc_secure (keylen);
- if (!key)
- {
- err = gpg_error_from_syserror ();
- goto unwraperror;
- }
- err = gcry_cipher_decrypt (cipherhd, key, keylen,
- wrappedkey, wrappedkeylen);
- if (err)
- goto unwraperror;
- realkeylen = gcry_sexp_canon_len (key, keylen, NULL, &err);
- if (!realkeylen)
- goto unwraperror; /* Invalid csexp. */
-
- err = gcry_sexp_sscan (&s_skey, NULL, key, realkeylen);
- xfree (key);
- key = NULL;
- if (err)
- goto unwraperror;
- err = transfer_format_to_openpgp (s_skey, pk);
- gcry_sexp_release (s_skey);
- if (err)
- goto unwraperror;
-
- err = build_packet (out, node->pkt);
- if (!err && node->pkt->pkttype == PKT_PUBLIC_KEY)
- {
- stats->exported++;
- print_status_exported (node->pkt->pkt.public_key);
- }
- goto unwraperror_leave;
-
- unwraperror:
- xfree (wrappedkey);
- xfree (key);
- if (err)
- {
- log_error ("key %s: error receiving key from agent:"
- " %s%s\n",
- keystr_with_sub (keyid, subkid),
- gpg_strerror (err),
- gpg_err_code (err) == GPG_ERR_FULLY_CANCELED?
- "":_(" - skipped"));
if (gpg_err_code (err) == GPG_ERR_FULLY_CANCELED)
goto leave;
skip_until_subkey = 1;
err = 0;
}
- unwraperror_leave:
- ;
+ else
+ {
+ err = build_packet (out, node->pkt);
+ if (node->pkt->pkttype == PKT_PUBLIC_KEY)
+ {
+ stats->exported++;
+ print_status_exported (node->pkt->pkt.public_key);
+ }
+ }
}
else
{
log_info(_("WARNING: nothing exported\n"));
return err;
}
+
+
+
+\f
+static gpg_error_t
+key_to_sshblob (membuf_t *mb, const char *identifier, ...)
+{
+ va_list arg_ptr;
+ gpg_error_t err = 0;
+ unsigned char nbuf[4];
+ unsigned char *buf;
+ size_t buflen;
+ gcry_mpi_t a;
+
+ ulongtobuf (nbuf, (ulong)strlen (identifier));
+ put_membuf (mb, nbuf, 4);
+ put_membuf_str (mb, identifier);
+ if (!strncmp (identifier, "ecdsa-sha2-", 11))
+ {
+ ulongtobuf (nbuf, (ulong)strlen (identifier+11));
+ put_membuf (mb, nbuf, 4);
+ put_membuf_str (mb, identifier+11);
+ }
+ va_start (arg_ptr, identifier);
+ while ((a = va_arg (arg_ptr, gcry_mpi_t)))
+ {
+ err = gcry_mpi_aprint (GCRYMPI_FMT_SSH, &buf, &buflen, a);
+ if (err)
+ break;
+ if (!strcmp (identifier, "ssh-ed25519")
+ && buflen > 5 && buf[4] == 0x40)
+ {
+ /* We need to strip our 0x40 prefix. */
+ put_membuf (mb, "\x00\x00\x00\x20", 4);
+ put_membuf (mb, buf+5, buflen-5);
+ }
+ else
+ put_membuf (mb, buf, buflen);
+ gcry_free (buf);
+ }
+ va_end (arg_ptr);
+ return err;
+}
+
+/* Export the key identified by USERID in the SSH public key format.
+ The function exports the latest subkey with Authentication
+ capability unless the '!' suffix is used to export a specific
+ key. */
+gpg_error_t
+export_ssh_key (ctrl_t ctrl, const char *userid)
+{
+ gpg_error_t err;
+ kbnode_t keyblock = NULL;
+ KEYDB_SEARCH_DESC desc;
+ u32 latest_date;
+ u32 curtime = make_timestamp ();
+ kbnode_t latest_key, node;
+ PKT_public_key *pk;
+ const char *identifier;
+ membuf_t mb;
+ estream_t fp = NULL;
+ struct b64state b64_state;
+ const char *fname = "-";
+
+ init_membuf (&mb, 4096);
+
+ /* We need to know whether the key has been specified using the
+ exact syntax ('!' suffix). Thus we need to run a
+ classify_user_id on our own. */
+ err = classify_user_id (userid, &desc, 1);
+
+ /* Get the public key. */
+ if (!err)
+ {
+ getkey_ctx_t getkeyctx;
+
+ err = get_pubkey_byname (ctrl, &getkeyctx, NULL, userid, &keyblock,
+ NULL,
+ 0 /* Only usable keys or given exact. */,
+ 1 /* No AKL lookup. */);
+ if (!err)
+ {
+ err = getkey_next (getkeyctx, NULL, NULL);
+ if (!err)
+ err = gpg_error (GPG_ERR_AMBIGUOUS_NAME);
+ else if (gpg_err_code (err) == GPG_ERR_NO_PUBKEY)
+ err = 0;
+ }
+ getkey_end (getkeyctx);
+ }
+ if (err)
+ {
+ log_error (_("key \"%s\" not found: %s\n"), userid, gpg_strerror (err));
+ return err;
+ }
+
+ /* The finish_lookup code in getkey.c does not handle auth keys,
+ thus we have to duplicate the code here to find the latest
+ subkey. However, if the key has been found using an exact match
+ ('!' notation) we use that key without any further checks and
+ even allow the use of the primary key. */
+ latest_date = 0;
+ latest_key = NULL;
+ for (node = keyblock; node; node = node->next)
+ {
+ if ((node->pkt->pkttype == PKT_PUBLIC_SUBKEY
+ || node->pkt->pkttype == PKT_PUBLIC_KEY)
+ && node->pkt->pkt.public_key->flags.exact)
+ {
+ latest_key = node;
+ break;
+ }
+ }
+ if (!latest_key)
+ {
+ for (node = keyblock; node; node = node->next)
+ {
+ if (node->pkt->pkttype != PKT_PUBLIC_SUBKEY)
+ continue;
+
+ pk = node->pkt->pkt.public_key;
+ if (DBG_LOOKUP)
+ log_debug ("\tchecking subkey %08lX\n",
+ (ulong) keyid_from_pk (pk, NULL));
+ if (!(pk->pubkey_usage & PUBKEY_USAGE_AUTH))
+ {
+ if (DBG_LOOKUP)
+ log_debug ("\tsubkey not usable for authentication\n");
+ continue;
+ }
+ if (!pk->flags.valid)
+ {
+ if (DBG_LOOKUP)
+ log_debug ("\tsubkey not valid\n");
+ continue;
+ }
+ if (pk->flags.revoked)
+ {
+ if (DBG_LOOKUP)
+ log_debug ("\tsubkey has been revoked\n");
+ continue;
+ }
+ if (pk->has_expired)
+ {
+ if (DBG_LOOKUP)
+ log_debug ("\tsubkey has expired\n");
+ continue;
+ }
+ if (pk->timestamp > curtime && !opt.ignore_valid_from)
+ {
+ if (DBG_LOOKUP)
+ log_debug ("\tsubkey not yet valid\n");
+ continue;
+ }
+ if (DBG_LOOKUP)
+ log_debug ("\tsubkey might be fine\n");
+ /* In case a key has a timestamp of 0 set, we make sure that it
+ is used. A better change would be to compare ">=" but that
+ might also change the selected keys and is as such a more
+ intrusive change. */
+ if (pk->timestamp > latest_date || (!pk->timestamp && !latest_date))
+ {
+ latest_date = pk->timestamp;
+ latest_key = node;
+ }
+ }
+ }
+
+ if (!latest_key)
+ {
+ err = gpg_error (GPG_ERR_UNUSABLE_PUBKEY);
+ log_error (_("key \"%s\" not found: %s\n"), userid, gpg_strerror (err));
+ goto leave;
+ }
+
+ pk = latest_key->pkt->pkt.public_key;
+ if (DBG_LOOKUP)
+ log_debug ("\tusing key %08lX\n", (ulong) keyid_from_pk (pk, NULL));
+
+ switch (pk->pubkey_algo)
+ {
+ case PUBKEY_ALGO_DSA:
+ identifier = "ssh-dss";
+ err = key_to_sshblob (&mb, identifier,
+ pk->pkey[0], pk->pkey[1], pk->pkey[2], pk->pkey[3],
+ NULL);
+ break;
+
+ case PUBKEY_ALGO_RSA:
+ case PUBKEY_ALGO_RSA_S:
+ identifier = "ssh-rsa";
+ err = key_to_sshblob (&mb, identifier, pk->pkey[1], pk->pkey[0], NULL);
+ break;
+
+ case PUBKEY_ALGO_ECDSA:
+ {
+ char *curveoid;
+ const char *curve;
+
+ curveoid = openpgp_oid_to_str (pk->pkey[0]);
+ if (!curveoid)
+ err = gpg_error_from_syserror ();
+ else if (!(curve = openpgp_oid_to_curve (curveoid, 0)))
+ err = gpg_error (GPG_ERR_UNKNOWN_CURVE);
+ else
+ {
+ if (!strcmp (curve, "nistp256"))
+ identifier = "ecdsa-sha2-nistp256";
+ else if (!strcmp (curve, "nistp384"))
+ identifier = "ecdsa-sha2-nistp384";
+ else if (!strcmp (curve, "nistp521"))
+ identifier = "ecdsa-sha2-nistp521";
+ else
+ identifier = NULL;
+
+ if (!identifier)
+ err = gpg_error (GPG_ERR_UNKNOWN_CURVE);
+ else
+ err = key_to_sshblob (&mb, identifier, pk->pkey[1], NULL);
+ }
+ xfree (curveoid);
+ }
+ break;
+
+ case PUBKEY_ALGO_EDDSA:
+ if (!openpgp_oid_is_ed25519 (pk->pkey[0]))
+ err = gpg_error (GPG_ERR_UNKNOWN_CURVE);
+ else
+ {
+ identifier = "ssh-ed25519";
+ err = key_to_sshblob (&mb, identifier, pk->pkey[1], NULL);
+ }
+ break;
+
+ case PUBKEY_ALGO_ELGAMAL_E:
+ case PUBKEY_ALGO_ELGAMAL:
+ err = gpg_error (GPG_ERR_UNUSABLE_PUBKEY);
+ break;
+
+ default:
+ err = GPG_ERR_PUBKEY_ALGO;
+ break;
+ }
+
+ if (err)
+ goto leave;
+
+ if (opt.outfile && *opt.outfile && strcmp (opt.outfile, "-"))
+ fp = es_fopen ((fname = opt.outfile), "w");
+ else
+ fp = es_stdout;
+ if (!fp)
+ {
+ err = gpg_error_from_syserror ();
+ log_error (_("error creating '%s': %s\n"), fname, gpg_strerror (err));
+ goto leave;
+ }
+
+ es_fprintf (fp, "%s ", identifier);
+ err = b64enc_start_es (&b64_state, fp, "");
+ if (err)
+ goto leave;
+ {
+ void *blob;
+ size_t bloblen;
+
+ blob = get_membuf (&mb, &bloblen);
+ if (!blob)
+ err = gpg_error_from_syserror ();
+ else
+ err = b64enc_write (&b64_state, blob, bloblen);
+ xfree (blob);
+ if (err)
+ goto leave;
+ }
+ err = b64enc_finish (&b64_state);
+ if (err)
+ goto leave;
+ es_fprintf (fp, " openpgp:0x%08lX\n", (ulong)keyid_from_pk (pk, NULL));
+
+ if (es_ferror (fp))
+ err = gpg_error_from_syserror ();
+ else
+ {
+ if (es_fclose (fp))
+ err = gpg_error_from_syserror ();
+ fp = NULL;
+ }
+
+ if (err)
+ log_error (_("error writing '%s': %s\n"), fname, gpg_strerror (err));
+
+ leave:
+ es_fclose (fp);
+ xfree (get_membuf (&mb, NULL));
+ release_kbnode (keyblock);
+ return err;
+}
#endif
-/* For documentation see keydb.h. */
+/* Cache a copy of a public key in the public key cache. PK is not
+ * cached if caching is disabled (via getkey_disable_caches), if
+ * PK->FLAGS.DONT_CACHE is set, we don't know how to derive a key id
+ * from the public key (e.g., unsupported algorithm), or a key with
+ * the key id is already in the cache.
+ *
+ * The public key packet is copied into the cache using
+ * copy_public_key. Thus, any secret parts are not copied, for
+ * instance.
+ *
+ * This cache is filled by get_pubkey and is read by get_pubkey and
+ * get_pubkey_fast. */
void
cache_public_key (PKT_public_key * pk)
{
/* Remove the last 50% of the entries. */
for (ce = pk_cache, n = 0; ce && n < pk_cache_entries/2; n++)
ce = ce->next;
- if (ce != pk_cache && ce->next)
+ if (ce && ce != pk_cache && ce->next)
{
ce2 = ce->next;
ce->next = NULL;
/* First check for duplicates. */
for (r = user_id_db; r; r = r->next)
{
- keyid_list_t b = r->keyids;
+ keyid_list_t b;
+
for (b = r->keyids; b; b = b->next)
{
if (!memcmp (b->fpr, a->fpr, MAX_FINGERPRINT_LEN))
}
-/* For documentation see keydb.h. */
+/* Disable and drop the public key cache (which is filled by
+ cache_public_key and get_pubkey). Note: there is currently no way
+ to reenable this cache. */
void
getkey_disable_caches ()
{
}
+void
+pubkey_free (pubkey_t key)
+{
+ if (key)
+ {
+ xfree (key->pk);
+ release_kbnode (key->keyblock);
+ xfree (key);
+ }
+}
+
+void
+pubkeys_free (pubkey_t keys)
+{
+ while (keys)
+ {
+ pubkey_t next = keys->next;
+ pubkey_free (keys);
+ keys = next;
+ }
+}
+
+/* Returns all keys that match the search specfication SEARCH_TERMS.
+
+ This function also checks for and warns about duplicate entries in
+ the keydb, which can occur if the user has configured multiple
+ keyrings or keyboxes or if a keyring or keybox was corrupted.
+
+ Note: SEARCH_TERMS will not be expanded (i.e., it may not be a
+ group).
+
+ USE is the operation for which the key is required. It must be
+ either PUBKEY_USAGE_ENC, PUBKEY_USAGE_SIG, PUBKEY_USAGE_CERT or
+ PUBKEY_USAGE_AUTH.
+
+ XXX: Currently, only PUBKEY_USAGE_ENC and PUBKEY_USAGE_SIG are
+ implemented.
+
+ INCLUDE_UNUSABLE indicates whether disabled keys are allowed.
+ (Recipients specified with --encrypt-to and --hidden-encrypt-to may
+ be disabled. It is possible to edit disabled keys.)
+
+ SOURCE is the context in which SEARCH_TERMS was specified, e.g.,
+ "--encrypt-to", etc. If this function is called interactively,
+ then this should be NULL.
+
+ If WARN_POSSIBLY_AMBIGUOUS is set, then emits a warning if the user
+ does not specify a long key id or a fingerprint.
+
+ The results are placed in *KEYS. *KEYS must be NULL! */
+gpg_error_t
+get_pubkeys (ctrl_t ctrl,
+ char *search_terms, int use, int include_unusable, char *source,
+ int warn_possibly_ambiguous,
+ pubkey_t *r_keys)
+{
+ /* We show a warning when a key appears multiple times in the DB.
+ This can happen for two reasons:
+
+ - The user has configured multiple keyrings or keyboxes.
+
+ - The keyring or keybox has been corrupted in some way, e.g., a
+ bug or a random process changing them.
+
+ For each duplicate, we only want to show the key once. Hence,
+ this list. */
+ static strlist_t key_dups;
+
+ /* USE transformed to a string. */
+ char *use_str;
+
+ gpg_error_t err;
+
+ KEYDB_SEARCH_DESC desc;
+
+ GETKEY_CTX ctx;
+ pubkey_t results = NULL;
+ pubkey_t r;
+
+ int count;
+
+ char fingerprint[2 * MAX_FINGERPRINT_LEN + 1];
+
+ if (DBG_LOOKUP)
+ {
+ log_debug ("\n");
+ log_debug ("%s: Checking %s=%s\n",
+ __func__, source ? source : "user input", search_terms);
+ }
+
+ if (*r_keys)
+ log_bug ("%s: KEYS should be NULL!\n", __func__);
+
+ switch (use)
+ {
+ case PUBKEY_USAGE_ENC: use_str = "encrypt"; break;
+ case PUBKEY_USAGE_SIG: use_str = "sign"; break;
+ case PUBKEY_USAGE_CERT: use_str = "cetify"; break;
+ case PUBKEY_USAGE_AUTH: use_str = "authentication"; break;
+ default: log_bug ("%s: Bad value for USE (%d)\n", __func__, use);
+ }
+
+ if (use == PUBKEY_USAGE_CERT || use == PUBKEY_USAGE_AUTH)
+ log_bug ("%s: use=%s is unimplemented.\n", __func__, use_str);
+
+ err = classify_user_id (search_terms, &desc, 1);
+ if (err)
+ {
+ log_info (_("key \"%s\" not found: %s\n"),
+ search_terms, gpg_strerror (err));
+ if (!opt.quiet && source)
+ log_info (_("(check argument of option '%s')\n"), source);
+ goto out;
+ }
+
+ if (warn_possibly_ambiguous
+ && ! (desc.mode == KEYDB_SEARCH_MODE_LONG_KID
+ || desc.mode == KEYDB_SEARCH_MODE_FPR16
+ || desc.mode == KEYDB_SEARCH_MODE_FPR20
+ || desc.mode == KEYDB_SEARCH_MODE_FPR))
+ {
+ log_info (_("Warning: '%s' should be a long key ID or a fingerprint\n"),
+ search_terms);
+ if (!opt.quiet && source)
+ log_info (_("(check argument of option '%s')\n"), source);
+ }
+
+ /* Gather all of the results. */
+ ctx = NULL;
+ count = 0;
+ do
+ {
+ PKT_public_key *pk = xmalloc_clear (sizeof *pk);
+ KBNODE kb;
+ pk->req_usage = use;
+
+ if (! ctx)
+ err = get_pubkey_byname (ctrl, &ctx, pk, search_terms, &kb, NULL,
+ include_unusable, 1);
+ else
+ err = getkey_next (ctx, pk, &kb);
+
+ if (gpg_err_code (err) == GPG_ERR_NOT_FOUND)
+ /* No more results. */
+ {
+ xfree (pk);
+ break;
+ }
+ else if (err)
+ /* An error (other than "not found"). */
+ {
+ log_error (_("error looking up: %s\n"),
+ gpg_strerror (err));
+ xfree (pk);
+ break;
+ }
+
+ /* Another result! */
+ count ++;
+
+ r = xmalloc_clear (sizeof (*r));
+ r->pk = pk;
+ r->keyblock = kb;
+ r->next = results;
+ results = r;
+ }
+ while (ctx);
+ getkey_end (ctx);
+
+ if (DBG_LOOKUP)
+ {
+ log_debug ("%s resulted in %d matches.\n", search_terms, count);
+ for (r = results; r; r = r->next)
+ log_debug (" %s\n",
+ hexfingerprint (r->keyblock->pkt->pkt.public_key,
+ fingerprint, sizeof (fingerprint)));
+ }
+
+ if (! results && gpg_err_code (err) == GPG_ERR_NOT_FOUND)
+ /* No match. */
+ {
+ if (DBG_LOOKUP)
+ log_debug ("%s: '%s' not found.\n", __func__, search_terms);
+
+ log_info (_("key \"%s\" not found\n"), search_terms);
+ if (!opt.quiet && source)
+ log_info (_("(check argument of option '%s')\n"), source);
+
+ goto out;
+ }
+ else if (gpg_err_code (err) == GPG_ERR_NOT_FOUND)
+ /* No more matches. */
+ ;
+ else if (err)
+ /* Some other error. An error message was already printed
+ out. Free RESULTS and continue. */
+ goto out;
+
+ /* Check for duplicates. */
+ if (DBG_LOOKUP)
+ log_debug ("%s: Checking results of %s='%s' for dups\n",
+ __func__, source ? source : "user input", search_terms);
+ count = 0;
+ for (r = results; r; r = r->next)
+ {
+ pubkey_t *prevp;
+ pubkey_t next;
+ pubkey_t r2;
+ int dups = 0;
+
+ prevp = &r->next;
+ next = r->next;
+ while ((r2 = next))
+ {
+ if (cmp_public_keys (r->keyblock->pkt->pkt.public_key,
+ r2->keyblock->pkt->pkt.public_key) != 0)
+ /* Not a dup. */
+ {
+ prevp = &r2->next;
+ next = r2->next;
+ continue;
+ }
+
+ dups ++;
+ count ++;
+
+ /* Remove R2 from the list. */
+ *prevp = r2->next;
+ release_kbnode (r2->keyblock);
+ next = r2->next;
+ xfree (r2);
+ }
+
+ if (dups)
+ {
+ hexfingerprint (r->keyblock->pkt->pkt.public_key,
+ fingerprint, sizeof fingerprint);
+ if (! strlist_find (key_dups, fingerprint))
+ {
+ char fingerprint_formatted[MAX_FORMATTED_FINGERPRINT_LEN + 1];
+
+ log_info (_("Warning: %s appears in the keyring %d times\n"),
+ format_hexfingerprint (fingerprint,
+ fingerprint_formatted,
+ sizeof fingerprint_formatted),
+ 1 + dups);
+ add_to_strlist (&key_dups, fingerprint);
+ }
+ }
+ }
+
+ if (DBG_LOOKUP && count)
+ {
+ log_debug ("After removing %d dups:\n", count);
+ for (r = results, count = 0; r; r = r->next)
+ log_debug (" %d: %s\n",
+ count,
+ hexfingerprint (r->keyblock->pkt->pkt.public_key,
+ fingerprint, sizeof fingerprint));
+ }
+
+ out:
+ if (err)
+ pubkeys_free (results);
+ else
+ *r_keys = results;
+
+ return err;
+}
+
+
static void
pk_from_block (GETKEY_CTX ctx, PKT_public_key * pk, KBNODE keyblock,
KBNODE found_key)
}
-/* For documentation see keydb.h. */
+/* Return the public key with the key id KEYID and store it at PK.
+ * The resources in *PK should be released using
+ * release_public_key_parts(). This function also stores a copy of
+ * the public key in the user id cache (see cache_public_key).
+ *
+ * If PK is NULL, this function just stores the public key in the
+ * cache and returns the usual return code.
+ *
+ * PK->REQ_USAGE (which is a mask of PUBKEY_USAGE_SIG,
+ * PUBKEY_USAGE_ENC and PUBKEY_USAGE_CERT) is passed through to the
+ * lookup function. If this is non-zero, only keys with the specified
+ * usage will be returned. As such, it is essential that
+ * PK->REQ_USAGE be correctly initialized!
+ *
+ * Returns 0 on success, GPG_ERR_NO_PUBKEY if there is no public key
+ * with the specified key id, or another error code if an error
+ * occurs.
+ *
+ * If the data was not read from the cache, then the self-signed data
+ * has definitely been merged into the public key using
+ * merge_selfsigs. */
int
get_pubkey (PKT_public_key * pk, u32 * keyid)
{
}
-/* For documentation see keydb.h. */
+/* Similar to get_pubkey, but it does not take PK->REQ_USAGE into
+ * account nor does it merge in the self-signed data. This function
+ * also only considers primary keys. It is intended to be used as a
+ * quick check of the key to avoid recursion. It should only be used
+ * in very certain cases. Like get_pubkey and unlike any of the other
+ * lookup functions, this function also consults the user id cache
+ * (see cache_public_key).
+ *
+ * Return the public key in *PK. The resources in *PK should be
+ * released using release_public_key_parts(). */
int
get_pubkey_fast (PKT_public_key * pk, u32 * keyid)
{
}
-/* For documentation see keydb.h. */
-KBNODE
+/* Return the key block for the key with key id KEYID or NULL, if an
+ * error occurs. Use release_kbnode() to release the key block.
+ *
+ * The self-signed data has already been merged into the public key
+ * using merge_selfsigs. */
+kbnode_t
get_pubkeyblock (u32 * keyid)
{
struct getkey_ctx_s ctx;
}
-/* For documentation see keydb.h. */
+/* Return the public key with the key id KEYID iff the secret key is
+ * available and store it at PK. The resources should be released
+ * using release_public_key_parts().
+ *
+ * Unlike other lookup functions, PK may not be NULL. PK->REQ_USAGE
+ * is passed through to the lookup function and is a mask of
+ * PUBKEY_USAGE_SIG, PUBKEY_USAGE_ENC and PUBKEY_USAGE_CERT. Thus, it
+ * must be valid! If this is non-zero, only keys with the specified
+ * usage will be returned.
+ *
+ * Returns 0 on success. If a public key with the specified key id is
+ * not found or a secret key is not available for that public key, an
+ * error code is returned. Note: this function ignores legacy keys.
+ * An error code is also return if an error occurs.
+ *
+ * The self-signed data has already been merged into the public key
+ * using merge_selfsigs. */
gpg_error_t
get_seckey (PKT_public_key *pk, u32 *keyid)
{
}
-/* For documentation see keydb.h. */
+/* Find a public key identified by NAME.
+ *
+ * If name appears to be a valid valid RFC822 mailbox (i.e., email
+ * address) and auto key lookup is enabled (no_akl == 0), then the
+ * specified auto key lookup methods (--auto-key-lookup) are used to
+ * import the key into the local keyring. Otherwise, just the local
+ * keyring is consulted.
+ *
+ * If RETCTX is not NULL, then the constructed context is returned in
+ * *RETCTX so that getpubkey_next can be used to get subsequent
+ * results. In this case, getkey_end() must be used to free the
+ * search context. If RETCTX is not NULL, then RET_KDBHD must be
+ * NULL.
+ *
+ * If PK is not NULL, the public key of the first result is returned
+ * in *PK. Note: PK->REQ_USAGE must be valid!!! PK->REQ_USAGE is
+ * passed through to the lookup function and is a mask of
+ * PUBKEY_USAGE_SIG, PUBKEY_USAGE_ENC and PUBKEY_USAGE_CERT. If this
+ * is non-zero, only keys with the specified usage will be returned.
+ * Note: The self-signed data has already been merged into the public
+ * key using merge_selfsigs. Free *PK by calling
+ * release_public_key_parts (or, if PK was allocated using xfree, you
+ * can use free_public_key, which calls release_public_key_parts(PK)
+ * and then xfree(PK)).
+ *
+ * NAME is a string, which is turned into a search query using
+ * classify_user_id.
+ *
+ * If RET_KEYBLOCK is not NULL, the keyblock is returned in
+ * *RET_KEYBLOCK. This should be freed using release_kbnode().
+ *
+ * If RET_KDBHD is not NULL, then the new database handle used to
+ * conduct the search is returned in *RET_KDBHD. This can be used to
+ * get subsequent results using keydb_search_next or to modify the
+ * returned record. Note: in this case, no advanced filtering is done
+ * for subsequent results (e.g., PK->REQ_USAGE is not respected).
+ * Unlike RETCTX, this is always returned.
+ *
+ * If INCLUDE_UNUSABLE is set, then unusable keys (see the
+ * documentation for skip_unusable for an exact definition) are
+ * skipped unless they are looked up by key id or by fingerprint.
+ *
+ * If NO_AKL is set, then the auto key locate functionality is
+ * disabled and only the local key ring is considered. Note: the
+ * local key ring is consulted even if local is not in the
+ * --auto-key-locate option list!
+ *
+ * This function returns 0 on success. Otherwise, an error code is
+ * returned. In particular, GPG_ERR_NO_PUBKEY or GPG_ERR_NO_SECKEY
+ * (if want_secret is set) is returned if the key is not found. */
int
get_pubkey_byname (ctrl_t ctrl, GETKEY_CTX * retctx, PKT_public_key * pk,
const char *name, KBNODE * ret_keyblock,
mailbox for the getname search, but it helps cut down
on the problem of searching for something like "john"
and getting a whole lot of keys back. */
- if (opt.keyserver)
+ if (keyserver_any_configured (ctrl))
{
- mechanism = opt.keyserver->uri;
+ mechanism = "keyserver";
glo_ctrl.in_auto_key_retrieve++;
rc = keyserver_import_name (ctrl, name, &fpr, &fpr_len,
opt.keyserver);
}
-/* For documentation see keydb.h.
-
- FIXME: We should replace this with the _byname function. This can
- be done by creating a userID conforming to the unified fingerprint
- style. */
+/* Lookup a key with the specified fingerprint.
+ *
+ * If PK is not NULL, the public key of the first result is returned
+ * in *PK. Note: this function does an exact search and thus the
+ * returned public key may be a subkey rather than the primary key.
+ * Note: The self-signed data has already been merged into the public
+ * key using merge_selfsigs. Free *PK by calling
+ * release_public_key_parts (or, if PK was allocated using xfree, you
+ * can use free_public_key, which calls release_public_key_parts(PK)
+ * and then xfree(PK)).
+ *
+ * If PK->REQ_USAGE is set, it is used to filter the search results.
+ * (Thus, if PK is not NULL, PK->REQ_USAGE must be valid!!!) See the
+ * documentation for finish_lookup to understand exactly how this is
+ * used.
+ *
+ * If R_KEYBLOCK is not NULL, then the first result's keyblock is
+ * returned in *R_KEYBLOCK. This should be freed using
+ * release_kbnode().
+ *
+ * FPRINT is a byte array whose contents is the fingerprint to use as
+ * the search term. FPRINT_LEN specifies the length of the
+ * fingerprint (in bytes). Currently, only 16 and 20-byte
+ * fingerprints are supported.
+ *
+ * FIXME: We should replace this with the _byname function. This can
+ * be done by creating a userID conforming to the unified fingerprint
+ * style. */
int
get_pubkey_byfprint (PKT_public_key *pk, kbnode_t *r_keyblock,
const byte * fprint, size_t fprint_len)
}
-/* For documentation see keydb.h. */
+/* This function is similar to get_pubkey_byfprint, but it doesn't
+ * merge the self-signed data into the public key and subkeys or into
+ * the user ids. It also doesn't add the key to the user id cache.
+ * Further, this function ignores PK->REQ_USAGE.
+ *
+ * This function is intended to avoid recursion and, as such, should
+ * only be used in very specific situations.
+ *
+ * Like get_pubkey_byfprint, PK may be NULL. In that case, this
+ * function effectively just checks for the existence of the key. */
int
get_pubkey_byfprint_fast (PKT_public_key * pk,
const byte * fprint, size_t fprint_len)
gpg_error_t err;
KEYDB_SEARCH_DESC desc;
KBNODE kb;
+ KBNODE node;
err = classify_user_id (t->d, &desc, 1);
if (err)
continue;
}
- err = agent_probe_secret_key (ctrl, kb->pkt->pkt.public_key);
+ merge_selfsigs (kb);
+
+ err = gpg_error (GPG_ERR_NO_SECKEY);
+ node = kb;
+ do
+ {
+ PKT_public_key *pk = node->pkt->pkt.public_key;
+
+ /* Check that the key has the signing capability. */
+ if (! (pk->pubkey_usage & PUBKEY_USAGE_SIG))
+ continue;
+
+ /* Check if the key is valid. */
+ if (pk->flags.revoked)
+ {
+ if (DBG_LOOKUP)
+ log_debug ("not using %s as default key, %s",
+ keystr_from_pk (pk), "revoked");
+ continue;
+ }
+ if (pk->has_expired)
+ {
+ if (DBG_LOOKUP)
+ log_debug ("not using %s as default key, %s",
+ keystr_from_pk (pk), "expired");
+ continue;
+ }
+ if (pk_is_disabled (pk))
+ {
+ if (DBG_LOOKUP)
+ log_debug ("not using %s as default key, %s",
+ keystr_from_pk (pk), "disabled");
+ continue;
+ }
+
+ err = agent_probe_secret_key (ctrl, pk);
+ if (! err)
+ /* This is a valid key. */
+ break;
+ }
+ while ((node = find_next_kbnode (node, PKT_PUBLIC_SUBKEY)));
+
release_kbnode (kb);
- if (! err)
+ if (err)
+ {
+ if (! warned && ! opt.quiet)
+ {
+ log_info (_("Warning: not using '%s' as default key: %s\n"),
+ t->d, gpg_strerror (GPG_ERR_NO_SECKEY));
+ print_reported_error (err, GPG_ERR_NO_SECKEY);
+ }
+ }
+ else
{
if (! warned)
- log_info (_("using \"%s\" as default secret key\n"), t->d);
+ log_info (_("using \"%s\" as default secret key for signing\n"),
+ t->d);
break;
}
}
+ if (! warned && opt.def_secret_key && ! t)
+ log_info (_("all values passed to '%s' ignored\n"),
+ "--default-key");
+
warned = 1;
if (hd)
return NULL;
}
-/* For documentation see keydb.h. */
+
+/* Look up a secret key.
+ *
+ * If PK is not NULL, the public key of the first result is returned
+ * in *PK. Note: PK->REQ_USAGE must be valid!!! If PK->REQ_USAGE is
+ * set, it is used to filter the search results. See the
+ * documentation for finish_lookup to understand exactly how this is
+ * used. Note: The self-signed data has already been merged into the
+ * public key using merge_selfsigs. Free *PK by calling
+ * release_public_key_parts (or, if PK was allocated using xfree, you
+ * can use free_public_key, which calls release_public_key_parts(PK)
+ * and then xfree(PK)).
+ *
+ * If --default-key was set, then the specified key is looked up. (In
+ * this case, the default key is returned even if it is considered
+ * unusable. See the documentation for skip_unusable for exactly what
+ * this means.)
+ *
+ * Otherwise, this initiates a DB scan that returns all keys that are
+ * usable (see previous paragraph for exactly what usable means) and
+ * for which a secret key is available.
+ *
+ * This function returns the first match. Additional results can be
+ * returned using getkey_next. */
gpg_error_t
get_seckey_default (ctrl_t ctrl, PKT_public_key *pk)
{
return err;
}
+
+
\f
-/* For documentation see keydb.h. */
+/* Search for keys matching some criteria.
+ *
+ * If RETCTX is not NULL, then the constructed context is returned in
+ * *RETCTX so that getpubkey_next can be used to get subsequent
+ * results. In this case, getkey_end() must be used to free the
+ * search context. If RETCTX is not NULL, then RET_KDBHD must be
+ * NULL.
+ *
+ * If PK is not NULL, the public key of the first result is returned
+ * in *PK. Note: PK->REQ_USAGE must be valid!!! If PK->REQ_USAGE is
+ * set, it is used to filter the search results. See the
+ * documentation for finish_lookup to understand exactly how this is
+ * used. Note: The self-signed data has already been merged into the
+ * public key using merge_selfsigs. Free *PK by calling
+ * release_public_key_parts (or, if PK was allocated using xfree, you
+ * can use free_public_key, which calls release_public_key_parts(PK)
+ * and then xfree(PK)).
+ *
+ * If NAMES is not NULL, then a search query is constructed using
+ * classify_user_id on each of the strings in the list. (Recall: the
+ * database does an OR of the terms, not an AND.) If NAMES is
+ * NULL, then all results are returned.
+ *
+ * If WANT_SECRET is set, then only keys with an available secret key
+ * (either locally or via key registered on a smartcard) are returned.
+ *
+ * This function does not skip unusable keys (see the documentation
+ * for skip_unusable for an exact definition).
+ *
+ * If RET_KEYBLOCK is not NULL, the keyblock is returned in
+ * *RET_KEYBLOCK. This should be freed using release_kbnode().
+ *
+ * This function returns 0 on success. Otherwise, an error code is
+ * returned. In particular, GPG_ERR_NO_PUBKEY or GPG_ERR_NO_SECKEY
+ * (if want_secret is set) is returned if the key is not found. */
gpg_error_t
getkey_bynames (getkey_ctx_t *retctx, PKT_public_key *pk,
strlist_t names, int want_secret, kbnode_t *ret_keyblock)
}
-/* For documentation see keydb.h. */
+/* Search for one key matching some criteria.
+ *
+ * If RETCTX is not NULL, then the constructed context is returned in
+ * *RETCTX so that getpubkey_next can be used to get subsequent
+ * results. In this case, getkey_end() must be used to free the
+ * search context. If RETCTX is not NULL, then RET_KDBHD must be
+ * NULL.
+ *
+ * If PK is not NULL, the public key of the first result is returned
+ * in *PK. Note: PK->REQ_USAGE must be valid!!! If PK->REQ_USAGE is
+ * set, it is used to filter the search results. See the
+ * documentation for finish_lookup to understand exactly how this is
+ * used. Note: The self-signed data has already been merged into the
+ * public key using merge_selfsigs. Free *PK by calling
+ * release_public_key_parts (or, if PK was allocated using xfree, you
+ * can use free_public_key, which calls release_public_key_parts(PK)
+ * and then xfree(PK)).
+ *
+ * If NAME is not NULL, then a search query is constructed using
+ * classify_user_id on the string. In this case, even unusable keys
+ * (see the documentation for skip_unusable for an exact definition of
+ * unusable) are returned. Otherwise, if --default-key was set, then
+ * that key is returned (even if it is unusable). If neither of these
+ * conditions holds, then the first usable key is returned.
+ *
+ * If WANT_SECRET is set, then only keys with an available secret key
+ * (either locally or via key registered on a smartcard) are returned.
+ *
+ * This function does not skip unusable keys (see the documentation
+ * for skip_unusable for an exact definition).
+ *
+ * If RET_KEYBLOCK is not NULL, the keyblock is returned in
+ * *RET_KEYBLOCK. This should be freed using release_kbnode().
+ *
+ * This function returns 0 on success. Otherwise, an error code is
+ * returned. In particular, GPG_ERR_NO_PUBKEY or GPG_ERR_NO_SECKEY
+ * (if want_secret is set) is returned if the key is not found.
+ *
+ * FIXME: We also have the get_pubkey_byname function which has a
+ * different semantic. Should be merged with this one. */
gpg_error_t
getkey_byname (ctrl_t ctrl, getkey_ctx_t *retctx, PKT_public_key *pk,
const char *name, int want_secret, kbnode_t *ret_keyblock)
}
-/* For documentation see keydb.h. */
+/* Return the next search result.
+ *
+ * If PK is not NULL, the public key of the next result is returned in
+ * *PK. Note: The self-signed data has already been merged into the
+ * public key using merge_selfsigs. Free *PK by calling
+ * release_public_key_parts (or, if PK was allocated using xfree, you
+ * can use free_public_key, which calls release_public_key_parts(PK)
+ * and then xfree(PK)).
+ *
+ * RET_KEYBLOCK can be given as NULL; if it is not NULL it the entire
+ * found keyblock wis retruned hich must be released with
+ * release_kbnode. If the function returns an error NULL is stored at
+ * RET_KEYBLOCK.
+ *
+ * The self-signed data has already been merged into the public key
+ * using merge_selfsigs. */
gpg_error_t
getkey_next (getkey_ctx_t ctx, PKT_public_key *pk, kbnode_t *ret_keyblock)
{
}
-/* For documentation see keydb.h. */
+/* Release any resources used by a key listing context. This must be
+ * called on the context returned by, e.g., getkey_byname. */
void
getkey_end (getkey_ctx_t ctx)
{
************* Merging stuff ********************
************************************************/
-/* For documentation see keydb.h. */
+/* Set the mainkey_id fields for all keys in KEYBLOCK. This is
+ * usually done by merge_selfsigs but at some places we only need the
+ * main_kid not a full merge. The function also guarantees that all
+ * pk->keyids are computed. */
void
setup_main_keyids (kbnode_t keyblock)
{
}
-/* For documentation see keydb.h. */
+/* KEYBLOCK corresponds to a public key block. This function merges
+ * much of the information from the self-signed data into the public
+ * key, public subkey and user id data structures. If you use the
+ * high-level search API (e.g., get_pubkey) for looking up key blocks,
+ * then you don't need to call this function. This function is
+ * useful, however, if you change the keyblock, e.g., by adding or
+ * removing a self-signed data packet. */
void
merge_keys_and_selfsig (KBNODE keyblock)
{
keytimestamp = subpk->timestamp;
subpk->flags.valid = 0;
+ subpk->flags.exact = 0;
subpk->main_keyid[0] = mainpk->main_keyid[0];
subpk->main_keyid[1] = mainpk->main_keyid[1];
u32 latest_date;
KBNODE latest_key;
+ PKT_public_key *pk;
+
assert (keyblock->pkt->pkttype == PKT_PUBLIC_KEY);
assert (k->pkt->pkttype == PKT_PUBLIC_KEY
|| k->pkt->pkttype == PKT_PUBLIC_SUBKEY);
foundk = k;
+ pk = k->pkt->pkt.public_key;
+ pk->flags.exact = 1;
break;
}
}
/* Either start a loop or check just this one subkey. */
for (k = foundk ? foundk : keyblock; k; k = nextk)
{
- PKT_public_key *pk;
-
if (foundk)
/* If FOUNDK is not NULL, then only consider that exact
key, i.e., don't iterate. */
- we're just considering the primary key. */
if ((!latest_key && !ctx->exact) || foundk == keyblock || req_prim)
{
- PKT_public_key *pk;
if (DBG_LOOKUP && !foundk && !req_prim)
log_debug ("\tno suitable subkeys found - trying primary\n");
pk = keyblock->pkt->pkt.public_key;
if (DBG_LOOKUP)
log_debug ("\tprimary key may be used\n");
latest_key = keyblock;
- latest_date = pk->timestamp;
}
}
if (latest_key)
{
- PKT_public_key *pk = latest_key->pkt->pkt.public_key;
+ pk = latest_key->pkt->pkt.public_key;
if (pk->user_id)
free_user_id (pk->user_id);
pk->user_id = scopy_user_id (foundu);
KBNODE keyblock = NULL;
KBNODE found_key = NULL;
+ if (ret_keyblock)
+ *ret_keyblock = NULL;
+
for (;;)
{
rc = keydb_search (ctx->kr_handle, ctx->items, ctx->nitems, NULL);
if (rc)
{
log_error ("keydb_get_keyblock failed: %s\n", gpg_strerror (rc));
- rc = 0;
goto skip;
}
if (!rc)
{
- *ret_keyblock = keyblock; /* Return the keyblock. */
+ if (ret_keyblock)
+ *ret_keyblock = keyblock; /* Return the keyblock. */
keyblock = NULL;
}
else if (gpg_err_code (rc) == GPG_ERR_NOT_FOUND && no_suitable_key)
}
-/* For documentation see keydb.h. */
+/* Enumerate some secret keys (specifically, those specified with
+ * --default-key and --try-secret-key). Use the following procedure:
+ *
+ * 1) Initialize a void pointer to NULL
+ * 2) Pass a reference to this pointer to this function (content)
+ * and provide space for the secret key (sk)
+ * 3) Call this function as long as it does not return an error (or
+ * until you are done). The error code GPG_ERR_EOF indicates the
+ * end of the listing.
+ * 4) Call this function a last time with SK set to NULL,
+ * so that can free it's context.
+ *
+ * In pseudo-code:
+ *
+ * void *ctx = NULL;
+ * PKT_public_key *sk = xmalloc_clear (sizeof (*sk));
+ *
+ * while ((err = enum_secret_keys (&ctx, sk)))
+ * { // Process SK.
+ * if (done)
+ * break;
+ * free_public_key (sk);
+ * sk = xmalloc_clear (sizeof (*sk));
+ * }
+ *
+ * // Release any resources used by CTX.
+ * enum_secret_keys (&ctx, NULL);
+ * free_public_key (sk);
+ *
+ * if (gpg_err_code (err) != GPG_ERR_EOF)
+ * ; // An error occurred.
+ */
gpg_error_t
enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *sk)
{
}
-
-/* For documentation see keydb.h. */
+/* Return the database handle used by this context. The context still
+ owns the handle. */
KEYDB_HANDLE
get_ctx_handle (GETKEY_CTX ctx)
{
/* gpg.c - The GnuPG utility (main for gpg)
* Copyright (C) 1998-2011 Free Software Foundation, Inc.
- * Copyright (C) 1997-2014 Werner Koch
- * Copyright (C) 2015 g10 Code GmbH
+ * Copyright (C) 1997-2016 Werner Koch
+ * Copyright (C) 2015-2016 g10 Code GmbH
*
* This file is part of GnuPG.
*
aExport,
aExportSecret,
aExportSecretSub,
+ aExportSshKey,
aCheckKeys,
aGenRevoke,
aDesigRevoke,
ARGPARSE_c (aFetchKeys, "fetch-keys" , "@" ),
ARGPARSE_c (aExportSecret, "export-secret-keys" , "@" ),
ARGPARSE_c (aExportSecretSub, "export-secret-subkeys" , "@" ),
+ ARGPARSE_c (aExportSshKey, "export-ssh-key", "@" ),
ARGPARSE_c (aImport, "import", N_("import/merge keys")),
ARGPARSE_c (aFastImport, "fast-import", "@"),
#ifdef ENABLE_CARD_SUPPORT
return configname;
}
-
-static gpg_error_t
-check_user_ids (strlist_t *sp,
- int warn_possibly_ambiguous,
- int error_if_not_found)
-{
- strlist_t s = *sp;
- strlist_t s2 = NULL;
- strlist_t t;
-
- gpg_error_t rc = 0;
- gpg_error_t err;
-
- KEYDB_HANDLE hd = NULL;
-
- /* A quick check to avoid allocating a new strlist if we can skip
- all keys. Handles also the case of !SP. See below for details. */
- for (t = s; t && (!(t->flags & PK_LIST_CONFIG)
- && !(t->flags & PK_LIST_ENCRYPT_TO)); t = t->next)
- ;
- if (!t)
- return 0;
-
- for (t = s; t; t = t->next)
- {
- const char *option;
-
- KEYDB_SEARCH_DESC desc;
- KBNODE kb;
- PKT_public_key *pk;
- char fingerprint_bin[MAX_FINGERPRINT_LEN];
- size_t fingerprint_bin_len = sizeof (fingerprint_bin);
- /* We also potentially need a ! at the end. */
- char fingerprint[2 * MAX_FINGERPRINT_LEN + 1 + 1];
-
- /* If the key has been given on the command line and it has not
- been given by one of the encrypt-to options, we skip the
- checks. The reason is that the actual key selection code
- does its own checks and provides proper status message to the
- caller to detect the wrong keys. */
- if (!(t->flags & PK_LIST_CONFIG) && !(t->flags & PK_LIST_ENCRYPT_TO))
- {
- add_to_strlist (&s2, t->d);
- s2->flags = t->flags;
- continue;
- }
-
- switch (t->flags >> PK_LIST_SHIFT)
- {
- case oDefaultKey: option = "--default-key"; break;
- case oEncryptTo: option = "--encrypt-to"; break;
- case oHiddenEncryptTo: option = "--hidden-encrypt-to"; break;
- case oEncryptToDefaultKey: option = "--encrypt-to-default-key"; break;
- case oRecipient: option = "--recipient"; break;
- case oHiddenRecipient: option = "--hidden-recipient"; break;
- case oLocalUser: option = "--local-user"; break;
- default:
- log_bug ("Unsupport option: %d\n", (t->flags >> PK_LIST_SHIFT));
- }
-
- if (DBG_LOOKUP)
- {
- log_debug ("\n");
- log_debug ("%s: Checking %s=%s\n", __func__, option, t->d);
- }
-
- err = classify_user_id (t->d, &desc, 1);
- if (err)
- {
- if (! rc)
- rc = err;
-
- log_error (_("key \"%s\" not found: %s\n"),
- t->d, gpg_strerror (err));
- if (!opt.quiet)
- log_info (_("(check argument of option '%s')\n"), option);
- continue;
- }
-
- if (warn_possibly_ambiguous
- && ! (desc.mode == KEYDB_SEARCH_MODE_LONG_KID
- || desc.mode == KEYDB_SEARCH_MODE_FPR16
- || desc.mode == KEYDB_SEARCH_MODE_FPR20
- || desc.mode == KEYDB_SEARCH_MODE_FPR))
- log_info (_("Warning: value '%s' for option '%s'"
- " should be a long key ID or a fingerprint\n"),
- t->d, option);
-
- if (! hd)
- {
- hd = keydb_new ();
- if (!hd)
- {
- rc = gpg_error_from_syserror ();
- break;
- }
- }
- else
- keydb_search_reset (hd);
-
- err = keydb_search (hd, &desc, 1, NULL);
- if (gpg_err_code (err) == GPG_ERR_NOT_FOUND)
- {
- if (DBG_LOOKUP)
- log_debug ("%s: '%s' not found.\n", __func__, t->d);
-
- if (error_if_not_found)
- {
- if (! rc)
- rc = err;
-
- log_error (_("key \"%s\" not found\n"), t->d);
- if (!opt.quiet)
- log_info (_("(check argument of option '%s')\n"), option);
- }
- continue;
- }
- if (err)
- {
- if (! rc)
- rc = err;
-
- log_error (_("key \"%s\" not found: %s\n"), t->d, gpg_strerror (err));
- break;
- }
-
- err = keydb_get_keyblock (hd, &kb);
- if (err)
- {
- if (! rc)
- rc = err;
-
- log_error (_("error reading keyblock: %s\n"), gpg_strerror (err));
- continue;
- }
-
- pk = kb->pkt->pkt.public_key;
- if ((desc.mode == KEYDB_SEARCH_MODE_SHORT_KID
- || desc.mode == KEYDB_SEARCH_MODE_LONG_KID
- || desc.mode == KEYDB_SEARCH_MODE_FPR16
- || desc.mode == KEYDB_SEARCH_MODE_FPR20)
- && strchr (t->d, '!'))
- /* Exact search. In this case we want to set FINGERPRINT not
- to the primary key, but the key (primary or sub) that
- matched the search criteria. Note: there will always be
- exactly one match. */
- {
- kbnode_t n = kb;
- PKT_public_key *match = NULL;
- int i;
-
- do
- {
- if ((n->flag & 1))
- /* The matched node. */
- {
- assert (! match);
- match = n->pkt->pkt.public_key;
- }
- }
- while ((n = find_next_kbnode (n, PKT_PUBLIC_SUBKEY)));
- assert (match);
-
- fingerprint_from_pk (match, fingerprint_bin, &fingerprint_bin_len);
- assert (fingerprint_bin_len == sizeof (fingerprint_bin));
- bin2hex (fingerprint_bin, MAX_FINGERPRINT_LEN, fingerprint);
-
- i = strlen (fingerprint);
- fingerprint[i] = '!';
- fingerprint[i + 1] = '\0';
- }
- else
- {
- fingerprint_from_pk (pk, fingerprint_bin, &fingerprint_bin_len);
- assert (fingerprint_bin_len == sizeof (fingerprint_bin));
- bin2hex (fingerprint_bin, MAX_FINGERPRINT_LEN, fingerprint);
- }
-
- add_to_strlist (&s2, fingerprint);
- s2->flags = s->flags;
-
- release_kbnode (kb);
-
- /* Continue the search. */
- if (DBG_LOOKUP)
- log_debug ("%s: Check for duplicates for %s='%s'\n",
- __func__, option, t->d);
- err = keydb_search (hd, &desc, 1, NULL);
- if (! err)
- /* Another result! */
- {
- char fingerprint_bin2[MAX_FINGERPRINT_LEN];
- size_t fingerprint_bin2_len = sizeof (fingerprint_bin2);
- char fingerprint2[2 * MAX_FINGERPRINT_LEN + 1];
-
- log_error (_("key specification '%s' is ambiguous\n"), t->d);
- if (!opt.quiet)
- log_info (_("(check argument of option '%s')\n"), option);
-
- if (! rc)
- rc = GPG_ERR_AMBIGUOUS_NAME;
-
- err = keydb_get_keyblock (hd, &kb);
- if (err)
- log_error (_("error reading keyblock: %s\n"), gpg_strerror (err));
- else
- {
- pk = kb->pkt->pkt.public_key;
- fingerprint_from_pk (pk, fingerprint_bin2, &fingerprint_bin2_len);
- assert (fingerprint_bin2_len == sizeof (fingerprint_bin2));
- bin2hex (fingerprint_bin2, MAX_FINGERPRINT_LEN, fingerprint2);
-
- /* TRANSLATORS: The %s prints a key specification which
- for example has been given at the command line. Two
- lines with fingerprints are printed after this message. */
- log_info (_("'%s' matches at least:\n"), t->d);
- log_info (" %s\n", fingerprint);
- log_info (" %s\n", fingerprint2);
-
- release_kbnode (kb);
- }
- }
- else if (! (gpg_err_code (err) == GPG_ERR_NOT_FOUND
- || gpg_err_code (err) == GPG_ERR_EOF))
- /* An error (other than "not found"). */
- {
- log_error (_("error searching the keyring: %s\n"),
- gpg_strerror (err));
- if (! rc)
- rc = err;
- }
- }
-
- strlist_rev (&s2);
-
- keydb_release (hd);
-
- free_strlist (s);
- *sp = s2;
- return rc;
-}
-
-
int
main (int argc, char **argv)
{
| VERIFY_SHOW_POLICY_URLS
| VERIFY_SHOW_STD_NOTATIONS
| VERIFY_SHOW_KEYSERVER_URLS);
- opt.list_options = LIST_SHOW_UID_VALIDITY;
+ opt.list_options = (LIST_SHOW_UID_VALIDITY
+ | LIST_SHOW_USAGE);
#ifdef NO_TRUST_MODELS
opt.trust_model = TM_ALWAYS;
#else
case aListSigs:
case aExportSecret:
case aExportSecretSub:
+ case aExportSshKey:
case aSym:
case aClearsign:
case aGenRevoke:
case oDefaultKey:
sl = add_to_strlist (&opt.def_secret_key, pargs.r.ret_str);
sl->flags = (pargs.r_opt << PK_LIST_SHIFT);
+ if (configfp)
+ sl->flags |= PK_LIST_CONFIG;
break;
case oDefRecipient:
if( *pargs.r.ret_str )
sl->flags |= PK_LIST_CONFIG;
break;
case oEncryptToDefaultKey:
- opt.encrypt_to_default_key = 1;
+ opt.encrypt_to_default_key = configfp ? 2 : 1;
break;
case oRecipient: /* store the recipient */
sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings );
break;
}
- {
- int have_def_secret_key = opt.def_secret_key != NULL;
-
- rc = check_user_ids (&locusr, 1, 1);
- if (rc)
- g10_exit (1);
- rc = check_user_ids (&remusr, 0, 1);
- if (rc)
- g10_exit (1);
- rc = check_user_ids (&opt.def_secret_key, 1, 0);
- if (rc)
- g10_exit (1);
-
- if (opt.encrypt_to_default_key)
- {
- const char *default_key = parse_def_secret_key (ctrl);
- if (default_key)
- {
- sl = add_to_strlist2 (&remusr, default_key, utf8_strings);
- sl->flags = ((oEncryptToDefaultKey << PK_LIST_SHIFT)
- | PK_LIST_ENCRYPT_TO);
- }
- else if (have_def_secret_key)
- log_info (_("option '%s' given, but no valid default keys given\n"),
- "--encrypt-to-default-key");
- else
- log_info (_("option '%s' given, but option '%s' not given\n"),
- "--encrypt-to-default-key", "--default-key");
- }
- }
-
/* The command dispatcher. */
switch( cmd )
{
break;
case aVerify:
- rc = 0;
if (multifile)
{
if ((rc = verify_files (ctrl, argc, argv)))
free_strlist(sl);
break;
+ case aExportSshKey:
+ if (argc != 1)
+ wrong_args ("--export-ssh-key <user-id>");
+ rc = export_ssh_key (ctrl, argv[0]);
+ if (rc)
+ {
+ write_status_failure ("export-ssh-key", rc);
+ log_error (_("export as ssh key failed: %s\n"), gpg_strerror (rc));
+ }
+ break;
+
case aSearchKeys:
sl = NULL;
for (; argc; argc--, argv++)
}
int
+keyserver_any_configured (ctrl_t ctrl)
+{
+ (void)ctrl;
+ return 0;
+}
+
+int
keyserver_import_keyid (u32 *keyid, void *dummy)
{
(void)keyid;
#include "call-agent.h"
#include "../common/membuf.h"
-struct stats_s
+struct import_stats_s
{
ulong count;
ulong no_user_id;
static int import (ctrl_t ctrl,
- IOBUF inp, const char* fname, struct stats_s *stats,
+ IOBUF inp, const char* fname, struct import_stats_s *stats,
unsigned char **fpr, size_t *fpr_len, unsigned int options,
import_screener_t screener, void *screener_arg);
static int read_block (IOBUF a, PACKET **pending_pkt, kbnode_t *ret_root,
int *r_v3keys);
static void revocation_present (ctrl_t ctrl, kbnode_t keyblock);
static int import_one (ctrl_t ctrl,
- const char *fname, kbnode_t keyblock,struct stats_s *stats,
+ const char *fname, kbnode_t keyblock,
+ struct import_stats_s *stats,
unsigned char **fpr, size_t *fpr_len,
unsigned int options, int from_sk, int silent,
import_screener_t screener, void *screener_arg);
static int import_secret_one (ctrl_t ctrl, const char *fname, kbnode_t keyblock,
- struct stats_s *stats, int batch,
+ struct import_stats_s *stats, int batch,
unsigned int options, int for_migration,
import_screener_t screener, void *screener_arg);
static int import_revoke_cert( const char *fname, kbnode_t node,
- struct stats_s *stats);
+ struct import_stats_s *stats);
static int chk_self_sigs (const char *fname, kbnode_t keyblock,
PKT_public_key *pk, u32 *keyid, int *non_self );
static int delete_inv_parts (const char *fname, kbnode_t keyblock,
}
-void *
+import_stats_t
import_new_stats_handle (void)
{
- return xmalloc_clear ( sizeof (struct stats_s) );
+ return xmalloc_clear ( sizeof (struct import_stats_s) );
}
void
-import_release_stats_handle (void *p)
+import_release_stats_handle (import_stats_t p)
{
xfree (p);
}
*/
static int
import_keys_internal (ctrl_t ctrl, iobuf_t inp, char **fnames, int nnames,
- void *stats_handle, unsigned char **fpr, size_t *fpr_len,
+ import_stats_t stats_handle,
+ unsigned char **fpr, size_t *fpr_len,
unsigned int options,
import_screener_t screener, void *screener_arg)
{
int i;
int rc = 0;
- struct stats_s *stats = stats_handle;
+ struct import_stats_s *stats = stats_handle;
if (!stats)
stats = import_new_stats_handle ();
void
import_keys (ctrl_t ctrl, char **fnames, int nnames,
- void *stats_handle, unsigned int options )
+ import_stats_t stats_handle, unsigned int options )
{
import_keys_internal (ctrl, NULL, fnames, nnames, stats_handle,
NULL, NULL, options, NULL, NULL);
}
int
-import_keys_stream (ctrl_t ctrl, IOBUF inp, void *stats_handle,
+import_keys_stream (ctrl_t ctrl, IOBUF inp, import_stats_t stats_handle,
unsigned char **fpr, size_t *fpr_len, unsigned int options)
{
return import_keys_internal (ctrl, inp, NULL, 0, stats_handle,
/* Variant of import_keys_stream reading from an estream_t. */
int
-import_keys_es_stream (ctrl_t ctrl, estream_t fp, void *stats_handle,
+import_keys_es_stream (ctrl_t ctrl, estream_t fp,
+ import_stats_t stats_handle,
unsigned char **fpr, size_t *fpr_len,
unsigned int options,
import_screener_t screener, void *screener_arg)
static int
-import (ctrl_t ctrl, IOBUF inp, const char* fname,struct stats_s *stats,
+import (ctrl_t ctrl, IOBUF inp, const char* fname,struct import_stats_s *stats,
unsigned char **fpr,size_t *fpr_len, unsigned int options,
import_screener_t screener, void *screener_arg)
{
&& gpg_err_source (rc) == GPG_ERR_SOURCE_KEYBOX)
{
stats->not_imported++;
- rc = 0;
}
else if (rc)
break;
kbnode_t keyblock = NULL; /* Need to initialize because gcc can't
grasp the return semantics of
read_block. */
- struct stats_s *stats;
+ struct import_stats_s *stats;
int v3keys;
inp = iobuf_open (fname);
void
-import_print_stats (void *hd)
+import_print_stats (import_stats_t stats)
{
- struct stats_s *stats = hd;
-
if (!opt.quiet)
{
log_info(_("Total number processed: %lu\n"),
for (i = 0; i < n; i++, pos += 2)
sprintf (buf+pos, "%02X", fpr[i]);
strcat (buf, " ");
- pos += 1;
strcat (buf, id->name);
write_status_text (STATUS_IMPORT_CHECK, buf);
xfree (buf);
*/
static int
import_one (ctrl_t ctrl,
- const char *fname, kbnode_t keyblock, struct stats_s *stats,
+ const char *fname, kbnode_t keyblock, struct import_stats_s *stats,
unsigned char **fpr, size_t *fpr_len, unsigned int options,
int from_sk, int silent,
import_screener_t screener, void *screener_arg)
function prints diagnostics and returns an error code. If BATCH is
true the secret keys are stored by gpg-agent in the transfer format
(i.e. no re-protection and aksing for passphrases). */
-static gpg_error_t
-transfer_secret_keys (ctrl_t ctrl, struct stats_s *stats, kbnode_t sec_keyblock,
- int batch)
+gpg_error_t
+transfer_secret_keys (ctrl_t ctrl, struct import_stats_s *stats,
+ kbnode_t sec_keyblock, int batch, int force)
{
gpg_error_t err = 0;
void *kek = NULL;
if (!ski)
BUG ();
- stats->count++;
- stats->secret_read++;
+ if (stats)
+ {
+ stats->count++;
+ stats->secret_read++;
+ }
/* We ignore stub keys. The way we handle them in other parts
of the code is by asking the agent whether any secret key is
{
char *desc = gpg_format_keydesc (pk, FORMAT_KEYDESC_IMPORT, 1);
err = agent_import_key (ctrl, desc, &cache_nonce,
- wrappedkey, wrappedkeylen, batch);
+ wrappedkey, wrappedkeylen, batch, force);
xfree (desc);
}
if (!err)
if (opt.verbose)
log_info (_("key %s: secret key imported\n"),
keystr_from_pk_with_sub (main_pk, pk));
- stats->secret_imported++;
+ if (stats)
+ stats->secret_imported++;
}
else if ( gpg_err_code (err) == GPG_ERR_EEXIST )
{
log_info (_("key %s: secret key already exists\n"),
keystr_from_pk_with_sub (main_pk, pk));
err = 0;
- stats->secret_dups++;
+ if (stats)
+ stats->secret_dups++;
}
else
{
*/
static int
import_secret_one (ctrl_t ctrl, const char *fname, kbnode_t keyblock,
- struct stats_s *stats, int batch, unsigned int options,
+ struct import_stats_s *stats, int batch, unsigned int options,
int for_migration,
import_screener_t screener, void *screener_arg)
{
gpg_error_t err;
nr_prev = stats->secret_imported;
- err = transfer_secret_keys (ctrl, stats, keyblock, batch);
+ err = transfer_secret_keys (ctrl, stats, keyblock, batch, 0);
if (gpg_err_code (err) == GPG_ERR_NOT_PROCESSED)
{
/* TRANSLATORS: For smartcard, each private key on
* Import a revocation certificate; this is a single signature packet.
*/
static int
-import_revoke_cert( const char *fname, kbnode_t node, struct stats_s *stats )
+import_revoke_cert (const char *fname, kbnode_t node,
+ struct import_stats_s *stats)
{
PKT_public_key *pk = NULL;
kbnode_t onode;
char *tempkeystr=xstrdup(keystr_from_pk(pk));
/* No, so try and get it */
- if(opt.keyserver
- && (opt.keyserver_options.options
- & KEYSERVER_AUTO_KEY_RETRIEVE))
+ if ((opt.keyserver_options.options
+ & KEYSERVER_AUTO_KEY_RETRIEVE)
+ && keyserver_any_configured (ctrl))
{
log_info(_("WARNING: key %s may be revoked:"
" fetching revocation key %s\n"),
static struct resource_item all_resources[MAX_KEYDB_RESOURCES];
static int used_resources;
-static void *primary_keyring=NULL;
+
+/* A pointer used to check for the primary key database by comparing
+ to the struct resource_item's TOKEN. */
+static void *primary_keydb;
/* This is a simple cache used to return the last result of a
u32 *sigstatus;
int pk_no;
int uid_no;
+ /* Offset of the record in the keybox. */
+ int resource;
+ off_t offset;
};
hd->keyblock_cache.sigstatus = NULL;
iobuf_close (hd->keyblock_cache.iobuf);
hd->keyblock_cache.iobuf = NULL;
+ hd->keyblock_cache.resource = -1;
+ hd->keyblock_cache.offset = -1;
}
the keyring or keybox will be created.
Return 0 if it is okay to access the specified file. */
-static int
+static gpg_error_t
maybe_create_keyring_or_box (char *filename, int is_box, int force_create)
{
dotlock_t lockhd = NULL;
int rc;
mode_t oldmask;
char *last_slash_in_filename;
+ char *bak_fname = NULL;
+ char *tmp_fname = NULL;
int save_slash;
/* A quick test whether the filename already exists. */
}
/* Now the real test while we are locked. */
+
+ /* Gpg either uses pubring.gpg or pubring.kbx and thus different
+ * lock files. Now, when one gpg process is updating a pubring.gpg
+ * and thus holding the corresponding lock, a second gpg process may
+ * get to here at the time between the two rename operation used by
+ * the first process to update pubring.gpg. The lock taken above
+ * may not protect the second process if it tries to create a
+ * pubring.kbx file which would be protected by a different lock
+ * file.
+ *
+ * We can detect this case by checking that the two temporary files
+ * used by the update code exist at the same time. In that case we
+ * do not create a new file but act as if FORCE_CREATE has not been
+ * given. Obviously there is a race between our two checks but the
+ * worst thing is that we won't create a new file, which is better
+ * than to accidentally creating one. */
+ rc = keybox_tmp_names (filename, is_box, &bak_fname, &tmp_fname);
+ if (rc)
+ goto leave;
+
if (!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))
+ {
+ /* Very likely another process is updating a pubring.gpg and we
+ should not create a pubring.kbx. */
+ rc = gpg_error (GPG_ERR_ENOENT);
+ goto leave;
+ }
+
/* The file does not yet exist, create it now. */
oldmask = umask (077);
dotlock_release (lockhd);
dotlock_destroy (lockhd);
}
+ xfree (bak_fname);
+ xfree (tmp_fname);
return rc;
}
keydb_search_desc_dump (struct keydb_search_desc *desc)
{
char b[MAX_FORMATTED_FINGERPRINT_LEN + 1];
- char fpr[MAX_FINGERPRINT_LEN + 1];
+ char fpr[2 * MAX_FINGERPRINT_LEN + 1];
switch (desc->mode)
{
return xasprintf ("Bad search mode (%d)", desc->mode);
}
}
+
+
\f
+/* Register a resource (keyring or keybox). The first keyring or
+ * keybox that is added using this function is created if it does not
+ * already exist and the KEYDB_RESOURCE_FLAG_READONLY is not set.
+ *
+ * FLAGS are a combination of the KEYDB_RESOURCE_FLAG_* constants.
+ *
+ * URL must have the following form:
+ *
+ * gnupg-ring:filename = plain keyring
+ * gnupg-kbx:filename = keybox file
+ * filename = check file's type (create as a plain keyring)
+ *
+ * Note: on systems with drive letters (Windows) invalid URLs (i.e.,
+ * those with an unrecognized part before the ':' such as "c:\...")
+ * will silently be treated as bare filenames. On other systems, such
+ * URLs will cause this function to return GPG_ERR_GENERAL.
+ *
+ * If KEYDB_RESOURCE_FLAG_DEFAULT is set, the resource is a keyring
+ * and the file ends in ".gpg", then this function also checks if a
+ * file with the same name, but the extension ".kbx" exists, is a
+ * keybox and the OpenPGP flag is set. If so, this function opens
+ * that resource instead.
+ *
+ * If the file is not found, KEYDB_RESOURCE_FLAG_GPGVDEF is set and
+ * the URL ends in ".kbx", then this function will try opening the
+ * same URL, but with the extension ".gpg". If that file is a keybox
+ * with the OpenPGP flag set or it is a keyring, then we use that
+ * instead.
+ *
+ * If the file is not found, KEYDB_RESOURCE_FLAG_DEFAULT is set, the
+ * file should be created and the file's extension is ".gpg" then we
+ * replace the extension with ".kbx".
+ *
+ * If the KEYDB_RESOURCE_FLAG_PRIMARY is set and the resource is a
+ * keyring (not a keybox), then this resource is considered the
+ * primary resource. This is used by keydb_locate_writable(). If
+ * another primary keyring is set, then that keyring is considered the
+ * primary.
+ *
+ * If KEYDB_RESOURCE_FLAG_READONLY is set and the resource is a
+ * keyring (not a keybox), then the keyring is marked as read only and
+ * operations just as keyring_insert_keyblock will return
+ * GPG_ERR_ACCESS. */
gpg_error_t
keydb_add_resource (const char *url, unsigned int flags)
{
int read_only = !!(flags&KEYDB_RESOURCE_FLAG_READONLY);
int is_default = !!(flags&KEYDB_RESOURCE_FLAG_DEFAULT);
int is_gpgvdef = !!(flags&KEYDB_RESOURCE_FLAG_GPGVDEF);
- int rc = 0;
+ gpg_error_t err = 0;
KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE;
void *token;
else if (strchr (resname, ':'))
{
log_error ("invalid key resource URL '%s'\n", url );
- rc = gpg_error (GPG_ERR_GENERAL);
+ err = gpg_error (GPG_ERR_GENERAL);
goto leave;
}
#endif /* !HAVE_DRIVE_LETTERS && !__riscos__ */
{
case KEYDB_RESOURCE_TYPE_NONE:
log_error ("unknown type of key resource '%s'\n", url );
- rc = gpg_error (GPG_ERR_GENERAL);
+ err = gpg_error (GPG_ERR_GENERAL);
goto leave;
case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = maybe_create_keyring_or_box (filename, 0, create);
- if (rc)
+ err = maybe_create_keyring_or_box (filename, 0, create);
+ if (err)
goto leave;
if (keyring_register_filename (filename, read_only, &token))
{
if (used_resources >= MAX_KEYDB_RESOURCES)
- rc = gpg_error (GPG_ERR_RESOURCE_LIMIT);
+ err = gpg_error (GPG_ERR_RESOURCE_LIMIT);
else
{
if ((flags & KEYDB_RESOURCE_FLAG_PRIMARY))
- primary_keyring = token;
+ primary_keydb = token;
all_resources[used_resources].type = rt;
all_resources[used_resources].u.kr = NULL; /* Not used here */
all_resources[used_resources].token = token;
However, we can still mark it as primary even if it was
already registered. */
if ((flags & KEYDB_RESOURCE_FLAG_PRIMARY))
- primary_keyring = token;
+ primary_keydb = token;
}
break;
case KEYDB_RESOURCE_TYPE_KEYBOX:
{
- rc = maybe_create_keyring_or_box (filename, 1, create);
- if (rc)
+ err = maybe_create_keyring_or_box (filename, 1, create);
+ if (err)
goto leave;
- /* FIXME: How do we register a read-only keybox? */
- token = keybox_register_file (filename, 0);
- if (token)
+ err = keybox_register_file (filename, 0, &token);
+ if (!err)
{
if (used_resources >= MAX_KEYDB_RESOURCES)
- rc = gpg_error (GPG_ERR_RESOURCE_LIMIT);
+ err = gpg_error (GPG_ERR_RESOURCE_LIMIT);
else
{
- /* if ((flags & KEYDB_RESOURCE_FLAG_PRIMARY)) */
- /* primary_keyring = token; */
+ if ((flags & KEYDB_RESOURCE_FLAG_PRIMARY))
+ primary_keydb = token;
all_resources[used_resources].type = rt;
all_resources[used_resources].u.kb = NULL; /* Not used here */
all_resources[used_resources].token = token;
used_resources++;
}
}
- else
+ else if (gpg_err_code (err) == GPG_ERR_EEXIST)
{
/* Already registered. We will mark it as the primary key
if requested. */
- /* FIXME: How to do that? Change the keybox interface? */
- /* if ((flags & KEYDB_RESOURCE_FLAG_PRIMARY)) */
- /* primary_keyring = token; */
+ if ((flags & KEYDB_RESOURCE_FLAG_PRIMARY))
+ primary_keydb = token;
}
}
break;
default:
log_error ("resource type of '%s' not supported\n", url);
- rc = gpg_error (GPG_ERR_GENERAL);
+ err = gpg_error (GPG_ERR_GENERAL);
goto leave;
}
/* fixme: check directory permissions and print a warning */
leave:
- if (rc)
- log_error (_("keyblock resource '%s': %s\n"), filename, gpg_strerror (rc));
+ if (err)
+ log_error (_("keyblock resource '%s': %s\n"), filename, gpg_strerror (err));
else
any_registered = 1;
xfree (filename);
- return rc;
+ return err;
}
}
+/* Set a flag on the handle to suppress use of cached results. This
+ * is required for updating a keyring and for key listings. Fixme:
+ * Using a new parameter for keydb_new might be a better solution. */
void
keydb_disable_caching (KEYDB_HANDLE hd)
{
}
+/* Return the file name of the resource in which the current search
+ * result was found or, if there is no search result, the filename of
+ * the current resource (i.e., the resource that the file position
+ * points to). Note: the filename is not necessarily the URL used to
+ * open it!
+ *
+ * This function only returns NULL if no handle is specified, in all
+ * other error cases an empty string is returned. */
const char *
keydb_get_resource_name (KEYDB_HANDLE hd)
{
keyring_lock (hd->active[i].u.kr, 0);
break;
case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_lock (hd->active[i].u.kb, 0);
+ keybox_lock (hd->active[i].u.kb, 0);
break;
}
}
\f
+/* Save the last found state and invalidate the current selection
+ * (i.e., the entry selected by keydb_search() is invalidated and
+ * something like keydb_get_keyblock() will return an error). This
+ * does not change the file position. This makes it possible to do
+ * something like:
+ *
+ * keydb_search (hd, ...); // Result 1.
+ * keydb_push_found_state (hd);
+ * keydb_search_reset (hd);
+ * keydb_search (hd, ...); // Result 2.
+ * keydb_pop_found_state (hd);
+ * keydb_get_keyblock (hd, ...); // -> Result 1.
+ *
+ * Note: it is only possible to save a single save state at a time.
+ * In other words, the the save stack only has room for a single
+ * instance of the state. */
void
keydb_push_found_state (KEYDB_HANDLE hd)
{
}
+/* Restore the previous save state. If the saved state is NULL or
+ invalid, this is a NOP. */
void
keydb_pop_found_state (KEYDB_HANDLE hd)
{
}
+/* Return the keyblock last found by keydb_search() in *RET_KB.
+ *
+ * On success, the function returns 0 and the caller must free *RET_KB
+ * using release_kbnode(). Otherwise, the function returns an error
+ * code.
+ *
+ * The returned keyblock has the kbnode flag bit 0 set for the node
+ * with the public key used to locate the keyblock or flag bit 1 set
+ * for the user ID node. */
gpg_error_t
keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb)
{
}
+/* Update the keyblock KB (i.e., extract the fingerprint and find the
+ * corresponding keyblock in the keyring).
+ *
+ * This doesn't do anything if --dry-run was specified.
+ *
+ * Returns 0 on success. Otherwise, it returns an error code. Note:
+ * if there isn't a keyblock in the keyring corresponding to KB, then
+ * this function returns GPG_ERR_VALUE_NOT_FOUND.
+ *
+ * This function selects the matching record and modifies the current
+ * file position to point to the record just after the selected entry.
+ * Thus, if you do a subsequent search using HD, you should first do a
+ * keydb_search_reset. Further, if the selected record is important,
+ * you should use keydb_push_found_state and keydb_pop_found_state to
+ * save and restore it. */
gpg_error_t
keydb_update_keyblock (KEYDB_HANDLE hd, kbnode_t kb)
{
gpg_error_t err;
+ PKT_public_key *pk;
+ KEYDB_SEARCH_DESC desc;
+ size_t len;
+
+ assert (kb);
+ assert (kb->pkt->pkttype == PKT_PUBLIC_KEY);
+ pk = kb->pkt->pkt.public_key;
if (!hd)
return gpg_error (GPG_ERR_INV_ARG);
kid_not_found_flush ();
keyblock_cache_clear (hd);
- if (hd->found < 0 || hd->found >= hd->used)
- return gpg_error (GPG_ERR_VALUE_NOT_FOUND);
-
if (opt.dry_run)
return 0;
if (err)
return err;
+ memset (&desc, 0, sizeof (desc));
+ fingerprint_from_pk (pk, desc.u.fpr, &len);
+ if (len == 20)
+ desc.mode = KEYDB_SEARCH_MODE_FPR20;
+ else
+ log_bug ("%s: Unsupported key length: %zu\n", __func__, len);
+
+ keydb_search_reset (hd);
+ err = keydb_search (hd, &desc, 1, NULL);
+ if (err)
+ return gpg_error (GPG_ERR_VALUE_NOT_FOUND);
+ assert (hd->found >= 0 && hd->found < hd->used);
+
switch (hd->active[hd->found].type)
{
case KEYDB_RESOURCE_TYPE_NONE:
}
+/* Insert a keyblock into one of the underlying keyrings or keyboxes.
+ *
+ * Be default, the keyring / keybox from which the last search result
+ * came is used. If there was no previous search result (or
+ * keydb_search_reset was called), then the keyring / keybox where the
+ * next search would start is used (i.e., the current file position).
+ *
+ * Note: this doesn't do anything if --dry-run was specified.
+ *
+ * Returns 0 on success. Otherwise, it returns an error code. */
gpg_error_t
keydb_insert_keyblock (KEYDB_HANDLE hd, kbnode_t kb)
{
}
+/* Delete the currently selected keyblock. If you haven't done a
+ * search yet on this database handle (or called keydb_search_reset),
+ * then this will return an error.
+ *
+ * Returns 0 on success or an error code, if an error occurs. */
gpg_error_t
keydb_delete_keyblock (KEYDB_HANDLE hd)
{
\f
+/* A database may consists of multiple keyrings / key boxes. This
+ * sets the "file position" to the start of the first keyring / key
+ * box that is writable (i.e., doesn't have the read-only flag set).
+ *
+ * This first tries the primary keyring (the last keyring (not
+ * keybox!) added using keydb_add_resource() and with
+ * KEYDB_RESOURCE_FLAG_PRIMARY set). If that is not writable, then it
+ * tries the keyrings / keyboxes in the order in which they were
+ * added. */
gpg_error_t
keydb_locate_writable (KEYDB_HANDLE hd)
{
return rc;
/* If we have a primary set, try that one first */
- if (primary_keyring)
+ if (primary_keydb)
{
for ( ; hd->current >= 0 && hd->current < hd->used; hd->current++)
{
- if(hd->active[hd->current].token==primary_keyring)
+ if(hd->active[hd->current].token == primary_keydb)
{
if(keyring_is_writable (hd->active[hd->current].token))
return 0;
return gpg_error (GPG_ERR_NOT_FOUND);
}
+
+/* Rebuild the on-disk caches of all key resources. */
void
keydb_rebuild_caches (int noisy)
{
}
+/* Return the number of skipped blocks (because they were to large to
+ read from a keybox) since the last search reset. */
unsigned long
keydb_get_skipped_counter (KEYDB_HANDLE hd)
{
}
+/* Clears the current search result and resets the handle's position
+ * so that the next search starts at the beginning of the database
+ * (the start of the first resource).
+ *
+ * Returns 0 on success and an error code if an error occurred.
+ * (Currently, this function always returns 0 if HD is valid.) */
gpg_error_t
keydb_search_reset (KEYDB_HANDLE hd)
{
}
+/* Search the database for keys matching the search description. If
+ * the DB contains any legacy keys, these are silently ignored.
+ *
+ * DESC is an array of search terms with NDESC entries. The search
+ * terms are or'd together. That is, the next entry in the DB that
+ * matches any of the descriptions will be returned.
+ *
+ * Note: this function resumes searching where the last search left
+ * off (i.e., at the current file position). If you want to search
+ * from the start of the database, then you need to first call
+ * keydb_search_reset().
+ *
+ * If no key matches the search description, returns
+ * GPG_ERR_NOT_FOUND. If there was a match, returns 0. If an error
+ * occurred, returns an error code.
+ *
+ * The returned key is considered to be selected and the raw data can,
+ * for instance, be returned by calling keydb_get_keyblock(). */
gpg_error_t
keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc,
size_t ndesc, size_t *descindex)
&& (desc[0].mode == KEYDB_SEARCH_MODE_FPR20
|| desc[0].mode == KEYDB_SEARCH_MODE_FPR)
&& hd->keyblock_cache.state == KEYBLOCK_CACHE_FILLED
- && !memcmp (hd->keyblock_cache.fpr, desc[0].u.fpr, 20))
+ && !memcmp (hd->keyblock_cache.fpr, desc[0].u.fpr, 20)
+ /* Make sure the current file position occurs before the cached
+ result to avoid an infinite loop. */
+ && (hd->current < hd->keyblock_cache.resource
+ || (hd->current == hd->keyblock_cache.resource
+ && (keybox_offset (hd->active[hd->current].u.kb)
+ <= hd->keyblock_cache.offset))))
{
/* (DESCINDEX is already set). */
if (DBG_CLOCK)
log_clock ("keydb_search leave (cached)");
+
+ hd->current = hd->keyblock_cache.resource;
+ /* HD->KEYBLOCK_CACHE.OFFSET is the last byte in the record.
+ Seek just beyond that. */
+ keybox_seek (hd->active[hd->current].u.kb,
+ hd->keyblock_cache.offset + 1);
return 0;
}
&& hd->active[hd->current].type == KEYDB_RESOURCE_TYPE_KEYBOX)
{
hd->keyblock_cache.state = KEYBLOCK_CACHE_PREPARED;
+ hd->keyblock_cache.resource = hd->current;
+ /* The current offset is at the start of the next record. Since
+ a record is at least 1 byte, we just use offset - 1, which is
+ within the record. */
+ hd->keyblock_cache.offset
+ = keybox_offset (hd->active[hd->current].u.kb) - 1;
memcpy (hd->keyblock_cache.fpr, desc[0].u.fpr, 20);
}
}
+/* Return the first non-legacy key in the database.
+ *
+ * If you want the very first key in the database, you can directly
+ * call keydb_search with the search description
+ * KEYDB_SEARCH_MODE_FIRST. */
gpg_error_t
keydb_search_first (KEYDB_HANDLE hd)
{
}
+/* Return the next key (not the next matching key!).
+ *
+ * Unlike calling keydb_search with KEYDB_SEARCH_MODE_NEXT, this
+ * function silently skips legacy keys. */
gpg_error_t
keydb_search_next (KEYDB_HANDLE hd)
{
return keydb_search (hd, &desc, 1, NULL);
}
+
+/* This is a convenience function for searching for keys with a long
+ * key id.
+ *
+ * Note: this function resumes searching where the last search left
+ * off. If you want to search the whole database, then you need to
+ * first call keydb_search_reset(). */
gpg_error_t
keydb_search_kid (KEYDB_HANDLE hd, u32 *kid)
{
return keydb_search (hd, &desc, 1, NULL);
}
+
+/* This is a convenience function for searching for keys with a long
+ * (20 byte) fingerprint.
+ *
+ * Note: this function resumes searching where the last search left
+ * off. If you want to search the whole database, then you need to
+ * first call keydb_search_reset(). */
gpg_error_t
keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr)
{
/* Bit flags used with build_pk_list. */
-#define PK_LIST_ENCRYPT_TO 1 /* This is an encrypt-to recipient. */
-#define PK_LIST_HIDDEN 2 /* This is a hidden recipient. */
-#define PK_LIST_CONFIG 4 /* Specified via config file. */
+enum
+ {
+ PK_LIST_ENCRYPT_TO=1, /* This is an encrypt-to recipient. */
+ PK_LIST_HIDDEN=2, /* This is a hidden recipient. */
+ PK_LIST_CONFIG=4 /* Specified via config file. */
+ };
/* To store private data in the flags they must be left shifted by
this value. */
-#define PK_LIST_SHIFT 3
+enum
+ {
+ PK_LIST_SHIFT=3
+ };
/****************
* A data structure to hold information about the external position
the result. */
char *keydb_search_desc_dump (struct keydb_search_desc *desc);
-/* Register a resource (keyring or keybox). The first keyring or
- keybox that is added using this function is created if it does not
- already exist and the KEYDB_RESOURCE_FLAG_READONLY is not set.
-
- FLAGS are a combination of the KEYDB_RESOURCE_FLAG_* constants.
-
- URL must have the following form:
-
- gnupg-ring:filename = plain keyring
- gnupg-kbx:filename = keybox file
- filename = check file's type (create as a plain keyring)
-
- Note: on systems with drive letters (Windows) invalid URLs (i.e.,
- those with an unrecognized part before the ':' such as "c:\...")
- will silently be treated as bare filenames. On other systems, such
- URLs will cause this function to return GPG_ERR_GENERAL.
-
- If KEYDB_RESOURCE_FLAG_DEFAULT is set, the resource is a keyring
- and the file ends in ".gpg", then this function also checks if a
- file with the same name, but the extension ".kbx" exists, is a
- keybox and the OpenPGP flag is set. If so, this function opens
- that resource instead.
-
- If the file is not found, KEYDB_RESOURCE_FLAG_GPGVDEF is set and
- the URL ends in ".kbx", then this function will try opening the
- same URL, but with the extension ".gpg". If that file is a keybox
- with the OpenPGP flag set or it is a keyring, then we use that
- instead.
-
- If the file is not found, KEYDB_RESOURCE_FLAG_DEFAULT is set, the
- file should be created and the file's extension is ".gpg" then we
- replace the extension with ".kbx".
-
-
- If the KEYDB_RESOURCE_FLAG_PRIMARY is set and the resource is a
- keyring (not a keybox), then this resource is considered the
- primary resource. This is used by keydb_locate_writable(). If
- another primary keyring is set, then that keyring is considered the
- primary.
-
- If KEYDB_RESOURCE_FLAG_READONLY is set and the resource is a
- keyring (not a keybox), then the keyring is marked as read only and
- operations just as keyring_insert_keyblock will return
- GPG_ERR_ACCESS. */
+/* Register a resource (keyring or keybox). */
gpg_error_t keydb_add_resource (const char *url, unsigned int flags);
/* Dump some statistics to the log. */
Using a new parameter for keydb_new might be a better solution. */
void keydb_disable_caching (KEYDB_HANDLE hd);
-/* Save the last found state and invalidate the current selection
- (i.e., the entry selected by keydb_search() is invalidated and
- something like keydb_get_keyblock() will return an error). This
- does not change the file position. This makes it possible to do
- something like:
-
- keydb_search (hd, ...); // Result 1.
- keydb_push_found_state (hd);
- keydb_search_reset (hd);
- keydb_search (hd, ...); // Result 2.
- keydb_pop_found_state (hd);
- keydb_get_keyblock (hd, ...); // -> Result 1.
-
- Note: it is only possible to save a single save state at a time.
- In other words, the the save stack only has room for a single
- instance of the state. */
+/* Save the last found state and invalidate the current selection. */
void keydb_push_found_state (KEYDB_HANDLE hd);
-/* Restore the previous save state. If the saved state is invalid,
- this is equivalent to */
+/* Restore the previous save state. */
void keydb_pop_found_state (KEYDB_HANDLE hd);
-/* Return the file name of the resource in which the current search
- result was found or, if there is no search result, the filename of
- the current resource (i.e., the resource that the file position
- points to). Note: the filename is not necessarily the URL used to
- open it!
-
- This function only returns NULL if no handle is specified, in all
- other error cases an empty string is returned. */
+/* Return the file name of the resource. */
const char *keydb_get_resource_name (KEYDB_HANDLE hd);
-/* Return the keyblock last found by keydb_search() in *RET_KB.
-
- On success, the function returns 0 and the caller must free *RET_KB
- using release_kbnode(). Otherwise, the function returns an error
- code.
-
- The returned keyblock has the kbnode flag bit 0 set for the node
- with the public key used to locate the keyblock or flag bit 1 set
- for the user ID node. */
+/* Return the keyblock last found by keydb_search. */
gpg_error_t keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb);
-/* Replace the currently selected keyblock (i.e., the last result
- returned by keydb_search) with the key block in KB.
-
- This doesn't do anything if --dry-run was specified.
-
- Returns 0 on success. Otherwise, it returns an error code. */
+/* Update the keyblock KB. */
gpg_error_t keydb_update_keyblock (KEYDB_HANDLE hd, kbnode_t kb);
-/* Insert a keyblock into one of the underlying keyrings or keyboxes.
-
- Be default, the keyring / keybox from which the last search result
- came is used. If there was no previous search result (or
- keydb_search_reset was called), then the keyring / keybox where the
- next search would start is used (i.e., the current file position).
-
- Note: this doesn't do anything if --dry-run was specified.
-
- Returns 0 on success. Otherwise, it returns an error code. */
+/* Insert a keyblock into one of the underlying keyrings or keyboxes. */
gpg_error_t keydb_insert_keyblock (KEYDB_HANDLE hd, kbnode_t kb);
-/* Delete the currently selected keyblock. If you haven't done a
- search yet on this database handle (or called keydb_search_reset),
- then this will return an error.
-
- Returns 0 on success or an error code, if an error occurs. */
+/* Delete the currently selected keyblock. */
gpg_error_t keydb_delete_keyblock (KEYDB_HANDLE hd);
-/* A database may consists of multiple keyrings / key boxes. This
- sets the "file position" to the start of the first keyring / key
- box that is writable (i.e., doesn't have the read-only flag set).
-
- This first tries the primary keyring (the last keyring (not
- keybox!) added using keydb_add_resource() and with
- KEYDB_RESOURCE_FLAG_PRIMARY set). If that is not writable, then it
- tries the keyrings / keyboxes in the order in which they were
- added. */
+/* Find the first writable resource. */
gpg_error_t keydb_locate_writable (KEYDB_HANDLE hd);
/* Rebuild the on-disk caches of all key resources. */
read from a keybox) since the last search reset. */
unsigned long keydb_get_skipped_counter (KEYDB_HANDLE hd);
-/* Clears the current search result and resets the handle's position
- so that the next search starts at the beginning of the database
- (the start of the first resource).
-
- Returns 0 on success and an error code if an error occurred.
- (Currently, this function always returns 0 if HD is valid.) */
+/* Clears the current search result and resets the handle's position. */
gpg_error_t keydb_search_reset (KEYDB_HANDLE hd);
-/* Search the database for keys matching the search description. If
- the DB contains any legacy keys, these are silently ignored.
-
- DESC is an array of search terms with NDESC entries. The search
- terms are or'd together. That is, the next entry in the DB that
- matches any of the descriptions will be returned.
-
- Note: this function resumes searching where the last search left
- off (i.e., at the current file position). If you want to search
- from the start of the database, then you need to first call
- keydb_search_reset().
-
- If no key matches the search description, returns
- GPG_ERR_NOT_FOUND. If there was a match, returns 0. If an error
- occurred, returns an error code.
-
- The returned key is considered to be selected and the raw data can,
- for instance, be returned by calling keydb_get_keyblock(). */
+/* Search the database for keys matching the search description. */
gpg_error_t keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc,
size_t ndesc, size_t *descindex);
-/* Return the first non-legacy key in the database.
-
- If you want the very first key in the database, you can directly
- call keydb_search with the search description
- KEYDB_SEARCH_MODE_FIRST. */
+/* Return the first non-legacy key in the database. */
gpg_error_t keydb_search_first (KEYDB_HANDLE hd);
-/* Return the next key (not the next matching key!).
-
- Unlike calling keydb_search with KEYDB_SEARCH_MODE_NEXT, this
- function silently skips legacy keys. */
+/* Return the next key (not the next matching key!). */
gpg_error_t keydb_search_next (KEYDB_HANDLE hd);
/* This is a convenience function for searching for keys with a long
- key id.
-
- Note: this function resumes searching where the last search left
- off. If you want to search the whole database, then you need to
- first call keydb_search_reset(). */
+ key id. */
gpg_error_t keydb_search_kid (KEYDB_HANDLE hd, u32 *kid);
/* This is a convenience function for searching for keys with a long
- (20 byte) fingerprint.
-
- Note: this function resumes searching where the last search left
- off. If you want to search the whole database, then you need to
- first call keydb_search_reset(). */
+ (20 byte) fingerprint. */
gpg_error_t keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr);
int check_signatures_trust( PKT_signature *sig );
void release_pk_list (PK_LIST pk_list);
-int build_pk_list (ctrl_t ctrl,
- strlist_t rcpts, PK_LIST *ret_pk_list, unsigned use);
+int build_pk_list (ctrl_t ctrl, strlist_t rcpts, PK_LIST *ret_pk_list);
gpg_error_t find_and_check_key (ctrl_t ctrl,
const char *name, unsigned int use,
int mark_hidden, pk_list_t *pk_list_addr);
/*-- getkey.c --*/
-/* Cache a copy of a public key in the public key cache. PK is not
- cached if caching is disabled (via getkey_disable_caches), if
- PK->FLAGS.DONT_CACHE is set, we don't know how to derive a key id
- from the public key (e.g., unsupported algorithm), or a key with
- the key id is already in the cache.
-
- The public key packet is copied into the cache using
- copy_public_key. Thus, any secret parts are not copied, for
- instance.
-
- This cache is filled by get_pubkey and is read by get_pubkey and
- get_pubkey_fast. */
+/* Cache a copy of a public key in the public key cache. */
void cache_public_key( PKT_public_key *pk );
-/* Disable and drop the public key cache (which is filled by
- cache_public_key and get_pubkey). Note: there is currently no way
- to reenable this cache. */
+/* Disable and drop the public key cache. */
void getkey_disable_caches(void);
-/* Return the public key with the key id KEYID and store it in *PK.
- The resources in *PK should be released using
- release_public_key_parts(). This function also stores a copy of
- the public key in the user id cache (see cache_public_key).
+/* Return the public key with the key id KEYID and store it at PK. */
+int get_pubkey( PKT_public_key *pk, u32 *keyid );
- If PK is NULL, this function just stores the public key in the
- cache and returns the usual return code.
+/* Similar to get_pubkey, but it does not take PK->REQ_USAGE into
+ account nor does it merge in the self-signed data. This function
+ also only considers primary keys. */
+int get_pubkey_fast (PKT_public_key *pk, u32 *keyid);
- PK->REQ_USAGE (which is a mask of PUBKEY_USAGE_SIG,
- PUBKEY_USAGE_ENC and PUBKEY_USAGE_CERT) is passed through to the
- lookup function. If this is non-zero, only keys with the specified
- usage will be returned. As such, it is essential that
- PK->REQ_USAGE be correctly initialized!
+/* Return the key block for the key with KEYID. */
+kbnode_t get_pubkeyblock (u32 *keyid);
- Returns 0 on success, GPG_ERR_NO_PUBKEY if there is no public key
- with the specified key id, or another error code if an error
- occurs.
+/* A list used by get_pubkeys to gather all of the matches. */
+struct pubkey_s
+{
+ struct pubkey_s *next;
+ /* The key to use (either the public key or the subkey). */
+ PKT_public_key *pk;
+ kbnode_t keyblock;
+};
+typedef struct pubkey_s *pubkey_t;
- If the data was not read from the cache, then the self-signed data
- has definitely been merged into the public key using
- merge_selfsigs. */
-int get_pubkey( PKT_public_key *pk, u32 *keyid );
+/* Free a single key. This does not remove key from any list! */
+void pubkey_free (pubkey_t key);
-/* Similar to get_pubkey, but it does not take PK->REQ_USAGE into
- account nor does it merge in the self-signed data. This function
- also only considers primary keys. It is intended to be used as a
- quick check of the key to avoid recursion. It should only be used
- in very certain cases. Like get_pubkey and unlike any of the other
- lookup functions, this function also consults the user id cache
- (see cache_public_key).
-
- Return the public key in *PK. The resources in *PK should be
- released using release_public_key_parts(). */
-int get_pubkey_fast ( PKT_public_key *pk, u32 *keyid );
-
-/* Return the key block for the key with key id KEYID or NULL, if an
- error occurs. Use release_kbnode() to release the key block.
-
- The self-signed data has already been merged into the public key
- using merge_selfsigs. */
-KBNODE get_pubkeyblock( u32 *keyid );
-
-/* Find a public key identified by the name NAME.
-
- If name appears to be a valid valid RFC822 mailbox (i.e., email
- address) and auto key lookup is enabled (no_akl == 0), then the
- specified auto key lookup methods (--auto-key-lookup) are used to
- import the key into the local keyring. Otherwise, just the local
- keyring is consulted.
-
-
- If RETCTX is not NULL, then the constructed context is returned in
- *RETCTX so that getpubkey_next can be used to get subsequent
- results. In this case, getkey_end() must be used to free the
- search context. If RETCTX is not NULL, then RET_KDBHD must be
- NULL.
-
- If PK is not NULL, the public key of the first result is returned
- in *PK. Note: PK->REQ_USAGE must be valid!!! PK->REQ_USAGE is
- passed through to the lookup function and is a mask of
- PUBKEY_USAGE_SIG, PUBKEY_USAGE_ENC and PUBKEY_USAGE_CERT. If this
- is non-zero, only keys with the specified usage will be returned.
- Note: The self-signed data has already been merged into the public
- key using merge_selfsigs. Free *PK by calling
- release_public_key_parts (or, if PK was allocated using xfree, you
- can use free_public_key, which calls release_public_key_parts(PK)
- and then xfree(PK)).
-
- NAME is a string, which is turned into a search query using
- classify_user_id.
-
- If RET_KEYBLOCK is not NULL, the keyblock is returned in
- *RET_KEYBLOCK. This should be freed using release_kbnode().
-
- If RET_KDBHD is not NULL, then the new database handle used to
- conduct the search is returned in *RET_KDBHD. This can be used to
- get subsequent results using keydb_search_next or to modify the
- returned record. Note: in this case, no advanced filtering is done
- for subsequent results (e.g., PK->REQ_USAGE is not respected).
- Unlike RETCTX, this is always returned.
-
- If INCLUDE_UNUSABLE is set, then unusable keys (see the
- documentation for skip_unusable for an exact definition) are
- skipped unless they are looked up by key id or by fingerprint.
-
- If NO_AKL is set, then the auto key locate functionality is
- disabled and only the local key ring is considered. Note: the
- local key ring is consulted even if local is not in the
- --auto-key-locate option list!
-
- This function returns 0 on success. Otherwise, an error code is
- returned. In particular, GPG_ERR_NO_PUBKEY or GPG_ERR_NO_SECKEY
- (if want_secret is set) is returned if the key is not found. */
+/* Free a list of public keys. */
+void pubkeys_free (pubkey_t keys);
+
+/* Returns all keys that match the search specfication SEARCH_TERMS.
+ The returned keys should be freed using pubkeys_free. */
+gpg_error_t
+get_pubkeys (ctrl_t ctrl,
+ char *search_terms, int use, int include_unusable, char *source,
+ int warn_possibly_ambiguous,
+ pubkey_t *r_keys);
+
+/* Find a public key identified by NAME. */
int get_pubkey_byname (ctrl_t ctrl,
GETKEY_CTX *retctx, PKT_public_key *pk,
const char *name,
KBNODE *ret_keyblock, KEYDB_HANDLE *ret_kdbhd,
int include_unusable, int no_akl );
-/* Return the public key with the key id KEYID and store it in *PK.
- The resources should be released using release_public_key_parts().
-
- Unlike other lookup functions, PK may not be NULL. PK->REQ_USAGE
- is passed through to the lookup function and is a mask of
- PUBKEY_USAGE_SIG, PUBKEY_USAGE_ENC and PUBKEY_USAGE_CERT. Thus, it
- must be valid! If this is non-zero, only keys with the specified
- usage will be returned.
-
- Returns 0 on success. If a public key with the specified key id is
- not found or a secret key is not available for that public key, an
- error code is returned. Note: this function ignores legacy keys.
- An error code is also return if an error occurs.
-
- The self-signed data has already been merged into the public key
- using merge_selfsigs. */
+/* Return the public key with the key id KEYID iff the secret key is
+ * available and store it at PK. */
gpg_error_t get_seckey (PKT_public_key *pk, u32 *keyid);
-/* Lookup a key with the specified fingerprint.
-
- If PK is not NULL, the public key of the first result is returned
- in *PK. Note: this function does an exact search and thus the
- returned public key may be a subkey rather than the primary key.
- Note: The self-signed data has already been merged into the public
- key using merge_selfsigs. Free *PK by calling
- release_public_key_parts (or, if PK was allocated using xfree, you
- can use free_public_key, which calls release_public_key_parts(PK)
- and then xfree(PK)).
-
- If PK->REQ_USAGE is set, it is used to filter the search results.
- (Thus, if PK is not NULL, PK->REQ_USAGE must be valid!!!) See the
- documentation for finish_lookup to understand exactly how this is
- used.
-
- If R_KEYBLOCK is not NULL, then the first result's keyblock is
- returned in *R_KEYBLOCK. This should be freed using
- release_kbnode().
-
- FPRINT is a byte array whose contents is the fingerprint to use as
- the search term. FPRINT_LEN specifies the length of the
- fingerprint (in bytes). Currently, only 16 and 20-byte
- fingerprints are supported. */
+/* Lookup a key with the specified fingerprint. */
int get_pubkey_byfprint (PKT_public_key *pk, kbnode_t *r_keyblock,
const byte *fprint, size_t fprint_len);
/* This function is similar to get_pubkey_byfprint, but it doesn't
merge the self-signed data into the public key and subkeys or into
- the user ids. It also doesn't add the key to the user id cache.
- Further, this function ignores PK->REQ_USAGE.
-
- This function is intended to avoid recursion and, as such, should
- only be used in very specific situations.
-
- Like get_pubkey_byfprint, PK may be NULL. In that case, this
- function effectively just checks for the existence of the key. */
+ the user ids. */
int get_pubkey_byfprint_fast (PKT_public_key *pk,
const byte *fprint, size_t fprint_len);
of when the option is given) that is available. */
const char *parse_def_secret_key (ctrl_t ctrl);
-/* Look up a secret key.
-
- If PK is not NULL, the public key of the first result is returned
- in *PK. Note: PK->REQ_USAGE must be valid!!! If PK->REQ_USAGE is
- set, it is used to filter the search results. See the
- documentation for finish_lookup to understand exactly how this is
- used. Note: The self-signed data has already been merged into the
- public key using merge_selfsigs. Free *PK by calling
- release_public_key_parts (or, if PK was allocated using xfree, you
- can use free_public_key, which calls release_public_key_parts(PK)
- and then xfree(PK)).
-
- If --default-key was set, then the specified key is looked up. (In
- this case, the default key is returned even if it is considered
- unusable. See the documentation for skip_unusable for exactly what
- this means.)
-
- Otherwise, this initiates a DB scan that returns all keys that are
- usable (see previous paragraph for exactly what usable means) and
- for which a secret key is available.
-
- This function returns the first match. Additional results can be
- returned using getkey_next. */
+/* Look up a secret key. */
gpg_error_t get_seckey_default (ctrl_t ctrl, PKT_public_key *pk);
-/* Search for keys matching some criteria.
-
- If RETCTX is not NULL, then the constructed context is returned in
- *RETCTX so that getpubkey_next can be used to get subsequent
- results. In this case, getkey_end() must be used to free the
- search context. If RETCTX is not NULL, then RET_KDBHD must be
- NULL.
-
- If PK is not NULL, the public key of the first result is returned
- in *PK. Note: PK->REQ_USAGE must be valid!!! If PK->REQ_USAGE is
- set, it is used to filter the search results. See the
- documentation for finish_lookup to understand exactly how this is
- used. Note: The self-signed data has already been merged into the
- public key using merge_selfsigs. Free *PK by calling
- release_public_key_parts (or, if PK was allocated using xfree, you
- can use free_public_key, which calls release_public_key_parts(PK)
- and then xfree(PK)).
-
- If NAMES is not NULL, then a search query is constructed using
- classify_user_id on each of the strings in the list. (Recall: the
- database does an OR of the terms, not an AND.) If NAMES is
- NULL, then all results are returned.
-
- If WANT_SECRET is set, then only keys with an available secret key
- (either locally or via key registered on a smartcard) are returned.
-
- This function does not skip unusable keys (see the documentation
- for skip_unusable for an exact definition).
-
- If RET_KEYBLOCK is not NULL, the keyblock is returned in
- *RET_KEYBLOCK. This should be freed using release_kbnode().
-
- This function returns 0 on success. Otherwise, an error code is
- returned. In particular, GPG_ERR_NO_PUBKEY or GPG_ERR_NO_SECKEY
- (if want_secret is set) is returned if the key is not found. */
+/* Search for keys matching some criteria. */
gpg_error_t getkey_bynames (getkey_ctx_t *retctx, PKT_public_key *pk,
strlist_t names, int want_secret,
kbnode_t *ret_keyblock);
-/* Search for keys matching some criteria.
-
- If RETCTX is not NULL, then the constructed context is returned in
- *RETCTX so that getpubkey_next can be used to get subsequent
- results. In this case, getkey_end() must be used to free the
- search context. If RETCTX is not NULL, then RET_KDBHD must be
- NULL.
-
- If PK is not NULL, the public key of the first result is returned
- in *PK. Note: PK->REQ_USAGE must be valid!!! If PK->REQ_USAGE is
- set, it is used to filter the search results. See the
- documentation for finish_lookup to understand exactly how this is
- used. Note: The self-signed data has already been merged into the
- public key using merge_selfsigs. Free *PK by calling
- release_public_key_parts (or, if PK was allocated using xfree, you
- can use free_public_key, which calls release_public_key_parts(PK)
- and then xfree(PK)).
-
- If NAME is not NULL, then a search query is constructed using
- classify_user_id on the string. In this case, even unusable keys
- (see the documentation for skip_unusable for an exact definition of
- unusable) are returned. Otherwise, if --default-key was set, then
- that key is returned (even if it is unusable). If neither of these
- conditions holds, then the first usable key is returned.
-
- If WANT_SECRET is set, then only keys with an available secret key
- (either locally or via key registered on a smartcard) are returned.
-
- This function does not skip unusable keys (see the documentation
- for skip_unusable for an exact definition).
-
- If RET_KEYBLOCK is not NULL, the keyblock is returned in
- *RET_KEYBLOCK. This should be freed using release_kbnode().
-
- This function returns 0 on success. Otherwise, an error code is
- returned. In particular, GPG_ERR_NO_PUBKEY or GPG_ERR_NO_SECKEY
- (if want_secret is set) is returned if the key is not found.
-
- FIXME: We also have the get_pubkey_byname function which has a
- different semantic. Should be merged with this one. */
+/* Search for one key matching some criteria. */
gpg_error_t getkey_byname (ctrl_t ctrl,
getkey_ctx_t *retctx, PKT_public_key *pk,
const char *name, int want_secret,
kbnode_t *ret_keyblock);
-/* Return the next search result.
-
- If PK is not NULL, the public key of the next result is returned in
- *PK. Note: The self-signed data has already been merged into the
- public key using merge_selfsigs. Free *PK by calling
- release_public_key_parts (or, if PK was allocated using xfree, you
- can use free_public_key, which calls release_public_key_parts(PK)
- and then xfree(PK)).
-
- The self-signed data has already been merged into the public key
- using merge_selfsigs. */
+/* Return the next search result. */
gpg_error_t getkey_next (getkey_ctx_t ctx, PKT_public_key *pk,
kbnode_t *ret_keyblock);
-/* Release any resources used by a key listing content. This must be
- called on the context returned by, e.g., getkey_byname. */
+/* Release any resources used by a key listing context. */
void getkey_end (getkey_ctx_t ctx);
/* Return the database handle used by this context. The context still
owns the handle. */
KEYDB_HANDLE get_ctx_handle(GETKEY_CTX ctx);
-/* Enumerate some secret keys (specifically, those specified with
- --default-key and --try-secret-key). Use the following procedure:
-
- 1) Initialize a void pointer to NULL
- 2) Pass a reference to this pointer to this function (content)
- and provide space for the secret key (sk)
- 3) Call this function as long as it does not return an error (or
- until you are done). The error code GPG_ERR_EOF indicates the
- end of the listing.
- 4) Call this function a last time with SK set to NULL,
- so that can free it's context.
-
- In pseudo-code:
-
- void *ctx = NULL;
- PKT_public_key *sk = xmalloc_clear (sizeof (*sk));
- gpg_error_t err;
-
- while ((err = enum_secret_keys (&ctx, sk)))
- {
- // Process SK.
-
- if (done)
- break;
-
- free_public_key (sk);
- sk = xmalloc_clear (sizeof (*sk));
- }
-
- // Release any resources used by CTX.
- enum_secret_keys (&ctx, NULL);
- free_public_key (sk);
-
- if (gpg_err_code (err) != GPG_ERR_EOF)
- ; // An error occurred.
- */
+/* Enumerate some secret keys. */
gpg_error_t enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *pk);
-/* Set the mainkey_id fields for all keys in KEYBLOCK. This is
- usually done by merge_selfsigs but at some places we only need the
- main_kid not a full merge. The function also guarantees that all
- pk->keyids are computed. */
+/* Set the mainkey_id fields for all keys in KEYBLOCK. */
void setup_main_keyids (kbnode_t keyblock);
-/* KEYBLOCK corresponds to a public key block. This function merges
- much of the information from the self-signed data into the public
- key, public subkey and user id data structures. If you use the
- high-level search API (e.g., get_pubkey) for looking up key blocks,
- then you don't need to call this function. This function is
- useful, however, if you change the keyblock, e.g., by adding or
- removing a self-signed data packet. */
-void merge_keys_and_selfsig( KBNODE keyblock );
+/* This function merges information from the self-signed data into the
+ data structures. */
+void merge_keys_and_selfsig (kbnode_t keyblock);
char*get_user_id_string_native( u32 *keyid );
char*get_long_user_id_string( u32 *keyid );
if (only_selfsigs
&& !(keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1]))
- ; /* Not a selfsig but we want only selfsigs - skip. */
+ {
+ /* Not a selfsig but we want only selfsigs - skip. */
+ /* Static analyzer note: A claim that KEYID above has
+ garbage is not correct because KEYID is set from the
+ public key packet which is always the first packet in
+ a keyblock and thus parsed before this signature. */
+ }
else if (print_and_check_one_sig (keyblock, node, &inv_sigs,
&no_key, &oth_err, &selfsig,
0, only_selfsigs))
}
if (!has_selfsig)
mis_selfsig++;
- if (inv_sigs == 1)
- tty_printf (_("1 bad signature\n"));
- else if (inv_sigs)
- tty_printf (_("%d bad signatures\n"), inv_sigs);
- if (no_key == 1)
- tty_printf (_("1 signature not checked due to a missing key\n"));
- else if (no_key)
- tty_printf (_("%d signatures not checked due to missing keys\n"), no_key);
- if (oth_err == 1)
- tty_printf (_("1 signature not checked due to an error\n"));
- else if (oth_err)
- tty_printf (_("%d signatures not checked due to errors\n"), oth_err);
- if (mis_selfsig == 1)
- tty_printf (_("1 user ID without valid self-signature detected\n"));
- else if (mis_selfsig)
- tty_printf (_("%d user IDs without valid self-signatures detected\n"),
- mis_selfsig);
+
+ if (inv_sigs)
+ tty_printf (ngettext("%d bad signature\n",
+ "%d bad signatures\n", inv_sigs), inv_sigs);
+
+ if (no_key)
+ tty_printf (ngettext("%d signature not checked due to a missing key\n",
+ "%d signatures not checked due to missing keys\n",
+ no_key), no_key);
+
+ if (oth_err)
+ tty_printf (ngettext("%d signature not checked due to an error\n",
+ "%d signatures not checked due to errors\n",
+ oth_err), oth_err);
+
+ if (mis_selfsig)
+ tty_printf (ngettext("%d user ID without valid self-signature detected\n",
+ "%d user IDs without valid self-signatures detected\n",
+ mis_selfsig), mis_selfsig);
return inv_sigs || no_key || oth_err || mis_selfsig;
}
if (primary_pk->expiredate && !selfsig)
{
+ /* Static analyzer note: A claim that PRIMARY_PK might be
+ NULL is not correct because it set from the public key
+ packet which is always the first packet in a keyblock and
+ parsed in the above loop over the keyblock. In case the
+ keyblock has no packets at all and thus the loop was not
+ entered the above count_uids_with_flag would have
+ detected this case. */
+
u32 now = make_timestamp ();
if (primary_pk->expiredate <= now)
}
/* Change the passphrase for all keys. */
- for (any = 0, node = keyblock; node; node = node->next)
+ for (node = keyblock; node; node = node->next)
{
if (node->pkt->pkttype == PKT_PUBLIC_KEY
|| node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
#endif /*!NO_TRUST_MODELS*/
cmdSHOWPREF,
cmdSETPREF, cmdPREFKS, cmdNOTATION, cmdINVCMD, cmdSHOWPHOTO, cmdUPDTRUST,
- cmdCHKTRUST, cmdADDCARDKEY, cmdKEYTOCARD, cmdBKUPTOCARD, cmdCHECKBKUPKEY,
+ cmdCHKTRUST, cmdADDCARDKEY, cmdKEYTOCARD, cmdBKUPTOCARD,
cmdCLEAN, cmdMINIMIZE, cmdGRIP, cmdNOP
};
N_("move a key to a smartcard")},
{ "bkuptocard", cmdBKUPTOCARD, KEYEDIT_NEED_SK | KEYEDIT_ONLY_SK,
N_("move a backup key to a smartcard")},
- { "checkbkupkey", cmdCHECKBKUPKEY, KEYEDIT_NEED_SK | KEYEDIT_ONLY_SK, NULL},
#endif /*ENABLE_CARD_SUPPORT */
{ "delkey", cmdDELKEY, KEYEDIT_NOT_SK, N_("delete selected subkeys")},
{ "addrevoker", cmdADDREVOKER, KEYEDIT_NOT_SK | KEYEDIT_NEED_SK,
break;
case cmdBKUPTOCARD:
- case cmdCHECKBKUPKEY:
- log_debug ("FIXME: This needs to be changed\n");
{
/* Ask for a filename, check whether this is really a
backup key as generated by the card generation, parse
that key and store it on card. */
KBNODE node;
- const char *fname;
+ char *fname;
PACKET *pkt;
IOBUF a;
- fname = arg_string;
- if (!*fname)
+ if (!*arg_string)
{
tty_printf (_("Command expects a filename argument\n"));
break;
}
+ if (*arg_string == DIRSEP_C)
+ fname = xstrdup (arg_string);
+ else if (*arg_string == '~')
+ fname = make_filename (arg_string, NULL);
+ else
+ fname = make_filename (opt.homedir, arg_string, NULL);
+
/* Open that file. */
a = iobuf_open (fname);
if (a && is_secured_file (iobuf_get_fd (a)))
a = NULL;
gpg_err_set_errno (EPERM);
}
- if (!a)
- {
- tty_printf (_("Can't open '%s': %s\n"),
- fname, strerror (errno));
- break;
- }
+ if (!a)
+ {
+ tty_printf (_("Can't open '%s': %s\n"),
+ fname, strerror (errno));
+ xfree (fname);
+ break;
+ }
/* Parse and check that file. */
pkt = xmalloc (sizeof *pkt);
if (!err && pkt->pkttype != PKT_SECRET_KEY
&& pkt->pkttype != PKT_SECRET_SUBKEY)
err = GPG_ERR_NO_SECKEY;
- if (err)
- {
- tty_printf (_("Error reading backup key from '%s': %s\n"),
- fname, gpg_strerror (err));
- free_packet (pkt);
- xfree (pkt);
- break;
- }
+ if (err)
+ {
+ tty_printf (_("Error reading backup key from '%s': %s\n"),
+ fname, gpg_strerror (err));
+ xfree (fname);
+ free_packet (pkt);
+ xfree (pkt);
+ break;
+ }
+
+ xfree (fname);
node = new_kbnode (pkt);
- if (cmd == cmdCHECKBKUPKEY)
- {
- /* PKT_public_key *sk = node->pkt->pkt.secret_key; */
- /* switch (is_secret_key_protected (sk)) */
- /* { */
- /* case 0: /\* Not protected. *\/ */
- /* tty_printf (_("This key is not protected.\n")); */
- /* break; */
- /* case -1: */
- /* log_error (_("unknown key protection algorithm\n")); */
- /* break; */
- /* default: */
- /* if (sk->protect.s2k.mode == 1001) */
- /* tty_printf (_("Secret parts of key" */
- /* " are not available.\n")); */
- /* if (sk->protect.s2k.mode == 1002) */
- /* tty_printf (_("Secret parts of key" */
- /* " are stored on-card.\n")); */
- /* else */
- /* check_secret_key (sk, 0); */
- /* } */
- }
- else /* Store it. */
- {
- if (card_store_subkey (node, 0))
- {
- redisplay = 1;
- sec_shadowing = 1;
- }
- }
- release_kbnode (node);
- }
- break;
+ /* Transfer it to gpg-agent which handles secret keys. */
+ err = transfer_secret_keys (ctrl, NULL, node, 1, 1);
+
+ /* Treat the pkt as a public key. */
+ pkt->pkttype = PKT_PUBLIC_KEY;
+
+ /* Ask gpg-agent to store the secret key to card. */
+ if (card_store_subkey (node, 0))
+ {
+ redisplay = 1;
+ sec_shadowing = 1;
+ }
+ release_kbnode (node);
+ }
+ break;
#endif /* ENABLE_CARD_SUPPORT */
kdbhd = keydb_new ();
if (!kdbhd)
{
- err = gpg_error_from_syserror ();
+ /* Note that keydb_new has already used log_error. */
goto leave;
}
opt.legacy_list_mode?
((int) keystrlen () + 13):5, "");
/* Ownertrust is only meaningful for the PGP or
- classic trust models */
+ classic trust models, or PGP combined with TOFU */
if (opt.trust_model == TM_PGP
- || opt.trust_model == TM_CLASSIC)
+ || opt.trust_model == TM_CLASSIC
+ || opt.trust_model == TM_TOFU_PGP)
{
int width = 14 - strlen (otrust);
if (width <= 0)
if (changed)
{
commit_kbnode (&pub_keyblock);
- tty_printf (changed == 1 ? _("Deleted %d signature.\n")
- : _("Deleted %d signatures.\n"), changed);
+ tty_printf (ngettext("Deleted %d signature.\n",
+ "Deleted %d signatures.\n", changed), changed);
}
else
tty_printf (_("Nothing deleted.\n"));
}
else if (sigs)
{
- tty_printf (sigs == 1 ?
- _("User ID \"%s\": %d signature removed\n") :
- _("User ID \"%s\": %d signatures removed\n"),
- user, sigs);
-
+ tty_printf (ngettext("User ID \"%s\": %d signature removed\n",
+ "User ID \"%s\": %d signatures removed\n",
+ sigs), user, sigs);
modified = 1;
}
else
static gpg_error_t gen_card_key (int algo, int keyno, int is_primary,
kbnode_t pub_root,
u32 *timestamp, u32 expireval);
-static int gen_card_key_with_backup (int algo, int keyno, int is_primary,
- kbnode_t pub_root, u32 timestamp,
- u32 expireval, struct para_data_s *para);
static void
static unsigned
ask_keysize (int algo, unsigned int primary_keysize)
{
- unsigned int nbits, min, def = DEFAULT_STD_KEYSIZE, max=4096;
+ unsigned int nbits;
+ unsigned int min = 1024;
+ unsigned int def = DEFAULT_STD_KEYSIZE;
+ unsigned int max = 4096;
int for_subkey = !!primary_keysize;
int autocomp = 0;
- if(opt.expert)
- min=512;
- else
- min=1024;
-
if (primary_keysize && !opt.expert)
{
/* Deduce the subkey size from the primary key size. */
goto leave;
}
+ /* Deviations from the standard values. */
switch(algo)
{
case PUBKEY_ALGO_DSA:
+ min = opt.expert? 768 : 1024;
def=2048;
max=3072;
break;
def=255;
max=441;
break;
-
- case PUBKEY_ALGO_RSA:
- min=1024;
- break;
}
tty_printf(_("%s keys may be between %u and %u bits long.\n"),
&& curves[idx].fix_curve)
{
if (subkey_algo && *subkey_algo == PUBKEY_ALGO_ECDSA)
- {
- *subkey_algo = PUBKEY_ALGO_EDDSA;
- result = xstrdup ("Ed25519");
- }
+ *subkey_algo = PUBKEY_ALGO_EDDSA;
*algo = PUBKEY_ALGO_EDDSA;
result = xstrdup ("Ed25519");
}
}
else if( digitp(aname) )
tty_printf(_("Name may not start with a digit\n"));
- else if( strlen(aname) < 5 )
+ else if (*aname && strlen (aname) < 5)
+ {
tty_printf(_("Name must be at least 5 characters long\n"));
+ /* However, we allow an empty name. */
+ }
else
break;
}
xfree(uid);
uid = p = xmalloc(strlen(aname)+strlen(amail)+strlen(acomment)+12+10);
- p = stpcpy(p, aname );
- if( *acomment )
- p = stpcpy(stpcpy(stpcpy(p," ("), acomment),")");
- if( *amail )
- p = stpcpy(stpcpy(stpcpy(p," <"), amail),">");
+ if (!*aname && *amail && !*acomment && !random_is_faked ())
+ { /* Empty name and comment but with mail address. Use
+ simplified form with only the non-angle-bracketed mail
+ address. */
+ p = stpcpy (p, amail);
+ }
+ else
+ {
+ p = stpcpy (p, aname );
+ if (*acomment)
+ p = stpcpy(stpcpy(stpcpy(p," ("), acomment),")");
+ if (*amail)
+ p = stpcpy(stpcpy(stpcpy(p," <"), amail),">");
+ }
/* Append a warning if the RNG is switched into fake mode. */
if ( random_is_faked () )
}
-/* MODE 0 - standard
- 1 - Ask for passphrase of the card backup key. */
-#if 0
-static DEK *
-do_ask_passphrase (STRING2KEY **ret_s2k, int mode, int *r_canceled)
-{
- DEK *dek = NULL;
- STRING2KEY *s2k;
- const char *errtext = NULL;
- const char *custdesc = NULL;
-
- tty_printf(_("You need a Passphrase to protect your secret key.\n\n") );
-
- if (mode == 1)
- custdesc = _("Please enter a passphrase to protect the off-card "
- "backup of the new encryption key.");
-
- s2k = xmalloc_secure( sizeof *s2k );
- for(;;) {
- s2k->mode = opt.s2k_mode;
- s2k->hash_algo = S2K_DIGEST_ALGO;
- dek = passphrase_to_dek_ext (NULL, 0, opt.s2k_cipher_algo, s2k, 2,
- errtext, custdesc, NULL, r_canceled);
- if (!dek && *r_canceled) {
- xfree(dek); dek = NULL;
- xfree(s2k); s2k = NULL;
- break;
- }
- else if( !dek ) {
- errtext = N_("passphrase not correctly repeated; try again");
- tty_printf(_("%s.\n"), _(errtext));
- }
- else if( !dek->keylen ) {
- xfree(dek); dek = NULL;
- xfree(s2k); s2k = NULL;
- tty_printf(_(
- "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"));
- break;
- }
- else
- break; /* okay */
- }
- *ret_s2k = s2k;
- return dek;
-}
-#endif /* 0 */
-
-
/* Basic key generation. Here we divert to the actual generation
routines based on the requested algorithm. */
static int
}
else
{
+ r = get_parameter (para, pKEYSERVER);
log_error("%s:%d: invalid keyserver url\n", fname, r->lnr );
return -1;
}
para = r;
r = xmalloc_clear (sizeof *r + 20);
r->key = for_subkey? pSUBKEYTYPE : pKEYTYPE;
- sprintf (r->u.value, "%d", algo);
+ snprintf (r->u.value, 20, "%d", algo);
r->next = para;
para = r;
|| algo == PUBKEY_ALGO_ECDH)
{
curve = ask_curve (&algo, NULL);
- nbits = 0;
r = xmalloc_clear (sizeof *r + strlen (curve));
r->key = pKEYCURVE;
strcpy (r->u.value, curve);
}
-#if 0 /* not required */
-/* Generate a raw key and return it as a secret key packet. The
- function will ask for the passphrase and return a protected as well
- as an unprotected copy of a new secret key packet. 0 is returned
- on success and the caller must then free the returned values. */
-static int
-generate_raw_key (int algo, unsigned int nbits, u32 created_at,
- PKT_secret_key **r_sk_unprotected,
- PKT_secret_key **r_sk_protected)
+/* Create and delete a dummy packet to start off a list of kbnodes. */
+static void
+start_tree(KBNODE *tree)
{
- int rc;
- DEK *dek = NULL;
- STRING2KEY *s2k = NULL;
- PKT_secret_key *sk = NULL;
- int i;
- size_t nskey, npkey;
- gcry_sexp_t s_parms, s_key;
- int canceled;
+ PACKET *pkt;
- npkey = pubkey_get_npkey (algo);
- nskey = pubkey_get_nskey (algo);
- assert (nskey <= PUBKEY_MAX_NSKEY && npkey < nskey);
+ pkt=xmalloc_clear(sizeof(*pkt));
+ pkt->pkttype=PKT_NONE;
+ *tree=new_kbnode(pkt);
+ delete_kbnode(*tree);
+}
- if (nbits < 512)
- {
- nbits = 512;
- log_info (_("keysize invalid; using %u bits\n"), nbits );
- }
- if ((nbits % 32))
+/* Write the *protected* secret key to the file. */
+static gpg_error_t
+card_write_key_to_backup_file (PKT_public_key *sk, const char *backup_dir)
+{
+ gpg_error_t err = 0;
+ int rc;
+ char name_buffer[50];
+ char *fname;
+ IOBUF fp;
+ mode_t oldmask;
+ PACKET *pkt = NULL;
+
+ keyid_from_pk (sk, NULL);
+ snprintf (name_buffer, sizeof name_buffer, "sk_%08lX%08lX.gpg",
+ (ulong)sk->keyid[0], (ulong)sk->keyid[1]);
+
+ fname = make_filename (backup_dir, name_buffer, NULL);
+ /* Note that the umask call is not anymore needed because
+ iobuf_create now takes care of it. However, it does not harm
+ and thus we keep it. */
+ oldmask = umask (077);
+ if (is_secured_filename (fname))
{
- nbits = ((nbits + 31) / 32) * 32;
- log_info(_("keysize rounded up to %u bits\n"), nbits );
+ fp = NULL;
+ gpg_err_set_errno (EPERM);
}
-
- dek = do_ask_passphrase (&s2k, 1, &canceled);
- if (canceled)
+ else
+ fp = iobuf_create (fname, 1);
+ umask (oldmask);
+ if (!fp)
{
- rc = gpg_error (GPG_ERR_CANCELED);
+ err = gpg_error_from_syserror ();
+ log_error (_("can't create backup file '%s': %s\n"), fname, strerror (errno) );
goto leave;
}
- sk = xmalloc_clear (sizeof *sk);
- sk->timestamp = created_at;
- sk->version = 4;
- sk->pubkey_algo = algo;
+ pkt = xcalloc (1, sizeof *pkt);
+ pkt->pkttype = PKT_SECRET_KEY;
+ pkt->pkt.secret_key = sk;
- if ( !is_RSA (algo) )
+ rc = build_packet (fp, pkt);
+ if (rc)
{
- log_error ("only RSA is supported for offline generated keys\n");
- rc = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
- goto leave;
+ log_error ("build packet failed: %s\n", gpg_strerror (rc));
+ iobuf_cancel (fp);
}
- rc = gcry_sexp_build (&s_parms, NULL,
- "(genkey(rsa(nbits %d)))",
- (int)nbits);
+ else
+ {
+ char *fprbuf;
+
+ iobuf_close (fp);
+ iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)fname);
+ log_info (_("Note: backup of card key saved to '%s'\n"), fname);
+
+ fprbuf = hexfingerprint (sk, NULL, 0);
+ write_status_text_and_buffer (STATUS_BACKUP_KEY_CREATED, fprbuf,
+ fname, strlen (fname), 0);
+ xfree (fprbuf);
+ }
+
+ leave:
+ xfree (pkt);
+ xfree (fname);
+ return err;
+}
+
+
+/* Store key to card and make a backup file in OpenPGP format. */
+static gpg_error_t
+card_store_key_with_backup (ctrl_t ctrl, PKT_public_key *sub_psk,
+ const char *backup_dir)
+{
+ PKT_public_key *sk;
+ gnupg_isotime_t timestamp;
+ gpg_error_t err;
+ char *hexgrip;
+ int rc;
+ struct agent_card_info_s info;
+ gcry_cipher_hd_t cipherhd = NULL;
+ char *cache_nonce = NULL;
+ void *kek = NULL;
+ size_t keklen;
+
+ sk = copy_public_key (NULL, sub_psk);
+ if (!sk)
+ return gpg_error_from_syserror ();
+
+ epoch2isotime (timestamp, (time_t)sk->timestamp);
+ err = hexkeygrip_from_pk (sk, &hexgrip);
+ if (err)
+ return err;
+
+ memset(&info, 0, sizeof (info));
+ rc = agent_scd_getattr ("SERIALNO", &info);
if (rc)
- log_bug ("gcry_sexp_build failed: %s\n", gpg_strerror (rc));
- rc = gcry_pk_genkey (&s_key, s_parms);
- gcry_sexp_release (s_parms);
+ return (gpg_error_t)rc;
+
+ rc = agent_keytocard (hexgrip, 2, 1, info.serialno, timestamp);
+ xfree (info.serialno);
if (rc)
{
- log_error ("gcry_pk_genkey failed: %s\n", gpg_strerror (rc) );
+ err = (gpg_error_t)rc;
goto leave;
}
- rc = key_from_sexp (sk->skey, s_key, "private-key", "nedpqu");
- gcry_sexp_release (s_key);
- if (rc)
+
+ err = agent_keywrap_key (ctrl, 1, &kek, &keklen);
+ if (err)
{
- log_error ("key_from_sexp failed: %s\n", gpg_strerror (rc) );
+ log_error ("error getting the KEK: %s\n", gpg_strerror (err));
goto leave;
}
- for (i=npkey; i < nskey; i++)
- sk->csum += checksum_mpi (sk->skey[i]);
-
- if (r_sk_unprotected)
- *r_sk_unprotected = copy_secret_key (NULL, sk);
-
- rc = genhelp_protect (dek, s2k, sk);
- if (rc)
- goto leave;
-
- if (r_sk_protected)
+ err = gcry_cipher_open (&cipherhd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_AESWRAP, 0);
+ if (!err)
+ err = gcry_cipher_setkey (cipherhd, kek, keklen);
+ if (err)
{
- *r_sk_protected = sk;
- sk = NULL;
+ log_error ("error setting up an encryption context: %s\n", gpg_strerror (err));
+ goto leave;
}
- leave:
- if (sk)
- free_secret_key (sk);
- xfree (dek);
- xfree (s2k);
- return rc;
-}
-#endif /* ENABLE_CARD_SUPPORT */
+ err = receive_seckey_from_agent (ctrl, cipherhd, &cache_nonce, hexgrip, sk);
+ if (err)
+ {
+ log_error ("error getting secret key from agent: %s\n", gpg_strerror (err));
+ goto leave;
+ }
-/* Create and delete a dummy packet to start off a list of kbnodes. */
-static void
-start_tree(KBNODE *tree)
-{
- PACKET *pkt;
+ err = card_write_key_to_backup_file (sk, backup_dir);
+ if (err)
+ log_error ("writing card key to backup file: %s\n", gpg_strerror (err));
+ else
+ /* Remove secret key data in agent side. */
+ agent_scd_learn (NULL, 1);
- pkt=xmalloc_clear(sizeof(*pkt));
- pkt->pkttype=PKT_NONE;
- *tree=new_kbnode(pkt);
- delete_kbnode(*tree);
+ leave:
+ xfree (cache_nonce);
+ gcry_cipher_close (cipherhd);
+ xfree (kek);
+ xfree (hexgrip);
+ free_public_key (sk);
+ return err;
}
if (!err && get_parameter (para, pSUBKEYTYPE))
{
sub_psk = NULL;
- if (!card)
+ s = NULL;
+ if (!card || (s = get_parameter_value (para, pCARDBACKUPKEY)))
{
err = do_create (get_parameter_algo (para, pSUBKEYTYPE, NULL),
get_parameter_uint (para, pSUBKEYLENGTH),
pub_root,
timestamp,
get_parameter_u32 (para, pSUBKEYEXPIRE), 1,
- outctrl->keygen_flags,
+ s ? KEYGEN_FLAG_NO_PROTECTION : outctrl->keygen_flags,
get_parameter_passphrase (para),
&cache_nonce);
/* Get the pointer to the generated public subkey packet. */
if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
sub_psk = node->pkt->pkt.public_key;
assert (sub_psk);
+
+ if (s)
+ err = card_store_key_with_backup (ctrl, sub_psk, opt.homedir);
}
}
else
{
- if ((s = get_parameter_value (para, pCARDBACKUPKEY)))
- {
- /* A backup of the encryption key has been requested.
- Generate the key in software and import it then to
- the card. Write a backup file. */
- err = gen_card_key_with_backup
- (PUBKEY_ALGO_RSA, 2, 0, pub_root, timestamp,
- get_parameter_u32 (para, pKEYEXPIRE), para);
- }
- else
- {
- err = gen_card_key (PUBKEY_ALGO_RSA, 2, 0, pub_root,
- ×tamp,
- get_parameter_u32 (para, pKEYEXPIRE));
- }
+ err = gen_card_key (PUBKEY_ALGO_RSA, 2, 0, pub_root, ×tamp,
+ get_parameter_u32 (para, pKEYEXPIRE));
}
if (!err)
return gpg_error (GPG_ERR_NOT_SUPPORTED);
#endif /*!ENABLE_CARD_SUPPORT*/
}
-
-
-
-static int
-gen_card_key_with_backup (int algo, int keyno, int is_primary,
- KBNODE pub_root, u32 timestamp,
- u32 expireval, struct para_data_s *para)
-{
-#if ENABLE_CARD_SUPPORT && 0
- /* FIXME: Move this to gpg-agent. */
- int rc;
- const char *s;
- PACKET *pkt;
- PKT_secret_key *sk, *sk_unprotected = NULL, *sk_protected = NULL;
- PKT_public_key *pk;
- size_t n;
- int i;
- unsigned int nbits;
-
- /* Get the size of the key directly from the card. */
- {
- struct agent_card_info_s info;
-
- memset (&info, 0, sizeof info);
- if (!agent_scd_getattr ("KEY-ATTR", &info)
- && info.key_attr[1].algo)
- nbits = info.key_attr[1].nbits;
- else
- nbits = 1024; /* All pre-v2.0 cards. */
- agent_release_card_info (&info);
- }
-
- /* Create a key of this size in memory. */
- rc = generate_raw_key (algo, nbits, timestamp,
- &sk_unprotected, &sk_protected);
- if (rc)
- return rc;
-
- /* Store the key to the card. */
- rc = save_unprotected_key_to_card (sk_unprotected, keyno);
- if (rc)
- {
- log_error (_("storing key onto card failed: %s\n"), gpg_strerror (rc));
- free_secret_key (sk_unprotected);
- free_secret_key (sk_protected);
- write_status_errcode ("save_key_to_card", rc);
- return rc;
- }
-
- /* Get rid of the secret key parameters and store the serial numer. */
- sk = sk_unprotected;
- n = pubkey_get_nskey (sk->pubkey_algo);
- for (i=pubkey_get_npkey (sk->pubkey_algo); i < n; i++)
- {
- gcry_mpi_release (sk->skey[i]);
- sk->skey[i] = NULL;
- }
- i = pubkey_get_npkey (sk->pubkey_algo);
- sk->skey[i] = gcry_mpi_set_opaque (NULL, xstrdup ("dummydata"), 10*8);
- sk->is_protected = 1;
- sk->protect.s2k.mode = 1002;
- s = get_parameter_value (para, pSERIALNO);
- assert (s);
- for (sk->protect.ivlen=0; sk->protect.ivlen < 16 && *s && s[1];
- sk->protect.ivlen++, s += 2)
- sk->protect.iv[sk->protect.ivlen] = xtoi_2 (s);
-
- /* Now write the *protected* secret key to the file. */
- {
- char name_buffer[50];
- char *fname;
- IOBUF fp;
- mode_t oldmask;
-
- keyid_from_sk (sk, NULL);
- snprintf (name_buffer, sizeof name_buffer, "sk_%08lX%08lX.gpg",
- (ulong)sk->keyid[0], (ulong)sk->keyid[1]);
-
- fname = make_filename (backup_dir, name_buffer, NULL);
- /* Note that the umask call is not anymore needed because
- iobuf_create now takes care of it. However, it does not harm
- and thus we keep it. */
- oldmask = umask (077);
- if (is_secured_filename (fname))
- {
- fp = NULL;
- gpg_err_set_errno (EPERM);
- }
- else
- fp = iobuf_create (fname, 1);
- umask (oldmask);
- if (!fp)
- {
- rc = gpg_error_from_syserror ();
- log_error (_("can't create backup file '%s': %s\n"),
- fname, strerror(errno) );
- xfree (fname);
- free_secret_key (sk_unprotected);
- free_secret_key (sk_protected);
- return rc;
- }
-
- pkt = xcalloc (1, sizeof *pkt);
- pkt->pkttype = PKT_SECRET_KEY;
- pkt->pkt.secret_key = sk_protected;
- sk_protected = NULL;
-
- rc = build_packet (fp, pkt);
- if (rc)
- {
- log_error("build packet failed: %s\n", gpg_strerror (rc));
- iobuf_cancel (fp);
- }
- else
- {
- unsigned char array[MAX_FINGERPRINT_LEN];
- char *fprbuf, *p;
-
- iobuf_close (fp);
- iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)fname);
- log_info (_("Note: backup of card key saved to '%s'\n"), fname);
-
- fingerprint_from_sk (sk, array, &n);
- p = fprbuf = xmalloc (MAX_FINGERPRINT_LEN*2 + 1 + 1);
- for (i=0; i < n ; i++, p += 2)
- sprintf (p, "%02X", array[i]);
- *p++ = ' ';
- *p = 0;
-
- write_status_text_and_buffer (STATUS_BACKUP_KEY_CREATED,
- fprbuf,
- fname, strlen (fname),
- 0);
- xfree (fprbuf);
- }
- free_packet (pkt);
- xfree (pkt);
- xfree (fname);
- if (rc)
- {
- free_secret_key (sk_unprotected);
- return rc;
- }
- }
-
- /* Create the public key from the secret key. */
- pk = xcalloc (1, sizeof *pk );
- pk->timestamp = sk->timestamp;
- pk->version = sk->version;
- if (expireval)
- pk->expiredate = sk->expiredate = sk->timestamp + expireval;
- pk->pubkey_algo = sk->pubkey_algo;
- n = pubkey_get_npkey (sk->pubkey_algo);
- for (i=0; i < n; i++)
- pk->pkey[i] = mpi_copy (sk->skey[i]);
-
- /* Build packets and add them to the node lists. */
- pkt = xcalloc (1,sizeof *pkt);
- pkt->pkttype = is_primary ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY;
- pkt->pkt.public_key = pk;
- add_kbnode(pub_root, new_kbnode( pkt ));
-
- pkt = xcalloc (1,sizeof *pkt);
- pkt->pkttype = is_primary ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY;
- pkt->pkt.secret_key = sk;
- add_kbnode(sec_root, new_kbnode( pkt ));
-
- return 0;
-#else
-# if __GCC__ && ENABLE_CARD_SUPPORT
-# warning Card support still missing
-# endif
- (void)algo;
- (void)keyno;
- (void)is_primary;
- (void)pub_root;
- (void)timestamp;
- (void)expireval;
- (void)para;
- return gpg_error (GPG_ERR_NOT_SUPPORTED);
-#endif /*!ENABLE_CARD_SUPPORT*/
-}
-
-
-#if 0
-int
-save_unprotected_key_to_card (PKT_public_key *sk, int keyno)
-{
- int rc;
- unsigned char *rsa_n = NULL;
- unsigned char *rsa_e = NULL;
- unsigned char *rsa_p = NULL;
- unsigned char *rsa_q = NULL;
- size_t rsa_n_len, rsa_e_len, rsa_p_len, rsa_q_len;
- unsigned char *sexp = NULL;
- unsigned char *p;
- char numbuf[55], numbuf2[50];
-
- assert (is_RSA (sk->pubkey_algo));
- assert (!sk->is_protected);
-
- /* Copy the parameters into straight buffers. */
- gcry_mpi_aprint (GCRYMPI_FMT_USG, &rsa_n, &rsa_n_len, sk->skey[0]);
- gcry_mpi_aprint (GCRYMPI_FMT_USG, &rsa_e, &rsa_e_len, sk->skey[1]);
- gcry_mpi_aprint (GCRYMPI_FMT_USG, &rsa_p, &rsa_p_len, sk->skey[3]);
- gcry_mpi_aprint (GCRYMPI_FMT_USG, &rsa_q, &rsa_q_len, sk->skey[4]);
- if (!rsa_n || !rsa_e || !rsa_p || !rsa_q)
- {
- rc = GPG_ERR_INV_ARG;
- goto leave;
- }
-
- /* Put the key into an S-expression. */
- sexp = p = xmalloc_secure (30
- + rsa_n_len + rsa_e_len + rsa_p_len + rsa_q_len
- + 4*sizeof (numbuf) + 25 + sizeof(numbuf) + 20);
-
- p = stpcpy (p,"(11:private-key(3:rsa(1:n");
- sprintf (numbuf, "%u:", (unsigned int)rsa_n_len);
- p = stpcpy (p, numbuf);
- memcpy (p, rsa_n, rsa_n_len);
- p += rsa_n_len;
-
- sprintf (numbuf, ")(1:e%u:", (unsigned int)rsa_e_len);
- p = stpcpy (p, numbuf);
- memcpy (p, rsa_e, rsa_e_len);
- p += rsa_e_len;
-
- sprintf (numbuf, ")(1:p%u:", (unsigned int)rsa_p_len);
- p = stpcpy (p, numbuf);
- memcpy (p, rsa_p, rsa_p_len);
- p += rsa_p_len;
-
- sprintf (numbuf, ")(1:q%u:", (unsigned int)rsa_q_len);
- p = stpcpy (p, numbuf);
- memcpy (p, rsa_q, rsa_q_len);
- p += rsa_q_len;
-
- p = stpcpy (p,"))(10:created-at");
- sprintf (numbuf2, "%lu", (unsigned long)sk->timestamp);
- sprintf (numbuf, "%lu:", (unsigned long)strlen (numbuf2));
- p = stpcpy (stpcpy (stpcpy (p, numbuf), numbuf2), "))");
-
- /* Fixme: Unfortunately we don't have the serialnumber available -
- thus we can't pass it down to the agent. */
- rc = agent_scd_writekey (keyno, NULL, sexp, p - sexp);
-
- leave:
- xfree (sexp);
- xfree (rsa_n);
- xfree (rsa_e);
- xfree (rsa_p);
- xfree (rsa_q);
- return rc;
-}
-#endif /*ENABLE_CARD_SUPPORT*/
if (format == KF_DEFAULT)
format = opt.keyid_format;
if (format == KF_DEFAULT)
- format = KF_0xLONG;
+ format = KF_SHORT;
switch (format)
{
size_t
keystrlen(void)
{
- switch(opt.keyid_format)
+ int format = opt.keyid_format;
+ if (format == KF_DEFAULT)
+ format = KF_SHORT;
+
+ switch(format)
{
case KF_SHORT:
return 8;
}
gcry_sexp_release (s_pkey);
- return 0;
+ return err;
}
if (!s->check_sigs)
return; /* Signature checking was not requested. */
- if (s->good_sigs == 1)
- log_info (_("1 good signature\n"));
- else if (s->good_sigs)
- log_info (_("%d good signatures\n"), s->good_sigs);
-
- if (s->inv_sigs == 1)
- log_info (_("1 bad signature\n"));
- else if (s->inv_sigs)
- log_info (_("%d bad signatures\n"), s->inv_sigs);
-
- if (s->no_key == 1)
- log_info (_("1 signature not checked due to a missing key\n"));
- else if (s->no_key)
- log_info (_("%d signatures not checked due to missing keys\n"), s->no_key);
-
- if (s->oth_err == 1)
- log_info (_("1 signature not checked due to an error\n"));
- else if (s->oth_err)
- log_info (_("%d signatures not checked due to errors\n"), s->oth_err);
+ if (s->good_sigs)
+ log_info (ngettext("%d good signature\n",
+ "%d good signatures\n", s->good_sigs), s->good_sigs);
+
+ if (s->inv_sigs)
+ log_info (ngettext("%d bad signature\n",
+ "%d bad signatures\n", s->inv_sigs), s->inv_sigs);
+
+ if (s->no_key)
+ log_info (ngettext("%d signature not checked due to a missing key\n",
+ "%d signatures not checked due to missing keys\n",
+ s->no_key), s->no_key);
+
+ if (s->oth_err)
+ log_info (ngettext("%d signature not checked due to an error\n",
+ "%d signatures not checked due to errors\n",
+ s->oth_err), s->oth_err);
}
if (rc && gpg_err_code (rc) != GPG_ERR_NOT_FOUND)
log_error ("keydb_search_next failed: %s\n", gpg_strerror (rc));
if (keydb_get_skipped_counter (hd))
- log_info (_("Warning: %lu key(s) skipped due to their large size\n"),
+ log_info (ngettext("Warning: %lu key skipped due to its large size\n",
+ "Warning: %lu keys skipped due to their large sizes\n",
+ keydb_get_skipped_counter (hd)),
keydb_get_skipped_counter (hd));
if (opt.check_sigs && !opt.with_colons)
#include "options.h"
#include "main.h" /*for check_key_signature()*/
#include "i18n.h"
+#include "../kbx/keybox.h"
-/* off_item is a funny named for an object used to keep track of known
- * keys. The idea was to use the offset to seek to the known keyblock, but
- * this is not possible if more than one process is using the keyring.
- */
-struct off_item {
- struct off_item *next;
- u32 kid[2];
- /*off_t off;*/
-};
-
-typedef struct off_item **OffsetHashTable;
-
-typedef struct keyring_name *KR_NAME;
-struct keyring_name
+typedef struct keyring_resource *KR_RESOURCE;
+struct keyring_resource
{
- struct keyring_name *next;
+ struct keyring_resource *next;
int read_only;
dotlock_t lockhd;
int is_locked;
int did_full_scan;
char fname[1];
};
-typedef struct keyring_name const * CONST_KR_NAME;
-
-static KR_NAME kr_names;
-static int active_handles;
-
-static OffsetHashTable kr_offtbl;
-static int kr_offtbl_ready;
+typedef struct keyring_resource const * CONST_KR_RESOURCE;
+static KR_RESOURCE kr_resources;
struct keyring_handle
{
- CONST_KR_NAME resource;
+ CONST_KR_RESOURCE resource;
struct {
- CONST_KR_NAME kr;
+ CONST_KR_RESOURCE kr;
IOBUF iobuf;
int eof;
int error;
} current;
struct {
- CONST_KR_NAME kr;
+ CONST_KR_RESOURCE kr;
off_t offset;
size_t pk_no;
size_t uid_no;
} word_match;
};
-
+/* The number of extant handles. */
+static int active_handles;
static int do_copy (int mode, const char *fname, KBNODE root,
off_t start_offset, unsigned int n_packets );
\f
-static struct off_item *
-new_offset_item (void)
-{
- struct off_item *k;
+/* We keep a cache of entries that we have entered in the DB. This
+ includes not only public keys, but also subkeys.
+
+ Note: we'd like to keep the offset of the items that are present,
+ however, this doesn't work, because another concurrent GnuPG
+ process could modify the keyring. */
+struct key_present {
+ struct key_present *next;
+ u32 kid[2];
+};
- k = xmalloc_clear (sizeof *k);
- return k;
-}
+/* For the hash table, we use separate chaining with linked lists.
+ This means that we have an array of N linked lists (buckets), which
+ is indexed by KEYID[1] mod N. Elements present in the keyring will
+ be on the list; elements not present in the keyring will not be on
+ the list.
-#if 0
-static void
-release_offset_items (struct off_item *k)
-{
- struct off_item *k2;
+ Note: since the hash table stores both present and not present
+ information, it cannot be used until we complete a full scan of the
+ keyring. This is indicated by key_present_hash_ready. */
+typedef struct key_present **key_present_hash_t;
+static key_present_hash_t key_present_hash;
+static int key_present_hash_ready;
- for (; k; k = k2)
- {
- k2 = k->next;
- xfree (k);
- }
-}
-#endif
+#define KEY_PRESENT_HASH_BUCKETS 2048
-static OffsetHashTable
-new_offset_hash_table (void)
+/* Allocate a new value for a key present hash table. */
+static struct key_present *
+key_present_value_new (void)
{
- struct off_item **tbl;
+ struct key_present *k;
- tbl = xmalloc_clear (2048 * sizeof *tbl);
- return tbl;
+ k = xmalloc_clear (sizeof *k);
+ return k;
}
-#if 0
-static void
-release_offset_hash_table (OffsetHashTable tbl)
+/* Allocate a new key present hash table. */
+static key_present_hash_t
+key_present_hash_new (void)
{
- int i;
+ struct key_present **tbl;
- if (!tbl)
- return;
- for (i=0; i < 2048; i++)
- release_offset_items (tbl[i]);
- xfree (tbl);
+ tbl = xmalloc_clear (KEY_PRESENT_HASH_BUCKETS * sizeof *tbl);
+ return tbl;
}
-#endif
-static struct off_item *
-lookup_offset_hash_table (OffsetHashTable tbl, u32 *kid)
+/* Return whether the value described by KID if it is in the hash
+ table. Otherwise, return NULL. */
+static struct key_present *
+key_present_hash_lookup (key_present_hash_t tbl, u32 *kid)
{
- struct off_item *k;
+ struct key_present *k;
- for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next)
+ for (k = tbl[(kid[1] % (KEY_PRESENT_HASH_BUCKETS - 1))]; k; k = k->next)
if (k->kid[0] == kid[0] && k->kid[1] == kid[1])
return k;
return NULL;
}
+/* Add the key to the hash table TBL if it is not already present. */
static void
-update_offset_hash_table (OffsetHashTable tbl, u32 *kid, off_t off)
+key_present_hash_update (key_present_hash_t tbl, u32 *kid)
{
- struct off_item *k;
+ struct key_present *k;
- (void)off;
-
- for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next)
+ for (k = tbl[(kid[1] % (KEY_PRESENT_HASH_BUCKETS - 1))]; k; k = k->next)
{
if (k->kid[0] == kid[0] && k->kid[1] == kid[1])
- {
- /*k->off = off;*/
- return;
- }
+ return;
}
- k = new_offset_item ();
+ k = key_present_value_new ();
k->kid[0] = kid[0];
k->kid[1] = kid[1];
- /*k->off = off;*/
- k->next = tbl[(kid[1] & 0x07ff)];
- tbl[(kid[1] & 0x07ff)] = k;
+ k->next = tbl[(kid[1] % (KEY_PRESENT_HASH_BUCKETS - 1))];
+ tbl[(kid[1] % (KEY_PRESENT_HASH_BUCKETS - 1))] = k;
}
+/* Add all the keys (public and subkeys) present in the keyblock to
+ the hash TBL. */
static void
-update_offset_hash_table_from_kb (OffsetHashTable tbl, KBNODE node, off_t off)
+key_present_hash_update_from_kb (key_present_hash_t tbl, KBNODE node)
{
for (; node; node = node->next)
{
{
u32 aki[2];
keyid_from_pk (node->pkt->pkt.public_key, aki);
- update_offset_hash_table (tbl, aki, off);
+ key_present_hash_update (tbl, aki);
}
}
}
-
+\f
/*
* Register a filename for plain keyring files. ptr is set to a
* pointer to be used to create a handles etc, or the already-issued
int
keyring_register_filename (const char *fname, int read_only, void **ptr)
{
- KR_NAME kr;
+ KR_RESOURCE kr;
if (active_handles)
- BUG (); /* We don't allow that */
+ /* There are open handles. */
+ BUG ();
- for (kr=kr_names; kr; kr = kr->next)
+ for (kr=kr_resources; kr; kr = kr->next)
{
if (same_file_p (kr->fname, fname))
{
kr->is_locked = 0;
kr->did_full_scan = 0;
/* keep a list of all issued pointers */
- kr->next = kr_names;
- kr_names = kr;
+ kr->next = kr_resources;
+ kr_resources = kr;
/* create the offset table the first time a function here is used */
- if (!kr_offtbl)
- kr_offtbl = new_offset_hash_table ();
+ if (!key_present_hash)
+ key_present_hash = key_present_hash_new ();
*ptr=kr;
int
keyring_is_writable (void *token)
{
- KR_NAME r = token;
+ KR_RESOURCE r = token;
return r? (r->read_only || !access (r->fname, W_OK)) : 0;
}
keyring_new (void *token)
{
KEYRING_HANDLE hd;
- KR_NAME resource = token;
+ KR_RESOURCE resource = token;
assert (resource);
int
keyring_lock (KEYRING_HANDLE hd, int yes)
{
- KR_NAME kr;
+ KR_RESOURCE kr;
int rc = 0;
(void)hd;
if (yes) {
/* first make sure the lock handles are created */
- for (kr=kr_names; kr; kr = kr->next) {
+ for (kr=kr_resources; kr; kr = kr->next) {
if (!keyring_is_writable(kr))
continue;
if (!kr->lockhd) {
return rc;
/* and now set the locks */
- for (kr=kr_names; kr; kr = kr->next) {
+ for (kr=kr_resources; kr; kr = kr->next) {
if (!keyring_is_writable(kr))
continue;
if (kr->is_locked)
- ;
- else if (dotlock_take (kr->lockhd, -1) ) {
+ continue;
+
+#ifdef HAVE_W32_SYSTEM
+ /* Under Windows we need to CloseHandle the file before we
+ * try to lock it. This is because another process might
+ * have taken the lock and is using keybox_file_rename to
+ * rename the base file. How if our dotlock_take below is
+ * waiting for the lock but we have the base file still
+ * open, keybox_file_rename will never succeed as we are
+ * in a deadlock. */
+ iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0,
+ (char*)kr->fname);
+#endif /*HAVE_W32_SYSTEM*/
+ if (dotlock_take (kr->lockhd, -1) ) {
log_info ("can't lock '%s'\n", kr->fname );
rc = GPG_ERR_GENERAL;
}
}
if (rc || !yes) {
- for (kr=kr_names; kr; kr = kr->next) {
+ for (kr=kr_resources; kr; kr = kr->next) {
if (!keyring_is_writable(kr))
continue;
if (!kr->is_locked)
- ;
- else if (dotlock_release (kr->lockhd))
+ continue;
+
+ if (dotlock_release (kr->lockhd))
log_info ("can't unlock '%s'\n", kr->fname );
else
kr->is_locked = 0;
rc = do_copy (3, hd->found.kr->fname, kb,
hd->found.offset, hd->found.n_packets );
if (!rc) {
- if (kr_offtbl)
+ if (key_present_hash)
{
- update_offset_hash_table_from_kb (kr_offtbl, kb, 0);
+ key_present_hash_update_from_kb (key_present_hash, kb);
}
/* better reset the found info */
hd->found.kr = NULL;
/* do the insert */
rc = do_copy (1, fname, kb, 0, 0 );
- if (!rc && kr_offtbl)
+ if (!rc && key_present_hash)
{
- update_offset_hash_table_from_kb (kr_offtbl, kb, 0);
+ key_present_hash_update_from_kb (key_present_hash, kb);
}
return rc;
int pk_no, uid_no;
int initial_skip;
int scanned_from_start;
- int use_offtbl;
+ int use_key_present_hash;
PKT_user_id *uid = NULL;
PKT_public_key *pk = NULL;
u32 aki[2];
return rc;
}
- use_offtbl = !!kr_offtbl;
- if (!use_offtbl)
+ use_key_present_hash = !!key_present_hash;
+ if (!use_key_present_hash)
{
if (DBG_LOOKUP)
log_debug ("%s: no offset table.\n", __func__);
}
- else if (!kr_offtbl_ready)
+ else if (!key_present_hash_ready)
{
if (DBG_LOOKUP)
log_debug ("%s: initializing offset table. (need_keyid: %d => 1)\n",
}
else if (ndesc == 1 && desc[0].mode == KEYDB_SEARCH_MODE_LONG_KID)
{
- struct off_item *oi;
+ struct key_present *oi;
if (DBG_LOOKUP)
log_debug ("%s: look up by long key id, checking cache\n", __func__);
- oi = lookup_offset_hash_table (kr_offtbl, desc[0].u.kid);
+ oi = key_present_hash_lookup (key_present_hash, desc[0].u.kid);
if (!oi)
{ /* We know that we don't have this key */
if (DBG_LOOKUP)
if (need_keyid)
keyid_from_pk (pk, aki);
- if (use_offtbl && !kr_offtbl_ready && scanned_from_start)
- update_offset_hash_table (kr_offtbl, aki, main_offset);
+ if (use_key_present_hash
+ && !key_present_hash_ready
+ && scanned_from_start)
+ key_present_hash_update (key_present_hash, aki);
}
else if (pkt.pkttype == PKT_USER_ID)
{
if (!rc)
{
if (DBG_LOOKUP)
- log_debug ("%s: returing success\n", __func__);
+ log_debug ("%s: returning success\n", __func__);
hd->found.offset = main_offset;
hd->found.kr = hd->current.kr;
hd->found.pk_no = pk? pk_no : 0;
hd->current.eof = 1;
/* if we scanned all keyrings, we are sure that
* all known key IDs are in our offtbl, mark that. */
- if (use_offtbl && !kr_offtbl_ready && scanned_from_start)
+ if (use_key_present_hash
+ && !key_present_hash_ready
+ && scanned_from_start)
{
- KR_NAME kr;
+ KR_RESOURCE kr;
/* First set the did_full_scan flag for this keyring. */
- for (kr=kr_names; kr; kr = kr->next)
+ for (kr=kr_resources; kr; kr = kr->next)
{
if (hd->resource == kr)
{
}
/* Then check whether all flags are set and if so, mark the
offtbl ready */
- for (kr=kr_names; kr; kr = kr->next)
+ for (kr=kr_resources; kr; kr = kr->next)
{
if (!kr->did_full_scan)
break;
}
if (!kr)
- kr_offtbl_ready = 1;
+ key_present_hash_ready = 1;
}
}
else
create_tmp_file (const char *template,
char **r_bakfname, char **r_tmpfname, IOBUF *r_fp)
{
- char *bakfname, *tmpfname;
+ gpg_error_t err;
mode_t oldmask;
- *r_bakfname = NULL;
- *r_tmpfname = NULL;
-
-# ifdef USE_ONLY_8DOT3
- /* Here is another Windoze bug?:
- * you can't rename("pubring.gpg.tmp", "pubring.gpg");
- * but rename("pubring.gpg.tmp", "pubring.aaa");
- * works. So we replace .gpg by .bak or .tmp
- */
- if (strlen (template) > 4
- && !strcmp (template+strlen(template)-4, EXTSEP_S GPGEXT_GPG) )
- {
- bakfname = xmalloc (strlen (template) + 1);
- strcpy (bakfname, template);
- strcpy (bakfname+strlen(template)-4, EXTSEP_S "bak");
+ err = keybox_tmp_names (template, 1, r_bakfname, r_tmpfname);
+ if (err)
+ return err;
- tmpfname = xmalloc (strlen( template ) + 1 );
- strcpy (tmpfname,template);
- strcpy (tmpfname+strlen(template)-4, EXTSEP_S "tmp");
+ /* Create the temp file with limited access. Note that the umask
+ call is not anymore needed because iobuf_create now takes care of
+ it. However, it does not harm and thus we keep it. */
+ oldmask = umask (077);
+ if (is_secured_filename (*r_tmpfname))
+ {
+ *r_fp = NULL;
+ gpg_err_set_errno (EPERM);
}
- else
- { /* file does not end with gpg; hmmm */
- bakfname = xmalloc (strlen( template ) + 5);
- strcpy (stpcpy(bakfname, template), EXTSEP_S "bak");
-
- tmpfname = xmalloc (strlen( template ) + 5);
- strcpy (stpcpy(tmpfname, template), EXTSEP_S "tmp");
+ else
+ *r_fp = iobuf_create (*r_tmpfname, 1);
+ umask (oldmask);
+ if (!*r_fp)
+ {
+ err = gpg_error_from_syserror ();
+ log_error (_("can't create '%s': %s\n"), *r_tmpfname, gpg_strerror (err));
+ xfree (*r_tmpfname);
+ *r_tmpfname = NULL;
+ xfree (*r_bakfname);
+ *r_bakfname = NULL;
}
-# else /* Posix file names */
- bakfname = xmalloc (strlen( template ) + 2);
- strcpy (stpcpy (bakfname,template),"~");
-
- tmpfname = xmalloc (strlen( template ) + 5);
- strcpy (stpcpy(tmpfname,template), EXTSEP_S "tmp");
-# endif /* Posix filename */
-
- /* Create the temp file with limited access. Note that the umask
- call is not anymore needed because iobuf_create now takes care
- of it. However, it does not harm and thus we keep it. */
- oldmask=umask(077);
- if (is_secured_filename (tmpfname))
- {
- *r_fp = NULL;
- gpg_err_set_errno (EPERM);
- }
- else
- *r_fp = iobuf_create (tmpfname, 1);
- umask(oldmask);
- if (!*r_fp)
- {
- int rc = gpg_error_from_syserror ();
- log_error(_("can't create '%s': %s\n"), tmpfname, strerror(errno) );
- xfree (tmpfname);
- xfree (bakfname);
- return rc;
- }
- *r_bakfname = bakfname;
- *r_tmpfname = tmpfname;
- return 0;
+ return err;
}
iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)fname );
/* First make a backup file. */
-#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- gnupg_remove (bakfname);
-#endif
- if (rename (fname, bakfname) )
- {
- rc = gpg_error_from_syserror ();
- log_error ("renaming '%s' to '%s' failed: %s\n",
- fname, bakfname, strerror(errno) );
- return rc;
- }
+ rc = keybox_file_rename (fname, bakfname);
+ if (rc)
+ goto fail;
/* then rename the file */
-#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- gnupg_remove( fname );
-#endif
- if (rename (tmpfname, fname) )
+ rc = keybox_file_rename (tmpfname, fname);
+ if (rc)
{
- rc = gpg_error_from_syserror ();
- log_error (_("renaming '%s' to '%s' failed: %s\n"),
- tmpfname, fname, strerror(errno) );
register_secured_file (fname);
goto fail;
}
/* Now make sure the file has the same permissions as the original */
-
#ifndef HAVE_DOSISH_SYSTEM
{
struct stat statbuf;
* the original file is closed */
tmpfp = NULL;
}
+ /* Static analyzer note: BAKFILENAME is never NULL here
+ because it is controlled by LASTRESNAME. */
rc = lastresname? rename_tmp_file (bakfilename, tmpfilename,
lastresname) : 0;
xfree (tmpfilename); tmpfilename = NULL;
goto leave;
if ( !(++count % 50) && noisy && !opt.quiet)
- log_info(_("%lu keys cached so far (%lu signatures)\n"),
- count, sigcount );
+ log_info (ngettext("%lu keys cached so far (%lu signature)\n",
+ "%lu keys cached so far (%lu signatures)\n",
+ sigcount),
+ count, sigcount);
}
} /* end main loop */
if (rc == -1)
log_error ("keyring_search failed: %s\n", gpg_strerror (rc));
goto leave;
}
- if(noisy || opt.verbose)
- log_info(_("%lu keys cached (%lu signatures)\n"), count, sigcount );
+
+ if (noisy || opt.verbose)
+ {
+ log_info (ngettext("%lu key cached",
+ "%lu keys cached", count), count);
+ log_printf (ngettext(" (%lu signature)\n",
+ " (%lu signatures)\n", sigcount), sigcount);
+ }
+
if (tmpfp)
{
if (iobuf_close (tmpfp))
iobuf_cancel(newfp);
goto leave;
}
- rc = 0;
}
if( mode == 2 || mode == 3 ) { /* delete or update */
iobuf_cancel(newfp);
goto leave;
}
- rc = 0;
}
/* close both files */
struct keyserver_spec *parse_keyserver_uri (const char *string,
int require_scheme);
struct keyserver_spec *parse_preferred_keyserver(PKT_signature *sig);
+int keyserver_any_configured (ctrl_t ctrl);
int keyserver_export (ctrl_t ctrl, strlist_t users);
int keyserver_import (ctrl_t ctrl, strlist_t users);
int keyserver_import_fprint (ctrl_t ctrl, const byte *fprint,size_t fprint_len,
KEYDB_SEARCH_DESC *desc, int ndesc,
struct keyserver_spec *override_keyserver,
unsigned char **r_fpr, size_t *r_fprlen);
-static gpg_error_t keyserver_put (ctrl_t ctrl, strlist_t keyspecs,
- struct keyserver_spec *keyserver);
+static gpg_error_t keyserver_put (ctrl_t ctrl, strlist_t keyspecs);
/* Reasonable guess. The commonly used test key simon.josefsson.org
if(sl)
{
- rc = keyserver_put (ctrl, sl, opt.keyserver);
+ rc = keyserver_put (ctrl, sl);
free_strlist(sl);
}
}
+/* Return true if any keyserver has been configured. */
+int
+keyserver_any_configured (ctrl_t ctrl)
+{
+ return !gpg_dirmngr_ks_list (ctrl, NULL);
+}
+
+
/* Import all keys that exactly match NAME */
int
keyserver_import_name (ctrl_t ctrl, const char *name,
opt.keyserver_options.import_options|=IMPORT_FAST;
/* If refresh_add_fake_v3_keyids is on and it's a HKP or MAILTO
- scheme, then enable fake v3 keyid generation. */
+ scheme, then enable fake v3 keyid generation. Note that this
+ works only with a keyserver configured. gpg.conf
+ (i.e. opt.keyserver); however that method of configuring a
+ keyserver is deprecated and in any case it is questionable
+ whether we should keep on supporting these ancient and broken
+ keyservers. */
if((opt.keyserver_options.options&KEYSERVER_ADD_FAKE_V3) && opt.keyserver
&& (ascii_strcasecmp(opt.keyserver->scheme,"hkp")==0 ||
ascii_strcasecmp(opt.keyserver->scheme,"mailto")==0))
struct keyserver_spec *keyserver=desc[i].skipfncvalue;
if (!opt.quiet)
- log_info (_("refreshing 1 key from %s\n"), keyserver->uri);
+ log_info (_("refreshing %d key from %s\n"), 1, keyserver->uri);
/* We use the keyserver structure we parsed out before.
Note that a preferred keyserver without a scheme://
{
if (!opt.quiet)
{
- if(count==1)
- log_info(_("refreshing 1 key from %s\n"), tmpuri);
- else
- log_info(_("refreshing %d keys from %s\n"), count, tmpuri);
+ log_info (ngettext("refreshing %d key from %s\n",
+ "refreshing %d keys from %s\n",
+ count), count, tmpuri);
}
xfree (tmpuri);
static gpg_error_t
keyserver_get_chunk (ctrl_t ctrl, KEYDB_SEARCH_DESC *desc, int ndesc,
int *r_ndesc_used,
- void *stats_handle,
+ import_stats_t stats_handle,
struct keyserver_spec *override_keyserver,
unsigned char **r_fpr, size_t *r_fprlen)
unsigned char **r_fpr, size_t *r_fprlen)
{
gpg_error_t err;
- void *stats_handle;
+ import_stats_t stats_handle;
int ndesc_used;
int any_good = 0;
}
-/* Send all keys specified by KEYSPECS to the KEYSERVERS. */
+/* Send all keys specified by KEYSPECS to the configured keyserver. */
static gpg_error_t
-keyserver_put (ctrl_t ctrl, strlist_t keyspecs,
- struct keyserver_spec *keyserver)
+keyserver_put (ctrl_t ctrl, strlist_t keyspecs)
{
gpg_error_t err;
strlist_t kspec;
+ char *ksurl;
if (!keyspecs)
return 0; /* Return success if the list is empty. */
- if (!opt.keyserver)
+ if (gpg_dirmngr_ks_list (ctrl, &ksurl))
{
- log_error (_("no keyserver known (use option --keyserver)\n"));
+ log_error (_("no keyserver known\n"));
return gpg_error (GPG_ERR_NO_KEYSERVER);
}
log_error (_("skipped \"%s\": %s\n"), kspec->d, gpg_strerror (err));
else
{
- if (keyserver->host)
- log_info (_("sending key %s to %s server %s\n"),
- keystr (keyblock->pkt->pkt.public_key->keyid),
- keyserver->scheme, keyserver->host);
- else
- log_info (_("sending key %s to %s\n"),
- keystr (keyblock->pkt->pkt.public_key->keyid),
- keyserver->uri);
+ log_info (_("sending key %s to %s\n"),
+ keystr (keyblock->pkt->pkt.public_key->keyid),
+ ksurl?ksurl:"[?]");
err = gpg_dirmngr_ks_put (ctrl, data, datalen, keyblock);
release_kbnode (keyblock);
}
}
+ xfree (ksurl);
return err;
err = gpg_dirmngr_ks_fetch (ctrl, sl->d, &datastream);
if (!err)
{
- void *stats_handle;
+ import_stats_t stats_handle;
stats_handle = import_new_stats_handle();
import_keys_es_stream (ctrl, datastream, stats_handle, NULL, NULL,
free_keyserver_spec(spec);
}
}
- else if(opt.keyserver)
+ else if (keyserver_any_configured (ctrl))
{
/* If only a fingerprint is provided, try and fetch it from
- our --keyserver */
+ the configured keyserver. */
err = keyserver_import_fprint (ctrl, *fpr,*fpr_len,opt.keyserver);
}
else
- log_info(_("no keyserver known (use option --keyserver)\n"));
+ log_info(_("no keyserver known\n"));
/* Give a better string here? "CERT fingerprint for \"%s\"
found, but no keyserver" " known (use option
void print_cipher_algo_note (cipher_algo_t algo);
void print_digest_algo_note (digest_algo_t algo);
void print_digest_rejected_note (enum gcry_md_algos algo);
+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);
/*-- armor.c --*/
#ifdef ENABLE_CARD_SUPPORT
gpg_error_t generate_card_subkeypair (kbnode_t pub_keyblock,
int keyno, const char *serialno);
-int save_unprotected_key_to_card (PKT_public_key *sk, int keyno);
#endif
gcry_md_hd_t md, int hash_algo );
/*-- import.c --*/
+struct import_stats_s;
+typedef struct import_stats_s *import_stats_t;
typedef gpg_error_t (*import_screener_t)(kbnode_t keyblock, void *arg);
int parse_import_options(char *str,unsigned int *options,int noisy);
void import_keys (ctrl_t ctrl, char **fnames, int nnames,
- void *stats_hd, unsigned int options);
-int import_keys_stream (ctrl_t ctrl, iobuf_t inp, void *stats_hd,
+ import_stats_t stats_hd, unsigned int options);
+int import_keys_stream (ctrl_t ctrl, iobuf_t inp, import_stats_t stats_hd,
unsigned char **fpr,
size_t *fpr_len, unsigned int options);
-int import_keys_es_stream (ctrl_t ctrl, estream_t fp, void *stats_handle,
+int import_keys_es_stream (ctrl_t ctrl, estream_t fp,
+ import_stats_t stats_handle,
unsigned char **fpr, size_t *fpr_len,
unsigned int options,
import_screener_t screener, void *screener_arg);
gpg_error_t import_old_secring (ctrl_t ctrl, const char *fname);
-void *import_new_stats_handle (void);
-void import_release_stats_handle (void *p);
-void import_print_stats (void *hd);
+import_stats_t import_new_stats_handle (void);
+void import_release_stats_handle (import_stats_t hd);
+void import_print_stats (import_stats_t hd);
+gpg_error_t transfer_secret_keys (ctrl_t ctrl, struct import_stats_s *stats,
+ kbnode_t sec_keyblock, int batch, int force);
int collapse_uids( KBNODE *keyblock );
kbnode_t *r_keyblock,
void **r_data, size_t *r_datalen);
+gpg_error_t receive_seckey_from_agent (ctrl_t ctrl, gcry_cipher_hd_t cipherhd,
+ char **cache_nonce_addr, const char *hexgrip,
+ PKT_public_key *pk);
+
+gpg_error_t export_ssh_key (ctrl_t ctrl, const char *userid);
+
/*-- dearmor.c --*/
int dearmor_file( const char *fname );
int enarmor_file( const char *fname );
no information from the DNS PKA, this is a third try. */
if (gpg_err_code (rc) == GPG_ERR_NO_PUBKEY
- && opt.keyserver
- && (opt.keyserver_options.options&KEYSERVER_AUTO_KEY_RETRIEVE))
+ && (opt.keyserver_options.options&KEYSERVER_AUTO_KEY_RETRIEVE)
+ && keyserver_any_configured (c->ctrl))
{
int res;
*ret_len = i;
}
else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "md_filter";
+ mem2str (buf, "md_filter", *ret_len);
return rc;
}
}
+/* Print a message
+ * "(reported error: %s)\n
+ * in verbose mode to further explain an error. If the error code has
+ * the value IGNORE_EC no message is printed. A message is also not
+ * printed if ERR is 0. */
+void
+print_reported_error (gpg_error_t err, gpg_err_code_t ignore_ec)
+{
+ if (!opt.verbose)
+ return;
+
+ if (!gpg_err_code (err))
+ ;
+ else if (gpg_err_code (err) == ignore_ec)
+ ;
+ else if (gpg_err_source (err) == GPG_ERR_SOURCE_DEFAULT)
+ log_info (_("(reported error: %s)\n"),
+ gpg_strerror (err));
+ else
+ log_info (_("(reported error: %s <%s>)\n"),
+ gpg_strerror (err), gpg_strsource (err));
+
+}
+
+
+/* Print a message
+ * "(further info: %s)\n
+ * in verbose mode to further explain an error. That message is
+ * intended to help debug a problem and should not be translated.
+ */
+void
+print_further_info (const char *format, ...)
+{
+ va_list arg_ptr;
+
+ if (!opt.verbose)
+ return;
+
+ log_info (_("(further info: "));
+ va_start (arg_ptr, format);
+ log_logv (GPGRT_LOG_CONT, format, arg_ptr);
+ va_end (arg_ptr);
+ log_printf (")\n");
+}
+
+
/* Map OpenPGP algo numbers to those used by Libgcrypt. We need to do
this for algorithms we implemented in Libgcrypt after they become
part of OpenPGP. */
value. */
int limit_card_insert_tries;
-#ifdef ENABLE_CARD_SUPPORT
- /* FIXME: We don't needs this here as it is done in scdaemon. */
- const char *ctapi_driver; /* Library to access the ctAPI. */
- const char *pcsc_driver; /* Library to access the PC/SC system. */
- int disable_ccid; /* Disable the use of the internal CCID driver. */
-#endif /*ENABLE_CARD_SUPPORT*/
-
struct
{
/* If set, require an 0x19 backsig to be present on signatures
# GnuPG. If the first non white space character of a line is a '#',
# this line is ignored. Empty lines are also ignored.
#
-# See the man page for a list of options.
+# See the gpg man page for a list of options.
-# Uncomment the following option to get rid of the copyright notice
-
-#no-greeting
# If you have more than 1 secret key in your keyring, you may want to
# uncomment the following option and set your preferred keyid.
#default-key 621CC013
+
# If you do not pass a recipient to gpg, it will ask for one. Using
# this option you can encrypt to a default key. Key validation will
# not be done in this case. The second form uses the default key as
#default-recipient some-user-id
#default-recipient-self
-# By default GnuPG creates version 4 signatures for data files as
-# specified by OpenPGP. Some earlier (PGP 6, PGP 7) versions of PGP
-# require the older version 3 signatures. Setting this option forces
-# GnuPG to create version 3 signatures.
-
-#force-v3-sigs
-
-# Because some mailers change lines starting with "From " to ">From "
-# it is good to handle such lines in a special way when creating
-# cleartext signatures; all other PGP versions do it this way too.
-# To enable full OpenPGP compliance you may want to use this option.
-
-#no-escape-from-lines
-
-# When verifying a signature made from a subkey, ensure that the cross
-# certification "back signature" on the subkey is present and valid.
-# This protects against a subtle attack against subkeys that can sign.
-# Defaults to --no-require-cross-certification. However for new
-# installations it should be enabled.
-
-require-cross-certification
-
-
-# If you do not use the Latin-1 (ISO-8859-1) charset, you should tell
-# GnuPG which is the native character set. Please check the man page
-# for supported character sets. This character set is only used for
-# metadata and not for the actual message which does not undergo any
-# translation. Note that future version of GnuPG will change to UTF-8
-# as default character set.
-
-#charset utf-8
# Group names may be defined like this:
# group mynames = paige 0x12345678 joe patti
#group mynames = paige 0x12345678 joe patti
-# Some old Windows platforms require 8.3 filenames. If your system
-# can handle long filenames, uncomment this.
-#no-mangle-dos-filenames
+# GnuPG can automatically locate and retrieve keys as needed using
+# this option. This happens when encrypting to an email address (in
+# the "user@@example.com" form) and there are no keys matching
+# "user@example.com" in the local keyring. This option takes any
+# number mechanisms which are tried in the given order. The default
+# is "--auto-key-locate local" to search for keys only in the local
+# key database. Uncomment the next line to locate a missing key using
+# two DNS based mechanisms.
-# Lock the file only once for the lifetime of a process. If you do
-# not define this, the lock will be obtained and released every time
-# it is needed - normally this is not needed.
-
-#lock-once
+#auto-key-locate local,pka,dane
# Common options for keyserver functions:
# Can be used more than once to increase the amount
# of information shown.
#
-# use-temp-files = use temporary files instead of a pipe to talk to the
-# keyserver. Some platforms (Win32 for one) always
-# have this on.
-#
-# keep-temp-files = do not delete temporary files after using them
-# (really only useful for debugging)
-#
-# honor-http-proxy = if the keyserver uses HTTP, honor the http_proxy
-# environment variable
-#
-# broken-http-proxy = try to work around a buggy HTTP proxy
-#
# auto-key-retrieve = automatically fetch keys as needed from the keyserver
# when verifying signatures or when importing keys that
# have been revoked by a revocation key that is not
#keyserver-options auto-key-retrieve
+
# Uncomment this line to display photo user IDs in key listings and
# when a signature from a key with a photo is verified.
#show-photos
+
# Use this program to display photo user IDs
#
# %i is expanded to a temporary file that contains the photo.
#
# Use your MIME handler to view photos:
# photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG"
+
+
+# Because some mailers change lines starting with "From " to ">From "
+# it is good to handle such lines in a special way when creating
+# cleartext signatures; all other PGP versions do it this way too.
+# To enable full OpenPGP compliance you may want to use this option.
+
+#no-escape-from-lines
+
+
+# Uncomment the following option to get rid of the copyright notice
+
+#no-greeting
unsigned int dont_cache:1; /* Do not cache this key. */
unsigned int backsig:2; /* 0=none, 1=bad, 2=good. */
unsigned int serialno_valid:1;/* SERIALNO below is valid. */
+ unsigned int exact:1; /* Found via exact (!) search. */
} flags;
PKT_user_id *user_id; /* If != NULL: found by that uid. */
struct revocation_key *revkey;
case 3:
for (i = 0; i < 8 && pktlen; i++, pktlen--)
temp[i] = iobuf_get_noeof (inp);
+ if (i < 8)
+ {
+ err = gpg_error (GPG_ERR_INV_PACKET);
+ goto leave;
+ }
memcpy (ski->s2k.salt, temp, 8);
break;
}
err = gpg_error (GPG_ERR_INV_PACKET);
goto leave;
}
- for (i = 0; i < ski->ivlen && pktlen; i++, pktlen--)
+ for (i = 0; i < ski->ivlen; i++, pktlen--)
temp[i] = iobuf_get_noeof (inp);
if (list_mode)
{
}
}
+ /* Note that KEYID below has been initialized above in list_mode. */
if (list_mode)
es_fprintf (listfp, "\tkeyid: %08lX%08lX\n",
(ulong) keyid[0], (ulong) keyid[1]);
pktlen -= 4;
pt->len = pktlen;
pt->buf = inp;
- pktlen = 0;
if (list_mode)
{
Bit 0 (PK_LIST_ENCRYPT_TO): This is an encrypt-to recipient.
Bit 1 (PK_LIST_HIDDEN) : This is a hidden recipient.
- USE is the desired use for the key - usually PUBKEY_USAGE_ENC.
-
On success a list of keys is stored at the address RET_PK_LIST; the
caller must free this list. On error the value at this address is
not changed.
*/
int
-build_pk_list (ctrl_t ctrl,
- strlist_t rcpts, PK_LIST *ret_pk_list, unsigned int use )
+build_pk_list (ctrl_t ctrl, strlist_t rcpts, PK_LIST *ret_pk_list)
{
PK_LIST pk_list = NULL;
PKT_public_key *pk=NULL;
else
remusr = rcpts;
+ /* XXX: Change this function to use get_pubkeys instead of
+ get_pubkey_byname to detect ambiguous key specifications and warn
+ about duplicate keyblocks. For ambiguous key specifications on
+ the command line or provided interactively, prompt the user to
+ select the best key. If a key specification is ambiguous and we
+ are in batch mode, die. */
+
+ if (opt.encrypt_to_default_key)
+ {
+ static int warned;
+
+ const char *default_key = parse_def_secret_key (ctrl);
+ if (default_key)
+ {
+ PK_LIST r = xmalloc_clear (sizeof *r);
+
+ r->pk = xmalloc_clear (sizeof *r->pk);
+ r->pk->req_usage = PUBKEY_USAGE_ENC;
+
+ rc = get_pubkey_byname (ctrl, NULL, r->pk, default_key,
+ NULL, NULL, 0, 1);
+ if (rc)
+ {
+ xfree (r->pk);
+ xfree (r);
+
+ log_error (_("can't encrypt to '%s'\n"), default_key);
+ if (!opt.quiet)
+ log_info (_("(check argument of option '%s')\n"),
+ "--default-key");
+ }
+ else
+ {
+ r->next = pk_list;
+ r->flags = 0;
+ pk_list = r;
+ }
+ }
+ else if (opt.def_secret_key)
+ {
+ if (! warned)
+ log_info (_("option '%s' given, but no valid default keys given\n"),
+ "--encrypt-to-default-key");
+ warned = 1;
+ }
+ else
+ {
+ if (! warned)
+ log_info (_("option '%s' given, but option '%s' not given\n"),
+ "--encrypt-to-default-key", "--default-key");
+ warned = 1;
+ }
+ }
+
/* Check whether there are any recipients in the list and build the
* list of the encrypt-to ones (we always trust them). */
for ( rov = remusr; rov; rov = rov->next )
compliance_failure();
}
}
- else if ( (use & PUBKEY_USAGE_ENC) && !opt.no_encrypt_to )
+ else if (!opt.no_encrypt_to)
{
- /* Encryption has been requested and --encrypt-to has not
- been disabled. Check this encrypt-to key. */
+ /* --encrypt-to has not been disabled. Check this
+ encrypt-to key. */
pk = xmalloc_clear( sizeof *pk );
- pk->req_usage = use;
+ pk->req_usage = PUBKEY_USAGE_ENC;
/* We explicitly allow encrypt-to to an disabled key; thus
we pass 1 for the second last argument and 1 as the last
send_status_inv_recp (0, rov->d);
goto fail;
}
- else if ( !(rc=openpgp_pk_test_algo2 (pk->pubkey_algo, use)) )
+ else if ( !(rc=openpgp_pk_test_algo2 (pk->pubkey_algo,
+ PUBKEY_USAGE_ENC)) )
{
/* Skip the actual key if the key is already present
* in the list. Add it to our list if not. */
/* Get and check key for the current name. */
free_public_key (pk);
pk = xmalloc_clear( sizeof *pk );
- pk->req_usage = use;
+ pk->req_usage = PUBKEY_USAGE_ENC;
rc = get_pubkey_byname (ctrl, NULL, pk, answer, NULL, NULL, 0, 0 );
if (rc)
tty_printf(_("No such user ID.\n"));
- else if ( !(rc=openpgp_pk_test_algo2 (pk->pubkey_algo, use)) )
+ else if ( !(rc=openpgp_pk_test_algo2 (pk->pubkey_algo,
+ PUBKEY_USAGE_ENC)) )
{
if ( have_def_rec )
{
{
/* We are in batch mode and have only a default recipient. */
pk = xmalloc_clear( sizeof *pk );
- pk->req_usage = use;
+ pk->req_usage = PUBKEY_USAGE_ENC;
/* The default recipient is allowed to be disabled; thus pass 1
as second last argument. We also don't want an AKL. */
rc = get_pubkey_byname (ctrl, NULL, pk, def_rec, NULL, NULL, 1, 1);
if (rc)
log_error(_("unknown default recipient \"%s\"\n"), def_rec );
- else if ( !(rc=openpgp_pk_test_algo2(pk->pubkey_algo, use)) )
+ else if ( !(rc=openpgp_pk_test_algo2(pk->pubkey_algo,
+ PUBKEY_USAGE_ENC)) )
{
/* Mark any_recipients here since the default recipient
would have been used if it wasn't already there. It
if ( (remusr->flags & PK_LIST_ENCRYPT_TO) )
continue; /* encrypt-to keys are already handled. */
- rc = find_and_check_key (ctrl, remusr->d, use,
+ rc = find_and_check_key (ctrl, remusr->d, PUBKEY_USAGE_ENC,
!!(remusr->flags&PK_LIST_HIDDEN),
&pk_list);
if (rc)
release_progress_context (pfx);
}
else if (control == IOBUFCTRL_DESC)
- *(char**)buf = "progress_filter";
+ mem2str (buf, "progress_filter", *ret_len);
return rc;
}
(int)len, tmpstr);
xfree (tmpstr);
- es_fprintf (memfp, "%s\n\n%s\n\n:",
+ es_fprintf (memfp, "%s\n\n%s\n\n%s\n\n:",
+ _("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."),
_("Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
- "a reason for the revocation."),
+ "a reason for the revocation. For details see the description of\n"
+ "of the gpg command \"--gen-revoke\" in the GnuPG manual."),
_("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 making use of this revocation certificate."));
+ "before importing and publishing this revocation certificate."));
es_putc (0, memfp);
reason.code = 0x00; /* No particular reason. */
reason.desc = NULL;
rc = create_revocation (fname, &reason, psk, NULL, leadin, 3, cache_nonce);
+ if (!rc && !opt.quiet)
+ log_info (_("revocation certificate stored as '%s.rev'\n"), fname);
+
xfree (leadin);
xfree (fname);
gpg_error_t err;
(void)ctx;
- line = skip_options (line);
+ (void)line;
+ /* line = skip_options (line); */
err = gpg_error (GPG_ERR_NOT_SUPPORTED);
return check_signature2 (sig, digest, NULL, NULL, NULL, NULL);
}
-/* Check a signature.
-
- Looks up the public key that created the signature (SIG->KEYID)
- from the key db. Makes sure that the signature is valid (it was
- not created prior to the key, the public key was created in the
- past, and the signature does not include any unsupported critical
- features), finishes computing the hash of the signature data, and
- checks that the signature verifies the digest. If the key that
- generated the signature is a subkey, this function also verifies
- that there is a valid backsig from the subkey to the primary key.
- Finally, if status fd is enabled and the signature class is 0x00 or
- 0x01, then a STATUS_SIG_ID is emitted on the status fd.
-
- SIG is the signature to check.
-
- DIGEST contains a valid hash context that already includes the
- signed data. This function adds the relevant meta-data from the
- signature packet to compute the final hash. (See Section 5.2 of
- RFC 4880: "The concatenation of the data being signed and the
- signature data from the version number through the hashed subpacket
- data (inclusive) is hashed.")
-
- If R_EXPIREDATE is not NULL, R_EXPIREDATE is set to the key's
- expiry.
- If R_EXPIRED is not NULL, *R_EXPIRED is set to 1 if PK has expired
- (0 otherwise). Note: PK being expired does not cause this function
- to fail.
-
- If R_REVOKED is not NULL, *R_REVOKED is set to 1 if PK has been
- revoked (0 otherwise). Note: PK being revoked does not cause this
- function to fail.
-
- If PK is not NULL, the public key is saved in *PK on success.
-
- Returns 0 on success. An error code otherwise. */
+/* Check a signature.
+ *
+ * Looks up the public key that created the signature (SIG->KEYID)
+ * from the key db. Makes sure that the signature is valid (it was
+ * not created prior to the key, the public key was created in the
+ * past, and the signature does not include any unsupported critical
+ * features), finishes computing the hash of the signature data, and
+ * checks that the signature verifies the digest. If the key that
+ * generated the signature is a subkey, this function also verifies
+ * that there is a valid backsig from the subkey to the primary key.
+ * Finally, if status fd is enabled and the signature class is 0x00 or
+ * 0x01, then a STATUS_SIG_ID is emitted on the status fd.
+ *
+ * SIG is the signature to check.
+ *
+ * DIGEST contains a valid hash context that already includes the
+ * signed data. This function adds the relevant meta-data from the
+ * signature packet to compute the final hash. (See Section 5.2 of
+ * RFC 4880: "The concatenation of the data being signed and the
+ * signature data from the version number through the hashed subpacket
+ * data (inclusive) is hashed.")
+ *
+ * If R_EXPIREDATE is not NULL, R_EXPIREDATE is set to the key's
+ * expiry.
+ *
+ * If R_EXPIRED is not NULL, *R_EXPIRED is set to 1 if PK has expired
+ * (0 otherwise). Note: PK being expired does not cause this function
+ * to fail.
+ *
+ * If R_REVOKED is not NULL, *R_REVOKED is set to 1 if PK has been
+ * revoked (0 otherwise). Note: PK being revoked does not cause this
+ * function to fail.
+ *
+ * If PK is not NULL, the public key is saved in *PK on success.
+ *
+ * Returns 0 on success. An error code otherwise. */
int
check_signature2 (PKT_signature *sig, gcry_md_hd_t digest, u32 *r_expiredate,
int *r_expired, int *r_revoked, PKT_public_key *pk )
/* The signature SIG was generated with the public key PK. Check
- whether the signature is valid in the following sense:
-
- - Make sure the public key was created before the signature was
- generated.
-
- - Make sure the public key was created in the past
-
- - Check whether PK has expired (set *R_EXPIRED to 1 if so and 0
- otherwise)
-
- - Check whether PK has been revoked (set *R_REVOKED to 1 if so
- and 0 otherwise).
-
- If either of the first two tests fail, returns an error code.
- Otherwise returns 0. (Thus, this function doesn't fail if the
- public key is expired or revoked.) */
+ * whether the signature is valid in the following sense:
+ *
+ * - Make sure the public key was created before the signature was
+ * generated.
+ *
+ * - Make sure the public key was created in the past
+ *
+ * - Check whether PK has expired (set *R_EXPIRED to 1 if so and 0
+ * otherwise)
+ *
+ * - Check whether PK has been revoked (set *R_REVOKED to 1 if so
+ * and 0 otherwise).
+ *
+ * If either of the first two tests fail, returns an error code.
+ * Otherwise returns 0. (Thus, this function doesn't fail if the
+ * public key is expired or revoked.) */
static int
check_signature_metadata_validity (PKT_public_key *pk, PKT_signature *sig,
int *r_expired, int *r_revoked)
if( pk->timestamp > sig->timestamp )
{
ulong d = pk->timestamp - sig->timestamp;
- log_info(d==1
- ?_("public key %s is %lu second newer than the signature\n")
- :_("public key %s is %lu seconds newer than the signature\n"),
- keystr_from_pk(pk),d );
- if( !opt.ignore_time_conflict )
+ if ( d < 86400 )
+ {
+ log_info
+ (ngettext
+ ("public key %s is %lu second newer than the signature\n",
+ "public key %s is %lu seconds newer than the signature\n",
+ d), keystr_from_pk (pk), d);
+ }
+ else
+ {
+ d /= 86400;
+ log_info
+ (ngettext
+ ("public key %s is %lu day newer than the signature\n",
+ "public key %s is %lu days newer than the signature\n",
+ d), keystr_from_pk (pk), d);
+ }
+ if (!opt.ignore_time_conflict)
return GPG_ERR_TIME_CONFLICT; /* pubkey newer than signature. */
}
if( pk->timestamp > cur_time )
{
ulong d = pk->timestamp - cur_time;
- log_info( d==1
- ? _("key %s was created %lu second"
- " in the future (time warp or clock problem)\n")
- : _("key %s was created %lu seconds"
- " in the future (time warp or clock problem)\n"),
- keystr_from_pk(pk),d );
- if( !opt.ignore_time_conflict )
+ if (d < 86400)
+ {
+ log_info (ngettext("key %s was created %lu second"
+ " in the future (time warp or clock problem)\n",
+ "key %s was created %lu seconds"
+ " in the future (time warp or clock problem)\n",
+ d), keystr_from_pk (pk), d);
+ }
+ else
+ {
+ d /= 86400;
+ log_info (ngettext("key %s was created %lu day"
+ " in the future (time warp or clock problem)\n",
+ "key %s was created %lu days"
+ " in the future (time warp or clock problem)\n",
+ d), keystr_from_pk (pk), d);
+ }
+ if (!opt.ignore_time_conflict)
return GPG_ERR_TIME_CONFLICT;
}
/* Finish generating a signature and check it. Concretely: make sure
- that the signature is valid (it was not created prior to the key,
- the public key was created in the past, and the signature does not
- include any unsupported critical features), finish computing the
- digest by adding the relevant data from the signature packet, and
- check that the signature verifies the digest.
-
- DIGEST contains a hash context, which has already hashed the signed
- data. This function adds the relevant meta-data from the signature
- packet to compute the final hash. (See Section 5.2 of RFC 4880:
- "The concatenation of the data being signed and the signature data
- from the version number through the hashed subpacket data
- (inclusive) is hashed.")
-
- SIG is the signature to check.
-
- PK is the public key used to generate the signature.
-
- If R_EXPIRED is not NULL, *R_EXPIRED is set to 1 if PK has expired
- (0 otherwise). Note: PK being expired does not cause this function
- to fail.
-
- If R_REVOKED is not NULL, *R_REVOKED is set to 1 if PK has been
- revoked (0 otherwise). Note: PK being revoked does not cause this
- function to fail.
-
- If RET_PK is not NULL, PK is copied into RET_PK on success.
-
- Returns 0 on success. An error code other. */
+ * that the signature is valid (it was not created prior to the key,
+ * the public key was created in the past, and the signature does not
+ * include any unsupported critical features), finish computing the
+ * digest by adding the relevant data from the signature packet, and
+ * check that the signature verifies the digest.
+ *
+ * DIGEST contains a hash context, which has already hashed the signed
+ * data. This function adds the relevant meta-data from the signature
+ * packet to compute the final hash. (See Section 5.2 of RFC 4880:
+ * "The concatenation of the data being signed and the signature data
+ * from the version number through the hashed subpacket data
+ * (inclusive) is hashed.")
+ *
+ * SIG is the signature to check.
+ *
+ * PK is the public key used to generate the signature.
+ *
+ * If R_EXPIRED is not NULL, *R_EXPIRED is set to 1 if PK has expired
+ * (0 otherwise). Note: PK being expired does not cause this function
+ * to fail.
+ *
+ * If R_REVOKED is not NULL, *R_REVOKED is set to 1 if PK has been
+ * revoked (0 otherwise). Note: PK being revoked does not cause this
+ * function to fail.
+ *
+ * If RET_PK is not NULL, PK is copied into RET_PK on success.
+ *
+ * Returns 0 on success. An error code other. */
static int
check_signature_end (PKT_public_key *pk, PKT_signature *sig,
gcry_md_hd_t digest,
}
}
+
/* SIG is a key revocation signature. Check if this signature was
- generated by any of the public key PK's designated revokers.
-
- PK is the public key that SIG allegedly revokes.
-
- SIG is the revocation signature to check.
-
- This function avoids infinite recursion, which can happen if two
- keys are designed revokers for each other and they revoke each
- other. This is done by observing that if a key A is revoked by key
- B we still consider the revocation to be valid even if B is
- revoked. Thus, we don't need to determine whether B is revoked to
- determine whether A has been revoked by B, we just need to check
- the signature.
-
- Returns 0 if sig is valid (i.e. pk is revoked), non-0 if not
- revoked. We are careful to make sure that GPG_ERR_NO_PUBKEY is
- only returned when a revocation signature is from a valid
- revocation key designated in a revkey subpacket, but the revocation
- key itself isn't present. */
-
-/* XXX: This code will need to be modified if gpg ever becomes
- multi-threaded. Note that this guarantees that a designated
- revocation sig will never be considered valid unless it is actually
- valid, as well as being issued by a revocation key in a valid
- direct signature. Note also that this is written so that a revoked
- revoker can still issue revocations: i.e. If A revokes B, but A is
- revoked, B is still revoked. I'm not completely convinced this is
- the proper behavior, but it matches how PGP does it. -dms */
+ * generated by any of the public key PK's designated revokers.
+ *
+ * PK is the public key that SIG allegedly revokes.
+ *
+ * SIG is the revocation signature to check.
+ *
+ * This function avoids infinite recursion, which can happen if two
+ * keys are designed revokers for each other and they revoke each
+ * other. This is done by observing that if a key A is revoked by key
+ * B we still consider the revocation to be valid even if B is
+ * revoked. Thus, we don't need to determine whether B is revoked to
+ * determine whether A has been revoked by B, we just need to check
+ * the signature.
+ *
+ * Returns 0 if sig is valid (i.e. pk is revoked), non-0 if not
+ * revoked. We are careful to make sure that GPG_ERR_NO_PUBKEY is
+ * only returned when a revocation signature is from a valid
+ * revocation key designated in a revkey subpacket, but the revocation
+ * key itself isn't present.
+ *
+ * XXX: This code will need to be modified if gpg ever becomes
+ * multi-threaded. Note that this guarantees that a designated
+ * revocation sig will never be considered valid unless it is actually
+ * valid, as well as being issued by a revocation key in a valid
+ * direct signature. Note also that this is written so that a revoked
+ * revoker can still issue revocations: i.e. If A revokes B, but A is
+ * revoked, B is still revoked. I'm not completely convinced this is
+ * the proper behavior, but it matches how PGP does it. -dms */
int
check_revocation_keys (PKT_public_key *pk, PKT_signature *sig)
{
assert((sig->keyid[0]!=pk->keyid[0]) || (sig->keyid[0]!=pk->keyid[1]));
/* Avoid infinite recursion. Consider the following:
-
- - We want to check if A is revoked.
-
- - C is a designated revoker for B and has revoked B.
-
- - B is a designated revoker for A and has revoked A.
-
- When checking if A is revoked (in merge_selfsigs_main), we
- observe that A has a designed revoker. As such, we call this
- function. This function sees that there is a valid revocation
- signature, which is signed by B. It then calls check_signature()
- to verify that the signature is good. To check the sig, we need
- to lookup B. Looking up B means calling merge_selfsigs_main,
- which checks whether B is revoked, which calls this function to
- see if B was revoked by some key.
-
- In this case, the added level of indirection doesn't hurt. It
- just means a bit more work. However, if C == A, then we'd end up
- in a loop. But, it doesn't make sense to look up C anyways: even
- if B is revoked, we conservatively consider a valid revocation
- signed by B to revoke A. Since this is the only place where this
- type of recursion can occur, we simply cause this function to
- fail if it is entered recursively. */
+ *
+ * - We want to check if A is revoked.
+ *
+ * - C is a designated revoker for B and has revoked B.
+ *
+ * - B is a designated revoker for A and has revoked A.
+ *
+ * When checking if A is revoked (in merge_selfsigs_main), we
+ * observe that A has a designed revoker. As such, we call this
+ * function. This function sees that there is a valid revocation
+ * signature, which is signed by B. It then calls check_signature()
+ * to verify that the signature is good. To check the sig, we need
+ * to lookup B. Looking up B means calling merge_selfsigs_main,
+ * which checks whether B is revoked, which calls this function to
+ * see if B was revoked by some key.
+ *
+ * In this case, the added level of indirection doesn't hurt. It
+ * just means a bit more work. However, if C == A, then we'd end up
+ * in a loop. But, it doesn't make sense to look up C anyways: even
+ * if B is revoked, we conservatively consider a valid revocation
+ * signed by B to revoke A. Since this is the only place where this
+ * type of recursion can occur, we simply cause this function to
+ * fail if it is entered recursively. */
if (busy)
{
/* Return an error (i.e. not revoked), but mark the pk as
/* Check that a signature over a key is valid. This is a
- specialization of check_key_signature2 with the unnamed parameters
- passed as NULL. See the documentation for that function for more
- details. */
+ * specialization of check_key_signature2 with the unnamed parameters
+ * passed as NULL. See the documentation for that function for more
+ * details. */
int
check_key_signature (KBNODE root, KBNODE node, int *is_selfsig)
{
return check_key_signature2 (root, node, NULL, NULL, is_selfsig, NULL, NULL);
}
-/* Check that a signature over a key (e.g., a key revocation, key
- binding, user id certification, etc.) is valid. If the function
- detects a self-signature, it uses the public key from the specified
- key block and does not bother looking up the key specified in the
- signature packet.
-
- ROOT is a keyblock.
-
- NODE references a signature packet that appears in the keyblock
- that should be verified.
-
- If CHECK_PK is set, the specified key is sometimes preferred for
- verifying signatures. See the implementation for details.
-
- If RET_PK is not NULL, the public key that successfully verified
- the signature is copied into *RET_PK.
- If IS_SELFSIG is not NULL, *IS_SELFSIG is set to 1 if NODE is a
- self-signature.
-
- If R_EXPIREDATE is not NULL, *R_EXPIREDATE is set to the expiry
- date.
-
- If R_EXPIRED is not NULL, *R_EXPIRED is set to 1 if PK has been
- expired (0 otherwise). Note: PK being revoked does not cause this
- function to fail.
-
-
- If OPT.NO_SIG_CACHE is not set, this function will first check if
- the result of a previous verification is already cached in the
- signature packet's data structure. */
-/* TODO: add r_revoked here as well. It has the same problems as
- r_expiredate and r_expired and the cache. */
+/* Check that a signature over a key (e.g., a key revocation, key
+ * binding, user id certification, etc.) is valid. If the function
+ * detects a self-signature, it uses the public key from the specified
+ * key block and does not bother looking up the key specified in the
+ * signature packet.
+ *
+ * ROOT is a keyblock.
+ *
+ * NODE references a signature packet that appears in the keyblock
+ * that should be verified.
+ *
+ * If CHECK_PK is set, the specified key is sometimes preferred for
+ * verifying signatures. See the implementation for details.
+ *
+ * If RET_PK is not NULL, the public key that successfully verified
+ * the signature is copied into *RET_PK.
+ *
+ * If IS_SELFSIG is not NULL, *IS_SELFSIG is set to 1 if NODE is a
+ * self-signature.
+ *
+ * If R_EXPIREDATE is not NULL, *R_EXPIREDATE is set to the expiry
+ * date.
+ *
+ * If R_EXPIRED is not NULL, *R_EXPIRED is set to 1 if PK has been
+ * expired (0 otherwise). Note: PK being revoked does not cause this
+ * function to fail.
+ *
+ *
+ * If OPT.NO_SIG_CACHE is not set, this function will first check if
+ * the result of a previous verification is already cached in the
+ * signature packet's data structure.
+ *
+ * TODO: add r_revoked here as well. It has the same problems as
+ * r_expiredate and r_expired and the cache. */
int
-check_key_signature2(KBNODE root, KBNODE node, PKT_public_key *check_pk,
- PKT_public_key *ret_pk, int *is_selfsig,
- u32 *r_expiredate, int *r_expired )
+check_key_signature2 (kbnode_t root, kbnode_t node, PKT_public_key *check_pk,
+ PKT_public_key *ret_pk, int *is_selfsig,
+ u32 *r_expiredate, int *r_expired )
{
- gcry_md_hd_t md;
- PKT_public_key *pk;
- PKT_signature *sig;
- int algo;
- int rc;
-
- if( is_selfsig )
- *is_selfsig = 0;
- if( r_expiredate )
- *r_expiredate = 0;
- if( r_expired )
- *r_expired = 0;
- assert( node->pkt->pkttype == PKT_SIGNATURE );
- assert( root->pkt->pkttype == PKT_PUBLIC_KEY );
-
- pk = root->pkt->pkt.public_key;
- sig = node->pkt->pkt.signature;
- algo = sig->digest_algo;
-
- /* Check whether we have cached the result of a previous signature
- check. Note that we may no longer have the pubkey or hash
- needed to verify a sig, but can still use the cached value. A
- cache refresh detects and clears these cases. */
- if ( !opt.no_sig_cache ) {
- if (sig->flags.checked) { /*cached status available*/
- if( is_selfsig ) {
- u32 keyid[2];
+ gcry_md_hd_t md;
+ PKT_public_key *pk;
+ PKT_signature *sig;
+ int algo;
+ int rc;
- keyid_from_pk( pk, keyid );
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] )
- *is_selfsig = 1;
+ if (is_selfsig)
+ *is_selfsig = 0;
+ if (r_expiredate)
+ *r_expiredate = 0;
+ if (r_expired)
+ *r_expired = 0;
+ assert (node->pkt->pkttype == PKT_SIGNATURE);
+ assert (root->pkt->pkttype == PKT_PUBLIC_KEY);
+
+ pk = root->pkt->pkt.public_key;
+ sig = node->pkt->pkt.signature;
+ algo = sig->digest_algo;
+
+ /* Check whether we have cached the result of a previous signature
+ check. Note that we may no longer have the pubkey or hash
+ needed to verify a sig, but can still use the cached value. A
+ cache refresh detects and clears these cases. */
+ if ( !opt.no_sig_cache )
+ {
+ if (sig->flags.checked) /* Cached status available. */
+ {
+ if (is_selfsig)
+ {
+ u32 keyid[2];
+
+ keyid_from_pk (pk, keyid);
+ if (keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1])
+ *is_selfsig = 1;
}
- /* BUG: This is wrong for non-self-sigs.. needs to be the
- actual pk */
- if((rc = check_signature_metadata_validity (pk, sig,
- r_expired, NULL)))
- return rc;
- return sig->flags.valid? 0 : gpg_error (GPG_ERR_BAD_SIGNATURE);
+ /* BUG: This is wrong for non-self-sigs... needs to be the
+ actual pk. */
+ rc = check_signature_metadata_validity (pk, sig, r_expired, NULL);
+ if (rc)
+ return rc;
+ return sig->flags.valid? 0 : gpg_error (GPG_ERR_BAD_SIGNATURE);
}
}
- if( (rc=openpgp_pk_test_algo(sig->pubkey_algo)) )
- return rc;
- if( (rc=openpgp_md_test_algo(algo)) )
- return rc;
-
- if( sig->sig_class == 0x20 ) { /* key revocation */
- u32 keyid[2];
- keyid_from_pk( pk, keyid );
+ rc = openpgp_pk_test_algo(sig->pubkey_algo);
+ if (rc)
+ return rc;
+ rc = openpgp_md_test_algo(algo);
+ if (rc)
+ return rc;
- /* is it a designated revoker? */
- if(keyid[0]!=sig->keyid[0] || keyid[1]!=sig->keyid[1])
- rc=check_revocation_keys(pk,sig);
- else
- {
- if (gcry_md_open (&md, algo, 0 ))
- BUG ();
- hash_public_key( md, pk );
- rc = check_signature_end (pk, sig, md, r_expired, NULL, ret_pk);
- cache_sig_result ( sig, rc );
- gcry_md_close(md);
- }
+ if (sig->sig_class == 0x20) /* key revocation */
+ {
+ u32 keyid[2];
+ keyid_from_pk( pk, keyid );
+
+ /* Is it a designated revoker? */
+ if (keyid[0] != sig->keyid[0] || keyid[1] != sig->keyid[1])
+ rc = check_revocation_keys (pk, sig);
+ else
+ {
+ if (gcry_md_open (&md, algo, 0))
+ BUG ();
+ hash_public_key (md, pk);
+ rc = check_signature_end (pk, sig, md, r_expired, NULL, ret_pk);
+ cache_sig_result (sig, rc);
+ gcry_md_close (md);
+ }
}
- else if( sig->sig_class == 0x28 ) { /* subkey revocation */
- KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY );
-
- if( snode ) {
- if (gcry_md_open (&md, algo, 0))
- BUG ();
- hash_public_key( md, pk );
- hash_public_key( md, snode->pkt->pkt.public_key );
- rc = check_signature_end (pk, sig, md, r_expired, NULL, ret_pk);
- cache_sig_result ( sig, rc );
- gcry_md_close(md);
+ else if (sig->sig_class == 0x28) /* subkey revocation */
+ {
+ kbnode_t snode = find_prev_kbnode (root, node, PKT_PUBLIC_SUBKEY);
+
+ if (snode)
+ {
+ if (gcry_md_open (&md, algo, 0))
+ BUG ();
+ hash_public_key (md, pk);
+ hash_public_key (md, snode->pkt->pkt.public_key);
+ rc = check_signature_end (pk, sig, md, r_expired, NULL, ret_pk);
+ cache_sig_result (sig, rc);
+ gcry_md_close (md);
}
- else
- {
- if (opt.verbose)
- log_info (_("key %s: no subkey for subkey"
- " revocation signature\n"),keystr_from_pk(pk));
- rc = GPG_ERR_SIG_CLASS;
- }
+ else
+ {
+ if (opt.verbose)
+ log_info (_("key %s: no subkey for subkey"
+ " revocation signature\n"), keystr_from_pk(pk));
+ rc = GPG_ERR_SIG_CLASS;
+ }
}
- else if( sig->sig_class == 0x18 ) { /* key binding */
- KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY );
+ else if (sig->sig_class == 0x18) /* key binding */
+ {
+ kbnode_t snode = find_prev_kbnode (root, node, PKT_PUBLIC_SUBKEY);
- if( snode ) {
- if( is_selfsig ) { /* does this make sense????? */
- u32 keyid[2]; /* it should always be a selfsig */
+ if (snode)
+ {
+ if (is_selfsig)
+ {
+ /* Does this make sense? It should always be a
+ selfsig. Yes: We can't be sure about this and we
+ need to be able to indicate that it is a selfsig.
+ FIXME: The question is whether we should reject
+ such a signature if it is not a selfsig. */
+ u32 keyid[2];
- keyid_from_pk( pk, keyid );
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] )
- *is_selfsig = 1;
- }
+ keyid_from_pk (pk, keyid);
+ if (keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1])
+ *is_selfsig = 1;
+ }
if (gcry_md_open (&md, algo, 0))
BUG ();
- hash_public_key( md, pk );
- hash_public_key( md, snode->pkt->pkt.public_key );
+ hash_public_key (md, pk);
+ hash_public_key (md, snode->pkt->pkt.public_key);
rc = check_signature_end (pk, sig, md, r_expired, NULL, ret_pk);
cache_sig_result ( sig, rc );
- gcry_md_close(md);
- }
+ gcry_md_close (md);
+ }
else
{
if (opt.verbose)
log_info(_("key %s: no subkey for subkey"
- " binding signature\n"),keystr_from_pk(pk));
+ " binding signature\n"), keystr_from_pk(pk));
rc = GPG_ERR_SIG_CLASS;
}
- }
- else if( sig->sig_class == 0x1f ) { /* direct key signature */
+ }
+ else if (sig->sig_class == 0x1f) /* direct key signature */
+ {
if (gcry_md_open (&md, algo, 0 ))
BUG ();
hash_public_key( md, pk );
rc = check_signature_end (pk, sig, md, r_expired, NULL, ret_pk);
- cache_sig_result ( sig, rc );
- gcry_md_close(md);
- }
- else { /* all other classes */
- KBNODE unode = find_prev_kbnode( root, node, PKT_USER_ID );
+ cache_sig_result (sig, rc);
+ gcry_md_close (md);
+ }
+ else /* all other classes */
+ {
+ kbnode_t unode = find_prev_kbnode (root, node, PKT_USER_ID);
- if( unode ) {
+ if (unode)
+ {
u32 keyid[2];
- keyid_from_pk( pk, keyid );
- if (gcry_md_open (&md, algo, 0 ))
+ keyid_from_pk (pk, keyid);
+ if (gcry_md_open (&md, algo, 0))
BUG ();
- hash_public_key( md, pk );
- hash_uid_node( unode, md, sig );
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] )
- /* The primary key is the signing key. */
- {
- if( is_selfsig )
+ hash_public_key (md, pk);
+ hash_uid_node (unode, md, sig);
+ if (keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1])
+ { /* The primary key is the signing key. */
+
+ if (is_selfsig)
*is_selfsig = 1;
rc = check_signature_end (pk, sig, md, r_expired, NULL, ret_pk);
}
else if (check_pk)
- /* The caller specified a key. Try that. */
- rc = check_signature_end (check_pk, sig, md,
- r_expired, NULL, ret_pk);
+ { /* The caller specified a key. Try that. */
+
+ rc = check_signature_end (check_pk, sig, md,
+ r_expired, NULL, ret_pk);
+ }
else
- /* Look up the key. XXX: Could it be that the key is
- not is not in this keyblock? */
- rc = check_signature2 (sig, md, r_expiredate, r_expired,
- NULL, ret_pk);
+ { /* Look up the key. */
+ rc = check_signature2 (sig, md, r_expiredate, r_expired,
+ NULL, ret_pk);
+ }
- cache_sig_result ( sig, rc );
- gcry_md_close(md);
- }
+ cache_sig_result (sig, rc);
+ gcry_md_close (md);
+ }
else
{
if (!opt.quiet)
" of class %02x\n",keystr_from_pk(pk),sig->sig_class);
rc = GPG_ERR_SIG_CLASS;
}
- }
+ }
- return rc;
+ return rc;
}
if (pksk->timestamp > sig->timestamp )
{
ulong d = pksk->timestamp - sig->timestamp;
- log_info (d==1 ? _("key has been created %lu second "
- "in future (time warp or clock problem)\n")
- : _("key has been created %lu seconds "
- "in future (time warp or clock problem)\n"), d );
+ log_info (ngettext("key %s was created %lu second"
+ " in the future (time warp or clock problem)\n",
+ "key %s was created %lu seconds"
+ " in the future (time warp or clock problem)\n",
+ d), keystr_from_pk (pksk), d);
if (!opt.ignore_time_conflict)
return gpg_error (GPG_ERR_TIME_CONFLICT);
}
-
print_pubkey_algo_note (pksk->pubkey_algo);
if (!mdalgo)
if (!opt.no_literal) {
PACKET pkt;
+ /* Note that PT has been initialized above in no_literal mode. */
pt->timestamp = make_timestamp ();
pt->mode = ptmode;
pt->len = filesize;
goto leave;
if (encryptflag
- && (rc=build_pk_list (ctrl, remusr, &pk_list, PUBKEY_USAGE_ENC)))
+ && (rc=build_pk_list (ctrl, remusr, &pk_list)))
goto leave;
/* prepare iobufs */
gpg_error_t err;
SK_LIST sk_list = NULL;
+ /* XXX: Change this function to use get_pubkeys instead of
+ getkey_byname to detect ambiguous key specifications and warn
+ about duplicate keyblocks. For ambiguous key specifications on
+ the command line or provided interactively, prompt the user to
+ select the best key. If a key specification is ambiguous and we
+ are in batch mode, die. */
+
if (!locusr) /* No user ids given - use the default key. */
{
PKT_public_key *pk;
rec->r.ver.trust_model = *p++;
rec->r.ver.min_cert_level = *p++;
p += 2;
- rec->r.ver.created = buf32_to_ulong(p); p += 4;
- rec->r.ver.nextcheck = buf32_to_ulong(p); p += 4;
+ rec->r.ver.created = buf32_to_ulong(p);
p += 4;
+ rec->r.ver.nextcheck = buf32_to_ulong(p);
p += 4;
- rec->r.ver.firstfree =buf32_to_ulong(p); p += 4;
p += 4;
- rec->r.ver.trusthashtbl =buf32_to_ulong(p); p += 4;
+ p += 4;
+ rec->r.ver.firstfree = buf32_to_ulong(p);
+ p += 4;
+ p += 4;
+ rec->r.ver.trusthashtbl = buf32_to_ulong(p);
if (recnum)
{
log_error( _("%s: version record with recnum %lu\n"), db_name,
break;
case RECTYPE_FREE:
- rec->r.free.next = buf32_to_ulong(p); p += 4;
+ rec->r.free.next = buf32_to_ulong(p);
break;
case RECTYPE_HTBL:
for (i=0; i < ITEMS_PER_HTBL_RECORD; i++)
{
- rec->r.htbl.item[i] = buf32_to_ulong(p); p += 4;
+ rec->r.htbl.item[i] = buf32_to_ulong(p);
+ p += 4;
}
break;
case RECTYPE_HLST:
- rec->r.hlst.next = buf32_to_ulong(p); p += 4;
+ rec->r.hlst.next = buf32_to_ulong(p);
+ p += 4;
for (i=0; i < ITEMS_PER_HLST_RECORD; i++)
{
- rec->r.hlst.rnum[i] = buf32_to_ulong(p); p += 4;
+ rec->r.hlst.rnum[i] = buf32_to_ulong(p);
+ p += 4;
}
break;
case RECTYPE_TRUST:
- memcpy (rec->r.trust.fingerprint, p, 20); p+=20;
+ memcpy (rec->r.trust.fingerprint, p, 20);
+ p+=20;
rec->r.trust.ownertrust = *p++;
rec->r.trust.depth = *p++;
rec->r.trust.min_ownertrust = *p++;
p++;
- rec->r.trust.validlist = buf32_to_ulong(p); p += 4;
+ rec->r.trust.validlist = buf32_to_ulong(p);
break;
case RECTYPE_VALID:
- memcpy (rec->r.valid.namehash, p, 20); p+=20;
+ memcpy (rec->r.valid.namehash, p, 20);
+ p+=20;
rec->r.valid.validity = *p++;
- rec->r.valid.next = buf32_to_ulong(p); p += 4;
+ rec->r.valid.next = buf32_to_ulong(p);
+ p += 4;
rec->r.valid.full_count = *p++;
rec->r.valid.marginal_count = *p++;
break;
}
int
+keyserver_any_configured (ctrl_t ctrl)
+{
+ (void)ctrl;
+ return 0;
+}
+
+int
keyserver_import_keyid (u32 *keyid, void *dummy)
{
(void)keyid;
int expected_result; \
\
tests ++; \
- \
- printf ("%d. Checking %s...", \
- tests, (description) ?: ""); \
- fflush (stdout); \
- \
+ if (verbose) \
+ { \
+ printf ("%d. Checking %s...", \
+ tests, (description) ?: ""); \
+ fflush (stdout); \
+ } \
test_result = (test); \
expected_result = (expected); \
\
tfx->buffer = NULL;
}
else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "text_filter";
+ mem2str (buf, "text_filter", *ret_len);
return rc;
}
#include "options.h"
#include "mbox-util.h"
#include "i18n.h"
+#include "ttyio.h"
#include "trustdb.h"
#include "mkdir_p.h"
#include "sqlite.h"
#include "tofu.h"
+
+#define CONTROL_L ('L' - 'A' + 1)
+
+
#define DEBUG_TOFU_CACHE 0
#if DEBUG_TOFU_CACHE
static int prepares_saved;
#define TIME_AGO_FUTURE_IGNORE (2 * 60 * 60)
#if 0
# define TIME_AGO_UNIT_SMALL 60
-# define TIME_AGO_UNIT_SMALL_NAME _("minute")
-# define TIME_AGO_UNIT_SMALL_NAME_PLURAL _("minutes")
# define TIME_AGO_MEDIUM_THRESHOLD (60 * TIME_AGO_UNIT_SMALL)
# define TIME_AGO_UNIT_MEDIUM (60 * 60)
-# define TIME_AGO_UNIT_MEDIUM_NAME _("hour")
-# define TIME_AGO_UNIT_MEDIUM_NAME_PLURAL _("hours")
# define TIME_AGO_LARGE_THRESHOLD (24 * 60 * TIME_AGO_UNIT_SMALL)
# define TIME_AGO_UNIT_LARGE (24 * 60 * 60)
-# define TIME_AGO_UNIT_LARGE_NAME _("day")
-# define TIME_AGO_UNIT_LARGE_NAME_PLURAL _("days")
#else
# define TIME_AGO_UNIT_SMALL (24 * 60 * 60)
-# define TIME_AGO_UNIT_SMALL_NAME _("day")
-# define TIME_AGO_UNIT_SMALL_NAME_PLURAL _("days")
# define TIME_AGO_MEDIUM_THRESHOLD (4 * TIME_AGO_UNIT_SMALL)
# define TIME_AGO_UNIT_MEDIUM (7 * 24 * 60 * 60)
-# define TIME_AGO_UNIT_MEDIUM_NAME _("week")
-# define TIME_AGO_UNIT_MEDIUM_NAME_PLURAL _("weeks")
# define TIME_AGO_LARGE_THRESHOLD (28 * TIME_AGO_UNIT_SMALL)
# define TIME_AGO_UNIT_LARGE (30 * 24 * 60 * 60)
-# define TIME_AGO_UNIT_LARGE_NAME _("month")
-# define TIME_AGO_UNIT_LARGE_NAME_PLURAL _("months")
#endif
\f
"savepoint batch;", SQLITE_ARG_END);
if (rc)
{
- log_error
- (_("error beginning %s transaction on TOFU database '%s': %s\n"),
- "batch", *db->name ? db->name : "combined", err);
+ log_error (_("error beginning transaction on TOFU database: %s\n"),
+ err);
+ print_further_info ("batch, database '%s'",
+ *db->name ? db->name : "[combined]");
sqlite3_free (err);
return gpg_error (GPG_ERR_GENERAL);
}
"savepoint inner;", SQLITE_ARG_END);
if (rc)
{
- log_error
- (_("error beginning %s transaction on TOFU database '%s': %s\n"),
- "inner", *db->name ? db->name : "combined", err);
+ log_error (_("error beginning transaction on TOFU database: %s\n"),
+ err);
+ print_further_info ("inner, database '%s'",
+ *db->name ? db->name : "[combined]");
sqlite3_free (err);
return gpg_error (GPG_ERR_GENERAL);
}
int rc;
char *err = NULL;
+ if (!db)
+ return 0; /* Shortcut to allow for easier cleanup code. */
+
if ((! batch_update || only_batch == 2) && db->batch_update)
/* The batch transaction is still in open, but we left batch
mode. */
"release batch;", SQLITE_ARG_END);
if (rc)
{
- log_error
- (_("error committing %s transaction on TOFU database '%s': %s\n"),
- "batch", *db->name ? db->name : "combined", err);
+ log_error (_("error committing transaction on TOFU database: %s\n"),
+ err);
+ print_further_info ("batch, database '%s'",
+ *db->name ? db->name : "[combined]");
sqlite3_free (err);
return gpg_error (GPG_ERR_GENERAL);
}
"release inner;", SQLITE_ARG_END);
if (rc)
{
- log_error
- (_("error committing %s transaction on TOFU database '%s': %s\n"),
- "inner", *db->name ? db->name : "combined", err);
+ log_error (_("error committing transaction on TOFU database: %s\n"),
+ err);
+ print_further_info ("inner, database '%s'",
+ *db->name ? db->name : "[combined]");
sqlite3_free (err);
return gpg_error (GPG_ERR_GENERAL);
}
int rc;
char *err = NULL;
+ if (!db)
+ return 0; /* Shortcut to allow for easier cleanup code. */
+
if (db->batch_update)
/* Just undo the most recent update; don't revert any progress
made by the batch transaction. */
if (rc)
{
- log_error
- (_("error rolling back inner transaction on TOFU database '%s': %s\n"),
- *db->name ? db->name : "combined", err);
+ log_error (_("error rolling back transaction on TOFU database: %s\n"),
+ err);
+ print_further_info ("inner, database '%s'",
+ *db->name ? db->name : "[combined]");
sqlite3_free (err);
return gpg_error (GPG_ERR_GENERAL);
}
*version = 1;
else
{
- log_error (_("unsupported TOFU DB version: %s\n"), argv[0]);
+ log_error (_("unsupported TOFU database version: %s\n"), argv[0]);
*version = -1;
}
get_single_unsigned_long_cb, &count, &err);
if (rc)
{
- log_error (_("error querying TOFU DB's available tables: %s\n"),
- err);
+ log_error (_("error reading TOFU database: %s\n"), err);
+ print_further_info ("query available tables");
sqlite3_free (err);
goto out;
}
else if (rc)
/* Some error. */
{
- log_error (_("error determining TOFU DB's version: %s\n"), err);
+ log_error (_("error determining TOFU database's version: %s\n"), err);
sqlite3_free (err);
goto out;
}
else
- /* Unexpected success. This can only happen if there are no
- rows. */
- {
- log_error (_("error determining TOFU DB's version: %s\n"),
- "select returned 0, but expected ABORT");
+ {
+ /* Unexpected success. This can only happen if there are no
+ rows. (select returned 0, but expected ABORT.) */
+ log_error (_("error determining TOFU database's version: %s\n"),
+ gpg_strerror (GPG_ERR_NO_DATA));
rc = 1;
goto out;
}
NULL, NULL, &err);
if (rc)
{
- log_error (_("error initializing TOFU database (%s): %s\n"),
- "version", err);
+ log_error (_("error initializing TOFU database: %s\n"), err);
+ print_further_info ("create version");
sqlite3_free (err);
goto out;
}
NULL, NULL, &err);
if (rc)
{
- log_error (_("error initializing TOFU database (%s): %s\n"),
- "version, init", err);
+ log_error (_("error initializing TOFU database: %s\n"), err);
+ print_further_info ("insert version");
sqlite3_free (err);
goto out;
}
/* The list of <fingerprint, email> bindings and auxiliary data.
-
- OID is a unique ID identifying this binding (and used by the
- signatures table, see below). Note: OIDs will never be
- reused.
-
- FINGERPRINT: The key's fingerprint.
-
- EMAIL: The normalized email address.
-
- USER_ID: The unmodified user id from which EMAIL was extracted.
-
- TIME: The time this binding was first observed.
-
- POLICY: The trust policy (TOFU_POLICY_BAD, etc. as an integer).
-
- CONFLICT is either NULL or a fingerprint. Assume that we have
- a binding <0xdeadbeef, foo@example.com> and then we observe
- <0xbaddecaf, foo@example.com>. There two bindings conflict
- (they have the same email address). When we observe the
- latter binding, we warn the user about the conflict and ask
- for a policy decision about the new binding. We also change
- the old binding's policy to ask if it was auto. So that we
- know why this occurred, we also set conflict to 0xbaddecaf.
- */
+ *
+ * OID is a unique ID identifying this binding (and used by the
+ * signatures table, see below). Note: OIDs will never be
+ * reused.
+ *
+ * FINGERPRINT: The key's fingerprint.
+ *
+ * EMAIL: The normalized email address.
+ *
+ * USER_ID: The unmodified user id from which EMAIL was extracted.
+ *
+ * TIME: The time this binding was first observed.
+ *
+ * POLICY: The trust policy (TOFU_POLICY_BAD, etc. as an integer).
+ *
+ * CONFLICT is either NULL or a fingerprint. Assume that we have
+ * a binding <0xdeadbeef, foo@example.com> and then we observe
+ * <0xbaddecaf, foo@example.com>. There two bindings conflict
+ * (they have the same email address). When we observe the
+ * latter binding, we warn the user about the conflict and ask
+ * for a policy decision about the new binding. We also change
+ * the old binding's policy to ask if it was auto. So that we
+ * know why this occurred, we also set conflict to 0xbaddecaf.
+ */
if (type == DB_EMAIL || type == DB_COMBINED)
rc = sqlite3_exec_printf
(db, NULL, NULL, &err,
" on bindings (fingerprint);\n");
if (rc)
{
- log_error (_("error initializing TOFU database (%s): %s\n"),
- "bindings", err);
+ log_error (_("error initializing TOFU database: %s\n"), err);
+ print_further_info ("create bindings");
sqlite3_free (err);
goto out;
}
NULL, NULL, &err);
if (rc)
{
- log_error (_("error initializing TOFU database (%s): %s\n"),
- "signatures", err);
+ log_error (_("error initializing TOFU database: %s\n"), err);
+ print_further_info ("create signatures");
sqlite3_free (err);
goto out;
}
rc = sqlite3_exec (db, "rollback;", NULL, NULL, &err);
if (rc)
{
- log_error (_("error aborting transaction on TOFU DB: %s\n"),
+ log_error (_("error rolling back transaction on TOFU database: %s\n"),
err);
sqlite3_free (err);
}
rc = sqlite3_exec (db, "end transaction;", NULL, NULL, &err);
if (rc)
{
- log_error (_("error committing transaction on TOFU DB: %s\n"),
+ log_error (_("error committing transaction on TOFU database: %s\n"),
err);
sqlite3_free (err);
return 1;
rc = sqlite3_open (filename, &db);
if (rc)
{
- log_error (_("can't open TOFU DB ('%s'): %s\n"),
- filename, sqlite3_errmsg (db));
+ log_error (_("error opening TOFU database '%s': %s\n"),
+ filename, sqlite3_errmsg (db));
/* Even if an error occurs, DB is guaranteed to be valid. */
sqlite3_close (db);
db = NULL;
char *filename = NULL;
int need_link = 1;
sqlite3 *sqlitedb = NULL;
+ gpg_error_t rc;
assert (dbs);
assert (name);
char *name_db;
/* Make the directory. */
- if (gnupg_mkdir_p (opt.homedir, "tofu.d", type_str, prefix, NULL) != 0)
+ rc = gnupg_mkdir_p (opt.homedir, "tofu.d", type_str, prefix, NULL);
+ if (rc)
{
- log_error (_("unable to create directory %s/%s/%s/%s"),
- opt.homedir, "tofu.d", type_str, prefix);
+ name_db = xstrconcat (opt.homedir, "tofu.d",
+ type_str, prefix, NULL);
+ log_error (_("can't create directory '%s': %s\n"),
+ name_db, gpg_strerror (rc));
+ xfree (name_db);
goto out;
}
/* Create a new DB meta-handle. Returns NULL on error. */
+/* FIXME: Change to return an error code for better reporting by the
+ caller. */
static struct dbs *
opendbs (void)
{
if (have_tofu_db && have_tofu_d)
{
log_info (_("Warning: Home directory contains both tofu.db"
- " and tofu.d. Using split format for TOFU DB.\n"));
+ " and tofu.d.\n"));
+ log_info (_("Using split format for TOFU database\n"));
opt.tofu_db_format = TOFU_DB_SPLIT;
}
else if (have_tofu_db)
{
opt.tofu_db_format = TOFU_DB_FLAT;
if (DBG_TRUST)
- log_debug ("Using flat format for TOFU DB.\n");
+ log_debug ("Using flat format for TOFU database.\n");
}
else if (have_tofu_d)
{
opt.tofu_db_format = TOFU_DB_SPLIT;
if (DBG_TRUST)
- log_debug ("Using split format for TOFU DB.\n");
+ log_debug ("Using split format for TOFU database.\n");
}
else
{
opt.tofu_db_format = TOFU_DB_FLAT;
if (DBG_TRUST)
- log_debug ("Using flat format for TOFU DB.\n");
+ log_debug ("Using flat format for TOFU database.\n");
}
}
{
char *fingerprint_pp = format_hexfingerprint (fingerprint, NULL, 0);
struct db *db_email = NULL, *db_key = NULL;
- int rc;
+ gpg_error_t rc;
char *err = NULL;
/* policy_old needs to be a long and not an enum tofu_policy,
because we pass it by reference to get_single_long_cb2, which
db_email = getdb (dbs, email, DB_EMAIL);
if (! db_email)
- return gpg_error (GPG_ERR_GENERAL);
+ {
+ rc = gpg_error (GPG_ERR_GENERAL);
+ goto leave;
+ }
if (opt.tofu_db_format == TOFU_DB_SPLIT)
/* In the split format, we need to update two DBs. To keep them
{
db_key = getdb (dbs, fingerprint, DB_KEY);
if (! db_key)
- return gpg_error (GPG_ERR_GENERAL);
+ {
+ rc = gpg_error (GPG_ERR_GENERAL);
+ goto leave;
+ }
rc = begin_transaction (db_email, 0);
if (rc)
- return gpg_error (GPG_ERR_GENERAL);
+ goto leave;
rc = begin_transaction (db_key, 0);
if (rc)
{
rc = begin_transaction (db_email, 1);
if (rc)
- return gpg_error (GPG_ERR_GENERAL);
+ goto leave;
}
SQLITE_ARG_END);
if (rc)
{
- log_error (_("error updating TOFU binding database"
- " (inserting <%s, %s> = %s): %s\n"),
- fingerprint_pp, email, tofu_policy_str (policy),
- err);
+ log_error (_("error updating TOFU database: %s\n"), err);
+ print_further_info (" insert bindings <%s, %s> = %s",
+ fingerprint_pp, email, tofu_policy_str (policy));
sqlite3_free (err);
goto out;
}
SQLITE_ARG_STRING, user_id, SQLITE_ARG_END);
if (rc)
{
- log_error (_("error updating TOFU binding database"
- " (inserting <%s, %s>): %s\n"),
- fingerprint_pp, email, err);
+ log_error (_("error updating TOFU database: %s\n"), err);
+ print_further_info ("insert bindings <%s, %s>",
+ fingerprint_pp, email);
sqlite3_free (err);
goto out;
}
if (opt.tofu_db_format == TOFU_DB_SPLIT)
/* We only need a transaction for the split format. */
{
- int rc2;
+ gpg_error_t rc2;
if (rc)
rc2 = rollback_transaction (db_key);
else
rc2 = end_transaction (db_key, 0);
if (rc2)
- {
- log_error (_("error ending transaction on TOFU database: %s\n"),
- err);
- sqlite3_free (err);
- }
+ sqlite3_free (err);
out_revert_one:
if (rc)
else
rc2 = end_transaction (db_email, 0);
if (rc2)
- {
- log_error (_("error ending transaction on TOFU database: %s\n"),
- err);
- sqlite3_free (err);
- }
+ sqlite3_free (err);
}
+ leave:
xfree (fingerprint_pp);
- if (rc)
- return gpg_error (GPG_ERR_GENERAL);
- return 0;
+ return rc;
}
return t / TIME_AGO_UNIT_LARGE;
}
-/* Return the appropriate unit (respecting whether it is plural or
- singular). */
-const char *
-time_ago_unit (signed long t)
-{
- signed long t_scaled = time_ago_scale (t);
-
- if (t < TIME_AGO_UNIT_MEDIUM)
- {
- if (t_scaled == 1)
- return TIME_AGO_UNIT_SMALL_NAME;
- return TIME_AGO_UNIT_SMALL_NAME_PLURAL;
- }
- if (t < TIME_AGO_UNIT_LARGE)
- {
- if (t_scaled == 1)
- return TIME_AGO_UNIT_MEDIUM_NAME;
- return TIME_AGO_UNIT_MEDIUM_NAME_PLURAL;
- }
- if (t_scaled == 1)
- return TIME_AGO_UNIT_LARGE_NAME;
- return TIME_AGO_UNIT_LARGE_NAME_PLURAL;
-}
-
/* Return the policy for the binding <FINGERPRINT, EMAIL> (email has
already been normalized) and any conflict information in *CONFLICT
SQLITE_ARG_END);
if (rc)
{
- log_error (_("error reading from TOFU database"
- " (checking for existing bad bindings): %s\n"),
- err);
+ log_error (_("error reading TOFU database: %s\n"), err);
+ print_further_info ("checking for existing bad bindings");
sqlite3_free (err);
goto out;
}
else if (strlist_length (strlist) != 2)
/* The result has the wrong form. */
{
- log_error (_("error reading from TOFU database"
- " (checking for existing bad bindings):"
- " expected 2 results, got %d\n"),
- strlist_length (strlist));
+ log_error (_("error reading TOFU database: %s\n"),
+ gpg_strerror (GPG_ERR_BAD_DATA));
+ print_further_info ("checking for existing bad bindings:"
+ " expected 2 results, got %d\n",
+ strlist_length (strlist));
goto out;
}
policy = strtol (strlist->d, &tail, 0);
if (errno || *tail != '\0')
{
- log_error (_("error reading from TOFU database: bad value for policy: %s\n"),
- strlist->d);
+ log_error (_("error reading TOFU database: %s\n"),
+ gpg_strerror (GPG_ERR_BAD_DATA));
+ print_further_info ("bad value for policy: %s", strlist->d);
goto out;
}
|| policy == TOFU_POLICY_BAD
|| policy == TOFU_POLICY_ASK))
{
- log_error (_("TOFU DB is corrupted. Invalid value for policy (%d).\n"),
- policy);
+ log_error (_("error reading TOFU database: %s\n"),
+ gpg_strerror (GPG_ERR_DB_CORRUPTED));
+ print_further_info ("invalid value for policy (%d)", policy);
policy = _tofu_GET_POLICY_ERROR;
goto out;
}
SQLITE_ARG_STRING, email, SQLITE_ARG_END);
if (rc)
{
- log_error (_("error reading from TOFU database"
- " (listing fingerprints): %s\n"),
- err);
+ log_error (_("error reading TOFU database: %s\n"), err);
+ print_further_info ("listing fingerprints");
sqlite3_free (err);
goto out;
}
if (policy == TOFU_POLICY_NONE)
{
- es_fprintf (fp, _("The binding %s is NOT known. "), binding);
+ es_fprintf (fp, _("The binding %s is NOT known."), binding);
+ es_fputs (" ", fp);
binding_shown = 1;
}
else if (policy == TOFU_POLICY_ASK
es_fprintf (fp,
_("The key %s raised a conflict with this binding (%s)."
" Since this binding's policy was 'auto', it was "
- "changed to 'ask'. "),
+ "changed to 'ask'."),
conflict_pp, binding);
+ es_fputs (" ", fp);
xfree (conflict_pp);
binding_shown = 1;
}
+ /* TRANSLATORS: The %s%s is replaced by either a fingerprint and a
+ blank or by two empty strings. */
es_fprintf (fp,
_("Please indicate whether you believe the binding %s%s"
"is legitimate (the key belongs to the stated owner) "
- "or a forgery (bad).\n\n"),
+ "or a forgery (bad)."),
binding_shown ? "" : binding,
binding_shown ? "" : " ");
+ es_fputs ("\n\n", fp);
xfree (binding);
SQLITE_ARG_STRING, fingerprint, SQLITE_ARG_END);
if (rc)
{
- log_error (_("error gathering other user ids: %s.\n"), err);
+ log_error (_("error gathering other user IDs: %s\n"), err);
sqlite3_free (err);
err = NULL;
}
{
strlist_t strlist_iter;
- es_fprintf (fp, _("Known user ids associated with this key:\n"));
+ es_fprintf (fp, _("Known user IDs associated with this key:\n"));
for (strlist_iter = other_user_ids;
strlist_iter;
strlist_iter = strlist_iter->next)
else
other_policy = atoi (other_thing);
- es_fprintf (fp, _(" %s (policy: %s)\n"),
- other_user_id,
- tofu_policy_str (other_policy));
- }
+ es_fprintf (fp, " %s (", other_user_id);
+ es_fprintf (fp, _("policy: %s"), tofu_policy_str (other_policy));
+ es_fprintf (fp, ")\n");
+ }
es_fprintf (fp, "\n");
free_strlist (other_user_ids);
{
strlist_t strlist_iter;
- log_error (_("error gathering signature stats: %s.\n"),
- err);
+ log_error (_("error gathering signature stats: %s\n"), err);
sqlite3_free (err);
err = NULL;
- es_fprintf
- (fp, _("The email address (%s) is associated with %d keys:\n"),
- email, bindings_with_this_email_count);
+ es_fprintf (fp, ngettext("The email address \"%s\" is"
+ " associated with %d key:\n",
+ "The email address \"%s\" is"
+ " associated with %d keys:\n",
+ bindings_with_this_email_count),
+ email, bindings_with_this_email_count);
for (strlist_iter = bindings_with_this_email;
strlist_iter;
strlist_iter = strlist_iter->next)
- es_fprintf (fp, _(" %s\n"), strlist_iter->d);
+ es_fprintf (fp, " %s\n", strlist_iter->d);
}
else
{
any messages signed by this key. Add a dummy entry. */
signature_stats_prepend (&stats, fingerprint, TOFU_POLICY_AUTO, 0, 0);
- es_fprintf (fp, _("Statistics for keys with the email '%s':\n"),
- email);
+ es_fprintf
+ (fp, _("Statistics for keys with the email address \"%s\":\n"),
+ email);
for (stats_iter = stats; stats_iter; stats_iter = stats_iter->next)
{
if (! key || strcmp (key, stats_iter->fingerprint) != 0)
key = stats_iter->fingerprint;
this_key = strcmp (key, fingerprint) == 0;
key_pp = format_hexfingerprint (key, NULL, 0);
+ es_fprintf (fp, " %s (", key_pp);
if (this_key)
- es_fprintf (fp, _(" %s (this key):"), key_pp);
+ es_fprintf (fp, _("this key"));
else
- es_fprintf (fp, _(" %s (policy: %s):"),
- key_pp, tofu_policy_str (stats_iter->policy));
+ es_fprintf (fp, _("policy: %s"),
+ tofu_policy_str (stats_iter->policy));
+ es_fputs ("):\n", fp);
xfree (key_pp);
- es_fprintf (fp, "\n");
}
+ es_fputs (" ", fp);
if (stats_iter->time_ago == -1)
- es_fprintf (fp, _(" %ld %s signed in the future.\n"),
- stats_iter->count,
- stats_iter->count == 1
- ? _("message") : _("messages"));
- else if (stats_iter->count == 0)
- es_fprintf (fp, _(" 0 signed messages.\n"));
+ es_fprintf (fp, ngettext("%ld message signed in the future.",
+ "%ld messages signed in the future.",
+ stats_iter->count), stats_iter->count);
else
- es_fprintf (fp, _(" %ld %s signed over the past %ld %s.\n"),
- stats_iter->count,
- stats_iter->count == 1
- ? _("message") : _("messages"),
- time_ago_scale (stats_iter->time_ago),
- time_ago_unit (stats_iter->time_ago));
+ {
+ long t_scaled = time_ago_scale (stats_iter->time_ago);
+
+ /* TANSLATORS: This string is concatenated with one of
+ * the day/week/month strings to form one sentence. */
+ es_fprintf (fp, ngettext("%ld message signed",
+ "%ld messages signed",
+ stats_iter->count), stats_iter->count);
+ if (!stats_iter->count)
+ es_fputs (".", fp);
+ else if (stats_iter->time_ago < TIME_AGO_UNIT_MEDIUM)
+ es_fprintf (fp, ngettext(" over the past %ld day.",
+ " over the past %ld days.",
+ t_scaled), t_scaled);
+ else if (stats_iter->time_ago < TIME_AGO_UNIT_LARGE)
+ es_fprintf (fp, ngettext(" over the past %ld week.",
+ " over the past %ld weeks.",
+ t_scaled), t_scaled);
+ else
+ es_fprintf (fp, ngettext(" over the past %ld month.",
+ " over the past %ld months.",
+ t_scaled), t_scaled);
+ }
+ es_fputs ("\n", fp);
}
}
if (is_conflict)
{
- /* TRANSLATORS: translate the below text. We don't directly
- internationalize that text so that we can tweak it without
- breaking translations. */
+ /* 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. */
char *text = _("TOFU detected a binding conflict");
if (strcmp (text, "TOFU detected a binding conflict") == 0)
/* No translation. Use the English text. */
}
es_fputc ('\n', fp);
- /* 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. */
- choices = _("gG" "aA" "uU" "rR" "bB");
- es_fprintf (fp, _("(G)ood/(A)ccept once/(U)nknown/(R)eject once/(B)ad? "));
/* Add a NUL terminator. */
es_fputc (0, fp);
if (es_fclose_snatch (fp, (void **) &prompt, NULL))
log_fatal ("error snatching memory stream\n");
+ /* I think showing the large message once is sufficient. If we
+ would move it right before the cpr_get many lines will scroll
+ away and the user might not realize that he merely entered a
+ wrong choise (because he does not see that either). As a small
+ benefit we allow C-L to redisplay everything. */
+ tty_printf ("%s", prompt);
while (1)
{
char *response;
+ /* 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. */
+ choices = _("gG" "aA" "uU" "rR" "bB");
if (strlen (choices) != 10)
log_bug ("Bad TOFU conflict translation! Please report.");
- response = cpr_get ("tofu conflict", prompt);
+ response = cpr_get
+ ("tofu.conflict",
+ _("(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "));
trim_spaces (response);
cpr_kill_prompt ();
- if (strlen (response) == 1)
+ if (*response == CONTROL_L)
+ tty_printf ("%s", prompt);
+ else if (strlen (response) == 1)
{
char *choice = strchr (choices, *response);
if (choice)
{
int c = ((size_t) choice - (size_t) choices) / 2;
- assert (0 <= c && c <= 4);
switch (c)
{
return trust_level;
}
+
+/* Return a malloced string of the form
+ * "7 months, 1 day, 5 minutes, 0 seconds"
+ * The caller must free that string.
+ *
+ * This is actually a bad hack which may not work correctly with all
+ * languages.
+ */
static char *
time_ago_str (long long int t)
{
if (years)
{
- if (years > 1)
- es_fprintf (fp, _("%d years"), years);
- else
- es_fprintf (fp, _("%d year"), years);
+ es_fprintf (fp, ngettext("%d year", "%d years", years), years);
count ++;
first = i;
}
{
if (count)
es_fprintf (fp, ", ");
-
- if (months > 1)
- es_fprintf (fp, _("%d months"), months);
- else
- es_fprintf (fp, _("%d month"), months);
+ es_fprintf (fp, ngettext("%d month", "%d months", months), months);
count ++;
first = i;
}
{
if (count)
es_fprintf (fp, ", ");
-
- if (days > 1)
- es_fprintf (fp, _("%d days"), days);
- else
- es_fprintf (fp, _("%d day"), days);
+ es_fprintf (fp, ngettext("%d day", "%d days", days), days);
count ++;
first = i;
}
{
if (count)
es_fprintf (fp, ", ");
-
- if (hours > 1)
- es_fprintf (fp, _("%d hours"), hours);
- else
- es_fprintf (fp, _("%d hour"), hours);
+ es_fprintf (fp, ngettext("%d hour", "%d hours", hours), hours);
count ++;
first = i;
}
{
if (count)
es_fprintf (fp, ", ");
-
- if (minutes > 1)
- es_fprintf (fp, _("%d minutes"), minutes);
- else
- es_fprintf (fp, _("%d minute"), minutes);
+ es_fprintf (fp, ngettext("%d minute", "%d minutes", minutes), minutes);
count ++;
first = i;
}
{
if (count)
es_fprintf (fp, ", ");
-
- if (seconds > 1)
- es_fprintf (fp, _("%d seconds"), seconds);
- else
- es_fprintf (fp, _("%d second"), seconds);
+ es_fprintf (fp, ngettext("%d second", "%d seconds", seconds), seconds);
}
es_fputc (0, fp);
return str;
}
+
static void
show_statistics (struct dbs *dbs, const char *fingerprint,
const char *email, const char *user_id,
sig_exclude ? "'" : "");
if (rc)
{
- log_error (_("error reading from TOFU database"
- " (getting statistics): %s\n"),
- err);
+ log_error (_("error reading TOFU database: %s\n"), err);
+ print_further_info ("getting statistics");
sqlite3_free (err);
goto out;
}
if (messages == 0)
es_fprintf (fp,
_("Verified 0 messages signed by \"%s\""
- " (key: %s, policy %s)."),
+ " (key: %s, policy: %s)."),
user_id, fingerprint_pp, tofu_policy_str (policy));
else
{
- char *first_seen_ago_str = time_ago_str (first_seen_ago);
+ char *first_seen_ago_str =
+ time_ago_str (first_seen_ago);
char *most_recent_seen_ago_str =
time_ago_str (most_recent_seen_ago);
- es_fprintf (fp,
- _("Verified %ld messages signed by \"%s\""
- " (key: %s, policy: %s) in the past %s."),
+ /* TRANSLATORS: The final %s is replaced by a string like
+ "7 months, 1 day, 5 minutes, 0 seconds". */
+ es_fprintf (fp, ngettext("Verified %ld message signed by \"%s\""
+ " (key: %s, policy: %s) in the past %s.",
+ "Verified %ld messages signed by \"%s\""
+ " (key: %s, policy: %s) in the past %s.",
+ messages),
messages, user_id,
fingerprint_pp, tofu_policy_str (policy),
first_seen_ago_str);
if (messages > 1)
- es_fprintf (fp,
- _(" The most recent message was verified %s ago."),
- most_recent_seen_ago_str);
+ {
+ es_fputs (" ", fp);
+ es_fprintf (fp,
+ _("The most recent message was verified %s ago."),
+ most_recent_seen_ago_str);
+ }
xfree (first_seen_ago_str);
xfree (most_recent_seen_ago_str);
/* TRANSLATORS: translate the below text. We don't
directly internationalize that text so that we can
tweak it without breaking translations. */
- text = _("TOFU: few signatures %d %s %s");
- if (strcmp (text, "TOFU: few signatures %d %s %s") == 0)
- text =
- "Warning: if you think you've seen more than %d %s "
- "signed by this key, then this key might be a forgery! "
- "Carefully examine the email address for small variations "
- "(e.g., additional white space). If the key is suspect, "
- "then use '%s' to mark it as being bad.\n";
- tmp = xasprintf
- (text,
- messages, messages == 1 ? _("message") : _("message"),
- set_policy_command);
+ text = ngettext("TOFU: few signatures %d message %s",
+ "TOFU: few signatures %d messages %s", 1);
+ if (strcmp (text, "TOFU: few signatures %d message %s") == 0)
+ {
+ text =
+ (messages == 1?
+ "Warning: if you think you've seen more than %d message "
+ "signed by this key, then this key might be a forgery! "
+ "Carefully examine the email address for small variations "
+ "(e.g., additional white space). If the key is suspect, "
+ "then use '%s' to mark it as being bad.\n"
+ :
+ "Warning: if you think you've seen more than %d messages "
+ "signed by this key, then this key might be a forgery! "
+ "Carefully examine the email address for small variations "
+ "(e.g., additional white space). If the key is suspect, "
+ "then use '%s' to mark it as being bad.\n");
+ }
+
+ tmp = xasprintf (text, messages, set_policy_command);
text = format_text (tmp, 0, 72, 80);
xfree (tmp);
log_info ("%s", text);
dbs = opendbs ();
if (! dbs)
{
- log_error (_("error opening TOFU DB.\n"));
+ log_error (_("error opening TOFU database: %s\n"),
+ gpg_strerror (GPG_ERR_GENERAL));
goto die;
}
db = getdb (dbs, email, DB_EMAIL);
if (! db)
{
- log_error (_("error opening TOFU DB.\n"));
+ log_error (_("error opening TOFU database: %s\n"),
+ gpg_strerror (GPG_ERR_GENERAL));
goto die;
}
SQLITE_ARG_END);
if (rc)
{
- log_error (_("error reading from signatures database"
- " (checking existence): %s\n"),
- err);
+ log_error (_("error reading TOFU database: %s\n"), err);
+ print_further_info ("checking existence");
sqlite3_free (err);
}
else if (c > 1)
SQLITE_ARG_END);
if (rc)
{
- log_error (_("error updating TOFU DB"
- " (inserting into signatures table): %s\n"),
- err);
+ log_error (_("error updating TOFU database: %s\n"), err);
+ print_further_info ("insert signatures");
sqlite3_free (err);
}
}
rc = end_transaction (db, 0);
if (rc)
{
- log_error (_("error ending transaction on TOFU database: %s\n"), err);
sqlite3_free (err);
goto die;
}
dbs = opendbs ();
if (! dbs)
{
- log_error (_("error opening TOFU DB.\n"));
+ log_error (_("error opening TOFU database: %s\n"),
+ gpg_strerror (GPG_ERR_GENERAL));
goto die;
}
dbs = opendbs ();
if (! dbs)
{
- log_error (_("error opening TOFU DB.\n"));
+ log_error (_("error opening TOFU database: %s\n"),
+ gpg_strerror (GPG_ERR_GENERAL));
return gpg_error (GPG_ERR_GENERAL);
}
dbs = opendbs ();
if (! dbs)
{
- log_error (_("error opening TOFU DB.\n"));
+ log_error (_("error opening TOFU database: %s\n"),
+ gpg_strerror (GPG_ERR_GENERAL));
return gpg_error (GPG_ERR_GENERAL);
}
write_record (&rec);
tdb_revalidation_mark ();
do_sync ();
- err = 0;
}
else
{
write_record (&rec);
tdb_revalidation_mark ();
do_sync ();
- err = 0;
}
else
{
/* No record yet - create a new one. */
size_t dummy;
- err = 0;
memset (&trec, 0, sizeof trec);
trec.recnum = tdbio_new_recnum ();
trec.rectype = RECTYPE_TRUST;
else
user_id = user_id_node->pkt->pkt.user_id;
+ /* If the user id is revoked or expired, then skip it. */
if (user_id->is_revoked || user_id->is_expired)
- /* If the user id is revoked or expired, then skip it. */
{
- char *s;
- if (user_id->is_revoked && user_id->is_expired)
- s = "revoked and expired";
- else if (user_id->is_revoked)
- s = "revoked";
- else
- s = "expire";
-
- log_info ("TOFU: Ignoring %s user id (%s)\n", s, user_id->name);
+ if (DBG_TRUST)
+ {
+ char *s;
+ if (user_id->is_revoked && user_id->is_expired)
+ s = "revoked and expired";
+ else if (user_id->is_revoked)
+ s = "revoked";
+ else
+ s = "expire";
+
+ log_debug ("TOFU: Ignoring %s user id (%s)\n",
+ s, user_id->name);
+ }
continue;
}
}
if (opt.verbose)
- log_info (_("%d keys processed (%d validity counts cleared)\n"),
- count, nreset);
+ {
+ log_info (ngettext("%d key processed",
+ "%d keys processed",
+ count), count);
+ log_printf (ngettext(" (%d validity count cleared)\n",
+ " (%d validity counts cleared)\n",
+ nreset), nreset);
+ }
}
/*
klist = utk_list;
- log_info(_("%d marginal(s) needed, %d complete(s) needed, %s trust model\n"),
- opt.marginals_needed,opt.completes_needed,trust_model_string());
+ log_info ("marginals needed: %d completes needed: %d trust model: %s\n",
+ opt.marginals_needed, opt.completes_needed, trust_model_string ());
for (depth=0; depth < opt.max_cert_depth; depth++)
{
fixme: Better use the LIBOBJ mechnism. */
#include "../common/types.h"
#include "../common/stringhelp.h"
+#include "../common/dotlock.h"
+#include "../common/logging.h"
#include "keybox.h"
typedef struct keybox_name *KB_NAME;
-typedef struct keybox_name const *CONST_KB_NAME;
struct keybox_name
{
/* Link to the next resources, so that we can walk all
/* True if this is a keybox with secret keys. */
int secret;
- /*DOTLOCK lockhd;*/
-
/* A table with all the handles accessing this resources.
HANDLE_TABLE_SIZE gives the allocated length of this table unused
entrues are set to NULL. HANDLE_TABLE may be NULL. */
KEYBOX_HANDLE *handle_table;
size_t handle_table_size;
+ /* The lock handle or NULL it not yet initialized. */
+ dotlock_t lockhd;
+
/* Not yet used. */
int is_locked;
struct keybox_found_s
{
KEYBOXBLOB blob;
- off_t offset;
size_t pk_no;
size_t uid_no;
- unsigned int n_packets; /*used for delete and update*/
};
struct keybox_handle {
- CONST_KB_NAME kb;
+ KB_NAME kb;
int secret; /* this is for a secret keybox */
FILE *fp;
int eof;
putc ('\n', fp );
}
if (in_range)
- {
- fprintf (fp, "Sig-Expire[%lu-%lu]: [not checked]\n", first, n-1);
- in_range = 0;
- }
+ fprintf (fp, "Sig-Expire[%lu-%lu]: [not checked]\n", first, n-1);
}
fprintf (fp, "Ownertrust: %d\n", p[0] );
fprintf (fp, "All-Validity: %d\n", p[1] );
p += 4;
- n = get32 (p); p += 4;
+ n = get32 (p);
+ p += 4;
fprintf (fp, "Recheck-After: %lu\n", n );
- n = get32 (p ); p += 4;
+ n = get32 (p );
+ p += 4;
fprintf( fp, "Latest-Timestamp: %lu\n", n );
- n = get32 (p ); p += 4;
+ n = get32 (p );
+ p += 4;
fprintf (fp, "Created-At: %lu\n", n );
- n = get32 (p ); p += 4;
+ n = get32 (p );
fprintf (fp, "Reserved-Space: %lu\n", n );
if (n >= 4 && unhashed >= 24)
static KB_NAME kb_names;
-/* Register a filename for plain keybox files. Returns a pointer to
- be used to create a handles and so on. Returns NULL to indicate
- that FNAME has already been registered. */
-void *
-keybox_register_file (const char *fname, int secret)
+/* Register a filename for plain keybox files. Returns 0 on success,
+ * GPG_ERR_EEXIST if it has already been registered, or another error
+ * code. On success or with error code GPG_ERR_EEXIST a token usable
+ * to access the keybox handle is stored at R_TOKEN, NULL is stored
+ * for all other errors. */
+gpg_error_t
+keybox_register_file (const char *fname, int secret, void **r_token)
{
KB_NAME kr;
+ *r_token = NULL;
+
for (kr=kb_names; kr; kr = kr->next)
{
if (same_file_p (kr->fname, fname) )
- return NULL; /* Already registered. */
+ {
+ *r_token = kr;
+ return gpg_error (GPG_ERR_EEXIST); /* Already registered. */
+ }
}
kr = xtrymalloc (sizeof *kr + strlen (fname));
if (!kr)
- return NULL;
+ return gpg_error_from_syserror ();
strcpy (kr->fname, fname);
kr->secret = !!secret;
kr->handle_table = NULL;
kr->handle_table_size = 0;
- /* kr->lockhd = NULL;*/
+ kr->lockhd = NULL;
kr->is_locked = 0;
kr->did_full_scan = 0;
/* keep a list of all issued pointers */
/* if (!kb_offtbl) */
/* kb_offtbl = new_offset_hash_table (); */
- return kr;
+ *r_token = kr;
+ return 0;
}
int
/*
- * Lock the keybox at handle HD, or unlock if YES is false. Note that
- * we currently ignore the handle and lock all registered keyboxes.
+ * Lock the keybox at handle HD, or unlock if YES is false.
*/
-int
+gpg_error_t
keybox_lock (KEYBOX_HANDLE hd, int yes)
{
- /* FIXME: We need to implement it before we can use it with gpg.
- gpgsm does the locking in its local keydb.c driver; this should
- be changed as well. */
+ gpg_error_t err = 0;
+ KB_NAME kb = hd->kb;
- (void)hd;
- (void)yes;
- return 0;
+ if (!keybox_is_writable (kb))
+ return 0;
+
+ /* Make sure the lock handle has been created. */
+ if (!kb->lockhd)
+ {
+ kb->lockhd = dotlock_create (kb->fname, 0);
+ if (!kb->lockhd)
+ {
+ err = gpg_error_from_syserror ();
+ log_info ("can't allocate lock for '%s'\n", kb->fname );
+ return err;
+ }
+ }
+
+ if (yes) /* Take the lock. */
+ {
+ if (!kb->is_locked)
+ {
+#ifdef HAVE_W32_SYSTEM
+ /* Under Windows we need to close the file before we try
+ * to lock it. This is because another process might have
+ * taken the lock and is using keybox_file_rename to
+ * rename the base file. How if our dotlock_take below is
+ * waiting for the lock but we have the base file still
+ * open, keybox_file_rename will never succeed as we are
+ * in a deadlock. */
+ if (hd->fp)
+ {
+ fclose (hd->fp);
+ hd->fp = NULL;
+ }
+#endif /*HAVE_W32_SYSTEM*/
+ if (dotlock_take (kb->lockhd, -1))
+ {
+ err = gpg_error_from_syserror ();
+ log_info ("can't lock '%s'\n", kb->fname );
+ }
+ else
+ kb->is_locked = 1;
+ }
+ }
+ else /* Release the lock. */
+ {
+ if (kb->is_locked)
+ {
+ if (dotlock_release (kb->lockhd))
+ {
+ err = gpg_error_from_syserror ();
+ log_info ("can't unlock '%s'\n", kb->fname );
+ }
+ else
+ kb->is_locked = 0;
+ }
+ }
+
+ return err;
}
if ( !(ctb & 0x80) )
return gpg_error (GPG_ERR_INV_PACKET); /* Invalid CTB. */
- pktlen = 0;
if ((ctb & 0x40)) /* New style (OpenPGP) CTB. */
{
pkttype = (ctb & 0x3f);
#include <assert.h>
#include <errno.h>
-#include "../common/stringhelp.h" /* ascii_xxxx() */
-
#include "keybox-defs.h"
#include <gcrypt.h>
#include "host2net.h"
*/
-int
+gpg_error_t
keybox_search_reset (KEYBOX_HANDLE hd)
{
if (!hd)
If WANT_BLOBTYPE is not 0 only blobs of this type are considered.
The value at R_SKIPPED is updated by the number of skipped long
records (counts PGP and X.509). */
-int
+gpg_error_t
keybox_search (KEYBOX_HANDLE hd, KEYBOX_SEARCH_DESC *desc, size_t ndesc,
keybox_blobtype_t want_blobtype,
size_t *r_descindex, unsigned long *r_skipped)
{
- int rc;
+ gpg_error_t rc;
size_t n;
int need_words, any_skip;
KEYBOXBLOB blob = NULL;
hd->found.pk_no = pk_no;
hd->found.uid_no = uid_no;
}
- else if (rc == -1)
+ else if (rc == -1 || gpg_err_code (rc) == GPG_ERR_EOF)
{
_keybox_release_blob (blob);
hd->eof = 1;
ec = get_flag_from_image (buffer, length, what, value);
return ec? gpg_error (ec):0;
}
+
+off_t
+keybox_offset (KEYBOX_HANDLE hd)
+{
+ if (!hd->fp)
+ return 0;
+ return ftello (hd->fp);
+}
+
+gpg_error_t
+keybox_seek (KEYBOX_HANDLE hd, off_t offset)
+{
+ int err;
+
+ if (hd->error)
+ return hd->error; /* still in error state */
+
+ if (! hd->fp)
+ {
+ if (offset == 0)
+ /* No need to open the file. An unopened file is effectively at
+ offset 0. */
+ return 0;
+
+ hd->fp = fopen (hd->kb->fname, "rb");
+ if (!hd->fp)
+ {
+ hd->error = gpg_error_from_syserror ();
+ return hd->error;
+ }
+ }
+
+ err = fseeko (hd->fp, offset, SEEK_SET);
+ hd->error = gpg_error_from_errno (err);
+
+ return hd->error;
+}
#endif /* !defined(HAVE_FSEEKO) && !defined(fseeko) */
-
static int
create_tmp_file (const char *template,
char **r_bakfname, char **r_tmpfname, FILE **r_fp)
{
- char *bakfname, *tmpfname;
-
- *r_bakfname = NULL;
- *r_tmpfname = NULL;
-
-# ifdef USE_ONLY_8DOT3
- /* Here is another Windoze bug?:
- * you can't rename("pubring.kbx.tmp", "pubring.kbx");
- * but rename("pubring.kbx.tmp", "pubring.aaa");
- * works. So we replace ".kbx" by ".kb_" or ".k__". Note that we
- * can't use ".bak" and ".tmp", because these suffixes are used by
- * gpg and would lead to a sharing violation or data corruption.
- */
- if (strlen (template) > 4
- && !strcmp (template+strlen(template)-4, EXTSEP_S "kbx") )
- {
- bakfname = xtrymalloc (strlen (template) + 1);
- if (!bakfname)
- return gpg_error_from_syserror ();
- strcpy (bakfname, template);
- strcpy (bakfname+strlen(template)-4, EXTSEP_S "kb_");
-
- tmpfname = xtrymalloc (strlen (template) + 1);
- if (!tmpfname)
- {
- gpg_error_t tmperr = gpg_error_from_syserror ();
- xfree (bakfname);
- return tmperr;
- }
- strcpy (tmpfname,template);
- strcpy (tmpfname + strlen (template)-4, EXTSEP_S "k__");
- }
- else
- { /* File does not end with kbx, thus we hope we are working on a
- modern file system and appending a suffix works. */
- bakfname = xtrymalloc ( strlen (template) + 5);
- if (!bakfname)
- return gpg_error_from_syserror ();
- strcpy (stpcpy (bakfname, template), EXTSEP_S "kb_");
+ gpg_error_t err;
- tmpfname = xtrymalloc ( strlen (template) + 5);
- if (!tmpfname)
+ err = keybox_tmp_names (template, 0, r_bakfname, r_tmpfname);
+ if (!err)
+ {
+ *r_fp = fopen (*r_tmpfname, "wb");
+ if (!*r_fp)
{
- gpg_error_t tmperr = gpg_error_from_syserror ();
- xfree (bakfname);
- return tmperr;
+ err = gpg_error_from_syserror ();
+ xfree (*r_tmpfname);
+ *r_tmpfname = NULL;
+ xfree (*r_bakfname);
+ *r_bakfname = NULL;
}
- strcpy (stpcpy (tmpfname, template), EXTSEP_S "k__");
- }
-# else /* Posix file names */
- bakfname = xtrymalloc (strlen (template) + 2);
- if (!bakfname)
- return gpg_error_from_syserror ();
- strcpy (stpcpy (bakfname,template),"~");
-
- tmpfname = xtrymalloc ( strlen (template) + 5);
- if (!tmpfname)
- {
- gpg_error_t tmperr = gpg_error_from_syserror ();
- xfree (bakfname);
- return tmperr;
- }
- strcpy (stpcpy (tmpfname,template), EXTSEP_S "tmp");
-# endif /* Posix filename */
-
- *r_fp = fopen (tmpfname, "wb");
- if (!*r_fp)
- {
- gpg_error_t tmperr = gpg_error_from_syserror ();
- xfree (tmpfname);
- xfree (bakfname);
- return tmperr;
}
- *r_bakfname = bakfname;
- *r_tmpfname = tmpfname;
- return 0;
+ return err;
}
/* First make a backup file except for secret keyboxes. */
if (!secret)
{
-#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- gnupg_remove (bakfname);
-#endif
- if (rename (fname, bakfname) )
- {
- return gpg_error_from_syserror ();
- }
+ rc = keybox_file_rename (fname, bakfname);
+ if (rc)
+ return rc;
}
/* Then rename the file. */
-#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- gnupg_remove (fname);
-#endif
- if (rename (tmpfname, fname) )
+ rc = keybox_file_rename (tmpfname, fname);
+ if (rc)
{
- rc = gpg_error_from_syserror ();
if (secret)
{
/* log_info ("WARNING: 2 files with confidential" */
goto leave;
}
- /* Create the new file. */
+ /* Create the new file. On success NEWFP is initialized. */
rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
if (rc)
{
fclose (fp);
- fclose (newfp);
goto leave;
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#ifdef HAVE_DOSISH_SYSTEM
+# define WIN32_LEAN_AND_MEAN /* We only need the OS core stuff. */
+# include <windows.h>
+#endif
#include "keybox-defs.h"
if (p)
free_func (p);
}
+
+
+/* Store the two malloced temporary file names used for keybox updates
+ of file FILENAME at R_BAKNAME and R_TMPNAME. On error an error
+ code is returned and NULL stored at R_BAKNAME and R_TMPNAME. If
+ FOR_KEYRING is true the returned names match those used by GnuPG's
+ keyring code. */
+gpg_error_t
+keybox_tmp_names (const char *filename, int for_keyring,
+ char **r_bakname, char **r_tmpname)
+{
+ gpg_error_t err;
+ char *bak_name, *tmp_name;
+
+ *r_bakname = NULL;
+ *r_tmpname = NULL;
+
+# ifdef USE_ONLY_8DOT3
+ /* Here is another Windoze bug?:
+ * you can't rename("pubring.kbx.tmp", "pubring.kbx");
+ * but rename("pubring.kbx.tmp", "pubring.aaa");
+ * works. So we replace ".kbx" by ".kb_" or ".k__". Note that we
+ * can't use ".bak" and ".tmp", because these suffixes are used by
+ * gpg's keyrings and would lead to a sharing violation or data
+ * corruption. If the name does not end in ".kbx" we assume working
+ * on a modern file system and append the suffix. */
+ {
+ const char *ext = for_keyring? EXTSEP_S GPGEXT_GPG : EXTSEP_S "kbx";
+ const char *b_ext = for_keyring? EXTSEP_S "bak" : EXTSEP_S "kb_";
+ const char *t_ext = for_keyring? EXTSEP_S "tmp" : EXTSEP_S "k__";
+ int repl;
+
+ if (strlen (ext) != 4 || strlen (b_ext) != 4)
+ BUG ();
+ repl = (strlen (filename) > 4
+ && !strcmp (filename + strlen (filename) - 4, ext));
+ bak_name = xtrymalloc (strlen (filename) + (repl?0:4) + 1);
+ if (!bak_name)
+ return gpg_error_from_syserror ();
+ strcpy (bak_name, filename);
+ strcpy (bak_name + strlen (filename) - (repl?4:0), b_ext);
+
+ tmp_name = xtrymalloc (strlen (filename) + (repl?0:4) + 1);
+ if (!tmp_name)
+ {
+ err = gpg_error_from_syserror ();
+ xfree (bak_name);
+ return err;
+ }
+ strcpy (tmp_name, filename);
+ strcpy (tmp_name + strlen (filename) - (repl?4:0), t_ext);
+ }
+# else /* Posix file names */
+ (void)for_keyring;
+ bak_name = xtrymalloc (strlen (filename) + 2);
+ if (!bak_name)
+ return gpg_error_from_syserror ();
+ strcpy (stpcpy (bak_name, filename), "~");
+
+ tmp_name = xtrymalloc (strlen (filename) + 5);
+ if (!tmp_name)
+ {
+ err = gpg_error_from_syserror ();
+ xfree (bak_name);
+ return err;
+ }
+ strcpy (stpcpy (tmp_name,filename), EXTSEP_S "tmp");
+# endif /* Posix filename */
+
+ *r_bakname = bak_name;
+ *r_tmpname = tmp_name;
+ return 0;
+}
+
+
+/* Wrapper for rename(2) to handle Windows peculiarities. */
+gpg_error_t
+keybox_file_rename (const char *oldname, const char *newname)
+{
+ gpg_error_t err = 0;
+
+#ifdef HAVE_DOSISH_SYSTEM
+ int wtime = 0;
+
+ gnupg_remove (newname);
+ again:
+ if (rename (oldname, newname))
+ {
+ if (GetLastError () == ERROR_SHARING_VIOLATION)
+ {
+ /* Another process has the file open. We do not use a lock
+ * for read but instead we wait until the other process has
+ * closed the file. This may take long but that would also
+ * be the case with a dotlock approach for read and write.
+ * Note that we don't need this on Unix due to the inode
+ * concept.
+ *
+ * So let's wait until the rename has worked. The retry
+ * intervals are 50, 100, 200, 400, 800, 50ms, ... */
+ if (!wtime || wtime >= 800)
+ wtime = 50;
+ else
+ wtime *= 2;
+
+ if (wtime >= 800)
+ log_info ("waiting for file '%s' to become accessible ...\n",
+ oldname);
+
+ Sleep (wtime);
+ goto again;
+ }
+ err = gpg_error_from_syserror ();
+ }
+
+#else /* Unix */
+
+#ifdef __riscos__
+ gnupg_remove (newname);
+#endif
+ if (rename (oldname, newname) )
+ err = gpg_error_from_syserror ();
+
+#endif /* Unix */
+
+ if (err)
+ log_error ("renaming '%s' to '%s' failed: %s\n",
+ oldname, newname, gpg_strerror (err));
+ return err;
+}
/*-- keybox-init.c --*/
-void *keybox_register_file (const char *fname, int secret);
+gpg_error_t keybox_register_file (const char *fname, int secret,
+ void **r_token);
int keybox_is_writable (void *token);
KEYBOX_HANDLE keybox_new_openpgp (void *token, int secret);
const char *keybox_get_resource_name (KEYBOX_HANDLE hd);
int keybox_set_ephemeral (KEYBOX_HANDLE hd, int yes);
-int keybox_lock (KEYBOX_HANDLE hd, int yes);
+gpg_error_t keybox_lock (KEYBOX_HANDLE hd, int yes);
/*-- keybox-file.c --*/
/* Fixme: This function does not belong here: Provide a better
#endif /*KEYBOX_WITH_X509*/
int keybox_get_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int *value);
-int keybox_search_reset (KEYBOX_HANDLE hd);
-int keybox_search (KEYBOX_HANDLE hd, KEYBOX_SEARCH_DESC *desc, size_t ndesc,
- keybox_blobtype_t want_blobtype,
- size_t *r_descindex, unsigned long *r_skipped);
+gpg_error_t keybox_search_reset (KEYBOX_HANDLE hd);
+gpg_error_t keybox_search (KEYBOX_HANDLE hd,
+ KEYBOX_SEARCH_DESC *desc, size_t ndesc,
+ keybox_blobtype_t want_blobtype,
+ size_t *r_descindex, unsigned long *r_skipped);
+off_t keybox_offset (KEYBOX_HANDLE hd);
+gpg_error_t keybox_seek (KEYBOX_HANDLE hd, off_t offset);
/*-- keybox-update.c --*/
gpg_error_t keybox_insert_keyblock (KEYBOX_HANDLE hd,
void *(*new_realloc_func)(void *p, size_t n),
void (*new_free_func)(void*) );
+gpg_error_t keybox_tmp_names (const char *filename, int for_keyring,
+ char **r_bakname, char **r_tmpname);
+gpg_error_t keybox_file_rename (const char *oldname, const char *newname);
+
#ifdef __cplusplus
}
g10/tdbdump.c
g10/tdbio.c
g10/textfilter.c
+g10/tofu.c
g10/trustdb.c
g10/trust.c
g10/verify.c
msgstr "Introduïu la contrasenya: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "error en crear l'anell «%s»: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+# FIXME: preferència? jm
+# Ho discutírem en la llista, segur. Deu ser als arxius. ivb
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "AVÍS: %s té preferència sobre %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "la clau secreta no està disponible"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: es descarta: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "s'està escrivint la clau secreta a «%s»\n"
"clau %08lX: la signatura de la subclau és en el lloc equivocat - es "
"descarta\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: es descarta: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "AVÍS: no s'ha exportat res\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "error en crear «%s»: %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[No s'ha trobat l'id d'usuari]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "opcions d'importació no vàlides\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "error en la lectura de «%s»: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "error en crear l'anell «%s»: %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "error en crear «%s»: %s\n"
msgstr "no s'ha trobat la clau secreta «%s»: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "opcions d'importació no vàlides\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NOM|usa NOM com a clau secreta predeterminada"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NOM|usa NOM com a clau secreta predeterminada"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
msgstr "NOTA: es descarta el fitxer d'opcions predeterminades antic «%s»\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "error en crear l'anell «%s»: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgstr ""
"AVÍS: s'han donat destinataris (-r) sense usar xifratge de clau pública\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "l'algoritme de dispersió és invàlid «%s»\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "l'algoritme de dispersió és invàlid «%s»\n"
-
msgid "--store [filename]"
msgstr "--store [nom_del_fitxer]"
msgid "key export failed: %s\n"
msgstr "l'exportació de la clau ha fallat: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "l'exportació de la clau ha fallat: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "ha fallat la cerca al servidor de claus: %s\n"
msgid "[self-signature]"
msgstr "[autosignatura]"
-msgid "1 bad signature\n"
-msgstr "1 signatura errònia\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d signatures errònies\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 signatura no comprovada per falta de clau\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signatures no comprovades per falta de clau\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 signatura no comprovada a causa d'un error\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d signatures errònies\n"
+msgstr[1] "%d signatures errònies\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signatures no comprovades a causa d'errors\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 signatura no comprovada per falta de clau\n"
+msgstr[1] "1 signatura no comprovada per falta de clau\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Ha estat detectat 1 ID sense autosignatura vàlida\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 signatura no comprovada a causa d'un error\n"
+msgstr[1] "1 signatura no comprovada a causa d'un error\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "Han estat detectats %d IDs sense autosignatura vàlida\n"
+#, fuzzy, c-format
+#| 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] "Han estat detectats %d IDs sense autosignatura vàlida\n"
+msgstr[1] "Han estat detectats %d IDs sense autosignatura vàlida\n"
#, fuzzy
msgid ""
msgstr "Realment voleu esborrar aquesta autosignatura? (s/N)"
# Werner FIXME: use ngettext. jm
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "S'ha esborrat %d signatura.\n"
-
-# Werner FIXME: use ngettext. jm
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "S'han esborrat %d signatures.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "S'ha esborrat %d signatura.\n"
+msgstr[1] "S'ha esborrat %d signatura.\n"
msgid "Nothing deleted.\n"
msgstr "No s'hi ha eliminat res.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "L'ID d'usuari «%s» està revocat."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "L'ID d'usuari «%s» està revocat."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "L'ID d'usuari «%s» està revocat."
+msgstr[1] "L'ID d'usuari «%s» està revocat."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Corregiu l'error primer\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Cal una contrasenya per a protegir la clau secreta.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Introduïu la contrasenya; aquesta ha de ser una frase secreta \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "la contrasenya no s'ha repetit correctament; torneu a intentar-ho"
-
-#, c-format
-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 ""
-"No voleu contrasenya: és una mala idea!\n"
-"Bé. Si voleu canviar-la més endavant,\n"
-"useu aquest programa amb l'opció \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "La generació de claus ha estat cancel·lada.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "no s'ha pogut crear «%s»: %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "s'està escrivint la clau pública a «%s»\n"
msgid "Really create? (y/N) "
msgstr "Crear realment? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "no s'ha pogut eliminar el bloc de claus: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "no s'ha pogut crear «%s»: %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr ""
-
msgid "never "
msgstr "mai "
msgid "Signature notation: "
msgstr "Notació de signatura: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 signatura errònia\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d signatures errònies\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d signatures errònies\n"
+msgstr[1] "%d signatures errònies\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Anell"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "no s'ha pogut crear l'armadura: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "s'està comprovant l'anell «%s»\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "s'han comprovat %lu claus (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "s'han comprovat %lu claus (%lu signatures)\n"
+msgstr[1] "s'han comprovat %lu claus (%lu signatures)\n"
+
+#, fuzzy, c-format
+#| msgid "\t%lu keys updated\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "\t%lu clau actualitzades\n"
+msgstr[1] "\t%lu clau actualitzades\n"
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "s'han comprovat %lu claus (%lu signatures)\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 signatura errònia\n"
+msgstr[1] "1 signatura errònia\n"
# Fitxer indi fins final. Hau! ivb
# Grrr. Com em tracten els esclaus ja... jm
msgstr "%s: no és un ID vàlid\n"
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "s'està sol·licitant la clau %08lX de %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "s'està sol·licitant la clau %08lX de %s\n"
+msgstr[1] "s'està sol·licitant la clau %08lX de %s\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "AVÍS: no s'ha pogut eliminar el fitxer temporal (%s) «%s»: %s\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "s'està sol·licitant la clau %08lX de %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "no s'ha trobat la clau «%s»: %s\n"
msgid "requesting key %s from %s\n"
msgstr "s'està sol·licitant la clau %08lX de %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "s'està cercant «%s» al servidor HKP %s\n"
+# «del servidor», «en el servidor»? ivb
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "error de servidor de claus"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "signatura %s, algorisme de resum %s\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "error de lectura: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "error de lectura: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: l'opció «%s» està desaconsellada.\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: es descarta: la clau pública ja està present\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "no s'ha pogut connectar amb «%s»: %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "l'algoritme de dispersió és invàlid «%s»\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "l'algoritme de dispersió és invàlid «%s»\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "No heu especificat un ID d'usuari. (podeu usar «-r»)\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "les dades no s'han desat; useu l'opció \"--output\" per desar-les\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "error en crear «%s»: %s\n"
-
# Indi? ivb
# Em pense que no. jm
msgid "Detached signature.\n"
msgstr "Voleu crear un certificat de revocació per a aquesta clau? "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "S'ha creat el certificat de revocació.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "no s'ha trobat la clau secreta «%s»: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "error en crear l'anell «%s»: %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Voleu crear un certificat de revocació per a aquesta clau? "
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "la clau pública %08lX és %lu segons anterior a la signatura\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "la clau pública %08lX és %lu segons anterior a la signatura\n"
+msgstr[1] "la clau pública %08lX és %lu segons anterior a la signatura\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "la clau pública %08lX és %lu segons anterior a la signatura\n"
+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 clau pública %08lX és %lu segons anterior a la signatura\n"
+msgstr[1] "la clau pública %08lX és %lu segons anterior a la signatura\n"
# Werner FIXME: Use ngettext. jm
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"la clau s'ha creat %lu segon en el futur (salt en el temps o problemes\n"
+"amb el rellotge)\n"
+msgstr[1] ""
"la clau s'ha creat %lu segon en el futur (salt en el temps o problemes\n"
"amb el rellotge)\n"
-# Werner FIXME: use ngettext. jm
+# Werner FIXME: Use ngettext. jm
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"la clau s'ha creat %lu segons en el futur (salt en el temps o problemes\n"
+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 clau s'ha creat %lu segon en el futur (salt en el temps o problemes\n"
+"amb el rellotge)\n"
+msgstr[1] ""
+"la clau s'ha creat %lu segon en el futur (salt en el temps o problemes\n"
"amb el rellotge)\n"
#, fuzzy, c-format
msgstr "la línia d'entrada és superior a %d caràcters\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "error mentre s'enviava a «%s»: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+# Suportats? ivb
+# A Softcatalà diuen molt «implementat». jm
+# Precissament acabem de parlar d'«implementat a la llista del GNOME
+# i s'ha dit que és erroni, igual que «suportat» :) Les alternatives
+# encara no m'agraden massa... jm
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Algoritmes suportats:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "error mentre s'enviava a «%s»: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "s'ha produït un error mentre s'escrivia l'anell secret «%s»: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: error en escriure el registre de directoris: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "error en la lectura de «%s»: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "error mentre s'enviava a «%s»: %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "no s'ha trobat la clau pública %08lX: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "error en la lectura de «%s»: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "error en crear «%s»: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Política: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "error en crear «%s»: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "llista claus"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [fitxers]|imprimeix resums de missatges"
+msgstr[1] "|algo [fitxers]|imprimeix resums de missatges"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "error en la creació de la contrasenya: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "error mentre s'enviava a «%s»: %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "«%s» no és un ID de clau llarg vàlid\n"
"no és necessària una comprovació de la base de dades de confiança\n"
"\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "no s'ha trobat la clau pública %08lX: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "si us plau, feu un --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "s'està comprovant la base de dades de confiança\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "s'han processat %d claus (s'han netejat %d comptes de validesa)\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "fins ara s'han processat %lu claus\n"
+msgstr[1] "fins ara s'han processat %lu claus\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "s'han processat %d claus (s'han netejat %d comptes de validesa)\n"
+msgstr[1] "s'han processat %d claus (s'han netejat %d comptes de validesa)\n"
msgid "no ultimately trusted keys found\n"
msgstr "no s'han trobat claus amb confiança absoluta\n"
"no s'ha trobat la clau pública de la clau amb confiança absoluta %08lX\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "La generació de claus ha fallat: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "La generació de claus ha fallat: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "La generació de claus ha fallat: %s\n"
+msgstr[1] "La generació de claus ha fallat: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "error en la creació de la contrasenya: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NOM|usa NOM com a clau secreta predeterminada"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d signatures no comprovades per falta de clau\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d signatures no comprovades a causa d'errors\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "Ha estat detectat 1 ID sense autosignatura vàlida\n"
+
+# Werner FIXME: use ngettext. jm
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "S'han esborrat %d signatures.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "L'ID d'usuari «%s» està revocat."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Cal una contrasenya per a protegir la clau secreta.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Introduïu la contrasenya; aquesta ha de ser una frase secreta \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "la contrasenya no s'ha repetit correctament; torneu a intentar-ho"
+
+#~ 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 ""
+#~ "No voleu contrasenya: és una mala idea!\n"
+#~ "Bé. Si voleu canviar-la més endavant,\n"
+#~ "useu aquest programa amb l'opció \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "no s'ha pogut eliminar el bloc de claus: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 signatura errònia\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "no s'ha pogut crear l'armadura: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "s'han comprovat %lu claus (%lu signatures)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "s'està sol·licitant la clau %08lX de %s\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "s'està cercant «%s» al servidor HKP %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "la clau pública %08lX és %lu segons anterior a la signatura\n"
+
+# Werner FIXME: use ngettext. jm
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "la clau s'ha creat %lu segons en el futur (salt en el temps o problemes\n"
+#~ "amb el rellotge)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
# «del servidor», «en el servidor»? ivb
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "error de servidor de claus"
-
-# «del servidor», «en el servidor»? ivb
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "error de servidor de claus"
#~ msgid " signed by %08lX at %s%s\n"
#~ msgstr " signat per %08lX el %s%s\n"
-#~ msgid "Policy: "
-#~ msgstr "Política: "
-
#~ msgid "Experimental algorithms should not be used!\n"
#~ msgstr "No hauríeu d'usar algoritmes experimentals!\n"
#~ msgid "\t%lu due to new pubkeys\n"
#~ msgstr "\\t%lu degut a noves claus públiques\n"
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu clau actualitzades\n"
-
#~ msgid "Ooops, no keys\n"
#~ msgstr "Ooops, no hi ha claus\n"
# 2005 Free Software Foundation, Inc.
# Magda Procházková <magda@math.muni.cz> 2001,
# Roman Pavlik <rp@tns.cz> 2001, 2002, 2003, 2004, 2005.
-# Petr Pisar <petr.pisar@atlas.cz>, 2009, 2010, 2011, 2013, 2014.
+# Petr Pisar <petr.pisar@atlas.cz>, 2009, 2010, 2011, 2013, 2014, 2015.
#
# A "%%0A" is used by Pinentry to insert a line break. The double percent
# sign is actually needed because it is also a printf format string. If you
#
msgid ""
msgstr ""
-"Project-Id-Version: gnupg2 2.1.0\n"
+"Project-Id-Version: gnupg2 2.1.10\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2014-11-16 16:22+0100\n"
+"PO-Revision-Date: 2015-12-07 20:45+0100\n"
"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
-"Language-Team: Czech <translations.cs@gnupg.cz>\n"
+"Language-Team: Czech <gnupg-i18n@gnupg.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
msgid "|pinentry-label|_Cancel"
msgstr "|pinentry-label|_Zrušit"
-#, fuzzy
-#| msgid "|pinentry-label|_OK"
msgid "|pinentry-label|_Yes"
-msgstr "|pinentry-label|_OK"
+msgstr "|pinentry-label|_Ano"
-#, fuzzy
-#| msgid "|pinentry-label|_OK"
msgid "|pinentry-label|_No"
-msgstr "|pinentry-label|_OK"
+msgstr "|pinentry-label|_Ne"
msgid "|pinentry-label|PIN:"
msgstr "|pinentry-label|PIN:"
-#, fuzzy
-#| msgid "|pinentry-label|_Cancel"
msgid "|pinentry-label|_Save in password manager"
-msgstr "|pinentry-label|_Zrušit"
+msgstr "|pinentry-label|_Uložit do správce hesel"
-#, fuzzy
-#| msgid "Do you really want to permanently delete the OpenPGP secret key:"
msgid "Do you really want to make your passphrase visible on the screen?"
-msgstr "Opravdu chcete trvale smazat tajný klíč OpenPGP:"
+msgstr "Opravdu chcete učinit heslo na obrazovce viditelným?"
msgid "|pinentry-tt|Make passphrase visible"
-msgstr ""
+msgstr "|pinentry-tt|Zviditelnit heslo"
-#, fuzzy
-#| msgid "invalid passphrase"
msgid "|pinentry-tt|Hide passphrase"
-msgstr "nesprávné heslo"
+msgstr "|pinentry-tt|Skrýt heslo"
#. TRANSLATORS: This string is displayed by Pinentry as the label
#. for the quality bar.
"Prosím, zadejte vaše heslo, aby pro tuto relaci mohl být odemknut tajný klíč"
msgid "PIN:"
-msgstr ""
+msgstr "PIN:"
msgid "Passphrase:"
msgstr "Heslo:"
msgstr[2] ""
"Heslo by mělo obsahovat alespoň %u číslic nebo %%0Azvláštních znaků."
-#, fuzzy, c-format
-#| msgid "A passphrase may not be a known term or match%%0Acertain pattern."
+#, c-format
msgid "A passphrase may not be a known term or match%%0Acertain pattern."
msgstr ""
"Heslo by nemělo být známým slovem nebo se shodovat%%0As určitým vzorem."
msgid "do not use the SCdaemon"
msgstr "nepoužívat SCdémona"
-#, fuzzy
-#| msgid "|NAME|connect to host NAME"
msgid "|NAME|accept some commands via NAME"
-msgstr "|NÁZEV|připojí se ke strojí NÁZEV"
+msgstr "|NÁZEV|přijímat některé příkazy přes NÁZEV"
msgid "ignore requests to change the TTY"
msgstr "ignorovat požadavky na změnu TTY"
msgid "do not use the PIN cache when signing"
msgstr "nepoužívat paměť PINů na podepisování"
-#, fuzzy
-#| msgid "do not allow the reuse of old passphrases"
msgid "disallow the use of an external password cache"
-msgstr "nedovolit opakovat stará hesla"
+msgstr "nedovolit použít vnější úložiště na hesla"
msgid "disallow clients to mark keys as \"trusted\""
msgstr "nedovolit klientům označovat klíče za „důvěryhodné“"
msgstr "umožnit přednastavení hesla"
msgid "allow caller to override the pinentry"
-msgstr ""
+msgstr "umožnit volajícímu přebít pinentry"
msgid "allow passphrase to be prompted through Emacs"
-msgstr ""
+msgstr "umožnit zadání hesla skrze Emacs"
msgid "enable ssh support"
msgstr "zapnout podporu pro OpenSSH"
msgid "Please report bugs to <@EMAIL@>.\n"
msgstr ""
"Chyby v programu, prosím, oznamujte (anglicky) na <@EMAIL@>,\n"
-"připomínky k překladu hlaste (česky) na <translations.cs@gnupg.cz>.\n"
+"připomínky k překladu hlaste na <gnupg-i18n@gnupg.org>.\n"
msgid "Usage: @GPG_AGENT@ [options] (-h for help)"
msgstr "Použití: @GPG_AGENT@ [volby] (-h pro nápovědu)"
msgid "I'll change it later"
msgstr "Změním jej později"
-#, fuzzy, c-format
-#| msgid "Do you really want to delete the selected keys? (y/N) "
+#, c-format
msgid ""
"Do you really want to delete the key identified by keygrip%%0A %s%%0A %%C"
"%%0A?"
-msgstr "Opravdu chcete smazat vybrané klíče? (a/N) "
+msgstr ""
+"Opravdu chcete smazat klíč určený pomocí keygripu%%0A %s%%0A %%C%%0A?"
msgid "Delete key"
msgstr "Smazat klíč"
#, c-format
msgid "unknown debug flag '%s' ignored\n"
-msgstr ""
+msgstr "neznámý ladicí příznak „%s“ se ignoruje\n"
#, c-format
msgid "no running gpg-agent - starting '%s'\n"
msgid "connection to agent established\n"
msgstr "spojení na agenta ustanoveno\n"
-#, fuzzy
-#| msgid "connection to agent established\n"
msgid "connection to agent is in restricted mode\n"
-msgstr "spojení na agenta ustanoveno\n"
+msgstr "spojení na agenta je v omezeném režimu\n"
#, c-format
msgid "no running Dirmngr - starting '%s'\n"
msgid "Enter passphrase: "
msgstr "Vložte heslo: "
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "chyba při vytváření souboru klíčů (keyring) „%s“: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: "
+msgid "WARNING: %s\n"
+msgstr "VAROVÁNÍ: "
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "OpenPGP karta není dostupná: %s\n"
msgid "KEYTOCARD failed: %s\n"
msgstr "Volání KEYTOCARD selhalo: %s\n"
-#, fuzzy
-#| msgid "This command is not allowed while in %s mode.\n"
msgid "This command is not supported by this card\n"
-msgstr "Tento příkaz není v módů %s dovolený.\n"
+msgstr "Tento příkaz není touto kartou podporován\n"
-#, fuzzy
-#| msgid "Note: keys are already stored on the card!\n"
msgid "Note: This command destroys all keys stored on the card!\n"
-msgstr "Poznámka: na kartě jsou již klíče uloženy!\n"
+msgstr "Poznámka: Tento příkaz zničí všechny klíče uložené na kartě!\n"
-#, fuzzy
-#| msgid "Continue? (Y/n) "
msgid "Continue? (y/N) "
-msgstr "Pokračovat (A/n) "
+msgstr "Pokračovat (a/N) "
+# The code expects non-localized "yes"
msgid "Really do a factory reset? (enter \"yes\") "
-msgstr ""
+msgstr "Opravdu obnovit tovární nastavení (zadejte „yes“) "
msgid "quit this menu"
msgstr "ukončit toto menu"
msgstr "odblokovat PIN pomocí resetačního kódu"
msgid "destroy all keys and data"
-msgstr ""
+msgstr "zničit všechny klíče a data"
msgid "gpg/card> "
msgstr "gpg/karta> "
msgid "error reading keyblock: %s\n"
msgstr "chyba při čtení bloku klíče: %s\n"
-#, fuzzy, c-format
-#| msgid "key \"%s\" not found: %s\n"
+#, c-format
msgid "key \"%s\" not found\n"
-msgstr "klíč „%s“ nenalezen: %s\n"
+msgstr "klíč „%s“ nenalezen\n"
msgid "(unless you specify the key by fingerprint)\n"
msgstr "(dokud neurčíte klíč jeho otiskem)\n"
msgid "remove as much as possible from key during export"
msgstr "odstranit při exportu z klíče vše, co lze"
+msgid " - skipped"
+msgstr " – přeskočeno"
+
msgid "exporting secret keys not allowed\n"
msgstr "exportování tajného klíče není povoleno\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "klíč %s: tělo klíče je na kartě – přeskočeno\n"
-msgid " - skipped"
-msgstr " – přeskočeno"
-
msgid "WARNING: nothing exported\n"
msgstr "VAROVÁNÍ: nebylo nic vyexportováno\n"
+#, c-format
+msgid "error creating '%s': %s\n"
+msgstr "chyba při vytváření „%s“: %s\n"
+
msgid "[User ID not found]"
msgstr "[ID uživatele nenalezeno]"
#, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "(zkontrolujte argument volby „%s“)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Warning: value '%s' for option '%s' should be a long key ID or a "
+#| "fingerprint\n"
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+"Pozor: hodnota „%s“ volby „%s“ by měla být\n"
+"dlouhý identifikátor klíče nebo jeho otisk\n"
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "chyba při zavírání chyba %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error searching the keyring: %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "chyba při prohledávání souboru klíčů (keyring): %s\n"
+
+#, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "„%s“ automaticky získáno přes %s\n"
msgstr "tajný klíč „%s“ nenalezen: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "postrádám argument u volby „%.50s“\n"
+#| msgid "using \"%s\" as default secret key\n"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "jako výchozí tajný klíč se použije „%s“\n"
#, fuzzy, c-format
-#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
-msgstr "|NÁZEV|použít NÁZEV jako implicitní tajný klíč"
+#| msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
+msgstr "jako výchozí tajný klíč se použije „%s“\n"
+
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
# c-format
#, c-format
msgid "quickly generate a new key pair"
msgstr "rychle vytvořit nový pár klíčů"
-#, fuzzy
-#| msgid "quickly generate a new key pair"
msgid "quickly add a new user-id"
-msgstr "rychle vytvořit nový pár klíčů"
+msgstr "rychle přidat novou identitu uživatele"
msgid "full featured key pair generation"
msgstr "komplexní vytvoření páru klíčů"
msgid "|VALUE|set the TOFU policy for a key (good, unknown, bad, ask, auto)"
msgstr ""
+"|HODNOTA|nastavit TOFU politiku klíči (good [dobrý], unknown [neznámý], bad "
+"[špatný], ask [zeptat se], auto)"
msgid "create ascii armored output"
msgstr "vytvoř výstup zakódovaný pomocí ASCII"
msgid "show expiration dates during signature listings"
msgstr "ukazovat data expirace během výpisu podpisů"
-#, fuzzy
-#| msgid "Available keys:\n"
msgid "available TOFU policies:\n"
-msgstr "Dostupné klíče:\n"
+msgstr "dostupné politiky TOFU:\n"
-#, fuzzy, c-format
-#| msgid "unknown option '%s'\n"
+#, c-format
msgid "unknown TOFU policy '%s'\n"
-msgstr "neznámá volba „%s“\n"
+msgstr "neznámá TOFU politika „%s“\n"
msgid "(use \"help\" to list choices)\n"
-msgstr ""
+msgstr "(možnosti lze vypsat příkazem „help“)\n"
-#, fuzzy, c-format
-#| msgid "unknown command '%s'\n"
+#, c-format
msgid "unknown TOFU DB format '%s'\n"
-msgstr "neznámý příkaz „%s“\n"
+msgstr "neznámý formát „%s“ databáze TOFU\n"
#, c-format
msgid "Note: old default options file '%s' ignored\n"
msgstr "Poznámka: starý implicitní soubor s možnostmi „%s“ ignorován\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "volba „%.50s“ není jednoznačná\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring '%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "chyba při vytváření souboru klíčů (keyring) „%s“: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt je příliš stará (potřebuji %s, mám %s)\n"
msgstr ""
"VAROVÁNÍ: specifikován adresát (-r) bez použití šifrování s veřejným klíčem\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "řádek %d: zadáno neplatné datum\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "řádek %d: zadáno neplatné datum\n"
-
msgid "--store [filename]"
msgstr "--store [jméno souboru]"
msgstr "--decrypt [jméno souboru]"
msgid "--sign-key user-id"
-msgstr "--sign-key id uživatele"
+msgstr "--sign-key id_uživatele"
msgid "--lsign-key user-id"
-msgstr "--lsign-key id uživatele"
+msgstr "--lsign-key id_uživatele"
msgid "--edit-key user-id [commands]"
-msgstr "--edit-key id uživatele [příkazy]"
+msgstr "--edit-key id_uživatele [příkazy]"
msgid "--passwd <user-id>"
msgstr "--passwd <id-uživatele>"
msgid "key export failed: %s\n"
msgstr "export klíče se nepodařil: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "export klíče se nepodařil: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "hledání na serveru klíčů se nezdařilo: %s\n"
msgid "invalid hash algorithm '%s'\n"
msgstr "neplatný hashovací algoritmus „%s“\n"
-#, fuzzy, c-format
-#| msgid "error loading certificate '%s': %s\n"
+#, c-format
msgid "error parsing key specification '%s': %s\n"
-msgstr "chyba při zavádění certifikátu „%s“: %s\n"
+msgstr "chyba při rozboru názvu klíče „%s“: %s\n"
#, c-format
msgid "'%s' does not appear to be a valid key ID, fingerprint or keygrip\n"
-msgstr ""
+msgstr "„%s“ nevypadá jako platné ID klíče, otisk klíče nebo keygrip\n"
msgid "[filename]"
msgstr "[jméno souboru]"
msgid "Go ahead and type your message ...\n"
-msgstr "Začněte psát svou zprávu ...\n"
+msgstr "Začněte psát svou zprávu…\n"
msgid "the given certification policy URL is invalid\n"
msgstr "zadané URL pro certifikační politiku je neplatné\n"
msgid "repair damage from the pks keyserver during import"
msgstr "opravit poškození vzniklá při importu z PKS serveru"
-#, fuzzy
-#| msgid "do not update the trustdb after import"
msgid "do not clear the ownertrust values during import"
-msgstr "neaktualizovat databázi důvěry po importu"
+msgstr "nemazat údaje o důvěře během importu"
msgid "do not update the trustdb after import"
msgstr "neaktualizovat databázi důvěry po importu"
msgid "Total number processed: %lu\n"
msgstr "Celkový počet zpracovaných klíčů: %lu\n"
-#, fuzzy, c-format
-#| msgid " skipped new keys: %lu\n"
+#, c-format
msgid " skipped PGP-2 keys: %lu\n"
-msgstr " přeskočeny nové klíče: %lu\n"
+msgstr " přeskočeny klíče PGP2: %lu\n"
#, c-format
msgid " skipped new keys: %lu\n"
-msgstr " přeskočeny nové klíče: %lu\n"
+msgstr " přeskočeny nové klíče: %lu\n"
#, c-format
msgid " w/o user IDs: %lu\n"
-msgstr " bez ID uživatele: %lu\n"
+msgstr " bez ID uživatele: %lu\n"
#, c-format
msgid " imported: %lu"
-msgstr " importováno: %lu"
+msgstr " importováno: %lu"
#, c-format
msgid " unchanged: %lu\n"
-msgstr " beze změn: %lu\n"
+msgstr " beze změn: %lu\n"
#, c-format
msgid " new user IDs: %lu\n"
-msgstr " nové ID uživatelů: %lu\n"
+msgstr " nové ID uživatelů: %lu\n"
#, c-format
msgid " new subkeys: %lu\n"
-msgstr " nové podklíče: %lu\n"
+msgstr " nové podklíče: %lu\n"
#, c-format
msgid " new signatures: %lu\n"
-msgstr " nové podpisy: %lu\n"
+msgstr " nové podpisy: %lu\n"
#, c-format
msgid " new key revocations: %lu\n"
-msgstr " nové revokace klíčů: %lu\n"
+msgstr " nové revokace klíčů: %lu\n"
#, c-format
msgid " secret keys read: %lu\n"
-msgstr " přečtené tajné klíče: %lu\n"
+msgstr " přečtené tajné klíče: %lu\n"
#, c-format
msgid " secret keys imported: %lu\n"
-msgstr " importované tajné klíče: %lu\n"
+msgstr " importované tajné klíče: %lu\n"
#, c-format
msgid " secret keys unchanged: %lu\n"
-msgstr " tajné klíče nezměněny: %lu\n"
+msgstr " tajné klíče nezměněny: %lu\n"
#, c-format
msgid " not imported: %lu\n"
-msgstr " neimportováno: %lu\n"
+msgstr " neimportováno: %lu\n"
#, c-format
msgid " signatures cleaned: %lu\n"
-msgstr " odstraněné podpisy: %lu\n"
+msgstr " odstraněné podpisy: %lu\n"
#, c-format
msgid " user IDs cleaned: %lu\n"
-msgstr " odstraněné uživatelské ID: %lu\n"
+msgstr " odstraněné uživatelské ID: %lu\n"
#, c-format
msgid ""
#. created again.
#, c-format
msgid "To migrate '%s', with each smartcard, run: %s\n"
-msgstr ""
+msgstr "Pro migraci „%s“ u každé karty spusťte: %s\n"
#, c-format
msgid "key %s: no public key - can't apply revocation certificate\n"
msgid "keyblock resource '%s': %s\n"
msgstr "zdroj bloku klíče „%s“: %s\n"
-#, fuzzy, c-format
-#| msgid "error opening '%s': %s\n"
+#, c-format
msgid "error opening key DB: %s\n"
-msgstr "chyba při otevírání „%s“: %s\n"
+msgstr "chyba při otevírání databáze klíčů: %s\n"
#, c-format
msgid "failed to rebuild keyring cache: %s\n"
msgid "[self-signature]"
msgstr "[podpis klíče jím samým]"
-msgid "1 bad signature\n"
-msgstr "1 špatný podpis\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d špatných podpisů\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 podpis neověřen, protože chybí klíč\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d podpisů neověřených, protože chybí klíč\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 podpis neověřen, protože vznikla chyba\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d špatných podpisů\n"
+msgstr[1] "%d špatných podpisů\n"
+msgstr[2] "%d špatných podpisů\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d podpisů neověřených, protože vznikly chyby\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 podpis neověřen, protože chybí klíč\n"
+msgstr[1] "1 podpis neověřen, protože chybí klíč\n"
+msgstr[2] "1 podpis neověřen, protože chybí klíč\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "objeven 1 identifikátor uživatele bez platného podpisu jím samým\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 podpis neověřen, protože vznikla chyba\n"
+msgstr[1] "1 podpis neověřen, protože vznikla chyba\n"
+msgstr[2] "1 podpis neověřen, protože vznikla chyba\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n"
+#, fuzzy, c-format
+#| 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] ""
+"objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n"
+msgstr[1] ""
+"objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n"
+msgstr[2] ""
+"objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgstr ""
"Prosím rozhodněte, nakolik důvěřujete tomuto uživateli, že správně\n"
"verifikuje klíče jiných uživatelů (prohlédnutím cestovních pasů,\n"
-"kontrolou otisků z různých zdrojů...)?\n"
+"kontrolou otisků z různých zdrojů…)?\n"
"\n"
#, c-format
#, c-format
msgid "Skipping user ID \"%s\", which is not a text ID.\n"
-msgstr ""
+msgstr "Přeskakuje se ID uživatele „%s“, což není textové ID.\n"
#, c-format
msgid "User ID \"%s\" is revoked."
msgid "show key fingerprint"
msgstr "vypsat otisk klíče"
-#, fuzzy
-#| msgid "Enter the keygrip: "
msgid "show the keygrip"
-msgstr "Vložte keygrip: "
+msgstr "ukázat keygrip"
msgid "list key and user IDs"
msgstr "vypsat seznam klíčů a id uživatelů"
msgid "Really sign all user IDs? (y/N) "
msgstr "Opravdu podepsat všechny id uživatele? (a/N) "
-#, fuzzy
-#| msgid "Really sign all user IDs? (y/N) "
msgid "Really sign all text user IDs? (y/N) "
-msgstr "Opravdu podepsat všechny id uživatele? (a/N) "
+msgstr "Opravdu podepsat všechna textová ID uživatele? (a/N) "
msgid "Hint: Select the user IDs to sign\n"
msgstr "Nápověda: Vyberte id uživatele k podepsání\n"
#, c-format
msgid "(Use the '%s' command.)\n"
-msgstr ""
+msgstr "(Použijte příkaz „%s“.)\n"
msgid "You can't delete the last user ID!\n"
msgstr "Nemůžete smazat poslední id uživatele!\n"
msgid "Really delete this self-signature? (y/N)"
msgstr "Opravdu smazat tento podpis podepsaný sebou samým? (a/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Smazán %d podpis.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Smazáno %d podpisů.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Smazán %d podpis.\n"
+msgstr[1] "Smazán %d podpis.\n"
+msgstr[2] "Smazán %d podpis.\n"
msgid "Nothing deleted.\n"
msgstr "Nic nebylo smazáno.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "Uživatelské ID „%s“ směstnáno: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Uživatelské ID „%s“: %d podpisů odstraněno\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Uživatelské ID „%s“: %d podpisů odstraněno\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Uživatelské ID „%s“: %d podpisů odstraněno\n"
+msgstr[1] "Uživatelské ID „%s“: %d podpisů odstraněno\n"
+msgstr[2] "Uživatelské ID „%s“: %d podpisů odstraněno\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Jste si jistí, že tento klíč chcete pověřit revokací? (a/N) "
-#, fuzzy
-#| msgid ""
-#| "Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
-msgstr "Jste si jistí, že tento klíč chcete pověřit revokací? (a/N) "
+msgstr "Jste si jistí, že chcete změnit dobu expirace více podklíčům? (a/N) "
msgid "Changing expiration time for a subkey.\n"
msgstr "Měním dobu expirace podklíče.\n"
msgid "No user ID with hash %s\n"
msgstr "Neexistuje uživatelské ID s hashem %s\n"
-#, fuzzy, c-format
-#| msgid "No subkey with index %d\n"
+#, c-format
msgid "No subkey with key ID '%s'.\n"
-msgstr "Neexistuje podklíč s indexem %d\n"
+msgstr "Neexistuje podklíč s ID klíče „%s“.\n"
#, c-format
msgid "No subkey with index %d\n"
#, c-format
msgid "The characters '%s' and '%s' may not appear in name\n"
-msgstr ""
+msgstr "Znaky „%s“ a „%s“ se ve jméně nesmí objevit\n"
msgid "Name may not start with a digit\n"
msgstr "Jméno nemůže začínat číslicí\n"
msgstr "Nejdřív, prosím, opravte chybu\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Pro ochranu Vašeho tajného klíče musíte zadat heslo.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Prosím, zadejte heslo, kterým ochráníte zálohu mimo kartu nového šifrovacího "
-"klíče."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "heslo není zopakováno správně; zkuste to znovu"
-
-#, c-format
-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 ""
-"Nechcete heslo – to *není* dobrý nápad!\n"
-"Dobře, budu pokračovat bez hesla. Kdykoliv můžete heslo změnit použitím\n"
-"tohoto programu s parametrem „--edit-key“.\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Vytváření klíče bylo zrušeno.\n"
#, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "záložní soubor „%s“ nelze vytvořit: %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "Poznámka: záloha klíče z karty uložena do „%s“\n"
+
+#, c-format
msgid "writing public key to '%s'\n"
msgstr "veřejný klíč se zapisuje do „%s“\n"
msgid "Really create? (y/N) "
msgstr "Opravdu vytvořit? (a/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "uložení klíče na kartu se nezdařilo: %s\n"
-
-#, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "záložní soubor „%s“ nelze vytvořit: %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "Poznámka: záloha klíče z karty uložena do „%s“\n"
-
msgid "never "
msgstr "nikdy "
msgid "Signature notation: "
msgstr "Podepisovací notace: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 špatný podpis\n"
-
#, fuzzy, c-format
-#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d špatných podpisů\n"
+#| msgid "%d good signatures\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d dobrých podpisů\n"
+msgstr[1] "%d dobrých podpisů\n"
+msgstr[2] "%d dobrých podpisů\n"
-#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr "Pozor: %lu klíč(ů) přeskočen(o) kvůli jejich přílišné velikosti\n"
+#, fuzzy, c-format
+#| msgid "Warning: %lu key(s) skipped due to their large size\n"
+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] "Pozor: %lu klíč(ů) přeskočen(o) kvůli jejich přílišné velikosti\n"
+msgstr[1] "Pozor: %lu klíč(ů) přeskočen(o) kvůli jejich přílišné velikosti\n"
+msgstr[2] "Pozor: %lu klíč(ů) přeskočen(o) kvůli jejich přílišné velikosti\n"
msgid "Keyring"
msgstr "Soubor klíčů (keyring)"
msgstr " Sériové číslo karty ="
#, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "přejmenování „%s“ na „%s“ se nezdařilo: %s\n"
-
-#, c-format
msgid "caching keyring '%s'\n"
msgstr "zapamatovává se soubor klíčů „%s“\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu klíčů již uloženo v keši (%lu podpisů)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu klíčů již uloženo v keši (%lu podpisů)\n"
+msgstr[1] "%lu klíčů již uloženo v keši (%lu podpisů)\n"
+msgstr[2] "%lu klíčů již uloženo v keši (%lu podpisů)\n"
-#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu klíčů uloženo v keši (%lu podpisů)\n"
+#, fuzzy, c-format
+#| msgid "flush the cache"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "vyprázdní keš"
+msgstr[1] "vyprázdní keš"
+msgstr[2] "vyprázdní keš"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 špatný podpis\n"
+msgstr[1] "1 špatný podpis\n"
+msgstr[2] "1 špatný podpis\n"
#, c-format
msgid "%s: keyring created\n"
msgstr "%s: soubor klíčů (keyring) vytvořen\n"
msgid "override proxy options set for dirmngr"
-msgstr ""
+msgstr "přebít nastavení proxy pro dirmngr"
msgid "include revoked keys in search results"
msgstr "zahrnout do výsledku hledání odvolané klíče"
msgstr "zahrnout podklíče, když se hledá podle ID klíče"
msgid "override timeout options set for dirmngr"
-msgstr ""
+msgstr "přebít nastavení časového limitu pro dirmngr"
msgid "automatically retrieve keys when verifying signatures"
msgstr "automaticky získávat klíče při ověřování podpisů"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "„%s“ není ID klíče: přeskočeno\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "aktualizuji 1 klíč z %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "aktualizuji %d klíčů z %s\n"
+msgstr[1] "aktualizuji %d klíčů z %s\n"
+msgstr[2] "aktualizuji %d klíčů z %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "VAROVÁNÍ: nelze aktualizovat klíč %s prostřednictvím %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "aktualizuji %d klíčů z %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "klíč „%s“ nebyl na serveru klíčů nalezen\n"
msgid "requesting key %s from %s\n"
msgstr "požaduji klíč %s z %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "posílám klíč %s na %s server %s\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "žádná operace se serverem klíčů!\n"
#, c-format
msgid "sending key %s to %s\n"
#, c-format
msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n"
-msgstr ""
+msgstr "POZOR: nejedná se o oddělený podpis. Soubor „%s“ NEBYL ověřen!\n"
#, c-format
msgid "Can't check signature: %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "Poznámka: podpisy používající algoritmus %s jsou zamítány\n"
+#, fuzzy, c-format
+#| msgid "%s:%u: read error: %s\n"
+msgid "(reported error: %s)\n"
+msgstr "%s:%u: chyba čtení: %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in '%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "chyba při čtení v „%s“: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: použití parametru „%s“ se nedoporučuje\n"
"U veřejného klíče ECDSA se očekává, že v kódování SEC bude délka násobkem 8 "
"bitů\n"
-#, fuzzy, c-format
-#| msgid "Unknown signature type '%s'\n"
+#, c-format
msgid "unknown weak digest '%s'\n"
-msgstr "Neznámý typ podpisu „%s“\n"
+msgstr "neznámý slabý hashovací algoritmus „%s“\n"
#, c-format
msgid "File '%s' exists. "
msgid "%s: skipped: public key already present\n"
msgstr "%s: přeskočeno: veřejný klíč je již obsažen v databázi\n"
+#, fuzzy, c-format
+#| msgid "can't connect to '%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "nelze se připojit k „%s“: %s\n"
+
+#, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "zadána volba „%s“, ale nezadány žádné platné výchozí klíče\n"
+
+#, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "zadána volba „%s“, ale chybí volba „%s“\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr ""
"Nespecifikoval jste identifikátor uživatele (user ID). Můžete použít \"-r\"\n"
msgstr ""
"data nebyla uložena; k jejich uložení použijte parametr příkazu „--output“\n"
-#, c-format
-msgid "error creating '%s': %s\n"
-msgstr "chyba při vytváření „%s“: %s\n"
-
msgid "Detached signature.\n"
msgstr "Podpis oddělený od dokumentu.\n"
msgid "(This is a sensitive revocation key)\n"
msgstr "(Toto je citlivý revokační klíč)\n"
-#, fuzzy
-#| msgid "Secret key is available.\n"
msgid "Secret key is not available.\n"
-msgstr "Tajný klíč je dostupný.\n"
+msgstr "Tajný klíč není dostupný.\n"
msgid "Create a designated revocation certificate for this key? (y/N) "
msgstr "Vytvořit pro tento klíč pověřený revokační certifikát? (a/N)"
msgstr "Toto je revokační certifikát pro OpenPGP klíč:"
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 ""
+
+#, fuzzy
+#| msgid ""
+#| "Use it to revoke this key in case of a compromise or loss of\n"
+#| "the secret key. However, if the secret key is still accessible,\n"
+#| "it is better to generate a new revocation certificate and give\n"
+#| "a reason for the revocation."
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
"Použijte jej pro odvolání tohoto klíče v případě zneužití nebo ztráty\n"
"soukromého klíče. Avšak bude-li soukromý klíč stále přístupný, bude\n"
"lepší vytvořit nový revokační certifikát s vysvětlením odvolání."
+#, fuzzy
+#| 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 making use of this revocation certificate."
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
"Aby se zabránilo nechtěnému použití tohoto souboru, před 5 pomlček byla\n"
"vložena dvojtečka. Před použitím tohoto revokačního certifikátu odstraňte\n"
"tuto dvojtečku textovým editorem."
#, fuzzy, c-format
-#| msgid "secret key \"%s\" not found: %s\n"
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Revokační certifikát vytvořen.\n"
+
+#, c-format
msgid "secret key \"%s\" not found\n"
-msgstr "tajný klíč „%s“ nenalezen: %s\n"
+msgstr "tajný klíč „%s“ nenalezen\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“ odpovídá více tajným klíčům:\n"
+
+#, c-format
+msgid "error searching the keyring: %s\n"
+msgstr "chyba při prohledávání souboru klíčů (keyring): %s\n"
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Vytvořit pro tento klíč revokační certifikát? (a/N) "
msgid "WARNING: signing subkey %s has an invalid cross-certification\n"
msgstr "VAROVÁNÍ: podepisovací podklíč %s má neplatnou křížovou certifikaci\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "veřejný klíč %s je o %lu sekund novější než podpis\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "veřejný klíč %s je o %lu sekund novější než podpis\n"
+msgstr[1] "veřejný klíč %s je o %lu sekund novější než podpis\n"
+msgstr[2] "veřejný klíč %s je o %lu sekund novější než podpis\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "veřejný klíč %s je o %lu sekund novější než podpis\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "veřejný klíč %s je o %lu sekund novější než podpis\n"
+msgstr[1] "veřejný klíč %s je o %lu sekund novější než podpis\n"
+msgstr[2] "veřejný klíč %s je o %lu sekund novější než podpis\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n"
+"je problém se systémovým časem)\n"
+msgstr[1] ""
+"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n"
+"je problém se systémovým časem)\n"
+msgstr[2] ""
"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n"
"je problém se systémovým časem)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] ""
+"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n"
+"je problém se systémovým časem)\n"
+msgstr[1] ""
+"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n"
+"je problém se systémovým časem)\n"
+msgstr[2] ""
"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n"
"je problém se systémovým časem)\n"
msgid "input line longer than %d characters\n"
msgstr "vstupní řádek je delší než %d znaků\n"
+#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "chyba při odesílání standardního parametru: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "nepodporovaný algoritmus: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "chyba při odesílání dat: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing base64 encoding: %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "chyba při zápisu kódování base64: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error initializing reader object: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "chyba při inicializaci čtecího objektu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening '%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "chyba při otevírání „%s“: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "chyba při odesílání dat: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "veřejný klíč %s nebyl nalezen: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error setting OCSP target: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "chyba při nastavování cíle OCSP: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting responder ID: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "chyba při zjišťování ID odpovídače: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "platnost: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "chyba při získání uložených příznaků: %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] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "vypsat seznam klíčů"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "vypsat hash zprávy"
+msgstr[1] "vypsat hash zprávy"
+msgstr[2] "vypsat hash zprávy"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "chyba při vytváření roury: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "chyba při odesílání dat: %s\n"
+
#, c-format
msgid "'%s' is not a valid long keyID\n"
msgstr "„%s“ není platný dlouhý keyID\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "není nutné aktualizovat databázi důvěry s modelem „%s“\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "veřejný klíč %s nebyl nalezen: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "prosím proveďte --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "kontroluji databázi důvěry\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "zpracováno %d klíčů (%d validit vymazáno)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu klíče byly doposud zpracovány\n"
+msgstr[1] "%lu klíče byly doposud zpracovány\n"
+msgstr[2] "%lu klíče byly doposud zpracovány\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "zpracováno %d klíčů (%d validit vymazáno)\n"
+msgstr[1] "zpracováno %d klíčů (%d validit vymazáno)\n"
+msgstr[2] "zpracováno %d klíčů (%d validit vymazáno)\n"
msgid "no ultimately trusted keys found\n"
msgstr "žádný absolutně důvěryhodný klíč nebyl nalezen\n"
msgstr "veřejný klíč k absolutně důvěryhodnému klíči %s nebyl nalezen\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "požadováno %d částečné důvěry a %d úplné důvěry, model %s\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
#. It gets passed to atoi() so everything after the number is
#. essentially a comment and need not be translated. Either key and
#. uid are both NULL, or neither are NULL.
-#, fuzzy
-#| msgid "10 translator see trustdb.c:uid_trust_string_fixed"
msgid "10 translator see trust.c:uid_trust_string_fixed"
-msgstr ""
-"14 fixní délka na kterou se překládá see trustdb.c:uid_trust_string_fixed"
+msgstr "14 překladateli, podívej se na trustdb.c:uid_trust_string_fixed"
msgid "[ revoked]"
msgstr "[ revokován ]"
msgid "card is permanently locked!\n"
msgstr "karta je trvale uzamčena!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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] ""
+"Do trvalého uzamčení karty zůstává %d pokusů o zadání PINu administrátora\n"
+msgstr[1] ""
+"Do trvalého uzamčení karty zůstává %d pokusů o zadání PINu administrátora\n"
+msgstr[2] ""
"Do trvalého uzamčení karty zůstává %d pokusů o zadání PINu administrátora\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
msgid "failed to store the key: %s\n"
msgstr "nelze uložit klíč: %s\n"
-#, fuzzy
-#| msgid "unsupported URI"
msgid "unsupported curve\n"
-msgstr "toto URI není podporováno"
+msgstr "nepodporovaná křivka\n"
msgid "please wait while key is being generated ...\n"
msgstr "prosím počkejte než bude klíč vygenerován…\n"
msgid "generating key failed\n"
msgstr "generování klíče se nezdařilo\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "generování klíče dokončeno (%d sekund)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "generování klíče dokončeno (%d sekund)\n"
+msgstr[1] "generování klíče dokončeno (%d sekund)\n"
+msgstr[2] "generování klíče dokončeno (%d sekund)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "neplatná struktura OpenPGP karty (DO 0x93)\n"
msgid "invalid radix64 character %02x skipped\n"
msgstr "neplatný radix64 znak %02x byl přeskočen\n"
-#, fuzzy
-#| msgid "no gpg-agent running in this session\n"
msgid "no dirmngr running in this session\n"
-msgstr "v této relaci neběží žádný gpg-agent\n"
+msgstr "v této relaci neběží žádný dirmngr\n"
#, c-format
msgid "validation model requested by certificate: %s"
msgstr "chyba při získávání „%s“: status HTTP je %u\n"
# Poslední argument je název protokolu
-#, fuzzy
-#| msgid "CRL access not possible due to disabled %s\n"
msgid "CRL access not possible due to Tor mode\n"
-msgstr "Přístup k CRL není možný kvůli vypnutému %s\n"
+msgstr "Přístup k CRL není možný kvůli režimu Tor\n"
#, c-format
msgid "certificate search not possible due to disabled %s\n"
msgstr "|SOUBOR|pro HKP přes TLS použije certifikáty CA ze SOUBORU"
msgid "route all network traffic via Tor"
-msgstr ""
+msgstr "směrovat veškerý síťový provoz skrz Tor"
msgid ""
"@\n"
msgid "response from server too large; limit is %d bytes\n"
msgstr "odpověď serveru je příliš velká, limit je %d bajtů\n"
-#, fuzzy
-#| msgid "OCSP request not possible due to disabled HTTP\n"
msgid "OCSP request not possible due to Tor mode\n"
-msgstr "OCSP dotaz není možný, protože HTTP je zakázáno\n"
+msgstr "OCSP dotaz není možný kvůli režimu Tor\n"
msgid "OCSP request not possible due to disabled HTTP\n"
msgstr "OCSP dotaz není možný, protože HTTP je zakázáno\n"
msgid "do not allow the reuse of old passphrases"
msgstr "nedovolit opakovat stará hesla"
+#, fuzzy
+#| msgid "|N|set LDAP timeout to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|nastaví časový limit pro LDAP na N sekund"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NÁZEV|použít NÁZEV jako implicitní tajný klíč"
msgid "Options controlling the interactivity and enforcement"
msgstr "Volby ovlivňující interaktivitu a vymáhání"
-#, fuzzy
-#| msgid "Options controlling the security"
msgid "Options controlling the use of Tor"
-msgstr "Volby ovlivňující bezpečnost"
+msgstr "Volby ovlivňující použití Toru"
msgid "Configuration for HTTP servers"
msgstr "Nastavení HTTP serverů"
msgstr "GPG pro S/MIME"
msgid "Key Acquirer"
-msgstr ""
+msgstr "Stahovač klíčů"
msgid "PIN and Passphrase Entry"
msgstr "Zadávání kódu PIN a hesla"
"Syntaxe: gpg-check-pattern [volby] soubor_se_vzorem\n"
"Prověří heslo zadané na vstupu proti souboru se vzory\n"
-#~ msgid "cleared passphrase cached with ID: %s\n"
-#~ msgstr "vymazané heslo zapamatované pro ID: %s\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "výběr klíče pomocí „%s“ není jednoznačné\n"
-#, fuzzy
-#~| msgid "can't open the keyring"
-#~ msgid "Failed to open the keyring DB.\n"
-#~ msgstr "nemohu otevřít soubor klíčů"
+#~ msgid "'%s' matches at least:\n"
+#~ msgstr "„%s“ odpovídá přinejmenším:\n"
-#, fuzzy
-#~| msgid "failed to open '%s': %s\n"
-#~ msgid "Failed to parse '%s'.\n"
-#~ msgstr "„%s“ nebylo možné otevřít: %s\n"
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d podpisů neověřených, protože chybí klíč\n"
-#, fuzzy
-#~| msgid "invalid value\n"
-#~ msgid "invalid value '%s'\n"
-#~ msgstr "neplatná hodnota\n"
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d podpisů neověřených, protože vznikly chyby\n"
-#, fuzzy
-#~| msgid "error reading secret keyblock \"%s\": %s\n"
-#~ msgid "error looking up secret key \"%s\": %s\n"
-#~ msgstr "chyba při čtení bloku tajného klíče „%s“: %s\n"
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "objeven 1 identifikátor uživatele bez platného podpisu jím samým\n"
-#~ msgid "Please select at most one subkey.\n"
-#~ msgstr "Prosím, vyberte nejvýše jeden podklíč.\n"
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Smazáno %d podpisů.\n"
-#~ msgid "apparently no running dirmngr\n"
-#~ msgstr "dirmngr zjevně neběží\n"
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Uživatelské ID „%s“: %d podpisů odstraněno\n"
-#~ msgid "no running dirmngr - starting one\n"
-#~ msgstr "žádný dirmngr neběží – jeden bude spuštěn\n"
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pro ochranu Vašeho tajného klíče musíte zadat heslo.\n"
+#~ "\n"
-#~ msgid "malformed %s environment variable\n"
-#~ msgstr "špatně utvořená proměnná prostředí %s\n"
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Prosím, zadejte heslo, kterým ochráníte zálohu mimo kartu nového "
+#~ "šifrovacího klíče."
-#~ msgid "dirmngr protocol version %d is not supported\n"
-#~ msgstr "verze %d protokolu dirmngr není podporována\n"
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "heslo není zopakováno správně; zkuste to znovu"
-#~ msgid "can't connect to the dirmngr - trying fall back\n"
-#~ msgstr "k dirmngr se nelze připojit – zkusí se náhradní postup\n"
+#~ msgid "%s.\n"
+#~ msgstr "%s.\n"
+
+#~ msgid ""
+#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
+#~ "I will do it anyway. You can change your passphrase at any time,\n"
+#~ "using this program with the option \"--edit-key\".\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Nechcete heslo – to *není* dobrý nápad!\n"
+#~ "Dobře, budu pokračovat bez hesla. Kdykoliv můžete heslo změnit použitím\n"
+#~ "tohoto programu s parametrem „--edit-key“.\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "uložení klíče na kartu se nezdařilo: %s\n"
+
+#~ msgid "1 good signature\n"
+#~ msgstr "1 dobrý podpis\n"
+
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "přejmenování „%s“ na „%s“ se nezdařilo: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu klíčů uloženo v keši (%lu podpisů)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "aktualizuji 1 klíč z %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "posílám klíč %s na %s server %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "veřejný klíč %s je o %lu sekund novější než podpis\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n"
+#~ "je problém se systémovým časem)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr "požadováno %d částečné důvěry a %d úplné důvěry, model %s\n"
+
+#~ msgid "Passphrase"
+#~ msgstr "Heslo"
+
+#~ msgid "name of socket too long\n"
+#~ msgstr "název socketu je příliš dlouhý\n"
+
+#~ msgid "gpg-agent is not available in this session\n"
+#~ msgstr "gpg-agent není v tomto sezení dostupný\n"
#~ msgid "export keys in an S-expression based format"
#~ msgstr "exportovat klíče ve formátu postaveném na S-výrazech"
-#~ msgid "Directory Manager"
-#~ msgstr "Správce adresářů"
-
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "přepnout mezi výpisem seznamu tajných a veřejných klíčů"
#~ msgid "Please use the command \"toggle\" first.\n"
#~ msgstr "Prosím, nejdříve použijte příkaz „toggle“ (přepnout).\n"
-#~ msgid "Passphrase"
-#~ msgstr "Heslo"
+#~ msgid "Please select at most one subkey.\n"
+#~ msgstr "Prosím, vyberte nejvýše jeden podklíč.\n"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr "používat dočasné soubory na přenos dat k modulům pro servery klíčů"
#~ msgstr ""
#~ "VAROVÁNÍ: volba „%s“ pro server klíčů není na této platformě účinná\n"
-#~ msgid "name of socket too long\n"
-#~ msgstr "název socketu je příliš dlouhý\n"
-
-#~ msgid "gpg-agent is not available in this session\n"
-#~ msgstr "gpg-agent není v tomto sezení dostupný\n"
+#~ msgid "cleared passphrase cached with ID: %s\n"
+#~ msgstr "vymazané heslo zapamatované pro ID: %s\n"
#~ msgid "invalid root packet detected in proc_tree()\n"
#~ msgstr "nalezen neplatný kořenový paket v proc_tree()\n"
+#~ msgid "apparently no running dirmngr\n"
+#~ msgstr "dirmngr zjevně neběží\n"
+
+#~ msgid "no running dirmngr - starting one\n"
+#~ msgstr "žádný dirmngr neběží – jeden bude spuštěn\n"
+
+#~ msgid "malformed %s environment variable\n"
+#~ msgstr "špatně utvořená proměnná prostředí %s\n"
+
+#~ msgid "dirmngr protocol version %d is not supported\n"
+#~ msgstr "verze %d protokolu dirmngr není podporována\n"
+
+#~ msgid "can't connect to the dirmngr - trying fall back\n"
+#~ msgstr "k dirmngr se nelze připojit – zkusí se náhradní postup\n"
+
+#~ msgid "Directory Manager"
+#~ msgstr "Správce adresářů"
+
#~ msgid "error creating socket: %s\n"
#~ msgstr "chyba při vytváření socketu: %s\n"
#~ msgid "Do you really want to do this? (y/N) "
#~ msgstr "Opravdu to chcete udělat? (a/N) "
+#~ msgid "error reading secret keyblock \"%s\": %s\n"
+#~ msgstr "chyba při čtení bloku tajného klíče „%s“: %s\n"
+
#~ msgid "update secret failed: %s\n"
#~ msgstr "aktualizace tajného klíče selhala: %s\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "vyhledávám „%s“ na serveru %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "žádná operace se serverem klíčů!\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr "VAROVÁNÍ: obsluha serveru klíčů z jiné verze GnuPG (%s)\n"
#~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
#~ msgstr "databáze důvěry je poškozena; prosím spusťte „gpg --fix-trustdb“.\n"
-#~ msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-#~ msgstr ""
-#~ "Chyby oznamte (anglicky), prosím, na adresu <gnupg-bugs@gnu.org>.\n"
-#~ "Připomínky k překladu (česky) <translations.cs@gnupg.cz>.\n"
-
-#~ msgid "Please report bugs to "
-#~ msgstr ""
-#~ "Připomínky k překladu hlaste (česky) na <translations.cs@gnupg.cz>,\n"
-#~ "chyby v programu (anglicky) na "
-
#~ msgid "DSA keypair will have %u bits.\n"
#~ msgstr "Pár DSA klíčů DSA dlouhý %u bitů.\n"
#~ msgid "checksum error"
#~ msgstr "chyba kontrolního součtu"
+#~ msgid "can't open the keyring"
+#~ msgstr "nemohu otevřít soubor klíčů"
+
#~ msgid "invalid packet"
#~ msgstr "neplatný paket"
#~ msgid "ERROR: "
#~ msgstr "CHYBA: "
-#~ msgid "WARNING: "
-#~ msgstr "VAROVÁNÍ: "
-
#~ msgid "... this is a bug (%s:%d:%s)\n"
#~ msgstr "... toto je chyba v programu (%s:%d:%s)\n"
msgid "Enter passphrase: "
msgstr "Indtast adgangsfrase\n"
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "fejl ved oprettelse af nøglering »%s«: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "ADVARSEL: %s overskriver %s\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "OpenPGP-kort er ikke tilgængeligt: %s\n"
msgid "remove as much as possible from key during export"
msgstr "fjern så meget som muligt fra nøglen under eksport"
+#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: udelod: %s\n"
+
msgid "exporting secret keys not allowed\n"
msgstr "eksport af hemmelige nøgler er ikke tilladt\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "nøgle %s: nøglemateriale på kort - udeladt\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: udelod: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "ADVARSEL: intet blev eksporteret\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "fejl ved oprettelse af »%s«: %s\n"
+
msgid "[User ID not found]"
msgstr "[Bruger-id blev ikke fundet]"
#, fuzzy, c-format
+#| msgid "missing argument for option \"%.50s\"\n"
+msgid "(check argument of option '%s')\n"
+msgstr "manglende parameter for indstilling »%.50s«\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "fejl ved lukning af %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "fejl ved oprettelse af nøglering »%s«: %s\n"
+
+#, fuzzy, c-format
#| msgid "automatically retrieved `%s' via %s\n"
msgid "automatically retrieved '%s' via %s\n"
msgstr "hentede automatisk »%s« via %s\n"
msgstr "hemmelig nøgle »%s« blev ikke fundet: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "manglende parameter for indstilling »%.50s«\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NAME|brug NAVN som hemmelig standardnøgle"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NAME|brug NAVN som hemmelig standardnøgle"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "Ugyldig nøgle %s gjort gyldig med --allow-non-selfsigned-uid\n"
msgstr "BEMÆRK: Gammel standardfil for tilvalg »%s« blev ignoreret\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "tilvalg »%.50s« er tvetydigt\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "fejl ved oprettelse af nøglering »%s«: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt er for gammel (kræver %s, har %s)\n"
msgstr ""
"ADVARSEL: modtagere (-r) angivet uden brug af offentlig nøglekryptering\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "linje %d: ugyldig algoritme\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "linje %d: ugyldig algoritme\n"
-
msgid "--store [filename]"
msgstr "--store [filnavn]"
msgid "key export failed: %s\n"
msgstr "nøgleeksport mislykkedes: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "nøgleeksport mislykkedes: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "nøgleserver søg mislykkedes: %s\n"
msgid "[self-signature]"
msgstr "[egenunderskrift]"
-msgid "1 bad signature\n"
-msgstr "1 ugyldig underskrift\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d ugyldige underskrifter\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 underskrift er ikke kontrolleret på grund af en manglende nøgle\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d underskrifter er ikke kontrolleret på grund af manglende nøgler\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 underskrift er ikke kontrolleret på grund af en fejl\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d ugyldige underskrifter\n"
+msgstr[1] "%d ugyldige underskrifter\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d underskrifter er ikke kontrolleret på grund af fejl\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 underskrift er ikke kontrolleret på grund af en manglende nøgle\n"
+msgstr[1] "1 underskrift er ikke kontrolleret på grund af en manglende nøgle\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 bruger-id uden gyldig egenunderskrift detekteret\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 underskrift er ikke kontrolleret på grund af en fejl\n"
+msgstr[1] "1 underskrift er ikke kontrolleret på grund af en fejl\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d bruger-id'er uden gyldige egenunderskrifter detekteret\n"
+#, fuzzy, c-format
+#| 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] "%d bruger-id'er uden gyldige egenunderskrifter detekteret\n"
+msgstr[1] "%d bruger-id'er uden gyldige egenunderskrifter detekteret\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr "Virkelig slette denne egenunderskrift? (j/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Slettede %d underskrift.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Slettede %d underskrifter.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Slettede %d underskrift.\n"
+msgstr[1] "Slettede %d underskrift.\n"
msgid "Nothing deleted.\n"
msgstr "Intet slettet.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "Bruger-id »%s« komprimeret: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Bruger-id »%s«: %d underskrift fjernet\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Bruger-id »%s«: %d underskrifter fjernet\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Bruger-id »%s«: %d underskrift fjernet\n"
+msgstr[1] "Bruger-id »%s«: %d underskrift fjernet\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Ret venligst fejlen først\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Du skal bruge en adgangsfrase til at beskytte din hemmelige nøgle.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Indtast venligst en adgangsfrase til at beskytte sikkerhedskopien fortaget "
-"uden for kortet af den nye krypteringsnøgle."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "adgangsfrasen er ikke korrekt gentaget; prøv igen"
-
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Du ønsker ikke en adgangsfrase - dette er en *dårlig* ide!\n"
-"Jeg giver dig en alligevel. Du kan ændre din adgangsfrase på\n"
-"ethvert tidspunkt ved at bruge dette program med tilvalget\n"
-"»--edit-key«.\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Nøgleoprettelse annulleret.\n"
#, fuzzy, c-format
+#| msgid "can't create backup file `%s': %s\n"
+msgid "can't create backup file '%s': %s\n"
+msgstr "kan ikke oprette sikkerhedskopifil »%s«: %s\n"
+
+#, fuzzy, c-format
+#| msgid "NOTE: backup of card key saved to `%s'\n"
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "BEMÆRK: sikkerhedskopi af kortnøgle gemt på »%s«\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "skriver offentlig nøgle til »%s«\n"
msgid "Really create? (y/N) "
msgstr "Vil du virkelig oprette? (j/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "lagring af nøgle på kort mislykkedes: %s\n"
-
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
-msgid "can't create backup file '%s': %s\n"
-msgstr "kan ikke oprette sikkerhedskopifil »%s«: %s\n"
-
-#, fuzzy, c-format
-#| msgid "NOTE: backup of card key saved to `%s'\n"
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "BEMÆRK: sikkerhedskopi af kortnøgle gemt på »%s«\n"
-
msgid "never "
msgstr "aldrig "
msgid "Signature notation: "
msgstr "Underskriftsnotation: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 ugyldig underskrift\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d ugyldige underskrifter\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d ugyldige underskrifter\n"
+msgstr[1] "%d ugyldige underskrifter\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Nøglering"
msgstr " Serielnr. for kort ="
#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "omdøbelse af »%s« til »%s« mislykkedes: %s\n"
-
-#, fuzzy, c-format
#| msgid "caching keyring `%s'\n"
msgid "caching keyring '%s'\n"
msgstr "mellemlagrer nøglering »%s«\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu nøgler mellemlagret indtil nu (%lu underskrifter)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu nøgler mellemlagret indtil nu (%lu underskrifter)\n"
+msgstr[1] "%lu nøgler mellemlagret indtil nu (%lu underskrifter)\n"
#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu nøgler mellemlagret (%lu underskrifter)\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 ugyldig underskrift\n"
+msgstr[1] "1 ugyldig underskrift\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "»%s« er ikke et nøgle-id: udelader\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "opdaterer 1 nøgle fra %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "opdaterer %d nøgler fra %s\n"
+msgstr[1] "opdaterer %d nøgler fra %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "ADVARSEL: Kan ikke opdatere nøgle %s via %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "opdaterer %d nøgler fra %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "nøgle »%s« blev ikke fundet på nøgleserver\n"
msgid "requesting key %s from %s\n"
msgstr "anmoder om nøgle %s fra %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "sender nøgle %s til %s server %s\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "ingen nøgleserverhandling!\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s underskrift, sammendragsalgoritme %s\n"
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s)\n"
+msgstr "læsefejl i »%s«: %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "læsefejl i »%s«: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: forældet indstilling »%s«\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: udelod: offentlig nøgle er allerede til stede\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "kan ikke forbinde til »%s«: %s\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "linje %d: ugyldig algoritme\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "linje %d: ugyldig algoritme\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Du angav ikke et bruger-id. (du kan bruge »-r«)\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "data ej gemt; brug tilvalg »--output« for at gemme\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "fejl ved oprettelse af »%s«: %s\n"
-
msgid "Detached signature.\n"
msgstr "Frakoblet underskrift.\n"
msgstr "Opret et tilbagekaldscertifikat for denne nøgle? (j/N) "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Tilbagekaldscertifikat oprettet.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "hemmelig nøgle »%s« blev ikke fundet: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "fejl ved oprettelse af nøglering »%s«: %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Opret et tilbagekaldscertifikat for denne nøgle? (j/N) "
msgstr ""
"ADVARSEL: underskriftsundernøgle %s har en ugyldig krydscertificering\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "offentlig nøgle %s er %lu sekund nyere end underskrift\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "offentlig nøgle %s er %lu sekund nyere end underskrift\n"
+msgstr[1] "offentlig nøgle %s er %lu sekund nyere end underskrift\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "offentlig nøgle %s er %lu sekunder nyere end underskrift\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "offentlig nøgle %s er %lu sekund nyere end underskrift\n"
+msgstr[1] "offentlig nøgle %s er %lu sekund nyere end underskrift\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"nøgle %s blev oprettet %lu sekund inde i fremtiden (tidsforskydning eller et "
+"problem med uret)\n"
+msgstr[1] ""
"nøgle %s blev oprettet %lu sekund inde i fremtiden (tidsforskydning eller et "
"problem med uret)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"nøgle %s blev oprettet %lu sekunder inde i fremtiden (tidsforskydning eller "
-"et problem med uret)\n"
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+msgid "key %s was created %lu day in the future (time warp or clock problem)\n"
+msgid_plural ""
+"key %s was created %lu days in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"nøgle %s blev oprettet %lu sekund inde i fremtiden (tidsforskydning eller et "
+"problem med uret)\n"
+msgstr[1] ""
+"nøgle %s blev oprettet %lu sekund inde i fremtiden (tidsforskydning eller et "
+"problem med uret)\n"
#, fuzzy, c-format
#| msgid "NOTE: signature key %s expired %s\n"
msgstr "inddatalinje er længere end %d tegn\n"
#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "fejl under afsendelse af standardtilvalg: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "ikke understøttet algoritme: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "fejl under afsendelse af %s-kommando: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "fejl ved skrivning af hemmelig nøglering »%s«: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: fejl ved skrivning af mappepost: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening `%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "fejl ved åbning af »%s«: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "fejl under afsendelse af %s-kommando: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "offentlig nøgle %s blev ikke fundet: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error storing flags: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "fejl ved lagring af flag: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting new PIN: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "fejl ved indhentelse af ny PIN: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "validitet: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "fejl ved indhentelse af gemte flag: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "vis nøgler"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "vis beskedsammendrag"
+msgstr[1] "vis beskedsammendrag"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "fejl ved oprettelse af datakanal: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "fejl under afsendelse af %s-kommando: %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "»%s« er ikke et gyldigt nøgle-id\n"
msgstr ""
"intet behov for en opdatering af trustdb med troværdighedsmodellen »%s«\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "offentlig nøgle %s blev ikke fundet: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "udfør venligst en --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "kontrollerer trustdb\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d nøgler behandlet (%d validiteter ryddet)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] " %lu-nøgler behandlet\n"
+msgstr[1] " %lu-nøgler behandlet\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d nøgler behandlet (%d validiteter ryddet)\n"
+msgstr[1] "%d nøgler behandlet (%d validiteter ryddet)\n"
msgid "no ultimately trusted keys found\n"
msgstr "ingen ultimativ troværdige nøgler fundet\n"
msgstr "offentlig nøgle for ultimativ troværdig nøgle %s blev ikke fundet\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "%d marginaler krævet, %d færdiggjorte krævet, %s troværdighedsmodel\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "kort er permanent låst!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr "%d PIN-forsøg for administrator før kort permanent låses\n"
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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 PIN-forsøg for administrator før kort permanent låses\n"
+msgstr[1] "%d PIN-forsøg for administrator før kort permanent låses\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgid "generating key failed\n"
msgstr "oprettelse af nøgle mislykkedes\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "nøgleoprettelse færdig (%d sekunder)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "nøgleoprettelse færdig (%d sekunder)\n"
+msgstr[1] "nøgleoprettelse færdig (%d sekunder)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "ugyldig struktur for OpenPGP-kort (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "tillad ikke genbrug af gamle adgangsfraser"
+#, fuzzy
+#| msgid "|N|set maximum PIN cache lifetime to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|angive maksimal livsforløb for PIN-mellemlager til N sekunder"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NAME|brug NAVN som hemmelig standardnøgle"
"Syntaks: gpg-check-pattern [tilvalg] mønsterfil\n"
"Kontroller en adgangsfrase angivet på stdin mod mønsterfilen\n"
+#, fuzzy
+#~| msgid "option \"%.50s\" is ambiguous\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "tilvalg »%.50s« er tvetydigt\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr ""
+#~ "%d underskrifter er ikke kontrolleret på grund af manglende nøgler\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d underskrifter er ikke kontrolleret på grund af fejl\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 bruger-id uden gyldig egenunderskrift detekteret\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Slettede %d underskrifter.\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Bruger-id »%s«: %d underskrifter fjernet\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Du skal bruge en adgangsfrase til at beskytte din hemmelige nøgle.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Indtast venligst en adgangsfrase til at beskytte sikkerhedskopien "
+#~ "fortaget uden for kortet af den nye krypteringsnøgle."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "adgangsfrasen er ikke korrekt gentaget; prøv igen"
+
+#~ msgid "%s.\n"
+#~ msgstr "%s.\n"
+
+#~ msgid ""
+#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
+#~ "I will do it anyway. You can change your passphrase at any time,\n"
+#~ "using this program with the option \"--edit-key\".\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Du ønsker ikke en adgangsfrase - dette er en *dårlig* ide!\n"
+#~ "Jeg giver dig en alligevel. Du kan ændre din adgangsfrase på\n"
+#~ "ethvert tidspunkt ved at bruge dette program med tilvalget\n"
+#~ "»--edit-key«.\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "lagring af nøgle på kort mislykkedes: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 ugyldig underskrift\n"
+
+#, fuzzy
+#~| msgid "renaming `%s' to `%s' failed: %s\n"
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "omdøbelse af »%s« til »%s« mislykkedes: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu nøgler mellemlagret (%lu underskrifter)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "opdaterer 1 nøgle fra %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "sender nøgle %s til %s server %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "offentlig nøgle %s er %lu sekunder nyere end underskrift\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "nøgle %s blev oprettet %lu sekunder inde i fremtiden (tidsforskydning "
+#~ "eller et problem med uret)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr ""
+#~ "%d marginaler krævet, %d færdiggjorte krævet, %s troværdighedsmodel\n"
+
#~ msgid "cleared passphrase cached with ID: %s\n"
#~ msgstr "ryddet adgangsfrase mellemlagret med id: %s\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "søger efter »%s« fra %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "ingen nøgleserverhandling!\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr ""
#~ "ADVARSEL: nøgleserverhåndtering fra en anden version af GnuPG (%s)\n"
msgstr ""
"Project-Id-Version: gnupg-2.1.0\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2015-12-03 17:23+0100\n"
+"PO-Revision-Date: 2016-01-26 13:18+0100\n"
"Last-Translator: Werner Koch <wk@gnupg.org>\n"
"Language-Team: German <de@li.org>\n"
"Language: de\n"
msgstr "Geben Sie die Passphrase ein: "
#, c-format
+msgid "error getting version from '%s': %s\n"
+msgstr "Fehler beim Holen der Version von '%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr "Der Server '%s' is älter als wir selbst (Version %s < %s)"
+
+#, c-format
+msgid "WARNING: %s\n"
+msgstr "WARNUNG: %s\n"
+
+#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "OpenPGP Karte ist nicht vorhanden: %s\n"
msgid "remove as much as possible from key during export"
msgstr "Während des Exports soviel wie möglich vom Schlüssel entfernen"
+msgid " - skipped"
+msgstr " - übersprungen"
+
msgid "exporting secret keys not allowed\n"
msgstr "Exportieren geheimer Schlüssel ist nicht erlaubt\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "Schlüssel %s: Schlüsselmaterial ist auf einer Karte - übersprungen\n"
-msgid " - skipped"
-msgstr " - übersprungen"
-
msgid "WARNING: nothing exported\n"
msgstr "WARNUNG: Nichts exportiert\n"
+#, c-format
+msgid "error creating '%s': %s\n"
+msgstr "Fehler beim Erstellen von `%s': %s\n"
+
msgid "[User ID not found]"
msgstr "[User-ID nicht gefunden]"
#, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "(Prüfe das Argument der Option '%s')\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+"WARNUNG: '%s' sollte eine lange Schlüssel-ID oder ein Fingerabdruck sein\n"
+
+#, c-format
+msgid "error looking up: %s\n"
+msgstr "Fehler beim Nachschlagen von: %s\n"
+
+#, c-format
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "WARNUNG: %s ist %d mal im Schlüsselbund vorhanden\n"
+
+#, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "`%s' automatisch via %s geholt\n"
msgstr "Geheimer Schlüssel \"%s\" nicht gefunden: %s\n"
#, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "(Prüfe das Argument der Option '%s')\n"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr ""
+"WARNUNG: \"%s\" wird nicht als voreingestellter geheimer Schlüssel benutzt: "
+"%s\n"
#, c-format
-msgid "using \"%s\" as default secret key\n"
-msgstr "\"%s\" wird als voreingestellter geheimer Schlüssel benutzt\n"
+msgid "using \"%s\" as default secret key for signing\n"
+msgstr "\"%s\" wird als voreingestellter geheimer Signaturschlüssel benutzt\n"
+
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr "Alle für '%s' angegebenen Werte wurden ignoriert\n"
#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "Hinweis: Alte voreingestellte Optionendatei '%s' wurde ignoriert\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-"WARNUNG: Der Wert '%s' der Option '%s' sollte eine lange Schlüssel-ID\n"
-"oder ein Fingerabdruck sein\n"
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr "Schlüsselangabe '%s' ist mehrdeutig\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr "'%s' paßt mindest auf:\n"
-
-#, c-format
-msgid "error searching the keyring: %s\n"
-msgstr "Fehler beim Suchen im Schlüsselbund: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
"Die Bibliothek \"libgcrypt\" ist zu alt (benötigt wird %s, vorhanden ist "
msgstr ""
"WARNUNG: Empfänger (-r) angegeben ohne Verwendung von Public-Key-Verfahren\n"
-#, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "Option '%s' ohne gültige Standardschlüssel angegeben\n"
-
-#, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "Option '%s' ohne Verwendung der Option '%s' angegeben\n"
-
msgid "--store [filename]"
msgstr "--store [Dateiname]"
msgstr "Schlüsselexport fehlgeschlagen: %s\n"
#, c-format
+msgid "export as ssh key failed: %s\n"
+msgstr "Schlüsselexport im SSH Format fehlgeschlagen: %s\n"
+
+#, c-format
msgid "keyserver search failed: %s\n"
msgstr "Suche auf dem Schlüsselserver fehlgeschlagen: %s\n"
msgid "[self-signature]"
msgstr "[Eigenbeglaubigung]"
-msgid "1 bad signature\n"
-msgstr "1 falsche Beglaubigung\n"
-
#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d falsche Beglaubigungen\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 Beglaubigung wegen fehlendem Schlüssel nicht geprüft\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d falsche Beglaubigung\n"
+msgstr[1] "%d falsche Beglaubigungen\n"
#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d Beglaubigungen wegen fehlenden Schlüsseln nicht geprüft\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 Beglaubigung aufgrund von Fehler nicht geprüft\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "%d Beglaubigung wegen fehlendem Schlüssel nicht geprüft\n"
+msgstr[1] "%d Beglaubigungen wegen fehlender Schlüssel nicht geprüft\n"
#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n"
-
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "%d Beglaubigung aufgrund eines Fehlers nicht geprüft\n"
+msgstr[1] "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n"
#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d User-IDs ohne gültige Eigenbeglaubigung entdeckt\n"
+msgid "%d user ID without valid self-signature detected\n"
+msgid_plural "%d user IDs without valid self-signatures detected\n"
+msgstr[0] "%d User-ID ohne gültige Eigenbeglaubigung entdeckt\n"
+msgstr[1] "%d User-IDs ohne gültige Eigenbeglaubigungen entdeckt\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
#, c-format
msgid "Deleted %d signature.\n"
-msgstr "%d Beglaubigungen entfernt.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d Beglaubigungen entfernt.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "%d Beglaubigung entfernt.\n"
+msgstr[1] "%d Beglaubigungen entfernt.\n"
msgid "Nothing deleted.\n"
msgstr "Nichts entfernt.\n"
#, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "User-ID \"%s\": %d Signatur entfernt\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "User-ID \"%s\": %d Signaturen entfernt\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "User-ID \"%s\": %d Signatur entfernt\n"
+msgstr[1] "User-ID \"%s\": %d Signaturen entfernt\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Bitte beseitigen Sie zuerst den Fehler\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Sie benötigen eine Passphrase, um den geheimen Schlüssel zu schützen.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Bitte geben Sie die Passphrase ein, um die Sicherheitskopie des neuen "
-"Verschlüsselungsschlüssel der Karte zu schützen."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "Passphrase wurde nicht richtig wiederholt; noch einmal versuchen"
-
-#, c-format
-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 ""
-"Sie möchten keine Passphrase - Dies ist *nicht* zu empfehlen!\n"
-"Es ist trotzdem möglich. Sie können Ihre Passphrase jederzeit\n"
-"ändern, indem sie dieses Programm mit dem Befehl \"--edit-key\"\n"
-"aufrufen.\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Schlüsselerzeugung abgebrochen.\n"
#, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "Sicherungsdatei '%s' kann nicht erzeugt werden: %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "Hinweis: Sicherung des Kartenschlüssels wurde auf `%s' gespeichert\n"
+
+#, c-format
msgid "writing public key to '%s'\n"
msgstr "schreiben des öffentlichen Schlüssels nach '%s'\n"
msgid "Really create? (y/N) "
msgstr "Wirklich erzeugen? (j/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "Speicher des Schlüssels auf der Karte schlug fehl: %s\n"
-
-#, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "Sicherungsdatei '%s' kann nicht erzeugt werden: %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "Hinweis: Sicherung des Kartenschlüssels wurde auf `%s' gespeichert\n"
-
msgid "never "
msgstr "niemals "
msgid "Signature notation: "
msgstr "Beglaubigungs-\"Notation\": "
-msgid "1 good signature\n"
-msgstr "1 korrekte Signatur\n"
-
#, c-format
-msgid "%d good signatures\n"
-msgstr "%d korrekte Signaturen\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d korrekte Signatur\n"
+msgstr[1] "%d korrekte Signaturen\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr "WARNUNG: %lu Schlüssel übersprungen, da sie zu groß sind\n"
+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] "WARNUNG: %lu Schlüssel übersprungen, da er zu groß ist\n"
+msgstr[1] "WARNUNG: %lu Schlüssel übersprungen, da sie zu groß sind\n"
msgid "Keyring"
msgstr "Schlüsselbund"
msgstr " Kartenseriennr. ="
#, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "umbenennen von `%s' nach `%s' schlug fehl: %s\n"
-
-#, c-format
msgid "caching keyring '%s'\n"
msgstr "Puffern des Schlüsselbundes `%s'\n"
#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu Schlüssel bislang gepuffert (%lu Beglaubigungen)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu Schlüssel bislang gepuffert (%lu Beglaubigung)\n"
+msgstr[1] "%lu Schlüssel bislang gepuffert (%lu Beglaubigungen)\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "%lu Schlüssel gepuffert"
+msgstr[1] "%lu Schlüssel gepuffert"
#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu Schlüssel gepuffert (%lu Beglaubigungen)\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] " (%lu Beglaubigung)\n"
+msgstr[1] " (%lu Beglaubigungen)\n"
#, c-format
msgid "%s: keyring created\n"
msgstr "\"%s\" ist keine Schlüssel-ID: überspringe\n"
#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "ein Schlüssel wird per %s aktualisiert\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "%d Schlüssel wird per %s aktualisiert\n"
+msgstr[1] "%d Schlüssel werden per %s aktualisiert\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "WARNUNG: Schlüssel %s kann per %s nicht aktualisiert werden: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "%d Schlüssel werden per %s aktualisiert\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "Schlüssel \"%s\" wurde auf dem Schlüsselserver nicht gefunden\n"
msgid "requesting key %s from %s\n"
msgstr "fordere Schlüssel %s von %s an\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "sende Schlüssel %s auf den %s-Server %s\n"
+msgid "no keyserver known\n"
+msgstr "Kein Schlüsselserver bekannt\n"
#, c-format
msgid "sending key %s to %s\n"
msgstr "Hinweis: %s basierte Signaturen werden zurückgewiesen.\n"
#, c-format
+msgid "(reported error: %s)\n"
+msgstr "(gemeldeter Fehler: %s)\n"
+
+#, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "(gemeldeter Fehler: %s <%s>)\n"
+
+msgid "(further info: "
+msgstr "(weitere Infos: "
+
+#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: mißbilligte Option \"%s\".\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: übersprungen: öffentlicher Schlüssel bereits vorhanden\n"
+#, c-format
+msgid "can't encrypt to '%s'\n"
+msgstr "Verschlüsseln an '%s' ist nicht möglich\n"
+
+#, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "Option '%s' ohne gültige Standardschlüssel angegeben\n"
+
+#, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "Option '%s' ohne Verwendung der Option '%s' angegeben\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr ""
"Sie haben keine User-ID angegeben (Sie können die Option \"-r\" verwenden).\n"
msgstr ""
"Daten wurden nicht gespeichert; verwenden Sie dafür die Option \"--output\"\n"
-#, c-format
-msgid "error creating '%s': %s\n"
-msgstr "Fehler beim Erstellen von `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Abgetrennte Beglaubigungen.\n"
msgstr "Dies ist ein Widerrufszertifikat für den OpenPGP Schlüssel:"
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 ""
+"Ein Widerrufszertifikat ist eine Art von Notausschalter der öffentlich\n"
+"verlautbart, daß ein Schlüssel nicht mehr benutzt werden soll. Es ist\n"
+"nicht möglich, ein einmal veröffentlichtes Widerrufszertifikat wieder\n"
+"zurückzuziehen."
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
"Benutzen Sie es, um einen Schlüssel zu widerrufen, falls der private\n"
"Schlüssel verloren wurde oder kompromittiert ist. Falls jedoch auf\n"
"den privaten Schlüssel noch zugegriffen werden kann, so ist es besser,\n"
"ein neues Widerrufszertifikat zu erzeugen, um den Grund des Widerrufs\n"
-"mit angeben zu können."
+"mit angeben zu können. Weitere Informationen finden Sie im GnuPG\n"
+"Handbuch unter der Beschreibung des gpg Kommandos \"--gen-revoke\"."
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
"Um eine versehentliche Aktivierung des Widerrufszertifikats zu\n"
"vermeiden, wurde ein Doppelpunkt direkt vor den 5 Spiegelstrichen\n"
"unten eingefügt. Vor dem Import dieses Widerrufszertifikats\n"
-"entfernen Sie bitte dieses Doppelpunkt mittels eines Texteditors."
+"entfernen Sie bitte diesen Doppelpunkt mittels eines Texteditors."
+
+#, c-format
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Widerrufzertifikat wurde als '%s.rev' gespeichert.\n"
#, c-format
msgid "secret key \"%s\" not found\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr "'%s' trifft auf mehrere geheime Schlüssel zu:\n"
+#, c-format
+msgid "error searching the keyring: %s\n"
+msgstr "Fehler beim Suchen im Schlüsselbund: %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Ein Widerrufszertifikat für diesen Schlüssel erzeugen? (j/N) "
#, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "Öffentlicher Schlüssel %s ist %lu Sekunden jünger als die Signatur\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "Öffentlicher Schlüssel %s ist %lu Sekunde jünger als die Signatur\n"
+msgstr[1] ""
+"Öffentlicher Schlüssel %s ist %lu Sekunden jünger als die Signatur\n"
#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "Öffentlicher Schlüssel %s ist %lu Sekunden jünger als die Signatur\n"
+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] "Öffentlicher Schlüssel %s ist %lu Tag jünger als die Signatur\n"
+msgstr[1] "Öffentlicher Schlüssel %s ist %lu Tage jünger als die Signatur\n"
#, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"Schlüssel %s wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder "
+"Uhrenproblem)\n"
+msgstr[1] ""
"Schlüssel %s wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder "
"Uhrenproblem)\n"
#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"Schlüssel %s wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder "
+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] ""
+"Schlüssel %s wurde %lu Tag in der Zukunft erzeugt (Zeitreise oder "
+"Uhrenproblem)\n"
+msgstr[1] ""
+"Schlüssel %s wurde %lu Tage in der Zukunft erzeugt (Zeitreise oder "
"Uhrenproblem)\n"
#, c-format
msgstr "Eingabezeile ist länger als %d Zeichen\n"
#, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "Fehler beim Starten einer Transaktion auf der TOFU Datenbank: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr "Fehler beim Committen einer Transaktion auf der TOFU Datenbank: %s\n"
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+"Fehler beim Zurückrollen einer Transaktion auf der TOFU Datenbank: %s\n"
+
+#, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr "Nicht unterstützte TOFU Datenbank Version: %s\n"
+
+#, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "Fehler beim Lesen der TOFU Datenbank: %s\n"
+
+#, c-format
+msgid "error determining TOFU database's version: %s\n"
+msgstr "Fehler beim Feststellen der TOFU Datenbank Version: %s\n"
+
+#, c-format
+msgid "error initializing TOFU database: %s\n"
+msgstr "Fehler beim Initialisieren der TOFU Datenbank: %s\n"
+
+#, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "Fehler beim Öffner der TOFU Datenbank '%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+"WARNUNG: Das Home-Verzeichnis hat sowohl 'tofu.db' als auch 'tofu.d'.\n"
+
+msgid "Using split format for TOFU database\n"
+msgstr "Das \"Split\" Format wird für die TOFU Datenbank benutzt\n"
+
+#, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "Fehler beim Schreiben der TOFU Datenbank: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "Öffentlicher Schlüssel %s nicht gefunden: %s\n"
+
+#, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "Fehler beim Setzen der TOFU Binding Vertrauensstufe auf %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr "Die Bindung %s ist NICHT bekannt."
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+"Der Schlüssel %s steht im Konflikt mit der Bindung (%s). Die Richtlinie "
+"dieser Bindung wurde deswegen von 'auto' auf 'ask' geändert."
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+"Bitte geben Sie Ihre Einschätzung, ob die Bindung %s%s legitim (der "
+"Schlüssel gehört dem angegebenen Besitzer) oder eine Fälschung (ungültig) "
+"ist."
+
+#, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "Fehler beim Einsammeln der übrigen User-IDs: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr "Bekannte, mit diesem Schlüssel assozierte, User-IDs:\n"
+
+#, c-format
+msgid "policy: %s"
+msgstr "Richtlinie: %s"
+
+#, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "Fehler beim Einsammeln der Signaturstatistik: %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] "Die Email-Adresse \"%s\" ist mit einem Schlüssel assoziert:\n"
+msgstr[1] "Die Email-Adresse \"%s\" ist mit %d Schlüsseln assoziert:\n"
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr "Statistik für Schlüssel mit der Email-Adresse \"%s\":\n"
+
+msgid "this key"
+msgstr "dieser Schlüssel"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] "%ld Nachricht in der Zukunft signiert."
+msgstr[1] "%ld Nachrichten in der Zukunf signiert."
+
+#, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "%ld Nachricht signiert"
+msgstr[1] "%ld Nachrichten signiert"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] " innerhalb des letzten Tages."
+msgstr[1] " innerhalb der letzten %ld Tage."
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] " innerhalb der letzten Woche."
+msgstr[1] " innerhalb der letzten %ld Wochen."
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] " innerhalb des letzten Monats."
+msgstr[1] " innerhalb der letzten %ld Monate."
+
+#. 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 ""
+"Normalerweise ist lediglich ein Schlüssel mit einer Email-Adresse "
+"assoziiert. Es kann allerdings vorkommen, daß Leute einen neuen Schlüssel "
+"erzeugen, wenn ihr alter Schlüssel zu alt ist oder wenn sie glauben, er "
+"könnte kompromittiert sein. Es kann allerdings auch sein, daß ein neuer "
+"Schlüssel einen Man-in-the-Middle Angriff aufzeigt! Bevor Sie diesen neuen "
+"Schlüssel akzeptieren, sollten sie die Person, auf einem anderen Weg, fragen "
+"ob der neue Schlüssel legitim ist."
+
+#. 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 "gGaAuUlLfF"
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr "(G)ut, einmal (A)kzeptieren, (U)nbekannt, einmal ab(L)ehnen, (F)alsch?"
+
+#, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "Fehler beim Ändern der TOFU Richtlinie: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] "%d Jahr"
+msgstr[1] "%d Jahre"
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] "%d Monat"
+msgstr[1] "%d Monate"
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] "%d Tag"
+msgstr[1] "%d Tage"
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] "%d Stunde"
+msgstr[1] "%d Stunden"
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] "%d Minute"
+msgstr[1] "%d Minuten"
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] "%d Sekunde"
+msgstr[1] "%d Sekunden"
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr "Es wurde noch keine Nachricht mit dem Schlüssel %s überprüft!\n"
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+"Signaturstatistiken für \"%s\" (Schlüssel %s) konnten nicht gesammelt "
+"werden\n"
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+"Keine von \"%s\" signierten Nachrichten überprüft (Schl.: %s, Richtl.: %s)."
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+"%ld von \"%s\" (Schl.: %s, Richtl.: %s) signierte Nachricht in den letzten "
+"%s überprüft."
+msgstr[1] ""
+"%ld von \"%s\" (Schl.: %s, Richtl.: %s) signierte Nachrichten in den letzten "
+"%s überprüft."
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr "Die neueste Nachricht wurde vor %s überprüft."
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+"WARNUNG: Wir müssen noch eine mit diesem Schlüssel signierte Nachricht "
+"sehen.\n"
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+"WARNUNG: Wir haben nur eine einzige mit diesem Schlüssel signierte Nachricht "
+"gesehen.\n"
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+"WARNUNG: Falls sie glauben, mehr als %d mit diesem Schlüssel signierte\n"
+"Nachricht erhalten zu haben, so kann es sich bei diesem Schlüssel um\n"
+"eine Fälschung handeln! Prüfen Sie die Email-Adresse genau auf kleine\n"
+"Variationen (z.B. zusätzliche Leerzeichen). Falls Ihnen der Schlüssel\n"
+"suspekt erscheint, so benutzen Sie '%s' um den Schlüssel als Fälschung\n"
+"zu markieren."
+msgstr[1] ""
+"WARNUNG: Falls sie glauben, mehr als %d mit diesem Schlüssel signierte\n"
+"Nachrichten erhalten zu haben, so kann es sich bei diesem Schlüssel um\n"
+"eine Fälschung handeln! Prüfen Sie die Email-Adresse genau auf kleine\n"
+"Variationen (z.B. zusätzliche Leerzeichen). Falls Ihnen der Schlüssel\n"
+"suspekt erscheint, so benutzen Sie '%s' um den Schlüssel als Fälschung\n"
+"zu markieren."
+
+#, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "Fehler beim Öffnen der TOFU Datenbank: %s\n"
+
+#, c-format
msgid "'%s' is not a valid long keyID\n"
msgstr "'%s' ist keine gültige lange Schlüssel-ID\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "\"Trust-DB\"-Änderung ist beim `%s'-Vertrauensmodell nicht nötig\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "Öffentlicher Schlüssel %s nicht gefunden: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "Bitte ein --check-trustdb durchführen\n"
msgid "checking the trustdb\n"
msgstr "\"Trust-DB\" wird überprüft\n"
+#, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%d Schlüssel bislang bearbeitet"
+msgstr[1] "%d Schlüssel bislang bearbeitet"
+
# translated by wk
#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d Schlüssel verarbeitet (%d Validity Zähler gelöscht)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] " (%d Validity Zähler gelöscht)\n"
+msgstr[1] " (%d Validity Zähler gelöscht)\n"
msgid "no ultimately trusted keys found\n"
msgstr "keine ultimativ vertrauenswürdigen Schlüssel gefunden\n"
msgstr "öff. Schlüssel des ultimativ vertrauten Schlüssel %s nicht gefunden\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "%d marginal-needed, %d complete-needed, %s Vertrauensmodell\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr "Karte ist dauerhaft gesperrt!\n"
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr "Noch %d Admin-PIN-Versuche, bis die Karte dauerhaft gesperrt ist\n"
+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] "Noch %d Admin-PIN-Versuch, bis die Karte dauerhaft gesperrt ist\n"
+msgstr[1] "Noch %d Admin-PIN-Versuche, bis die Karte dauerhaft gesperrt ist\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "Schlüsselerzeugung fehlgeschlagen\n"
#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Schlüsselerzeugung abgeschlossen (%d Sekunden)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "Schlüsselerzeugung abgeschlossen (%d Sekunde)\n"
+msgstr[1] "Schlüsselerzeugung abgeschlossen (%d Sekunden)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "Ungültige Struktur der OpenPGP-Karte (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "Verbiete die Wiedernutzung alter Passphrases."
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|Setze die Pinentry Zeitüberschreitung auf N Sekunden"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NAME|NAME als voreingestellten Schlüssel benutzen"
"Syntax: gpg-check-pattern [optionen] Musterdatei\n"
"Die von stdin gelesene Passphrase gegen die Musterdatei prüfen\n"
-#~ msgid "cleared passphrase cached with ID: %s\n"
-#~ msgstr "Passphrase aus dem Cache gelöscht. Cache ID: %s\n"
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "sende Schlüssel %s auf den %s-Server %s\n"
+
+#~ msgid "error commiting transaction on TOFU database: %s\n"
+#~ msgstr ""
+#~ "Fehler beim Committen einer Transaktion auf der TOFU Datenbank: %s\n"
+
+#, fuzzy
+#~| msgid "error binding socket to '%s': %s\n"
+#~ msgid "error beginning %s transaction on TOFU database '%s': %s\n"
+#~ msgstr "Der Socket kann nicht an `%s' gebunden werden: %s\n"
+
+#, fuzzy
+#~| msgid "error retrieving '%s' via %s: %s\n"
+#~ msgid "error querying TOFU DB's available tables: %s\n"
+#~ msgstr "Fehler beim automatischen holen von `%s' über `%s': %s\n"
+
+#, fuzzy
+#~| msgid "error reading nonce on fd %d: %s\n"
+#~ msgid "error aborting transaction on TOFU DB: %s\n"
+#~ msgstr "Fehler beim Lesen der \"Nonce\" von FD %d: %s\n"
+
+#, fuzzy
+#~| msgid "error getting version from '%s': %s\n"
+#~ msgid "error committing transaction on TOFU DB: %s\n"
+#~ msgstr "Fehler beim Holen der Version von '%s': %s\n"
+
+#, fuzzy
+#~| msgid "can't open '%s': %s\n"
+#~ msgid "can't open TOFU DB ('%s'): %s\n"
+#~ msgstr "'%s' kann nicht geöffnet werden: %s\n"
+
+#, fuzzy
+#~| msgid "can't create directory '%s': %s\n"
+#~ msgid "unable to create directory %s/%s/%s/%s"
+#~ msgstr "Verzeichnis `%s' kann nicht erzeugt werden: %s\n"
+
+#, fuzzy
+#~| msgid "error reading from responder: %s\n"
+#~ msgid "error reading from TOFU database: bad value for policy: %s\n"
+#~ msgstr "Fehler beim Lesen vom Responder: %s\n"
#, fuzzy
-#~ msgid "Failed to open the keyring DB.\n"
-#~ msgstr "Fehler beim Öffnen der Schlüsseldatenbank.\n"
+#~| msgid "error reading from responder: %s\n"
+#~ msgid "error reading from TOFU database (listing fingerprints): %s\n"
+#~ msgstr "Fehler beim Lesen vom Responder: %s\n"
#, fuzzy
+#~| msgid "error opening key DB: %s\n"
+#~ msgid "error opening TOFU DB.\n"
+#~ msgstr "Fehler beim Öffnen der Schlüsseldatenbank: %s\n"
+
+#, fuzzy
+#~| msgid "key %s: %s\n"
+#~ msgid " %s\n"
+#~ msgstr "Schlüssel %s: %s\n"
+
+#, fuzzy
+#~| msgid " s = skip this key\n"
+#~ msgid " %s (this key):"
+#~ msgstr " s = diesen Schlüssel überspringen\n"
+
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "Schlüsselangabe '%s' ist mehrdeutig\n"
+
+#~ msgid "'%s' matches at least:\n"
+#~ msgstr "'%s' paßt mindest auf:\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d Beglaubigungen wegen fehlenden Schlüsseln nicht geprüft\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "%d Beglaubigungen entfernt.\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "User-ID \"%s\": %d Signaturen entfernt\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Sie benötigen eine Passphrase, um den geheimen Schlüssel zu schützen.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Bitte geben Sie die Passphrase ein, um die Sicherheitskopie des neuen "
+#~ "Verschlüsselungsschlüssel der Karte zu schützen."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "Passphrase wurde nicht richtig wiederholt; noch einmal versuchen"
+
+#~ 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 ""
+#~ "Sie möchten keine Passphrase - Dies ist *nicht* zu empfehlen!\n"
+#~ "Es ist trotzdem möglich. Sie können Ihre Passphrase jederzeit\n"
+#~ "ändern, indem sie dieses Programm mit dem Befehl \"--edit-key\"\n"
+#~ "aufrufen.\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "Speicher des Schlüssels auf der Karte schlug fehl: %s\n"
+
+#~ msgid "1 good signature\n"
+#~ msgstr "1 korrekte Signatur\n"
+
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "umbenennen von `%s' nach `%s' schlug fehl: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu Schlüssel gepuffert (%lu Beglaubigungen)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "ein Schlüssel wird per %s aktualisiert\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr ""
+#~ "Öffentlicher Schlüssel %s ist %lu Sekunden jünger als die Signatur\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "Schlüssel %s wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder "
+#~ "Uhrenproblem)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr "%d marginal-needed, %d complete-needed, %s Vertrauensmodell\n"
+
+#~ msgid "cleared passphrase cached with ID: %s\n"
+#~ msgstr "Passphrase aus dem Cache gelöscht. Cache ID: %s\n"
+
+#~ msgid "Failed to open the keyring DB\n"
+#~ msgstr "Fehler beim Öffnen der Schlüsseldatenbank\n"
+
#~| msgid "failed to open '%s': %s\n"
#~ msgid "Failed to parse '%s'.\n"
-#~ msgstr "Datei `%s' kann nicht geöffnet werden: %s\n"
+#~ msgstr "Datei `%s' kann nicht gescannt werden\n"
-#, fuzzy
#~| msgid "invalid value\n"
#~ msgid "invalid value '%s'\n"
-#~ msgstr "Ungültiger Wert.\n"
+#~ msgstr "Ungültiger Wert '%s'\n"
-#, fuzzy
#~| msgid "error reading secret keyblock \"%s\": %s\n"
#~ msgid "error looking up secret key \"%s\": %s\n"
-#~ msgstr "Fehler beim Lesen des geheimen Schlüsselblocks \"%s\": %s\n"
+#~ msgstr "Fehler beim Nachschlagen der geheimen Schlüssels \"%s\": %s\n"
#~ msgid "Please select at most one subkey.\n"
#~ msgstr "Bitte wählen Sie höchstens einen Unterschlüssel aus.\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "suche nach \"%s\" auf %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "Kein Schlüsselserver-Vorgang\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr ""
#~ "WARNUNG: Die Schlüsselserver-Handhabungsroutine stammt von einer anderen "
msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "áäõíáìßá äçìéïõñãßáò ôçò êëåéäïèÞêçò `%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï %s ðáñáêÜìðôåé ôï %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "ôï ìõóôéêü êëåéäß äåí åßíáé äéáèÝóéìï"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: ðáñáëåßöèçêå: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "åããñáöÞ ôïõ ìõóôéêïý êëåéäéïý óôï `%s'\n"
msgstr ""
"êëåéäß %08lX: ç õðïãñáöÞ ôïõ õðïêëåéäéïý óå ëÜèïò óçìåßï - ðáñáëåßöèçêå\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: ðáñáëåßöèçêå: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: äåí Ýãéíå êáììßá åîáãùãÞ\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "óöÜëìá êáôÜ ôç äçìéïõñãßá ôïõ `%s': %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[User id äåí âñÝèçêå]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "ìç Ýãêõñåò åðéëïãÝò åéãáãùãÞò\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "áäõíáìßá äçìéïõñãßáò ôçò êëåéäïèÞêçò `%s': %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "óöÜëìá êáôÜ ôç äçìéïõñãßá ôïõ `%s': %s\n"
msgstr "ôï ìõóôéêü êëåéäß `%s' äå âñÝèçêå: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "ìç Ýãêõñåò åðéëïãÝò åéãáãùãÞò\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|ÏÍÏÌÁ|÷ñÞóç ÏÍÏÌÁôïò óáí ðñïêáèïñéóìÝíï ìõóôéêü êëåéäß"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|ÏÍÏÌÁ|÷ñÞóç ÏÍÏÌÁôïò óáí ðñïêáèïñéóìÝíï ìõóôéêü êëåéäß"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
msgstr "ÓÇÌÅÉÙÓÇ: áãíïÞèçêå ôï ðáëéü áñ÷åßï ðñïêáèïñéóìÝíùí åðéëïãþí `%s'\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "áäõíáìßá äçìéïõñãßáò ôçò êëåéäïèÞêçò `%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: äþèçêáí ðáñáëÞðôåò (-r) ÷þñéò ÷ñÞóç êñõðôïãñÜöçóçò\n"
"äçìïóßïõ êëåéäéïý\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "ìç Ýãêõñïò áëãüñéèìïò hash `%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "ìç Ýãêõñïò áëãüñéèìïò hash `%s'\n"
-
msgid "--store [filename]"
msgstr "--store [üíïìá áñ÷åßïõ]"
msgid "key export failed: %s\n"
msgstr "åîáãùãÞ êëåéäéïý áðÝôõ÷å: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "åîáãùãÞ êëåéäéïý áðÝôõ÷å: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "keyserver áíáæÞôçóç áðÝôõ÷å: %s\n"
msgid "[self-signature]"
msgstr "[éäéï-õðïãñáöÞ]"
-msgid "1 bad signature\n"
-msgstr "1 êáêÞ õðïãñáöÞ\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d êáêÝò õðïãñáöÝò\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãù ÷áìÝíïõ êëåéäéïý\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d õðïãñáöÝò äåí åëÝã÷èçêáí ëüãù ÷áìÝíùí êëåéäéþí\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãï åíüò óöÜëìáôïò\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d êáêÝò õðïãñáöÝò\n"
+msgstr[1] "%d êáêÝò õðïãñáöÝò\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d õðïãñáöÝò äåí åëÝã÷èçêáí ëüãù óöáëìÜôùí\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãù ÷áìÝíïõ êëåéäéïý\n"
+msgstr[1] "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãù ÷áìÝíïõ êëåéäéïý\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 user ID áíé÷íåýôçêå ÷ùñßò Ýãêõñç éäéï-õðïãñáöÞ\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãï åíüò óöÜëìáôïò\n"
+msgstr[1] "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãï åíüò óöÜëìáôïò\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d user ID áíé÷íåýèçêáí ÷ùñßò Ýãêõñåò éäéï-õðïãñáöÝò\n"
+#, fuzzy, c-format
+#| 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] "%d user ID áíé÷íåýèçêáí ÷ùñßò Ýãêõñåò éäéï-õðïãñáöÝò\n"
+msgstr[1] "%d user ID áíé÷íåýèçêáí ÷ùñßò Ýãêõñåò éäéï-õðïãñáöÝò\n"
#, fuzzy
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "Óßãïõñá íá äéáãñáöåß áõôÞ ç éäéï-õðïãñáöÞ; (y/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "ÄéáãñÜöôçêå %d õðïãñáöÞ.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "ÄéáãñÜöçêáí %d õðïãñáöÝò.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "ÄéáãñÜöôçêå %d õðïãñáöÞ.\n"
+msgstr[1] "ÄéáãñÜöôçêå %d õðïãñáöÞ.\n"
msgid "Nothing deleted.\n"
msgstr "Ôßðïôá äåí äéáãñÜöôçêå.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Ôï user ID \"%s\" áíáêáëåßôå."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Ôï user ID \"%s\" áíáêáëåßôå."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Ôï user ID \"%s\" áíáêáëåßôå."
+msgstr[1] "Ôï user ID \"%s\" áíáêáëåßôå."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Ðáñáêáëþ, äéïñèþóôå ðñþôá ôï óöÜëìá\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"×ñåéÜæåóôå ìéá ÖñÜóç êëåéäß ãéá íá ðñïóôáôåýóåôå ôï ìõóôéêü êëåéäß.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß· áõôÞ åßíáé ìéá ìõóôéêÞ ðñüôáóç \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "ç öñÜóç êëåéäß äåí åðáíáëÞöèçêå óùóôÜ. ÄïêéìÜóôå îáíÜ"
-
-#, c-format
-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 ""
-"Äåí ÷ñåéÜæåóôå ìéá öñÜóç êëåéäß - áõôü åßíáé ìÜëëïí ìéá *êáêÞ* éäÝá!\n"
-"Èá óõíå÷ßóù üðùò êáé íá Ý÷åé. Ìðïñåßôå íá áëëÜîåôå ôç öñÜóç óáò\n"
-"üðïôå èÝëåôå, ìå ôçí åðéëïãÞ \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Ç äçìéïõñãßá êëåéäéïý áíáâëÞèçêå.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "áäõíáìßá äçìéïõñãßáò ôïõ `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "ÓÇÌÅÉÙÓÇ: ôï ìõóôéêü êëåéäß %08lX Ýëçîå óôéò %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "åããñáöÞ ôïõ äçìïóßïõ êëåéäéïý óôï `%s'\n"
msgid "Really create? (y/N) "
msgstr "Óßãïõñá íá äçìéïõñãçèåß; "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "äéáãñáöÞ block êëåéäéþí áðÝôõ÷å: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "áäõíáìßá äçìéïõñãßáò ôïõ `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ôï ìõóôéêü êëåéäß %08lX Ýëçîå óôéò %s\n"
-
msgid "never "
msgstr "ðïôÝ "
msgid "Signature notation: "
msgstr "Óçìåßùóç õðïãñáöÞò: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 êáêÞ õðïãñáöÞ\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d êáêÝò õðïãñáöÝò\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d êáêÝò õðïãñáöÝò\n"
+msgstr[1] "%d êáêÝò õðïãñáöÝò\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "ÊëåéäïèÞêç"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "èùñÜêéóç áðÝôõ÷å: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "Ýëåã÷ïò êëåéäïèÞêçò `%s'\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu êëåéäéÜ Ý÷ïõí åëåã÷èåß (%lu õðïãñáöÝò)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu êëåéäéÜ Ý÷ïõí åëåã÷èåß (%lu õðïãñáöÝò)\n"
+msgstr[1] "%lu êëåéäéÜ Ý÷ïõí åëåã÷èåß (%lu õðïãñáöÝò)\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu êëåéäéÜ Ý÷ïõí åëåã÷èåß (%lu õðïãñáöÝò)\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 êáêÞ õðïãñáöÞ\n"
+msgstr[1] "1 êáêÞ õðïãñáöÞ\n"
#, c-format
msgid "%s: keyring created\n"
msgstr ""
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "áßôçóç êëåéäéïý %08lX áðü ôï %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "áßôçóç êëåéäéïý %08lX áðü ôï %s\n"
+msgstr[1] "áßôçóç êëåéäéïý %08lX áðü ôï %s\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: áäõíáìßá äéáãñáöÞò tempfile (%s) `%s': %s\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "áßôçóç êëåéäéïý %08lX áðü ôï %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "ôï êëåéäß '%s' äå âñÝèçêå: %s\n"
msgid "requesting key %s from %s\n"
msgstr "áßôçóç êëåéäéïý %08lX áðü ôï %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "áíáæÞôçóç ôïõ \"%s\" áðü ôï HKP äéáêïìéóôÞ %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "ìç Ýãêõñåò åðéëïãÝò åîáãùãÞò\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s õðïãñáöÞ, áëãüñéèìïò ðåñßëçøçò %s\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "óöÜëìá áíÜãíùóçò: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "óöÜëìá áíÜãíùóçò: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: ìç óõíåéóôþìåíç åðéëïãÞ \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: ðáñáëåßöèçêå: äçìüóéï êëåéäß åßíáé Þäç ðáñüí\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "áäõíáìßá óýíäåóçò óôï `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "ìç Ýãêõñïò áëãüñéèìïò hash `%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "ìç Ýãêõñïò áëãüñéèìïò hash `%s'\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Äåí ïñßóôçêå Ýíá user ID. (÷ñçóéìïðïéåßóôå ôï \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "äåäïìÝíá äåí áðïèçêåýôçêáí. ÁðïèÞêåõóç ìå ôçí åðéëïãÞ \"--output\"\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "óöÜëìá êáôÜ ôç äçìéïõñãßá ôïõ `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "ÁðïêïììÝíç õðïãñáöÞ.\n"
msgstr "Äçìéïõñãßá åíüò ðéóôïðïéçôéêïý áíÜêëçóçò ãéá áõôü ôï êëåéäß; "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Ðéóôïðïéçôéêü áíÜêëçóçò äçìéïõñãÞèçêå.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "ôï ìõóôéêü êëåéäß `%s' äå âñÝèçêå: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "áäõíáìßá äçìéïõñãßáò ôçò êëåéäïèÞêçò `%s': %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Äçìéïõñãßá åíüò ðéóôïðïéçôéêïý áíÜêëçóçò ãéá áõôü ôï êëåéäß; "
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr ""
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] ""
+"ôï äçìüóéï êëåéäß %08lX åßíáé %lu äåõôåñüëåðôï íåüôåñï áðü ôçí õðïãñáöÞ\n"
+msgstr[1] ""
"ôï äçìüóéï êëåéäß %08lX åßíáé %lu äåõôåñüëåðôï íåüôåñï áðü ôçí õðïãñáöÞ\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr ""
-"ôï äçìüóéï êëåéäß %08lX åßíáé %lu äåõôåñüëåðôá íåüôåñï áðü ôçí õðïãñáöÞ\n"
+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] ""
+"ôï äçìüóéï êëåéäß %08lX åßíáé %lu äåõôåñüëåðôï íåüôåñï áðü ôçí õðïãñáöÞ\n"
+msgstr[1] ""
+"ôï äçìüóéï êëåéäß %08lX åßíáé %lu äåõôåñüëåðôï íåüôåñï áðü ôçí õðïãñáöÞ\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôï óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
+"áðëþò ðñüâëçìá óôï ñïëüé)\n"
+msgstr[1] ""
"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôï óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
"áðëþò ðñüâëçìá óôï ñïëüé)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôá óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
+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] ""
+"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôï óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
+"áðëþò ðñüâëçìá óôï ñïëüé)\n"
+msgstr[1] ""
+"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôï óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
"áðëþò ðñüâëçìá óôï ñïëüé)\n"
#, fuzzy, c-format
msgstr "ãñáììÞ åéóüäïõ ìåãáëýôåñç áðü %d ÷áñáêôÞñåò\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "óöÜëìá óôç áðïóôïëÞ ðñïò ôï `%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Õðïóôçñéæüìåíïé áëãüñéèìïé:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "óöÜëìá óôç áðïóôïëÞ ðñïò ôï `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "áäõíáìßá åããñáöÞò ìõóôéêÞò êëåéäïèÞêçò `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: óöÜëìá óôçí åããñáöÞ ôçò åããñáöÞò dir : %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ `%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "óöÜëìá óôç áðïóôïëÞ ðñïò ôï `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "ôï äçìüóéï êëåéäß %08lX äåí âñÝèçêå: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ `%s': %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "óöÜëìá óôç äçìéïõñãßá ôçò öñÜóçò êëåéäß: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "ÐïëéôéêÞ: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "óöÜëìá óôç äçìéïõñãßá ôçò öñÜóçò êëåéäß: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "áðåéêüíéóç ôçò ëßóôáò êëåéäéþí"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|áëãüñ [áñ÷åßá]| áðåéêüíéóç ðåñéëÞøåùí ôùí ìçíõìÜôùí"
+msgstr[1] "|áëãüñ [áñ÷åßá]| áðåéêüíéóç ðåñéëÞøåùí ôùí ìçíõìÜôùí"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "óöÜëìá óôç äçìéïõñãßá ôçò öñÜóçò êëåéäß: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "óöÜëìá óôç áðïóôïëÞ ðñïò ôï `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "`%s' äåí åßíáé Ýãêõñï ìáêñý keyID\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "äåí õðÜñ÷åé áíÜãêç ãéá Ýëåã÷ï ôçò trustdb\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "ôï äçìüóéï êëåéäß %08lX äåí âñÝèçêå: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "ðáñáêáëþ êÜíôå Ýíá --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "Ýëåã÷ïò ôçò trustdb\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d êëåéäéÜ åðåîåñãÜóôçêáí (%d ìåôñÞóåéò åããõñüôçôáò ðÝñáóáí)\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu êëåéäéÜ Ý÷ïõí ìÝ÷ñé ôþñá åðåîåñãáóôåß\n"
+msgstr[1] "%lu êëåéäéÜ Ý÷ïõí ìÝ÷ñé ôþñá åðåîåñãáóôåß\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d êëåéäéÜ åðåîåñãÜóôçêáí (%d ìåôñÞóåéò åããõñüôçôáò ðÝñáóáí)\n"
+msgstr[1] "%d êëåéäéÜ åðåîåñãÜóôçêáí (%d ìåôñÞóåéò åããõñüôçôáò ðÝñáóáí)\n"
msgid "no ultimately trusted keys found\n"
msgstr "äå âñÝèçêáí áðüëõôá åìðéóôåýóéìá êëåéäéÜ\n"
"äå âñÝèçêå ôï äçìüóéï êëåéäß ôïõ áðüëõôá åìðéóôåýóéìïõ êëåéäéïý %08lX\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "äéáãñáöÞ block êëåéäéþí áðÝôõ÷å: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Ç äçìéïõñãßá êëåéäéïý áðÝôõ÷å: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "Ç äçìéïõñãßá êëåéäéïý áðÝôõ÷å: %s\n"
+msgstr[1] "Ç äçìéïõñãßá êëåéäéïý áðÝôõ÷å: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "óöÜëìá óôç äçìéïõñãßá ôçò öñÜóçò êëåéäß: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|ÏÍÏÌÁ|÷ñÞóç ÏÍÏÌÁôïò óáí ðñïêáèïñéóìÝíï ìõóôéêü êëåéäß"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d õðïãñáöÝò äåí åëÝã÷èçêáí ëüãù ÷áìÝíùí êëåéäéþí\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d õðïãñáöÝò äåí åëÝã÷èçêáí ëüãù óöáëìÜôùí\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 user ID áíé÷íåýôçêå ÷ùñßò Ýãêõñç éäéï-õðïãñáöÞ\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "ÄéáãñÜöçêáí %d õðïãñáöÝò.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Ôï user ID \"%s\" áíáêáëåßôå."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "×ñåéÜæåóôå ìéá ÖñÜóç êëåéäß ãéá íá ðñïóôáôåýóåôå ôï ìõóôéêü êëåéäß.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß· áõôÞ åßíáé ìéá ìõóôéêÞ ðñüôáóç \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "ç öñÜóç êëåéäß äåí åðáíáëÞöèçêå óùóôÜ. ÄïêéìÜóôå îáíÜ"
+
+#~ 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 ""
+#~ "Äåí ÷ñåéÜæåóôå ìéá öñÜóç êëåéäß - áõôü åßíáé ìÜëëïí ìéá *êáêÞ* éäÝá!\n"
+#~ "Èá óõíå÷ßóù üðùò êáé íá Ý÷åé. Ìðïñåßôå íá áëëÜîåôå ôç öñÜóç óáò\n"
+#~ "üðïôå èÝëåôå, ìå ôçí åðéëïãÞ \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "äéáãñáöÞ block êëåéäéþí áðÝôõ÷å: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 êáêÞ õðïãñáöÞ\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "èùñÜêéóç áðÝôõ÷å: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu êëåéäéÜ Ý÷ïõí åëåã÷èåß (%lu õðïãñáöÝò)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "áßôçóç êëåéäéïý %08lX áðü ôï %s\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "áíáæÞôçóç ôïõ \"%s\" áðü ôï HKP äéáêïìéóôÞ %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr ""
+#~ "ôï äçìüóéï êëåéäß %08lX åßíáé %lu äåõôåñüëåðôá íåüôåñï áðü ôçí õðïãñáöÞ\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôá óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
+#~ "áðëþò ðñüâëçìá óôï ñïëüé)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "áíáæÞôçóç ôïõ \"%s\" áðü ôï HKP äéáêïìéóôÞ %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "ìç Ýãêõñåò åðéëïãÝò åîáãùãÞò\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "óöÜëìá äéáêïìéóôÞ êëåéäéþí"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX äçìéïõñãßá: %s ëÞîç: %s"
-#~ msgid "Policy: "
-#~ msgstr "ÐïëéôéêÞ: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "áäõíáìßá ëÞøçò ôïõ êëåéäéïý áðü ôï äéáêïìéóôÞ: %s\n"
msgstr "Donu pasfrazon: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "eraro dum kreado de þlosilaro '%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "AVERTO: %s nuligas %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "sekreta þlosilo ne havebla"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: ignorita: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "skribas sekretan þlosilon al '%s'\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "þlosilo %08lX: revokatestilo en maløusta loko - ignorita\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: ignorita: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "AVERTO: nenio estis eksportita\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "eraro dum kreado de '%s': %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[Uzantidentigilo ne trovita]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "nevalida kiraso"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "eraro dum legado de '%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "eraro dum kreado de þlosilaro '%s': %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "eraro dum kreado de '%s': %s\n"
msgstr "þlosilo '%s' ne trovita: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "nevalida kiraso"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NOMO|uzi NOMOn kiel la implicitan sekretan þlosilon"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NOMO|uzi NOMOn kiel la implicitan sekretan þlosilon"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "Nevalida þlosilo %08lX validigita per --always-trust\n"
msgstr "NOTO: mankas implicita opcio-dosiero '%s'\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "eraro dum kreado de þlosilaro '%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgid "WARNING: recipients (-r) given without using public key encryption\n"
msgstr ""
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "nevalida kompendi-metodo '%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "nevalida kompendi-metodo '%s'\n"
-
msgid "--store [filename]"
msgstr "--store [dosiero]"
msgstr "Kreado de þlosiloj malsukcesis: %s\n"
#, fuzzy, c-format
+msgid "export as ssh key failed: %s\n"
+msgstr "Kreado de þlosiloj malsukcesis: %s\n"
+
+#, fuzzy, c-format
msgid "keyserver search failed: %s\n"
msgstr "get_dir_record: search_record malsukcesis: %s\n"
msgid "[self-signature]"
msgstr "[mem-subskribo]"
-msgid "1 bad signature\n"
-msgstr "1 malbona subskribo\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d malbonaj subskriboj\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 subskribo ne kontrolita pro manko de þlosilo\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d subskriboj ne kontrolitaj pro manko de þlosiloj\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 subskribo ne kontrolita pro eraro\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d malbonaj subskriboj\n"
+msgstr[1] "%d malbonaj subskriboj\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d subskriboj ne kontrolitaj pro eraroj\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 subskribo ne kontrolita pro manko de þlosilo\n"
+msgstr[1] "1 subskribo ne kontrolita pro manko de þlosilo\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 uzantidentigilo sen valida mem-subskribo estis trovita\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 subskribo ne kontrolita pro eraro\n"
+msgstr[1] "1 subskribo ne kontrolita pro eraro\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d uzantidentigiloj sen valida mem-subskribo estis trovitaj\n"
+#, fuzzy, c-format
+#| 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] "%d uzantidentigiloj sen valida mem-subskribo estis trovitaj\n"
+msgstr[1] "%d uzantidentigiloj sen valida mem-subskribo estis trovitaj\n"
#, fuzzy
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "Æu vere forviþi æi tiun mem-subskribon? (j/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Forviþis %d subskribon.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Forviþis %d subskribojn.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Forviþis %d subskribon.\n"
+msgstr[1] "Forviþis %d subskribon.\n"
msgid "Nothing deleted.\n"
msgstr "Nenio estis forviþita.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Uzantidentigilo \"%s\" estas revokita.\n"
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Uzantidentigilo \"%s\" estas revokita.\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Uzantidentigilo \"%s\" estas revokita.\n"
+msgstr[1] "Uzantidentigilo \"%s\" estas revokita.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Bonvolu korekti la eraron unue\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Vi bezonas pasfrazon por protekti vian sekretan þlosilon.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Bonvolu doni la pasfrazon; tio estas sekreta frazo \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "la pasfrazo ne estis øuste ripetita; provu denove"
-
-#, c-format
-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 ""
-"Vi ne deziras pasfrazon; tio verþajne estas *malbona* ideo!\n"
-"Mi tamen faros tiel. Vi povos æiam ajn þanøi vian pasfrazon,\n"
-"uzante æi tiun programon kun la opcio \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Kreado de þlosiloj nuligita.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "ne povas krei '%s': %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "NOTO: sekreta þlosilo %08lX eksvalidiøis je %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "skribas publikan þlosilon al '%s'\n"
msgid "Really create? (y/N) "
msgstr "Æu vere krei? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "forviþo de þlosilbloko malsukcesis: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "ne povas krei '%s': %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "NOTO: sekreta þlosilo %08lX eksvalidiøis je %s\n"
-
msgid "never "
msgstr ""
msgid "Signature notation: "
msgstr "Subskribo-notacio: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 malbona subskribo\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d malbonaj subskriboj\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d malbonaj subskriboj\n"
+msgstr[1] "%d malbonaj subskriboj\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Þlosilaro"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "enkirasigo malsukcesis: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "kontrolas þlosilaron '%s'\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu þlosiloj kontrolitaj (%lu subskriboj)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu þlosiloj kontrolitaj (%lu subskriboj)\n"
+msgstr[1] "%lu þlosiloj kontrolitaj (%lu subskriboj)\n"
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu þlosiloj kontrolitaj (%lu subskriboj)\n"
+#| msgid "\t%lu keys updated\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "\t%lu þlosiloj aktualigitaj\n"
+msgstr[1] "\t%lu þlosiloj aktualigitaj\n"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 malbona subskribo\n"
+msgstr[1] "1 malbona subskribo\n"
#, c-format
msgid "%s: keyring created\n"
msgstr "%s: ne valida þlosilidentigilo\n"
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "petas la þlosilon %08lX de HKP-þlosilservilo %s ...\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "petas la þlosilon %08lX de HKP-þlosilservilo %s ...\n"
+msgstr[1] "petas la þlosilon %08lX de HKP-þlosilservilo %s ...\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "Averto: malsekura posedeco sur %s \"%s\"\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "petas la þlosilon %08lX de HKP-þlosilservilo %s ...\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "þlosilo '%s' ne trovita: %s\n"
msgid "requesting key %s from %s\n"
msgstr "petas la þlosilon %08lX de HKP-þlosilservilo %s ...\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "seræas pri \"%s\" æe HKP-servilo %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "nevalida þlosilaro"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgstr "%s-subskribo de: %s\n"
#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "kiraso: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "kiraso: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
+#, fuzzy, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "AVERTO: '%s' estas malplena dosiero\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: ignorita: publika þlosilo jam æeestas\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "ne povas konektiøi al '%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "nevalida kompendi-metodo '%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "nevalida kompendi-metodo '%s'\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Vi ne specifis uzantidentigilon. (Vi povas uzi \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "datenoj ne savitaj; uzu la opcion \"--output\" por savi ilin\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "eraro dum kreado de '%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Aparta subskribo.\n"
msgstr "Æu krei revokatestilon por æi tiu subskribo? (j/N)"
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "þlosilo %08lX: revokatestilo aldonita\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "þlosilo '%s' ne trovita: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "eraro dum kreado de þlosilaro '%s': %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Æu krei revokatestilon por æi tiu subskribo? (j/N)"
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "la publika þlosilo estas %lu sekundon pli nova ol la subskribo\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "la publika þlosilo estas %lu sekundon pli nova ol la subskribo\n"
+msgstr[1] "la publika þlosilo estas %lu sekundon pli nova ol la subskribo\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "la publika þlosilo estas %lu sekundojn pli nova ol la subskribo\n"
+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 publika þlosilo estas %lu sekundon pli nova ol la subskribo\n"
+msgstr[1] "la publika þlosilo estas %lu sekundon pli nova ol la subskribo\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"þlosilo estis kreita %lu sekundon en la estonteco (tempotordo aý "
+"horloøeraro)\n"
+msgstr[1] ""
"þlosilo estis kreita %lu sekundon en la estonteco (tempotordo aý "
"horloøeraro)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"þlosilo estis kreita %lu sekundojn en la estonteco (tempotordo aý "
+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] ""
+"þlosilo estis kreita %lu sekundon en la estonteco (tempotordo aý "
+"horloøeraro)\n"
+msgstr[1] ""
+"þlosilo estis kreita %lu sekundon en la estonteco (tempotordo aý "
"horloøeraro)\n"
#, fuzzy, c-format
msgstr "enigata linio pli longa ol %d signojn\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "eraro dum sendo al '%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Realigitaj metodoj:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "eraro dum sendo al '%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "eraro dum skribado de sekreta þlosilaro '%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: eraro dum skribo de dosieruja registro: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "eraro dum legado de '%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "eraro dum sendo al '%s': %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "publika þlosilo %08lX ne trovita: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "eraro dum legado de '%s': %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "eraro dum kreado de pasfrazo: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Gvidlinio: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "eraro dum kreado de pasfrazo: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "listigi þlosilojn"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|metodo [dosieroj]|presi mesaøo-kompendiojn"
+msgstr[1] "|metodo [dosieroj]|presi mesaøo-kompendiojn"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "eraro dum kreado de pasfrazo: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "eraro dum sendo al '%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "'%s' ne estas valida longa þlosilidentigilo\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "kontrolo de fido-datenaro ne estas bezonata\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "publika þlosilo %08lX ne trovita: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr ""
msgid "checking the trustdb\n"
msgstr "kontrolas la fido-datenaron\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu þlosiloj jam traktitaj\n"
+msgstr[1] "%lu þlosiloj jam traktitaj\n"
+
#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr ""
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy
msgid "no ultimately trusted keys found\n"
msgstr "publika þlosilo de absolute fidata þlosilo %08lX ne trovita\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "forviþo de þlosilbloko malsukcesis: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Kreado de þlosiloj malsukcesis: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "Kreado de þlosiloj malsukcesis: %s\n"
+msgstr[1] "Kreado de þlosiloj malsukcesis: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "eraro dum kreado de pasfrazo: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NOMO|uzi NOMOn kiel la implicitan sekretan þlosilon"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d subskriboj ne kontrolitaj pro manko de þlosiloj\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d subskriboj ne kontrolitaj pro eraroj\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 uzantidentigilo sen valida mem-subskribo estis trovita\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Forviþis %d subskribojn.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Uzantidentigilo \"%s\" estas revokita.\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Vi bezonas pasfrazon por protekti vian sekretan þlosilon.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Bonvolu doni la pasfrazon; tio estas sekreta frazo \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "la pasfrazo ne estis øuste ripetita; provu denove"
+
+#~ 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 ""
+#~ "Vi ne deziras pasfrazon; tio verþajne estas *malbona* ideo!\n"
+#~ "Mi tamen faros tiel. Vi povos æiam ajn þanøi vian pasfrazon,\n"
+#~ "uzante æi tiun programon kun la opcio \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "forviþo de þlosilbloko malsukcesis: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 malbona subskribo\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "enkirasigo malsukcesis: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu þlosiloj kontrolitaj (%lu subskriboj)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "petas la þlosilon %08lX de HKP-þlosilservilo %s ...\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "seræas pri \"%s\" æe HKP-servilo %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "la publika þlosilo estas %lu sekundojn pli nova ol la subskribo\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "þlosilo estis kreita %lu sekundojn en la estonteco (tempotordo aý "
+#~ "horloøeraro)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "seræas pri \"%s\" æe HKP-servilo %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "nevalida þlosilaro"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "þlosilservila eraro"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX kreita: %s eksvalidiøos: %s"
-#~ msgid "Policy: "
-#~ msgstr "Gvidlinio: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "ne povas akiri þlosilon de þlosilservilo: %s\n"
#~ msgid "\t%lu due to new pubkeys\n"
#~ msgstr "\t%lu pro novaj publikaj þlosiloj\n"
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu þlosiloj aktualigitaj\n"
-
#~ msgid "Ooops, no keys\n"
#~ msgstr "Hu, mankas þlosiloj\n"
msgid "Enter passphrase: "
msgstr "Introduzca frase contraseña: "
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "error escribiendo anillo `%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: "
+msgid "WARNING: %s\n"
+msgstr "ATENCION: "
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "tarjeta OpenPGP no disponible: %s\n"
msgid "remove as much as possible from key during export"
msgstr "borrar tanto como sea posible de la clave al exportar"
+#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: omitido: %s\n"
+
msgid "exporting secret keys not allowed\n"
msgstr "no se permite exportar claves secretas\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "clave %s: material de la clave en la tarjeta - omitida\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: omitido: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "ATENCIÓN: no se ha exportado nada\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "error creando `%s': %s\n"
+
msgid "[User ID not found]"
msgstr "[ID de usuario no encontrado]"
#, fuzzy, c-format
+#| msgid "missing argument for option \"%.50s\"\n"
+msgid "(check argument of option '%s')\n"
+msgstr "falta parámetro para la opción \"%.50s\"\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "error cerrando %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "error escribiendo anillo `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "automatically retrieved `%s' via %s\n"
msgid "automatically retrieved '%s' via %s\n"
msgstr "recuperado automáticamente `%s' vía %s\n"
msgstr "clave secreta \"%s\" no encontrada: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "falta parámetro para la opción \"%.50s\"\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NOMBRE|usa NOMBRE como clave secreta por defecto"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NOMBRE|usa NOMBRE como clave secreta por defecto"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "Clave %s inválida hecha válida mediante --allow-non-selfsigned-uid\n"
msgstr "NOTA: se ignora el antiguo fichero de opciones predefinidas `%s'\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "la opción \"%.50s\" es ambigua\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "error escribiendo anillo `%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt demasiado antigua (necesito %s, tengo %s)\n"
msgid "WARNING: recipients (-r) given without using public key encryption\n"
msgstr "AVISO: se indicaron receptores (-r) sin clave pública de cifrado\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "línea %d: algoritmo inválido\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "línea %d: algoritmo inválido\n"
-
msgid "--store [filename]"
msgstr "--store [nombre_fichero]"
msgid "key export failed: %s\n"
msgstr "exportación de clave fallida: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "exportación de clave fallida: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "búsqueda del servidor de claves fallida: %s\n"
msgid "[self-signature]"
msgstr "[autofirma]"
-msgid "1 bad signature\n"
-msgstr "1 firma incorrecta\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d firmas incorrectas\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 firma no comprobada por falta de clave\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d firmas no comprobadas por falta de clave\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 firma no comprobada por causa de un error\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d firmas incorrectas\n"
+msgstr[1] "%d firmas incorrectas\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d firmas no comprobadas por errores\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 firma no comprobada por falta de clave\n"
+msgstr[1] "1 firma no comprobada por falta de clave\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Detectado 1 identificador de usuario sin autofirma válida\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 firma no comprobada por causa de un error\n"
+msgstr[1] "1 firma no comprobada por causa de un error\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "Detectados %d identificadores de usuario sin autofirma válida\n"
+#, fuzzy, c-format
+#| 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] "Detectados %d identificadores de usuario sin autofirma válida\n"
+msgstr[1] "Detectados %d identificadores de usuario sin autofirma válida\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr "¿Borrar realmente esta autofirma? (s/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "%d firmas borradas.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d firmas borradas\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "%d firmas borradas.\n"
+msgstr[1] "%d firmas borradas.\n"
msgid "Nothing deleted.\n"
msgstr "No se borró nada\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "ID de usuario \"%s\" compactado: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "ID de usuario \"%s\": %d firma borrada\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "ID de usuario \"%s\": %d firmas borradas\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "ID de usuario \"%s\": %d firma borrada\n"
+msgstr[1] "ID de usuario \"%s\": %d firma borrada\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Por favor corrija primero el error.\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Necesita una frase contraseña para proteger su clave secreta.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Introduzca la frase contraseña para proteger la copia de seguridadde la "
-"clave externamente a la tarjeta."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "frase contraseña repetida incorrectamente; inténtelo de nuevo"
-
-#, c-format
-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 ""
-"No ha especificado contraseña. Esto es probablemente una *mala* idea.\n"
-"Si más tarde quiere añadir una, puede hacerlo usando este programa con\n"
-"la opción \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Creación de claves cancelada.\n"
#, fuzzy, c-format
+#| msgid "can't create backup file `%s': %s\n"
+msgid "can't create backup file '%s': %s\n"
+msgstr "no se puede crear fichero de respaldo `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "NOTE: backup of card key saved to `%s'\n"
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "NOTA: copia de seguridad de la clave guardada en `%s'\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "escribiendo clave pública en `%s'\n"
msgid "Really create? (y/N) "
msgstr "¿Crear de verdad? (s/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "almacenado de clave en la tarjeta fallido: %s\n"
-
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
-msgid "can't create backup file '%s': %s\n"
-msgstr "no se puede crear fichero de respaldo `%s': %s\n"
-
-#, fuzzy, c-format
-#| msgid "NOTE: backup of card key saved to `%s'\n"
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "NOTA: copia de seguridad de la clave guardada en `%s'\n"
-
msgid "never "
msgstr "nunca "
msgid "Signature notation: "
msgstr "Notación de firma: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 firma incorrecta\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d firmas incorrectas\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d firmas incorrectas\n"
+msgstr[1] "%d firmas incorrectas\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Anillo de claves"
msgstr " Número de serie de la tarjeta ="
#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "renombrando `%s' en `%s' fallo: %s\n"
-
-#, fuzzy, c-format
#| msgid "caching keyring `%s'\n"
msgid "caching keyring '%s'\n"
msgstr "memorizando anillo `%s'\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu claves memorizadas hasta ahora (%lu firmas)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu claves memorizadas hasta ahora (%lu firmas)\n"
+msgstr[1] "%lu claves memorizadas hasta ahora (%lu firmas)\n"
-#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu claves memorizadas (%lu firmas)\n"
+#, fuzzy, c-format
+#| msgid "\t%lu keys updated\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "\t%lu claves actualizadas\n"
+msgstr[1] "\t%lu claves actualizadas\n"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 firma incorrecta\n"
+msgstr[1] "1 firma incorrecta\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "\"%s\" no es un identificador de clave válido: omitido\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "renovando 1 clave de %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "renovando %d claves desde %s\n"
+msgstr[1] "renovando %d claves desde %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "AVISO: no se puede renovar la clave %s a traves de %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "renovando %d claves desde %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "clave \"%s\" no encontrada en el servidor\n"
msgid "requesting key %s from %s\n"
msgstr "solicitando clave %s de %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "enviando clave %s a %s servidor %s\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "¡no se solicita ninguna acción al servidor de claves!\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "firma %s, algoritmo de resumen %s\n"
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s)\n"
+msgstr "error de lectura `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "error de lectura `%s': %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: opción obsoleta \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: omitida: clave pública ya presente\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "no se puede conectar con `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "línea %d: algoritmo inválido\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "línea %d: algoritmo inválido\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "No ha especificado un ID de usuario (puede usar \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "datos no grabados; use la opción \"--output\" para grabarlos\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "error creando `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Firma separada.\n"
msgstr "¿Crear un certificado de revocación para esta clave? (s/N) "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Certificado de revocación creado.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "clave secreta \"%s\" no encontrada: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "error escribiendo anillo `%s': %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "¿Crear un certificado de revocación para esta clave? (s/N) "
msgstr ""
"AVISO: la subclave de cifrado %s tiene un certificado cruzado inválido\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "la clave pública %s es %lu segundos más nueva que la firma\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "la clave pública %s es %lu segundos más nueva que la firma\n"
+msgstr[1] "la clave pública %s es %lu segundos más nueva que la firma\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "la clave pública %s es %lu segundos más nueva que la firma\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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 clave pública %s es %lu segundos más nueva que la firma\n"
+msgstr[1] "la clave pública %s es %lu segundos más nueva que la firma\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"la clave %s fue creada %lu segundo en el futuro (viaje en el tiempo\n"
+"o problemas con el reloj)\n"
+msgstr[1] ""
"la clave %s fue creada %lu segundo en el futuro (viaje en el tiempo\n"
"o problemas con el reloj)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"la clave %s fue creada %lu segundos en el futuro (salto en el tiempo\n"
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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 clave %s fue creada %lu segundo en el futuro (viaje en el tiempo\n"
+"o problemas con el reloj)\n"
+msgstr[1] ""
+"la clave %s fue creada %lu segundo en el futuro (viaje en el tiempo\n"
"o problemas con el reloj)\n"
#, fuzzy, c-format
msgstr "línea de longitud superior a %d caracteres\n"
#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "error enviando opciones estándar: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "algoritmo no disponible: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "error enviando orden %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "error escribiendo anillo privado `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: error escribiendo registro de directorio: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening `%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "error abriendo `%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "error enviando orden %s: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "clave pública %s no encontrada: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error storing flags: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "error almacenando parámetros: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting new PIN: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "error obteniendo nuevo PIN: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Política: "
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "error obteniendo parámetros almacenados: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "lista claves"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "imprime resúmenes de mensaje"
+msgstr[1] "imprime resúmenes de mensaje"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "error creando tubería: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "second"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] "segundo"
+msgstr[1] "segundo"
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "error enviando orden %s: %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "'%s' no es un identificador largo de clave válido\n"
"no es necesario comprobar la base de datos de confianza\n"
"con el modelo `%s'\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "clave pública %s no encontrada: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "por favor haga un --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "comprobando base de datos de confianza\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d claves procesadas (%d validaciones superadas)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu claves procesadas hasta ahora\n"
+msgstr[1] "%lu claves procesadas hasta ahora\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d claves procesadas (%d validaciones superadas)\n"
+msgstr[1] "%d claves procesadas (%d validaciones superadas)\n"
msgid "no ultimately trusted keys found\n"
msgstr "no se encuentran claves absolutamente fiables\n"
msgstr "clave pública de la clave absolutamente fiable %s no encontrada\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-"%d dudosa(s) necesarias, %d completa(s) necesarias,\n"
-"modelo de confianza %s\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "¡la tarjeta está bloqueada permanentemente!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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 intentos quedan para PIN de administrador antes de "
+"bloquearpermanentemente la clave\n"
+msgstr[1] ""
"%d intentos quedan para PIN de administrador antes de "
"bloquearpermanentemente la clave\n"
msgid "generating key failed\n"
msgstr "la generación de la clave falló\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "generación de clave completada (%d segundos)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "generación de clave completada (%d segundos)\n"
+msgstr[1] "generación de clave completada (%d segundos)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "estructura de la tarjeta OpenPGP inválida (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "no permite reusar antiguas frases contraseña"
+#, fuzzy
+#| msgid "|N|set maximum PIN cache lifetime to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|establecer vida máxima del caché de PIN en N segundos"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NOMBRE|usa NOMBRE como clave secreta por defecto"
"Compara frase contraseña dada en entrada estándar con un fichero de "
"patrones\n"
+#, fuzzy
+#~| msgid "option \"%.50s\" is ambiguous\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "la opción \"%.50s\" es ambigua\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d firmas no comprobadas por falta de clave\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d firmas no comprobadas por errores\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "Detectado 1 identificador de usuario sin autofirma válida\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "%d firmas borradas\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "ID de usuario \"%s\": %d firmas borradas\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Necesita una frase contraseña para proteger su clave secreta.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Introduzca la frase contraseña para proteger la copia de seguridadde la "
+#~ "clave externamente a la tarjeta."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "frase contraseña repetida incorrectamente; inténtelo de nuevo"
+
+#~ 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 ""
+#~ "No ha especificado contraseña. Esto es probablemente una *mala* idea.\n"
+#~ "Si más tarde quiere añadir una, puede hacerlo usando este programa con\n"
+#~ "la opción \"--edit-key\".\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "almacenado de clave en la tarjeta fallido: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 firma incorrecta\n"
+
+#, fuzzy
+#~| msgid "renaming `%s' to `%s' failed: %s\n"
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "renombrando `%s' en `%s' fallo: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu claves memorizadas (%lu firmas)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "renovando 1 clave de %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "enviando clave %s a %s servidor %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "la clave pública %s es %lu segundos más nueva que la firma\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "la clave %s fue creada %lu segundos en el futuro (salto en el tiempo\n"
+#~ "o problemas con el reloj)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr ""
+#~ "%d dudosa(s) necesarias, %d completa(s) necesarias,\n"
+#~ "modelo de confianza %s\n"
+
#~ msgid "cleared passphrase cached with ID: %s\n"
#~ msgstr "borrada frase de paso en caché con ID: %s\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "buscando \"%s\" de %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "¡no se solicita ninguna acción al servidor de claves!\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr ""
#~ "AVISO: el manejo de claves procede de una versión diferente de GnuPG "
#~ msgid "ERROR: "
#~ msgstr "ERROR: "
-#~ msgid "WARNING: "
-#~ msgstr "ATENCION: "
-
# bicho :-)
# ¿Error simplemente?
# Uf, preferiría bug, si leo "error" voy a pensar en otra cosa distinta...
#~ msgid " signed by %08lX at %s%s\n"
#~ msgstr " firmada por %08lX el %s%s\n"
-#~ msgid "Policy: "
-#~ msgstr "Política: "
-
#~ msgid "Experimental algorithms should not be used!\n"
#~ msgstr "¡No se deberían usar algoritmos experimentales!\n"
#~ msgid "\t%lu due to new pubkeys\n"
#~ msgstr "\t%lu debido a las nuevas claves públicas\n"
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu claves actualizadas\n"
-
#~ msgid "Ooops, no keys\n"
#~ msgstr "Oh oh, no hay claves\n"
#~ msgid "did not use primary key for insert_trust_record()\n"
#~ msgstr "no se usó clave primaria para insert_trust_record()\n"
-#~ msgid "second"
-#~ msgstr "segundo"
-
#~ msgid "seconds"
#~ msgstr "segundos"
msgstr "Sisestage parool: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "viga võtmehoidla `%s' loomisel: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "HOIATUS: %s määrab üle %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "salajane võti ei ole kättesaadav"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: jätsin vahele: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "kirjutan salajase võtme faili `%s'\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "võti %08lX: alamvõtme allkiri on vales kohas - jätan vahele\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: jätsin vahele: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "HOIATUS: midagi ei eksporditud\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "viga `%s' loomisel: %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[Kasutaja id puudub]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "vigased impordi võtmed\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "viga `%s' lugemisel: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "viga võtmehoidla `%s' loomisel: %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "viga `%s' loomisel: %s\n"
msgstr "salajast võtit `%s' ei leitud: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "vigased impordi võtmed\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NIMI|kasuta NIME vaikimisi salajase võtmena"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NIMI|kasuta NIME vaikimisi salajase võtmena"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
msgstr "MÄRKUS: ignoreerin vana vaikimisi võtmete faili `%s'\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "viga võtmehoidla `%s' loomisel: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgstr ""
"HOIATUS: määrati saajad (-r) aga ei kasutata avaliku võtme krüptograafiat\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "vigane räsialgoritm `%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "vigane räsialgoritm `%s'\n"
-
msgid "--store [filename]"
msgstr "--store [failinimi]"
msgid "key export failed: %s\n"
msgstr "võtme eksport ebaõnnestus: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "võtme eksport ebaõnnestus: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "võtmeserveri otsing ebaõnnestus: %s\n"
msgid "[self-signature]"
msgstr "[iseenda allkiri]"
-msgid "1 bad signature\n"
-msgstr "1 halb allkiri\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d halba allkirja\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 allkiri jäi testimata, kuna võti puudub\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d allkirja jäi testimata, kuna võtmed puuduvad\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 allkiri jäi vea tõttu kontrollimata\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d halba allkirja\n"
+msgstr[1] "%d halba allkirja\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d allkirja jäi vigade tõttu kontrollimata\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 allkiri jäi testimata, kuna võti puudub\n"
+msgstr[1] "1 allkiri jäi testimata, kuna võti puudub\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "tuvastasin ühe kehtiva iseenda allkirjata kasutaja ID\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 allkiri jäi vea tõttu kontrollimata\n"
+msgstr[1] "1 allkiri jäi vea tõttu kontrollimata\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "tuvastasin %d kehtiva iseenda allkirjata kasutaja IDd\n"
+#, fuzzy, c-format
+#| 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] "tuvastasin %d kehtiva iseenda allkirjata kasutaja IDd\n"
+msgstr[1] "tuvastasin %d kehtiva iseenda allkirjata kasutaja IDd\n"
#, fuzzy
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "Kas tõesti kustutan selle iseenda allkirja? (j/E)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Kustutatud %d allkiri.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Kustutatud %d allkirja.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Kustutatud %d allkiri.\n"
+msgstr[1] "Kustutatud %d allkiri.\n"
msgid "Nothing deleted.\n"
msgstr "Midagi ei kustutatud.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Kasutaja ID \"%s\" on tühistatud."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Kasutaja ID \"%s\" on tühistatud."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Kasutaja ID \"%s\" on tühistatud."
+msgstr[1] "Kasutaja ID \"%s\" on tühistatud."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Palun parandage kõigepealt viga\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Te vajate oma salajase võtme kaitsmiseks parooli.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Palun sisestage parool; see on salajane tekst \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "parooli ei korratud õieti; proovige uuesti"
-
-#, c-format
-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 ""
-"Te ei soovi parooli - see on tõenäoliselt *halb* idee!\n"
-"Ma siiski täidan teie soovi. Te saate oma parooli alati muuta,\n"
-"kasutades seda programmi võtmega \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Võtme genereerimine katkestati.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "`%s' ei õnnestu luua: %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "MÄRKUS: salajane võti %08lX aegus %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "kirjutan avaliku võtme faili `%s'\n"
msgid "Really create? (y/N) "
msgstr "Loon tõesti? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "võtmebloki kustutamine ebaõnnestus: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "`%s' ei õnnestu luua: %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "MÄRKUS: salajane võti %08lX aegus %s\n"
-
msgid "never "
msgstr "mitte kunagi"
msgid "Signature notation: "
msgstr "Allkirja noteerimine: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 halb allkiri\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d halba allkirja\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d halba allkirja\n"
+msgstr[1] "%d halba allkirja\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Võtmehoidla"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "pakendamine ebaõnnestus: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "kontrollin võtmehoidlat `%s'\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "kontrollitud %lu võtit (%lu allkirja)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "kontrollitud %lu võtit (%lu allkirja)\n"
+msgstr[1] "kontrollitud %lu võtit (%lu allkirja)\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "kontrollitud %lu võtit (%lu allkirja)\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 halb allkiri\n"
+msgstr[1] "1 halb allkiri\n"
#, c-format
msgid "%s: keyring created\n"
msgstr ""
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "küsin võtit %08lX võtmeserverist %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "küsin võtit %08lX võtmeserverist %s\n"
+msgstr[1] "küsin võtit %08lX võtmeserverist %s\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "HOIATUS: ei saa kustutada ajutist faili (%s) `%s': %s\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "küsin võtit %08lX võtmeserverist %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "võtit '%s' ei leitud: %s\n"
msgid "requesting key %s from %s\n"
msgstr "küsin võtit %08lX võtmeserverist %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "otsin \"%s\" HKP serverist %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "vigased ekspordi võtmed\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s allkiri, sõnumilühendi algoritm %s\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "viga lugemisel: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "viga lugemisel: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: ebasoovitav võti \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: jätsin vahele: avalik võti on juba olemas\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "ei õnnestu luua ühendust serveriga `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "vigane räsialgoritm `%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "vigane räsialgoritm `%s'\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Te ei määranud kasutaja IDd. (võite kasutada võtit \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "andmeid ei salvestatud; salvestamiseks kasutage võtit \"--output\"\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "viga `%s' loomisel: %s\n"
-
msgid "Detached signature.\n"
msgstr "Eraldiseisev allkiri.\n"
msgstr "Loon sellele võtmele tühistamise sertifikaadi? "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Tühistamise sertifikaat on loodud.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "salajast võtit `%s' ei leitud: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "viga võtmehoidla `%s' loomisel: %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Loon sellele võtmele tühistamise sertifikaadi? "
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "avalik võti %08lX on %lu sekund uuem, kui allkiri\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "avalik võti %08lX on %lu sekund uuem, kui allkiri\n"
+msgstr[1] "avalik võti %08lX on %lu sekund uuem, kui allkiri\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "avalik võti %08lX on %lu sekundit uuem, kui allkiri\n"
+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] "avalik võti %08lX on %lu sekund uuem, kui allkiri\n"
+msgstr[1] "avalik võti %08lX on %lu sekund uuem, kui allkiri\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr "võti loodi %lu sekund tulevikus (ajahüpe või kella probleem)\n"
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] "võti loodi %lu sekund tulevikus (ajahüpe või kella probleem)\n"
+msgstr[1] "võti loodi %lu sekund tulevikus (ajahüpe või kella probleem)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr "võti loodi %lu sekundit tulevikus (ajahüpe või kella probleem)\n"
+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] "võti loodi %lu sekund tulevikus (ajahüpe või kella probleem)\n"
+msgstr[1] "võti loodi %lu sekund tulevikus (ajahüpe või kella probleem)\n"
#, fuzzy, c-format
msgid "Note: signature key %s expired %s\n"
msgstr "sisendrida on pikem, kui %d sümbolit\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "viga teate saatmisel serverile `%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Toetatud algoritmid:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "viga teate saatmisel serverile `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "viga salajase võtme võtmehoidlasse `%s' kirjutamisel: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: viga kataloogikirje kirjutamisel: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "viga `%s' lugemisel: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "viga teate saatmisel serverile `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "ei leia avalikku võtit %08lX: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "viga `%s' lugemisel: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "viga parooli loomisel: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Poliis: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "viga parooli loomisel: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "näita võtmeid"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [failid]|trüki teatelühendid"
+msgstr[1] "|algo [failid]|trüki teatelühendid"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "viga parooli loomisel: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "viga teate saatmisel serverile `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "`%s' ei ole kehtiv pikk võtmeID\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "trustdb kontrolliks puudub vajadus\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "ei leia avalikku võtit %08lX: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "palun tehke --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "kontrollin trustdb faili\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d võtit töödeldud (%d kehtivust puhastatud)\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu võtit on seni töödeldud\n"
+msgstr[1] "%lu võtit on seni töödeldud\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d võtit töödeldud (%d kehtivust puhastatud)\n"
+msgstr[1] "%d võtit töödeldud (%d kehtivust puhastatud)\n"
msgid "no ultimately trusted keys found\n"
msgstr "absoluutselt usaldatavaid võtmeid pole\n"
msgstr "puudub absoluutselt usaldatava võtme %08lX avalik võti\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "võtmebloki kustutamine ebaõnnestus: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Võtme genereerimine ebaõnnestus: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "Võtme genereerimine ebaõnnestus: %s\n"
+msgstr[1] "Võtme genereerimine ebaõnnestus: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "viga parooli loomisel: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NIMI|kasuta NIME vaikimisi salajase võtmena"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d allkirja jäi testimata, kuna võtmed puuduvad\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d allkirja jäi vigade tõttu kontrollimata\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "tuvastasin ühe kehtiva iseenda allkirjata kasutaja ID\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Kustutatud %d allkirja.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Kasutaja ID \"%s\" on tühistatud."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Te vajate oma salajase võtme kaitsmiseks parooli.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Palun sisestage parool; see on salajane tekst \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "parooli ei korratud õieti; proovige uuesti"
+
+#~ 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 ""
+#~ "Te ei soovi parooli - see on tõenäoliselt *halb* idee!\n"
+#~ "Ma siiski täidan teie soovi. Te saate oma parooli alati muuta,\n"
+#~ "kasutades seda programmi võtmega \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "võtmebloki kustutamine ebaõnnestus: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 halb allkiri\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "pakendamine ebaõnnestus: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "kontrollitud %lu võtit (%lu allkirja)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "küsin võtit %08lX võtmeserverist %s\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "otsin \"%s\" HKP serverist %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "avalik võti %08lX on %lu sekundit uuem, kui allkiri\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr "võti loodi %lu sekundit tulevikus (ajahüpe või kella probleem)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "otsin \"%s\" HKP serverist %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "vigased ekspordi võtmed\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "võtmeserveri viga"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX loodud: %s aegub: %s"
-#~ msgid "Policy: "
-#~ msgstr "Poliis: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "võtmeserverist ei saa võtit: %s\n"
msgstr "Syötä salasana: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "virhe luotaessa avainrengasta \"%s\": %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "VAROITUS: %s korvaa %s:n\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "salaista avainta ei löydy"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: ohitettu: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "avain %08lX: aliavaimen allekirjoitus väärässä paikassa - ohitetaan\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: ohitettu: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "VAROITUS: mitään ei viety\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "virhe luotaessa \"%s\": %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[Käyttäjätunnusta ei löytynyt]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "virheelliset tuontivalitsimet\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "virhe luettaessa tiedostoa \"%s\": %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "virhe luotaessa avainrengasta \"%s\": %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "virhe luotaessa \"%s\": %s\n"
msgstr "salaista avainta \"%s\" ei löydy: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "virheelliset tuontivalitsimet\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NIMI|käytä oletusarvoisesti salaista avainta NIMI"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NIMI|käytä oletusarvoisesti salaista avainta NIMI"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
msgstr "HUOM: Vanhat oletusarvoiset asetukset löytyvät tiedostosta \"%s\"\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "virhe luotaessa avainrengasta \"%s\": %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgstr ""
"VAROITUS: vastaanottajia (-r) annettu käyttämättä julkisen avaimen salausta\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "virheellinen tiivistealgoritmi \"%s\"\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "virheellinen tiivistealgoritmi \"%s\"\n"
-
msgid "--store [filename]"
msgstr "--store [tiedostonimi]"
msgid "key export failed: %s\n"
msgstr "avaimen vienti epäonnistui: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "avaimen vienti epäonnistui: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "avainpalvelimelta etsiminen epäonnistui: %s\n"
msgid "[self-signature]"
msgstr "[oma-allekirjoitus]"
-msgid "1 bad signature\n"
-msgstr "1 väärä allekirjoitus\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d väärää allekirjoitusta\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 allekirjoitus jätetty tarkistamatta puuttuvan avaimen vuoksi\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d allekirjoitusta jätetty tarkistamatta puuttuvien avainten vuoksi\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 allekirjoitus jätetty tarkistamatta virheen vuoksi\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d väärää allekirjoitusta\n"
+msgstr[1] "%d väärää allekirjoitusta\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d allekirjoitusta jätetty tarkistamatta virheiden vuoksi\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 allekirjoitus jätetty tarkistamatta puuttuvan avaimen vuoksi\n"
+msgstr[1] "1 allekirjoitus jätetty tarkistamatta puuttuvan avaimen vuoksi\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "havaittiin 1 käyttäjätunnus ilman voimassaolevaa oma-allekirjoitusta\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 allekirjoitus jätetty tarkistamatta virheen vuoksi\n"
+msgstr[1] "1 allekirjoitus jätetty tarkistamatta virheen vuoksi\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr ""
+#, fuzzy, c-format
+#| 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] ""
+"havaittiin %d käyttäjätunnusta ilman voimassaolevaa oma-allekirjoitusta\n"
+msgstr[1] ""
"havaittiin %d käyttäjätunnusta ilman voimassaolevaa oma-allekirjoitusta\n"
#, fuzzy
msgid "Really delete this self-signature? (y/N)"
msgstr "Varmastiko poista oma-allekirjoitus? (k/E)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "%d allekirjoitus poistettu.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d allekirjoitusta poistettu.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "%d allekirjoitus poistettu.\n"
+msgstr[1] "%d allekirjoitus poistettu.\n"
msgid "Nothing deleted.\n"
msgstr "Mitään ei poistettu.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Käyttäjätunnus \"%s\" on mitätöity."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Käyttäjätunnus \"%s\" on mitätöity."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Käyttäjätunnus \"%s\" on mitätöity."
+msgstr[1] "Käyttäjätunnus \"%s\" on mitätöity."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Ole hyvä ja korjaa ensin virhe\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Tarvitset salasanan suojaamaan salaista avaintasi.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Ole hyvä ja syötä salasana, tämän on salainen lause \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "salasanaa ei toistettu oikein, yritä uudestaan."
-
-#, c-format
-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 ""
-"Et halunnut salasanaa - tämä on luultavasti *huono* ajatus!\n"
-"Jatketaan silti. Voit vaihtaa salasanaa milloin tahansa\n"
-"tämän ohjelman valitsimella \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Avaimen luonti keskeytetty.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "tiedostoa \"%s\" ei voi luoda: %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "HUOM: salainen avain %08lX vanheni %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "kirjoitan julkisen avaimen kohteeseen \"%s\"\n"
msgid "Really create? (y/N) "
msgstr "Haluatko varmasti luoda? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "avainlohkojen poisto epäonnistui: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "tiedostoa \"%s\" ei voi luoda: %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "HUOM: salainen avain %08lX vanheni %s\n"
-
msgid "never "
msgstr "ei koskaan"
msgid "Signature notation: "
msgstr "Allekirjoitusnotaatio: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 väärä allekirjoitus\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d väärää allekirjoitusta\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d väärää allekirjoitusta\n"
+msgstr[1] "%d väärää allekirjoitusta\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Avainrengas"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "ascii-koodaaminen epäonnistui: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "tarkistetaan avainrengasta \"%s\"\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "käsiteltiin %lu avainta (%lu allekirjoitusta)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "käsiteltiin %lu avainta (%lu allekirjoitusta)\n"
+msgstr[1] "käsiteltiin %lu avainta (%lu allekirjoitusta)\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "käsiteltiin %lu avainta (%lu allekirjoitusta)\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 väärä allekirjoitus\n"
+msgstr[1] "1 väärä allekirjoitus\n"
#, c-format
msgid "%s: keyring created\n"
msgstr ""
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "pyydetään avainta %08lX kohteesta %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "pyydetään avainta %08lX kohteesta %s\n"
+msgstr[1] "pyydetään avainta %08lX kohteesta %s\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "VAROITUS: tilapäistiedostoa (%s) \"%s\" ei voi poistaa: %s\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "pyydetään avainta %08lX kohteesta %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "avainta \"%s\" ei löydy: %s\n"
msgid "requesting key %s from %s\n"
msgstr "pyydetään avainta %08lX kohteesta %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "etsitään \"%s\" HKP-palvelimelta %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "virheelliset vientivalitsimet\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%sallekirjoitus, tiivistealgoritmi %s\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "lukuvirhe: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "lukuvirhe: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: paheksuttava valitsin \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: ohitettu: julkinen avain on jo olemassa\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "yhteys kohteeseen \"%s\" ei onnistu: %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "virheellinen tiivistealgoritmi \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "virheellinen tiivistealgoritmi \"%s\"\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Et määritellyt käyttäjätunnusta. (voit käyttää valitsinta \"-r\")\n"
msgstr ""
"dataa ei ole tallennettu, käytä valitsinta \"--output\" tallentaaksesi\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "virhe luotaessa \"%s\": %s\n"
-
msgid "Detached signature.\n"
msgstr "Erillinen allekirjoitus.\n"
msgstr "Luo tälle avaimelle mitätöintivarmenne? "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Mitätöintivarmenne luotu.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "salaista avainta \"%s\" ei löydy: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "virhe luotaessa avainrengasta \"%s\": %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Luo tälle avaimelle mitätöintivarmenne? "
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n"
+msgstr[1] "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n"
+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] "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n"
+msgstr[1] "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"avain on luotu %lu sekunti tulevaisuudessa (on tapahtunut aikahyppy tai\n"
+"kellon kanssa on ongelmia)\n"
+msgstr[1] ""
"avain on luotu %lu sekunti tulevaisuudessa (on tapahtunut aikahyppy tai\n"
"kellon kanssa on ongelmia)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"avain on luotu %lu sekuntia tulevaisuudessa (on tapahtunut aikahyppy tai\n"
+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] ""
+"avain on luotu %lu sekunti tulevaisuudessa (on tapahtunut aikahyppy tai\n"
+"kellon kanssa on ongelmia)\n"
+msgstr[1] ""
+"avain on luotu %lu sekunti tulevaisuudessa (on tapahtunut aikahyppy tai\n"
"kellon kanssa on ongelmia)\n"
#, fuzzy, c-format
msgstr "syöterivi on yli %d merkkiä pitkä\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "virhe lähettäessä kohteeseen \"%s\": %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Tuetut algoritmit:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "virhe lähettäessä kohteeseen \"%s\": %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "virhe kirjoitettaessa salaiseen avainrenkaaseen \"%s\": %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: virhe kirjoitettaessa hakemistotietuetta: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "virhe luettaessa tiedostoa \"%s\": %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "virhe lähettäessä kohteeseen \"%s\": %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "julkista avainta %08lX ei löydy: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "virhe luettaessa tiedostoa \"%s\": %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "virhe luotaessa salasanaa: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Käytäntö: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "virhe luotaessa salasanaa: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "näytä avaimet"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [tiedostot]|tulosta viestien tiivisteet"
+msgstr[1] "|algo [tiedostot]|tulosta viestien tiivisteet"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "virhe luotaessa salasanaa: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "virhe lähettäessä kohteeseen \"%s\": %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "\"%s\" ei kelpaa pitkänä avaintunnuksena\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "trustdb:n tarkistusta ei tarvita\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "julkista avainta %08lX ei löydy: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "tee --check-trustdb, kiitos\n"
msgid "checking the trustdb\n"
msgstr "tarkistetaan trustdb:tä\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d avainta käsitelty (%d kelpoisuuslaskuria tyhjätty)\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "tähän mennessä käsitelty %lu avainta\n"
+msgstr[1] "tähän mennessä käsitelty %lu avainta\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d avainta käsitelty (%d kelpoisuuslaskuria tyhjätty)\n"
+msgstr[1] "%d avainta käsitelty (%d kelpoisuuslaskuria tyhjätty)\n"
msgid "no ultimately trusted keys found\n"
msgstr "ehdottomasti luotettavia avaimia ei löytynyt\n"
msgstr "ehdottomasti luotettu julkinen avain %08lX ei löytynyt\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "avainlohkojen poisto epäonnistui: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Avaimen luonti epäonnistui: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "Avaimen luonti epäonnistui: %s\n"
+msgstr[1] "Avaimen luonti epäonnistui: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "virhe luotaessa salasanaa: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NIMI|käytä oletusarvoisesti salaista avainta NIMI"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr ""
+#~ "%d allekirjoitusta jätetty tarkistamatta puuttuvien avainten vuoksi\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d allekirjoitusta jätetty tarkistamatta virheiden vuoksi\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr ""
+#~ "havaittiin 1 käyttäjätunnus ilman voimassaolevaa oma-allekirjoitusta\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "%d allekirjoitusta poistettu.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Käyttäjätunnus \"%s\" on mitätöity."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Tarvitset salasanan suojaamaan salaista avaintasi.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Ole hyvä ja syötä salasana, tämän on salainen lause \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "salasanaa ei toistettu oikein, yritä uudestaan."
+
+#~ 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 ""
+#~ "Et halunnut salasanaa - tämä on luultavasti *huono* ajatus!\n"
+#~ "Jatketaan silti. Voit vaihtaa salasanaa milloin tahansa\n"
+#~ "tämän ohjelman valitsimella \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "avainlohkojen poisto epäonnistui: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 väärä allekirjoitus\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "ascii-koodaaminen epäonnistui: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "käsiteltiin %lu avainta (%lu allekirjoitusta)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "pyydetään avainta %08lX kohteesta %s\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "etsitään \"%s\" HKP-palvelimelta %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "avain on luotu %lu sekuntia tulevaisuudessa (on tapahtunut aikahyppy tai\n"
+#~ "kellon kanssa on ongelmia)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "etsitään \"%s\" HKP-palvelimelta %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "virheelliset vientivalitsimet\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "avainpalvelinvirhe"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX luotu: %s vanhenee: %s"
-#~ msgid "Policy: "
-#~ msgstr "Käytäntö: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "avainpalvelimelta ei saa avainta: %s\n"
msgid "Enter passphrase: "
msgstr "Entrez la phrase secrète : "
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "erreur de création du porte-clefs « %s » : %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: "
+msgid "WARNING: %s\n"
+msgstr "Attention : "
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "la carte OpenPGP n'est pas disponible : %s\n"
msgid "remove as much as possible from key during export"
msgstr "supprimer autant que possible de la clef pendant l'exportation"
+msgid " - skipped"
+msgstr " — ignoré"
+
msgid "exporting secret keys not allowed\n"
msgstr "il est interdit d'exporter les clefs secrètes\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "clef %s : matériel de clef sur la carte — ignorée\n"
-msgid " - skipped"
-msgstr " — ignoré"
-
msgid "WARNING: nothing exported\n"
msgstr "Attention : rien n'a été exporté\n"
+#, c-format
+msgid "error creating '%s': %s\n"
+msgstr "erreur de création de « %s » : %s\n"
+
msgid "[User ID not found]"
msgstr "[identité introuvable]"
+#, fuzzy, c-format
+#| msgid "missing argument for option \"%.50s\"\n"
+msgid "(check argument of option '%s')\n"
+msgstr "argument manquant pour l'option « %.50s »\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "erreur de fermeture de %s : %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "erreur de création du porte-clefs « %s » : %s\n"
+
#, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "« %s » automatiquement récupéré par %s\n"
msgstr "clef secrète « %s » introuvable : %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "argument manquant pour l'option « %.50s »\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NOM|utiliser le NOM comme clef secrète par défaut"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NOM|utiliser le NOM comme clef secrète par défaut"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
"La clef incorrecte %s a été rendue valable par\n"
msgstr "Remarque : l'ancien fichier d'options par défaut « %s » a été ignoré\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "l'option « %.50s » est ambiguë\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring '%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "erreur de création du porte-clefs « %s » : %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt est trop ancienne (nécessaire : %s, utilisé : %s)\n"
"Attention : les destinataires (-r) indiqués n'utilisent pas\n"
" de clef publique pour le chiffrement\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "ligne %d : date donnée incorrect\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "ligne %d : date donnée incorrect\n"
-
msgid "--store [filename]"
msgstr "--store [fichier]"
msgid "key export failed: %s\n"
msgstr "échec d'exportation de la clef : %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "échec d'exportation de la clef : %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "échec de recherche au sein du serveur de clefs : %s\n"
msgid "[self-signature]"
msgstr "[autosignature]"
-msgid "1 bad signature\n"
-msgstr "1 mauvaise signature\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d mauvaises signatures\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 signature non vérifiée à cause d'une clef manquante\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signatures non vérifiées à cause de clefs manquantes\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 signature non vérifiée à cause d'une erreur\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d mauvaises signatures\n"
+msgstr[1] "%d mauvaises signatures\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signatures non vérifiées à cause d'erreurs\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 signature non vérifiée à cause d'une clef manquante\n"
+msgstr[1] "1 signature non vérifiée à cause d'une clef manquante\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 identité sans autosignature valable détecté\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 signature non vérifiée à cause d'une erreur\n"
+msgstr[1] "1 signature non vérifiée à cause d'une erreur\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d identités sans autosignature valable détecté\n"
+#, fuzzy, c-format
+#| 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] "%d identités sans autosignature valable détecté\n"
+msgstr[1] "%d identités sans autosignature valable détecté\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr "Faut-il vraiment supprimer cette autosignature ? (o/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "%d signature supprimée.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d signatures supprimées\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "%d signature supprimée.\n"
+msgstr[1] "%d signature supprimée.\n"
msgid "Nothing deleted.\n"
msgstr "Rien n'a été supprimé.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "Identité « %s » compactée : %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Identité « %s » : %d signature supprimée\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Identité « %s » : %d signatures supprimées\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Identité « %s » : %d signature supprimée\n"
+msgstr[1] "Identité « %s » : %d signature supprimée\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Veuillez d'abord corriger l'erreur\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Une phrase secrète est nécessaire pour protéger votre clef secrète.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Veuillez entrer une phrase secrète pour protéger la sauvegarde hors carte de "
-"la nouvelle clef de chiffrement."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr ""
-"la phrase secrète n'a pas été correctement répétée ; veuillez réessayer"
-
-#, c-format
-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 ""
-"Vous ne voulez pas de phrase secrète — c'est sans doute une *mauvaise*\n"
-"idée. C'est possible quand même. Vous pouvez modifier la phrase secrète\n"
-"à tout moment en utilisant ce programme avec l'option « --edit-key ».\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "La génération de clef a été annulée.\n"
#, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "impossible de créer le fichier de sauvegarde « %s » : %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "Remarque : sauvegarde de la clef de la carte dans « %s »\n"
+
+#, c-format
msgid "writing public key to '%s'\n"
msgstr "écriture de la clef publique dans « %s »\n"
msgid "Really create? (y/N) "
msgstr "Faut-il vraiment la créer ? (o/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "impossible de stocker la clef sur la carte : %s\n"
-
-#, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "impossible de créer le fichier de sauvegarde « %s » : %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "Remarque : sauvegarde de la clef de la carte dans « %s »\n"
-
msgid "never "
msgstr "jamais "
msgid "Signature notation: "
msgstr "Notation de signature : "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 mauvaise signature\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d mauvaises signatures\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d mauvaises signatures\n"
+msgstr[1] "%d mauvaises signatures\n"
-#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr "Attention : %lu clefs ignorées en raison de leur grande taille\n"
+#, fuzzy, c-format
+#| msgid "Warning: %lu key(s) skipped due to their large size\n"
+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] "Attention : %lu clefs ignorées en raison de leur grande taille\n"
+msgstr[1] "Attention : %lu clefs ignorées en raison de leur grande taille\n"
msgid "Keyring"
msgstr "Porte-clefs"
msgstr " Nº de série de carte ="
#, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "impossible de renommer « %s » en « %s » : %s\n"
-
-#, c-format
msgid "caching keyring '%s'\n"
msgstr "mise en cache du porte-clefs « %s »\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu clefs mises en cache pour l'instant (%lu signatures)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu clefs mises en cache pour l'instant (%lu signatures)\n"
+msgstr[1] "%lu clefs mises en cache pour l'instant (%lu signatures)\n"
-#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu clefs mises en cache (%lu signatures)\n"
+#, fuzzy, c-format
+#| msgid "flush the cache"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "vider le cache"
+msgstr[1] "vider le cache"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 mauvaise signature\n"
+msgstr[1] "1 mauvaise signature\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "« %s » n'est pas un identifiant de clef : ignoré\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "rafraîchissement d'une clef à partir de %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "rafraîchissement de %d clefs à partir de %s\n"
+msgstr[1] "rafraîchissement de %d clefs à partir de %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
" avec %s : %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "rafraîchissement de %d clefs à partir de %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "clef « %s » introuvable sur le serveur de clefs\n"
msgid "requesting key %s from %s\n"
msgstr "requête de la clef %s sur %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "envoi de la clef %s au serveur %s %s\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "pas d'action pour le serveur de clefs.\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "Remarque : les signatures utilisant l’algorithme %s sont rejetées\n"
+#, fuzzy, c-format
+#| msgid "%s:%u: read error: %s\n"
+msgid "(reported error: %s)\n"
+msgstr "%s : %u : erreur de lecture : %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in '%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "erreur de lecture dans « %s » : %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s : %d : option « %s » déconseillée\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s : ignoré : clef publique déjà présente\n"
+#, fuzzy, c-format
+#| msgid "can't connect to '%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "impossible de se connecter à « %s » : %s\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid date given\n"
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "ligne %d : date donnée incorrect\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid date given\n"
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "ligne %d : date donnée incorrect\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Vous n'avez pas indiqué d'identité (vous pouvez utiliser « -r »).\n"
"les données ne sont pas enregistrées ; utilisez l'option « --output » pour\n"
"les enregistrer\n"
-#, c-format
-msgid "error creating '%s': %s\n"
-msgstr "erreur de création de « %s » : %s\n"
-
msgid "Detached signature.\n"
msgstr "Signature détachée.\n"
msgstr "Ceci est un certificat de révocation pour la clef 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 ""
+
+#, fuzzy
+#| msgid ""
+#| "Use it to revoke this key in case of a compromise or loss of\n"
+#| "the secret key. However, if the secret key is still accessible,\n"
+#| "it is better to generate a new revocation certificate and give\n"
+#| "a reason for the revocation."
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
"Utilisez-le pour révoquer cette clef en cas de compromis ou de\n"
"perte de la clef secrète. Cependant, si la clef secrète est\n"
"encore accessible, créer un nouveau certificat de révocation\n"
"est préférable afin d’indiquer la cause de révocation."
+#, fuzzy
+#| 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 making use of this revocation certificate."
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
"Pour éviter une utilisation accidentelle de ce fichier, un\n"
"deux-points a été inséré avant les cinq tirets suivants.\n"
"d’utiliser ce certificat de révocation."
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Certificat de révocation créé.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "clef secrète « %s » introuvable : %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "erreur de création du porte-clefs « %s » : %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Faut-il créer un certificat de révocation pour cette clef ? (o/N) "
msgstr ""
"Attention : la sous-clef de signature %s a un certificat croisé incorrect\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "la clef publique %s est plus récente de %lu seconde que la signature\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] ""
+"la clef publique %s est plus récente de %lu seconde que la signature\n"
+msgstr[1] ""
+"la clef publique %s est plus récente de %lu seconde que la signature\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr ""
-"la clef publique %s est plus récente de %lu secondes que la signature\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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 clef publique %s est plus récente de %lu seconde que la signature\n"
+msgstr[1] ""
+"la clef publique %s est plus récente de %lu seconde que la signature\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"la clef %s a été créée %lu seconde dans le futur\n"
+"(faille temporelle ou problème d'horloge)\n"
+msgstr[1] ""
"la clef %s a été créée %lu seconde dans le futur\n"
"(faille temporelle ou problème d'horloge)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"la clef %s a été créée %lu secondes dans le futur\n"
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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 clef %s a été créée %lu seconde dans le futur\n"
+"(faille temporelle ou problème d'horloge)\n"
+msgstr[1] ""
+"la clef %s a été créée %lu seconde dans le futur\n"
"(faille temporelle ou problème d'horloge)\n"
#, c-format
msgid "input line longer than %d characters\n"
msgstr "la ligne d'entrée est plus longue que %d caractères\n"
+#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "erreur d'envoi d'options standards : %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "algorithme non pris en charge : %s"
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "erreur d'envoi de données : %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing base64 encoding: %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "erreur d'écriture en encodage base64 : %s\n"
+
+#, fuzzy, c-format
+#| msgid "error initializing reader object: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "erreur d'initialisation de l'objet lecteur : %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening '%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "erreur d'ouverture de « %s » : %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "erreur d'envoi de données : %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "clef publique %s introuvable : %s\n"
+
+#, fuzzy, c-format
+#| msgid "error setting OCSP target: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "erreur de configuration de la cible OCSP : %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting responder ID: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "erreur de lecture de l'identifiant de répondeur : %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "validité : %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "erreur de lecture des options stockées : %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "afficher les clefs"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "indiquer les fonctions de hachage"
+msgstr[1] "indiquer les fonctions de hachage"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "erreur de création d'un tube : %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "erreur d'envoi de données : %s\n"
+
#, c-format
msgid "'%s' is not a valid long keyID\n"
msgstr "« %s » n'est pas un identifiant valable de clef longue\n"
"inutile de mettre à jour la base de confiance avec le modèle de\n"
" confiance « %s »\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "clef publique %s introuvable : %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "veuillez faire un --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "vérification de la base de confiance\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d clefs traitées (%d comptes de validité réinitialisés)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu clefs traitées jusqu'à présent\n"
+msgstr[1] "%lu clefs traitées jusqu'à présent\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d clefs traitées (%d comptes de validité réinitialisés)\n"
+msgstr[1] "%d clefs traitées (%d comptes de validité réinitialisés)\n"
msgid "no ultimately trusted keys found\n"
msgstr "aucune clef de confiance ultime n'a été trouvée\n"
msgstr "la clef publique de la clef de confiance ultime %s est introuvable\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-"%d marginale(s) nécessaire(s), %d complète(s) nécessaire(s),\n"
-" modèle de confiance %s\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "la carte est irrémédiablement bloquée.\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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] ""
+"il reste %d tentatives de code personnel d'administration\n"
+"avant que la carte ne soit irrémédiablement bloquée\n"
+msgstr[1] ""
"il reste %d tentatives de code personnel d'administration\n"
"avant que la carte ne soit irrémédiablement bloquée\n"
msgid "generating key failed\n"
msgstr "échec de génération de la clef\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "la génération de clef est terminé (%d secondes)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "la génération de clef est terminé (%d secondes)\n"
+msgstr[1] "la génération de clef est terminé (%d secondes)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "structure de carte OpenPGP incorrecte (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "ne pas autoriser la réutilisation d'anciennes phrases secrètes"
+#, fuzzy
+#| msgid "|N|set LDAP timeout to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|définir le temps d'expiration de LDAP à N secondes"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NOM|utiliser le NOM comme clef secrète par défaut"
"Vérifier une phrase secrète donnée sur l'entrée standard par rapport à "
"ficmotif\n"
+#, fuzzy
+#~| msgid "option \"%.50s\" is ambiguous\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "l'option « %.50s » est ambiguë\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d signatures non vérifiées à cause de clefs manquantes\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d signatures non vérifiées à cause d'erreurs\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 identité sans autosignature valable détecté\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "%d signatures supprimées\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Identité « %s » : %d signatures supprimées\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Une phrase secrète est nécessaire pour protéger votre clef secrète.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Veuillez entrer une phrase secrète pour protéger la sauvegarde hors carte "
+#~ "de la nouvelle clef de chiffrement."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr ""
+#~ "la phrase secrète n'a pas été correctement répétée ; veuillez réessayer"
+
+#~ 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 ""
+#~ "Vous ne voulez pas de phrase secrète — c'est sans doute une *mauvaise*\n"
+#~ "idée. C'est possible quand même. Vous pouvez modifier la phrase secrète\n"
+#~ "à tout moment en utilisant ce programme avec l'option « --edit-key ».\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "impossible de stocker la clef sur la carte : %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 mauvaise signature\n"
+
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "impossible de renommer « %s » en « %s » : %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu clefs mises en cache (%lu signatures)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "rafraîchissement d'une clef à partir de %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "envoi de la clef %s au serveur %s %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr ""
+#~ "la clef publique %s est plus récente de %lu secondes que la signature\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "la clef %s a été créée %lu secondes dans le futur\n"
+#~ "(faille temporelle ou problème d'horloge)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr ""
+#~ "%d marginale(s) nécessaire(s), %d complète(s) nécessaire(s),\n"
+#~ " modèle de confiance %s\n"
+
#~ msgid "cleared passphrase cached with ID: %s\n"
#~ msgstr "phrase secrète effacée mise en cache avec l'identifiant : %s\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "recherche de « %s » sur %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "pas d'action pour le serveur de clefs.\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr ""
#~ "Attention : le gestionnaire de serveurs de clefs provient d'une\n"
#~ msgid "ERROR: "
#~ msgstr "Erreur : "
-#~ msgid "WARNING: "
-#~ msgstr "Attention : "
-
#~ msgid "... this is a bug (%s:%d:%s)\n"
#~ msgstr "… c'est un bogue (%s : %d : %s)\n"
msgstr "Introduza o contrasinal: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "erro ao crea-lo chaveiro `%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "AVISO: %s fai que se ignore %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "a chave secreta non está dispoñible"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: omitido: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "gravando a chave secreta en `%s'\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "chave %08lX: sinatura da sub-chave nun lugar incorrecto - omitida\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: omitido: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "AVISO: non se exportou nada\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "erro ao crear `%s': %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[Non se atopou o id de usuario]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "opcións de importación non válidas\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "erro lendo `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "erro ao crea-lo chaveiro `%s': %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "erro ao crear `%s': %s\n"
msgstr "non se atopou a chave secreta `%s': %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "opcións de importación non válidas\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NOME|empregar NOME coma chave secreta por defecto"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NOME|empregar NOME coma chave secreta por defecto"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
msgstr "NOTA: ignórase o antigo ficheiro de opcións por defecto `%s'\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "erro ao crea-lo chaveiro `%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgstr ""
"AVISO: deronse destinatarios (-r) sen empregar cifrado de chave pública\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "algoritmo de hash non válido `%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "algoritmo de hash non válido `%s'\n"
-
msgid "--store [filename]"
msgstr "--store [ficheiro]"
msgid "key export failed: %s\n"
msgstr "a exportación da chave fallou: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "a exportación da chave fallou: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "a busca no servidor de chaves fallou fallou: %s\n"
msgid "[self-signature]"
msgstr "[auto-sinatura]"
-msgid "1 bad signature\n"
-msgstr "1 sinatura errónea\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d sinaturas erróneas\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 sinatura non verificada debido a unha chave que falta\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d sinaturas non verificadas debido a chaves que faltan\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 sinatura non verificada debido a un erro\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d sinaturas erróneas\n"
+msgstr[1] "%d sinaturas erróneas\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d sinaturas non verificadas debido a erros\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 sinatura non verificada debido a unha chave que falta\n"
+msgstr[1] "1 sinatura non verificada debido a unha chave que falta\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "detectado 1 ID de usuario sin auto-sinatura válida\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 sinatura non verificada debido a un erro\n"
+msgstr[1] "1 sinatura non verificada debido a un erro\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "detectados %d IDs de usuario sin auto-sinatura válida\n"
+#, fuzzy, c-format
+#| 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] "detectados %d IDs de usuario sin auto-sinatura válida\n"
+msgstr[1] "detectados %d IDs de usuario sin auto-sinatura válida\n"
#, fuzzy
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "¿Realmente quere borrar esta auto-sinatura? (s/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Borrada %d sinatura.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Borradas %d sinaturas.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Borrada %d sinatura.\n"
+msgstr[1] "Borrada %d sinatura.\n"
msgid "Nothing deleted.\n"
msgstr "Non se borrou nada.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "O ID de usuario \"%s\" está revocado."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "O ID de usuario \"%s\" está revocado."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "O ID de usuario \"%s\" está revocado."
+msgstr[1] "O ID de usuario \"%s\" está revocado."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Por favor, corrixa antes o erro\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Necesita un contrasinal para protexe-la súa chave secreta.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Por favor, introduza o contrasinal; esta é unha frase secreta \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "o contrasinal non se repetiu correctamente; ténteo de novo"
-
-#, c-format
-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 quere empregar un contrasinal - ¡é unha idea *moi* mala!\n"
-"Hase facer así de tódolos xeitos; pode cambia-lo contrasinal en calquera\n"
-"momento, empregando este programa coa opción \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Cancelouse a xeración de chaves.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "non se pode crear `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "NOTA: a chave secreta %08lX caducou o %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "gravando a chave pública en `%s'\n"
msgid "Really create? (y/N) "
msgstr "¿Crear realmente? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "fallou o borrado do bloque de chaves: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "non se pode crear `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "NOTA: a chave secreta %08lX caducou o %s\n"
-
msgid "never "
msgstr "nunca "
msgid "Signature notation: "
msgstr "Notación de sinaturas: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 sinatura errónea\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d sinaturas erróneas\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d sinaturas erróneas\n"
+msgstr[1] "%d sinaturas erróneas\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Chaveiro"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "non se puido poñe-la armadura: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "comprobando o chaveiro `%s'\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu chaves comprobadas (%lu sinaturas)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu chaves comprobadas (%lu sinaturas)\n"
+msgstr[1] "%lu chaves comprobadas (%lu sinaturas)\n"
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu chaves comprobadas (%lu sinaturas)\n"
+#| msgid "\t%lu keys updated\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "\t%lu chaves actualizadas\n"
+msgstr[1] "\t%lu chaves actualizadas\n"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 sinatura errónea\n"
+msgstr[1] "1 sinatura errónea\n"
#, c-format
msgid "%s: keyring created\n"
msgstr "%s: non é un ID de chave válido\n"
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "solicitando a chave %08lX de %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "solicitando a chave %08lX de %s\n"
+msgstr[1] "solicitando a chave %08lX de %s\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "AVISO: non se puido borra-lo ficheiro temporal (%s) `%s': %s\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "solicitando a chave %08lX de %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "non se atopou a chave `%s': %s\n"
msgid "requesting key %s from %s\n"
msgstr "solicitando a chave %08lX de %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "buscando \"%s\" no servidor HKP %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "opcións de exportación non válidas\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "Sinatura %s, algoritmo de resumo %s\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "erro de lectura: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "erro de lectura: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: opción a extinguir \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: omitido: a chave pública xa está presente\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "non se puido conectar a `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "algoritmo de hash non válido `%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "algoritmo de hash non válido `%s'\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Non especificou un ID de usuario. (pode empregar \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "os datos non foron gardados; use a opción \"--output\" para gardalos\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "erro ao crear `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Sinatura non adxunta.\n"
msgstr "¿Crear un certificado de revocación para esta sinatura? "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Creouse o certificado de revocación.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "non se atopou a chave secreta `%s': %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "erro ao crea-lo chaveiro `%s': %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "¿Crear un certificado de revocación para esta sinatura? "
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "a chave pública %08lX é %lu segundo máis nova cá sinatura\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "a chave pública %08lX é %lu segundo máis nova cá sinatura\n"
+msgstr[1] "a chave pública %08lX é %lu segundo máis nova cá sinatura\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "a chave pública %08lX é %lu segundos máis nova cá sinatura\n"
+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] "a chave pública %08lX é %lu segundo máis nova cá sinatura\n"
+msgstr[1] "a chave pública %08lX é %lu segundo máis nova cá sinatura\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"creouse a chave %lu segundo no futuro (salto no tempo ou problemas co "
+"reloxo)\n"
+msgstr[1] ""
"creouse a chave %lu segundo no futuro (salto no tempo ou problemas co "
"reloxo)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"creouse a chave %lu segundos no futuro (salto no tempo ou problemas co "
+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] ""
+"creouse a chave %lu segundo no futuro (salto no tempo ou problemas co "
+"reloxo)\n"
+msgstr[1] ""
+"creouse a chave %lu segundo no futuro (salto no tempo ou problemas co "
"reloxo)\n"
#, fuzzy, c-format
msgstr "a liña de entrada contén máis de %d caracteres\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "erro ao enviar a `%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Algoritmos soportados:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "erro ao enviar a `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "erro escribindo no chaveiro secreto `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: erro ao escribi-lo rexistro de directorios: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "erro lendo `%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "erro ao enviar a `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "non se atopou a chave pública %08lX: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "erro lendo `%s': %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "erro ao crea-lo contrasinal: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Normativa: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "erro ao crea-lo contrasinal: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "ve-la lista de chaves"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [ficheiros]|visualizar resumos de mensaxes"
+msgstr[1] "|algo [ficheiros]|visualizar resumos de mensaxes"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "erro ao crea-lo contrasinal: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "erro ao enviar a `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "`%s' non é un ID longo de chave válido\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "non se precisa comproba-la base de datos de confianza\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "non se atopou a chave pública %08lX: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "por favor, execute con --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "comprobando a base de datos de confianza\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "procesáronse %d chaves (marcáronse %d contas de validez)\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu chaves procesadas hasta polo momento\n"
+msgstr[1] "%lu chaves procesadas hasta polo momento\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "procesáronse %d chaves (marcáronse %d contas de validez)\n"
+msgstr[1] "procesáronse %d chaves (marcáronse %d contas de validez)\n"
msgid "no ultimately trusted keys found\n"
msgstr "non se atoparon chaves de confianza absoluta\n"
msgstr "non se atopou a chave pública da clave de confianza absoluta %08lX\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "fallou o borrado do bloque de chaves: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "A xeración da chave fallou: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "A xeración da chave fallou: %s\n"
+msgstr[1] "A xeración da chave fallou: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "erro ao crea-lo contrasinal: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NOME|empregar NOME coma chave secreta por defecto"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d sinaturas non verificadas debido a chaves que faltan\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d sinaturas non verificadas debido a erros\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "detectado 1 ID de usuario sin auto-sinatura válida\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Borradas %d sinaturas.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "O ID de usuario \"%s\" está revocado."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Necesita un contrasinal para protexe-la súa chave secreta.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Por favor, introduza o contrasinal; esta é unha frase secreta \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "o contrasinal non se repetiu correctamente; ténteo de novo"
+
+#~ 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 quere empregar un contrasinal - ¡é unha idea *moi* mala!\n"
+#~ "Hase facer así de tódolos xeitos; pode cambia-lo contrasinal en calquera\n"
+#~ "momento, empregando este programa coa opción \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "fallou o borrado do bloque de chaves: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 sinatura errónea\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "non se puido poñe-la armadura: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu chaves comprobadas (%lu sinaturas)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "solicitando a chave %08lX de %s\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "buscando \"%s\" no servidor HKP %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "a chave pública %08lX é %lu segundos máis nova cá sinatura\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "creouse a chave %lu segundos no futuro (salto no tempo ou problemas co "
+#~ "reloxo)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "buscando \"%s\" no servidor HKP %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "opcións de exportación non válidas\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "erro do servidor de chaves"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX creada: %s caduca: %s"
-#~ msgid "Policy: "
-#~ msgstr "Normativa: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "non se pode obte-la chave do servidor de chaves: %s\n"
#~ msgid "\t%lu due to new pubkeys\n"
#~ msgstr "\t%lu debidos a novas chaves públicas\n"
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu chaves actualizadas\n"
-
#~ msgid "Ooops, no keys\n"
#~ msgstr "Ooops, non hai chaves\n"
msgstr "Írja be a jelszót: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "Hiba a(z) \"%s\" kulcskarika létrehozásakor: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "FIGYELEM: %s hatástalanítja %s-t!\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "titkos kulcs nem áll rendelkezésre"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: kihagyva: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "Írom a titkos kulcsot a %s állományba.\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "%08lX kulcs: Alkulcsaláírás rossz helyen - kihagytam.\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: kihagyva: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "FIGYELEM: Semmit sem exportáltam.\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "Hiba \"%s\" létrehozásakor: %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[ismeretlen kulcs]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "Érvénytelen import opciók!\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "Hiba \"%s\" olvasásakor: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "Hiba a(z) \"%s\" kulcskarika létrehozásakor: %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "Hiba \"%s\" létrehozásakor: %s\n"
msgstr "\"%s\" titkos kulcs nem található: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "Érvénytelen import opciók!\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NÉV|NÉV használata alapértelmezett titkos kulcsként"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NÉV|NÉV használata alapértelmezett titkos kulcsként"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
msgstr "MEGJEGYZÉS: Figyelmen kívül hagytam a régi opciókat (%s).\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "Hiba a(z) \"%s\" kulcskarika létrehozásakor: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgstr ""
"FIGYELEM: Címzett megadva (-r), de nincs nyilvános kulcsú titkosítás!\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "Érvénytelen kivonatoló algoritmus: %s\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "Érvénytelen kivonatoló algoritmus: %s\n"
-
msgid "--store [filename]"
msgstr "--store [fájlnév]"
msgid "key export failed: %s\n"
msgstr "Kulcsexportálás sikertelen: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "Kulcsexportálás sikertelen: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "Keresés a kulcsszerveren sikertelen: %s\n"
msgid "[self-signature]"
msgstr "[önaláírás]"
-msgid "1 bad signature\n"
-msgstr "1 rossz aláírás.\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d rossz aláírás.\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 aláírást nem ellenõriztem hiányzó kulcs miatt.\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d aláírást nem ellenõriztem hiányzó kulcs miatt.\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 aláírást nem ellenõriztem hiba miatt.\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d rossz aláírás.\n"
+msgstr[1] "%d rossz aláírás.\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d aláírást nem ellenõriztem hiba miatt.\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 aláírást nem ellenõriztem hiányzó kulcs miatt.\n"
+msgstr[1] "1 aláírást nem ellenõriztem hiányzó kulcs miatt.\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 felhasználóazonosítót találtam érvényes önaláírás nélkül.\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 aláírást nem ellenõriztem hiba miatt.\n"
+msgstr[1] "1 aláírást nem ellenõriztem hiba miatt.\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d felhasználóazonosítót találtam érvényes önaláírás nélkül.\n"
+#, fuzzy, c-format
+#| 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] "%d felhasználóazonosítót találtam érvényes önaláírás nélkül.\n"
+msgstr[1] "%d felhasználóazonosítót találtam érvényes önaláírás nélkül.\n"
#, fuzzy
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "Valóban törli ezt az önaláírást? (i/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Töröltem %d aláírást.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Töröltem %d aláírást.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Töröltem %d aláírást.\n"
+msgstr[1] "Töröltem %d aláírást.\n"
msgid "Nothing deleted.\n"
msgstr "Nem töröltem semmit.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "\"%s\" felhasználói azonosítót visszavonták."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "\"%s\" felhasználói azonosítót visszavonták."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "\"%s\" felhasználói azonosítót visszavonták."
+msgstr[1] "\"%s\" felhasználói azonosítót visszavonták."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Kérem, elõbb javítsa ki a hibát!\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Most szükség van egy jelszóra (vagy mondatra), amely a titkos kulcsát védi.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Kérem, adja meg a jelszót! Ezt egy titkos mondat. \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "Nem ismételte meg helyesen a jelszót! Próbálja újra!"
-
-#, c-format
-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 ""
-"Ön nem akar jelszót. Ez valószínûleg egy *rossz* ötlet!\n"
-"De azért megcsinálom. Bármikor megváltoztathatja a jelszavát\n"
-"az \"--edit-key\" opcióval.\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Kulcs létrehozása megszakítva.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "Nem tudom létrehozni a(z) \"%s\" állományt: %s.\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "MEGJEGYZÉS: %08lX titkos kulcs %s-kor lejárt.\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "Írom a kulcsot a %s állományba.\n"
msgid "Really create? (y/N) "
msgstr "Valóban létrehozzam? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "A kulcsblokk törlése sikertelen: %s.\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "Nem tudom létrehozni a(z) \"%s\" állományt: %s.\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "MEGJEGYZÉS: %08lX titkos kulcs %s-kor lejárt.\n"
-
msgid "never "
msgstr "soha "
msgid "Signature notation: "
msgstr "Aláírás-jelölés: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 rossz aláírás.\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d rossz aláírás.\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d rossz aláírás.\n"
+msgstr[1] "%d rossz aláírás.\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Kulcskarika"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "Páncélozás nem sikerült: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "Ellenõrzöm a(z) \"%s\" kulcskarikát.\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu kulcsot ellenõriztem (%lu aláírással).\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu kulcsot ellenõriztem (%lu aláírással).\n"
+msgstr[1] "%lu kulcsot ellenõriztem (%lu aláírással).\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu kulcsot ellenõriztem (%lu aláírással).\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 rossz aláírás.\n"
+msgstr[1] "1 rossz aláírás.\n"
#, c-format
msgid "%s: keyring created\n"
msgstr ""
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "Lekérem a %08lX kulcsot a %s kulcsszerverrõl.\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "Lekérem a %08lX kulcsot a %s kulcsszerverrõl.\n"
+msgstr[1] "Lekérem a %08lX kulcsot a %s kulcsszerverrõl.\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
"FIGYELEM: Nem tudom törölni az (\"%s\") átmeneti állományt: \"%s\": %s.\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "Lekérem a %08lX kulcsot a %s kulcsszerverrõl.\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "\"%s\" kulcs nem található: %s\n"
msgid "requesting key %s from %s\n"
msgstr "Lekérem a %08lX kulcsot a %s kulcsszerverrõl.\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "Keresem \"%s\"-t a %s HKP szerveren.\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "Érvénytelen export opciók!\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s aláírás, %s kivonatoló algoritmus.\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "Olvasási hiba: %s.\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "Olvasási hiba: %s.\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: Elavult opció: \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: kihagyva: nyilvános kulcs már szerepel\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "Nem tudok kapcsolódni \"%s\" objektumhoz: %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "Érvénytelen kivonatoló algoritmus: %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "Érvénytelen kivonatoló algoritmus: %s\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr ""
"Nem adott meg felhasználói azonosítót! (Használhatja a \"-r\" opciót.)\n"
msgstr ""
"Az adatot nem mentettem el. Használja az \"--output\" opciót a mentéshez!\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "Hiba \"%s\" létrehozásakor: %s\n"
-
msgid "Detached signature.\n"
msgstr "Különálló aláírás.\n"
msgstr "Csináljunk egy visszavonó igazolást ehhez a kulcshoz? "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Visszavonó igazolás létrehozva.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "\"%s\" titkos kulcs nem található: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "Hiba a(z) \"%s\" kulcskarika létrehozásakor: %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Csináljunk egy visszavonó igazolást ehhez a kulcshoz? "
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "A(z) %08lX nyilvános kulcs %lu másodperccel újabb az aláírásnál!\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "A(z) %08lX nyilvános kulcs %lu másodperccel újabb az aláírásnál!\n"
+msgstr[1] "A(z) %08lX nyilvános kulcs %lu másodperccel újabb az aláírásnál!\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "A(z) %08lX nyilvános kulcs %lu másodperccel újabb az aláírásnál!\n"
+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] "A(z) %08lX nyilvános kulcs %lu másodperccel újabb az aláírásnál!\n"
+msgstr[1] "A(z) %08lX nyilvános kulcs %lu másodperccel újabb az aláírásnál!\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"A kulcs %lu másodperccel a jövõben készült. (Idõugrás vagy óraprobléma.)\n"
+msgstr[1] ""
"A kulcs %lu másodperccel a jövõben készült. (Idõugrás vagy óraprobléma.)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
+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] ""
+"A kulcs %lu másodperccel a jövõben készült. (Idõugrás vagy óraprobléma.)\n"
+msgstr[1] ""
"A kulcs %lu másodperccel a jövõben készült. (Idõugrás vagy óraprobléma.)\n"
#, fuzzy, c-format
msgstr "A bemeneti sor hosszabb, mint %d karakter.\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "Hiba %s-ra/-re küldéskor: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Támogatott algoritmusok:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "Hiba %s-ra/-re küldéskor: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "Hiba a(z) \"%s\" titkoskulcs-karika írásakor: %s.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: Hiba könyvtárrekord írásakor: %s.\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "Hiba \"%s\" olvasásakor: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "Hiba %s-ra/-re küldéskor: %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "A(z) %08lX nyilvános kulcsot nem találom: %s.\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "Hiba \"%s\" olvasásakor: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "Hiba a jelszó létrehozásakor: %s.\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Eljárásmód: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "Hiba a jelszó létrehozásakor: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "kulcsok listázása"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [fájlok]|üzenet kivonatának kiírása"
+msgstr[1] "|algo [fájlok]|üzenet kivonatának kiírása"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "Hiba a jelszó létrehozásakor: %s.\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "Hiba %s-ra/-re küldéskor: %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "\"%s\" nem egy érvényes hosszú kulcsazonosító.\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "Nincs szükség a bizalmi adatbázis ellenõrzésére.\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "A(z) %08lX nyilvános kulcsot nem találom: %s.\n"
-
msgid "please do a --check-trustdb\n"
msgstr "Kérem, hajtson végre egy --check-trustdb parancsot!\n"
msgid "checking the trustdb\n"
msgstr "Ellenõrzöm a bizalmi adatbázist.\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d kulcsot feldolgoztam (%d érvényességszámlálót töröltem)\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "Eddig %lu kulcsot dolgoztam fel.\n"
+msgstr[1] "Eddig %lu kulcsot dolgoztam fel.\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d kulcsot feldolgoztam (%d érvényességszámlálót töröltem)\n"
+msgstr[1] "%d kulcsot feldolgoztam (%d érvényességszámlálót töröltem)\n"
msgid "no ultimately trusted keys found\n"
msgstr "Nem találtam alapvetõen megbízható kulcsot.\n"
msgstr "Nem találom az alapvetõen megbízható %08lX kulcs nyilvános kulcsát!\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "A kulcsblokk törlése sikertelen: %s.\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Kulcsgenerálás sikertelen: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "Kulcsgenerálás sikertelen: %s\n"
+msgstr[1] "Kulcsgenerálás sikertelen: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "Hiba a jelszó létrehozásakor: %s.\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NÉV|NÉV használata alapértelmezett titkos kulcsként"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d aláírást nem ellenõriztem hiányzó kulcs miatt.\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d aláírást nem ellenõriztem hiba miatt.\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 felhasználóazonosítót találtam érvényes önaláírás nélkül.\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Töröltem %d aláírást.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "\"%s\" felhasználói azonosítót visszavonták."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Most szükség van egy jelszóra (vagy mondatra), amely a titkos kulcsát "
+#~ "védi.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Kérem, adja meg a jelszót! Ezt egy titkos mondat. \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "Nem ismételte meg helyesen a jelszót! Próbálja újra!"
+
+#~ 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 ""
+#~ "Ön nem akar jelszót. Ez valószínûleg egy *rossz* ötlet!\n"
+#~ "De azért megcsinálom. Bármikor megváltoztathatja a jelszavát\n"
+#~ "az \"--edit-key\" opcióval.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "A kulcsblokk törlése sikertelen: %s.\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 rossz aláírás.\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "Páncélozás nem sikerült: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu kulcsot ellenõriztem (%lu aláírással).\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "Lekérem a %08lX kulcsot a %s kulcsszerverrõl.\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "Keresem \"%s\"-t a %s HKP szerveren.\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "A(z) %08lX nyilvános kulcs %lu másodperccel újabb az aláírásnál!\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "A kulcs %lu másodperccel a jövõben készült. (Idõugrás vagy óraprobléma.)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "Keresem \"%s\"-t a %s HKP szerveren.\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "Érvénytelen export opciók!\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "kulcsszerverhiba"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX létrehozva: %s lejár: %s"
-#~ msgid "Policy: "
-#~ msgstr "Eljárásmód: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "Nem tudom lehívni a kulcsot a %s kulcsszerverrõl.\n"
msgstr "Masukkan passphrase: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "kesalahan menulis keyring `%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "PERINGATAN: %s menimpa %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "kunci rahasia tidak tersedia"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: dilewati: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "menulis kunci rahasia ke `%s'\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "kunci %08lX: signature subkey di tempat yang salah - dilewati\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: dilewati: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "PERINGATAN: tidak ada yang diekspor\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "kesalahan penciptaan : `%s': %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[User id tidak ditemukan]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "opsi impor tidak valid\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "kesalahan membaca `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "kesalahan menulis keyring `%s': %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "kesalahan penciptaan : `%s': %s\n"
msgstr "kunci rahasia `%s' tidak ditemukan: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "opsi impor tidak valid\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NAMA|gunakan NAMA sebagai kunci rahasia baku"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NAMA|gunakan NAMA sebagai kunci rahasia baku"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "kunci tidak valid %08lX dibuat valid oleh --allow-non-selfsigned-uid\n"
msgstr "CATATAN: file pilihan baku lama `%s' diabaikan\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "kesalahan menulis keyring `%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
"Peringatan: penerima yang disebutkan (-r) tanpa menggunakan enkripsi public "
"key \n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "algoritma hash tidak valid `%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "algoritma hash tidak valid `%s'\n"
-
msgid "--store [filename]"
msgstr "--store [namafile]"
msgid "key export failed: %s\n"
msgstr "Ekspor kunci gagal: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "Ekspor kunci gagal: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "Pencarian keyserver gagal: %s\n"
msgid "[self-signature]"
msgstr "[self-signature]"
-msgid "1 bad signature\n"
-msgstr "1 signature yang buruk\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d signature yang buruk\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 signature tidak diperiksa karena tidak ada kunci\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signature tidak diperiksa karena tidak ada kunci\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 signature tidak diperiksa karena kesalahan\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d signature yang buruk\n"
+msgstr[1] "%d signature yang buruk\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signature tidak diperiksa karena ada kesalahan\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 signature tidak diperiksa karena tidak ada kunci\n"
+msgstr[1] "1 signature tidak diperiksa karena tidak ada kunci\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "terdeteksi 1 ID user tanpa self-signature yang valid\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 signature tidak diperiksa karena kesalahan\n"
+msgstr[1] "1 signature tidak diperiksa karena kesalahan\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "terdeteksi ID %d user tanpa self-signature yang valid\n"
+#, fuzzy, c-format
+#| 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] "terdeteksi ID %d user tanpa self-signature yang valid\n"
+msgstr[1] "terdeteksi ID %d user tanpa self-signature yang valid\n"
#, fuzzy
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "Yakin ingin menghapus self-signature ini? (y/T)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Menghapus %d signature.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Menghapus %d signature.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Menghapus %d signature.\n"
+msgstr[1] "Menghapus %d signature.\n"
msgid "Nothing deleted.\n"
msgstr "Tidak ada yang dihapus.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "User ID \"%s\" dibatalkan."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "User ID \"%s\" dibatalkan."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "User ID \"%s\" dibatalkan."
+msgstr[1] "User ID \"%s\" dibatalkan."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Silakan perbaiki kesalahan ini dulu\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Anda perlu sebuah passphrase untuk melindungi kunci rahasia anda.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Silakan masukkan passphrase; ini kalimat rahasia\n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "passphrase tidak diulang dengan benar; coba lagi"
-
-#, c-format
-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 ""
-"Anda tidak ingin sebuah passphrase - ini mungkin ide yang *buruk*!\n"
-"Namun saya akan tetap lakukan. Anda dapat merubah passphrase anda setiap "
-"saat,\n"
-"menggunakan program ini dengan pilihan \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Pembuatan kunci dibatalkan.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "tidak dapat membuat %s: %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "CATATAN: kunci pribadi %08lX berakhir pada %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "menulis kunci publik ke `%s'\n"
msgid "Really create? (y/N) "
msgstr "Ingin diciptakan? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "gagal menghapus keyblok: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "tidak dapat membuat %s: %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "CATATAN: kunci pribadi %08lX berakhir pada %s\n"
-
msgid "never "
msgstr "tidak pernah..."
msgid "Signature notation: "
msgstr "Notasi signature: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 signature yang buruk\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d signature yang buruk\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d signature yang buruk\n"
+msgstr[1] "%d signature yang buruk\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Keyring"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "gagal enarmoring: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "memeriksa keyring `%s'\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu kunci telah diperiksa (%lu signature)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu kunci telah diperiksa (%lu signature)\n"
+msgstr[1] "%lu kunci telah diperiksa (%lu signature)\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu kunci telah diperiksa (%lu signature)\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 signature yang buruk\n"
+msgstr[1] "1 signature yang buruk\n"
#, c-format
msgid "%s: keyring created\n"
msgstr ""
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "meminta kunci %08lX dari %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "meminta kunci %08lX dari %s\n"
+msgstr[1] "meminta kunci %08lX dari %s\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "PERINGATAN: tidak dapat menghapus file temp (%s) `%s': %s\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "meminta kunci %08lX dari %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "kunci '%s' tidak ditemukan: %s\n"
msgid "requesting key %s from %s\n"
msgstr "meminta kunci %08lX dari %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "mencari \"%s\" dari server HKP %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "opsi ekspor tidak valid\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s signature, algoritma digest %s\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "kesalahan pembacaan: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "kesalahan pembacaan: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: opsi tidak digunakan lagi \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: dilewati: kunci publik telah ada\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "tidak dapat terkoneksi ke `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "algoritma hash tidak valid `%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "algoritma hash tidak valid `%s'\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Anda tidak menspesifikasikan ID user. (anda dapat gunakan \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "data tidak disimpan; gunakan pilihan \"--output\" untuk menyimpannya\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "kesalahan penciptaan : `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Menghapus signature.\n"
msgstr "Buat sertifikat pembatalan untuk kunci ini?"
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Sertifikat pembatalan tercipta.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "kunci rahasia `%s' tidak ditemukan: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "kesalahan menulis keyring `%s': %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Buat sertifikat pembatalan untuk kunci ini?"
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n"
+msgstr[1] "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n"
+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] "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n"
+msgstr[1] "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n"
+msgstr[1] ""
"kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
+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] ""
+"kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n"
+msgstr[1] ""
"kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n"
#, fuzzy, c-format
msgstr "baris input lebih dari %d karakter\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "kesalahan mengirim ke `%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Algoritma yang didukung:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "kesalahan mengirim ke `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "kesalahan menulis keyring rahasia `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: kesalahan menulis dir record: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "kesalahan membaca `%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "kesalahan mengirim ke `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "kunci publik %08lX tidak ditemukan: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "kesalahan membaca `%s': %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "kesalahan penciptaan passphrase: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Kebijakan: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "kesalahan penciptaan passphrase: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "tampilkan kunci"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [file]|cetak digest pesan"
+msgstr[1] "|algo [file]|cetak digest pesan"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "kesalahan penciptaan passphrase: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "kesalahan mengirim ke `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "'%s' bukanlah keyID panjang yang valid\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "tidak perlu memeriksa trustdb\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "kunci publik %08lX tidak ditemukan: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "lakukanlah --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "memeriksa trustdb\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d kunci diproses (%d hitungan validitas dihapus)\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu kunci telah diproses\n"
+msgstr[1] "%lu kunci telah diproses\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d kunci diproses (%d hitungan validitas dihapus)\n"
+msgstr[1] "%d kunci diproses (%d hitungan validitas dihapus)\n"
msgid "no ultimately trusted keys found\n"
msgstr "tidak ditemukan kunci yang benar-benar terpercaya\n"
msgstr "kunci publik yang sangat terpercaya %08lX tidak ditemukan\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "gagal menghapus keyblok: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Pembuatan kunci gagal: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "Pembuatan kunci gagal: %s\n"
+msgstr[1] "Pembuatan kunci gagal: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "kesalahan penciptaan passphrase: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NAMA|gunakan NAMA sebagai kunci rahasia baku"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d signature tidak diperiksa karena tidak ada kunci\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d signature tidak diperiksa karena ada kesalahan\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "terdeteksi 1 ID user tanpa self-signature yang valid\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Menghapus %d signature.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "User ID \"%s\" dibatalkan."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Anda perlu sebuah passphrase untuk melindungi kunci rahasia anda.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Silakan masukkan passphrase; ini kalimat rahasia\n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "passphrase tidak diulang dengan benar; coba lagi"
+
+#~ 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 ""
+#~ "Anda tidak ingin sebuah passphrase - ini mungkin ide yang *buruk*!\n"
+#~ "Namun saya akan tetap lakukan. Anda dapat merubah passphrase anda setiap "
+#~ "saat,\n"
+#~ "menggunakan program ini dengan pilihan \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "gagal menghapus keyblok: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 signature yang buruk\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "gagal enarmoring: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu kunci telah diperiksa (%lu signature)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "meminta kunci %08lX dari %s\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "mencari \"%s\" dari server HKP %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau "
+#~ "jam)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "mencari \"%s\" dari server HKP %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "opsi ekspor tidak valid\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "kesalahan keyserver"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX diciptakan: %s berakhir: %s"
-#~ msgid "Policy: "
-#~ msgstr "Kebijakan: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "tidak dapat memperoleh kunci keyserver: %s\n"
msgstr "Inserisci la passphrase: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "errore creando il portachiavi `%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "ATTENZIONE: %s ha la precedenza su %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "la chiave segreta non è disponibile"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: saltata: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "scrittura della chiave segreta in `%s'\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "chiave %08lX: firma della subchiave nel posto sbagliato - saltata\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: saltata: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "ATTENZIONE: non è stato esportato nulla\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "errore creando `%s': %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[User ID non trovato]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "opzioni di importazione non valide\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "errore leggendo `%s': %s\n"
+
+#, fuzzy, c-format
+#| 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, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "errore creando `%s': %s\n"
msgstr "chiave segreta `%s' non trovata: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "opzioni di importazione non valide\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NOME|usa NOME come chiave segreta predefinita"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NOME|usa NOME come chiave segreta predefinita"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, 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"
"NOTA: il vecchio file `%s' con le opzioni predefinite è stato ignorato\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
"ATTENZIONE: sono stati indicati dei destinatari (-r) senza usare la\n"
"crittografia a chiave pubblica\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "algoritmo di hash non valido `%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "algoritmo di hash non valido `%s'\n"
-
msgid "--store [filename]"
msgstr "--store [nomefile]"
msgid "key export failed: %s\n"
msgstr "esportazione della chiave fallita: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "esportazione della chiave fallita: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "ricerca nel keyserver fallita: %s\n"
msgid "[self-signature]"
msgstr "[autofirma]"
-msgid "1 bad signature\n"
-msgstr "una firma non corretta\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d firme non corrette\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "una firma non controllata per mancanza della chiave\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d firme non controllate per mancanza delle chiavi\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "una firma non controllata a causa di un errore\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+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"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d firme non controllate a causa di errori\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+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"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Trovato un user ID senza autofirma valida\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+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"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "Trovati %d user ID senza autofirme valide\n"
+#, fuzzy, c-format
+#| 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"
#, fuzzy
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "Cancellare davvero questa autofirma? (s/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Cancellata %d firma.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Cancellate %d firme.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Cancellata %d firma.\n"
+msgstr[1] "Cancellata %d firma.\n"
msgid "Nothing deleted.\n"
msgstr "Non è stato cancellato nulla.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "L'user ID \"%s\" è stato revocato."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "L'user ID \"%s\" è stato revocato."
+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."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Per favore correggi prima l'errore\n"
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"
-
-#, c-format
-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"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Generazione della chiave annullata.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "impossibile creare `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "NOTA: chiave %08lX scaduta il %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "scrittura della chiave pubblica in `%s'\n"
msgid "Really create? (y/N) "
msgstr "Crea davvero? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "impossibile creare `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "NOTA: chiave %08lX scaduta il %s\n"
-
msgid "never "
msgstr "mai "
msgid "Signature notation: "
msgstr "Annotazione della firma: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "una firma non corretta\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d firme non corrette\n"
+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"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Portachiavi"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "controllo il portachiavi `%s'\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "Sono state controllate %lu chiavi (%lu firme)\n"
+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[1] "Sono state controllate %lu chiavi (%lu firme)\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "Sono state controllate %lu chiavi (%lu firme)\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "una firma non corretta\n"
+msgstr[1] "una firma non corretta\n"
#, c-format
msgid "%s: keyring created\n"
msgstr ""
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "richiedo la chiave %08lX a %s\n"
+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"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "richiedo la chiave %08lX a %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "chiave `%s' non trovata: %s\n"
msgid "requesting key %s from %s\n"
msgstr "richiedo la chiave %08lX a %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "cerco \"%s\" sul server HKP %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "opzioni di esportazione non valide\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "Firma %s, algoritmo di digest %s\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "errore di lettura: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "errore di lettura: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d \"%s\" è una opzione deprecata\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"
+msgid "can't encrypt to '%s'\n"
+msgstr "impossibile connettersi a `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "algoritmo di hash non valido `%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "algoritmo di hash non valido `%s'\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"
msgstr ""
"i dati non sono stati salvati; usa l'opzione \"--output\" per salvarli\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "errore creando `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Firma separata.\n"
msgstr "Creare un certificato di revoca per questa chiave? "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Certificato di revoca creato.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "chiave segreta `%s' non trovata: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "errore creando il portachiavi `%s': %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Creare un certificato di revoca per questa chiave? "
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "la chiave pubblica %08lX è più recente della firma di %lu secondo\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"
#, fuzzy, c-format
-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"
+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"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+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"
+msgstr[1] ""
"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n"
"con l'orologio)\n"
#, fuzzy, c-format
-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"
+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"
+msgstr[1] ""
+"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n"
"con l'orologio)\n"
#, fuzzy, c-format
msgstr "linea di input più lunga di %d caratteri\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "errore leggendo `%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Algoritmi gestiti:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "errore leggendo `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: errore durante la scrittura del dir record: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "errore leggendo `%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "errore leggendo `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "chiave pubblica %08lX non trovata: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "errore leggendo `%s': %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "errore nella creazione della passhprase: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Policy: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "errore nella creazione della passhprase: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "elenca le chiavi"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+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"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "errore nella creazione della passhprase: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "errore leggendo `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "`%s' non è un key ID lungo valido\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "non è necessario un controllo del trustdb\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "chiave pubblica %08lX non trovata: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "per favore usa --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "controllo il trustdb\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d chiavi processate (%d conteggi di validità azzerati)\n"
+#, fuzzy, 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"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+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"
msgid "no ultimately trusted keys found\n"
msgstr "non è stata trovata alcuna chiave definitivamente affidabile\n"
msgstr "chiave pubblica definitivamente affidabile %08lX non trovata\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "cancellazione del keyblock fallita: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Generazione della chiave fallita: %s\n"
+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"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "errore nella creazione della passhprase: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NOME|usa NOME come chiave segreta predefinita"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ 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"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Cancellate %d firme.\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 "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "creazione dell'armatura fallita: %s\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 "cerco \"%s\" sul server HKP %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "opzioni di esportazione non valide\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "errore del keyserver"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX creata: %s scade: %s"
-#~ msgid "Policy: "
-#~ msgstr "Policy: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "impossibile scaricare la chiave dal keyserver: %s\n"
#
msgid ""
msgstr ""
-"Project-Id-Version: gnupg 2.1.9\n"
+"Project-Id-Version: gnupg 2.1.10\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2015-10-13 11:32+0900\n"
+"PO-Revision-Date: 2015-12-21 21:21+0900\n"
"Last-Translator: NIIBE Yutaka <gniibe@fsij.org>\n"
"Language-Team: none\n"
"Language: ja\n"
msgstr "署名が利用可能です"
msgid "Parsing data succeeded"
-msgstr "データのパーズに成功しました"
+msgstr "データの構文解析に成功しました"
#, c-format
msgid "bad data hash algorithm: %s"
msgid "Enter passphrase: "
msgstr "パスフレーズを入力: "
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "鍵リング'%s'の作成エラー: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "*警告*: %sは%sより優先\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "OpenPGPカードが利用できません: %s\n"
msgid "error reading keyblock: %s\n"
msgstr "鍵ブロックの読み込みエラー: %s\n"
-#, fuzzy, c-format
-#| msgid "key \"%s\" not found: %s\n"
+#, c-format
msgid "key \"%s\" not found\n"
-msgstr "鍵\"%s\"が見つかりません: %s\n"
+msgstr "鍵\"%s\"が見つかりません\n"
msgid "(unless you specify the key by fingerprint)\n"
msgstr "(フィンガー・プリントで鍵を指定してない限り)\n"
msgstr "鍵"
msgid "subkey"
-msgstr "サブ鍵: "
+msgstr "副鍵: "
#, c-format
msgid "deleting keyblock failed: %s\n"
msgid "remove as much as possible from key during export"
msgstr "エクスポートの際、できるだけ除去する"
+msgid " - skipped"
+msgstr " - スキップされました"
+
msgid "exporting secret keys not allowed\n"
msgstr "秘密鍵のエクスポートは認められません\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "鍵%s: 鍵はカード上にあります - スキップします\n"
-msgid " - skipped"
-msgstr " - スキップされました"
-
msgid "WARNING: nothing exported\n"
msgstr "*警告*: 何もエクスポートされていません\n"
+#, c-format
+msgid "error creating '%s': %s\n"
+msgstr "'%s'の作成エラー: %s\n"
+
msgid "[User ID not found]"
msgstr "[ユーザIDが見つかりません]"
#, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "(オプション'%s'の引数を確認ください)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Warning: value '%s' for option '%s' should be a long key ID or a "
+#| "fingerprint\n"
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+"警告: 値'%s'(オプション'%s'に対する)は長い鍵IDかフィンガープリントであるべき"
+"です。\n"
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "'%s'でクローズのエラー: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error searching the keyring: %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "鍵リング探索エラー: %s\n"
+
+#, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "'%s'を %s から自動取得\n"
msgstr "秘密鍵\"%s\"が見つかりません: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "ã\82ªã\83\97ã\82·ã\83§ã\83³\"%.50s\"ã\81«å¼\95æ\95°ã\81\8cã\81\82ã\82\8aã\81¾ã\81\9bã\82\93\n"
+#| msgid "using \"%s\" as default secret key\n"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "ã\83\87ã\83\95ã\82©ã\83«ã\83\88ã\81®ç§\98å¯\86é\8dµã\81¨ã\81\97ã\81¦\"%s\"ã\82\92ç\94¨ã\81\84ã\81¾ã\81\99\n"
#, fuzzy, c-format
-#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
-msgstr "|NAME|デフォルトの秘密鍵としてNAMEを用いる"
+#| msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
+msgstr "デフォルトの秘密鍵として\"%s\"を用います\n"
+
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "サーバ・モードで実行"
msgid "|VALUE|set the TOFU policy for a key (good, unknown, bad, ask, auto)"
-msgstr ""
+msgstr "|VALUE|TOFUポリシーを鍵に設定する(good, unknown, bad, ask, auto)"
msgid "create ascii armored output"
msgstr "ASCII形式の外装を作成"
msgid "show expiration dates during signature listings"
msgstr "署名の一覧時に有効期限の日付を表示する"
-#, fuzzy
-#| msgid "Available keys:\n"
msgid "available TOFU policies:\n"
-msgstr "利用可能な鍵:\n"
+msgstr "利用可能なTOFUポリシー:\n"
-#, fuzzy, c-format
-#| msgid "unknown option '%s'\n"
+#, c-format
msgid "unknown TOFU policy '%s'\n"
-msgstr "不明のオプション'%s'\n"
+msgstr "不明のTOFUポリシー'%s'\n"
msgid "(use \"help\" to list choices)\n"
-msgstr ""
+msgstr "(選択肢の一覧には\"help\"を使ってください)\n"
-#, fuzzy, c-format
-#| msgid "unknown command '%s'\n"
+#, c-format
msgid "unknown TOFU DB format '%s'\n"
-msgstr "不明のコマンド'%s'\n"
+msgstr "不明のTOFU DBフォーマット'%s'\n"
#, c-format
msgid "Note: old default options file '%s' ignored\n"
msgstr "*注意*: 以前デフォルトだったオプション・ファイル'%s'は、無視されます\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "オプション\"%.50s\"はあいまいです\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring '%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "鍵リング'%s'の作成エラー: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt が古すぎます (必要 %s, 現在 %s)\n"
msgid "WARNING: recipients (-r) given without using public key encryption\n"
msgstr "*警告*: 公開鍵暗号を使わずに、受取人 (-r) を指定しています\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "行 %d: 無効な日付が与えられました\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "行 %d: 無効な日付が与えられました\n"
-
msgid "--store [filename]"
msgstr "--store [ファイル名]"
msgid "key export failed: %s\n"
msgstr "鍵のエクスポートに失敗しました: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "鍵のエクスポートに失敗しました: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "鍵サーバの検索に失敗しました: %s\n"
msgid "invalid hash algorithm '%s'\n"
msgstr "無効なハッシュ・アルゴリズム'%s'です\n"
-#, fuzzy, c-format
-#| msgid "error loading certificate '%s': %s\n"
+#, c-format
msgid "error parsing key specification '%s': %s\n"
-msgstr "証明書'%s'の読み込みエラー: %s\n"
+msgstr "鍵指定'%s'の構文解析エラー: %s\n"
#, c-format
msgid "'%s' does not appear to be a valid key ID, fingerprint or keygrip\n"
-msgstr ""
+msgstr "'%s'は有効な鍵ID, フィンガープリント、keygripではないようです。\n"
msgid "[filename]"
msgstr "[ファイル名]"
#. created again.
#, c-format
msgid "To migrate '%s', with each smartcard, run: %s\n"
-msgstr ""
+msgstr "'%s'の移行には、スマードカードそれぞれで、以下を実行してください: %s\n"
#, c-format
msgid "key %s: no public key - can't apply revocation certificate\n"
msgid "keyblock resource '%s': %s\n"
msgstr "keyblock リソース'%s': %s\n"
-#, fuzzy, c-format
-#| msgid "error opening '%s': %s\n"
+#, c-format
msgid "error opening key DB: %s\n"
-msgstr "'%s'を開く際、エラー: %s\n"
+msgstr "鍵DBを開く際のエラー: %s\n"
#, c-format
msgid "failed to rebuild keyring cache: %s\n"
msgid "[self-signature]"
msgstr "[自己署名]"
-msgid "1 bad signature\n"
-msgstr "不正な署名1個\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "不正な署名%d個\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "鍵がないため1個の署名を検査しません\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "鍵がないため%d個の署名を検査しません\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "エラーのため1個の署名を検査しません\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "不正な署名%d個\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "エラーのため%d個の署名を検査しません\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "鍵がないため1個の署名を検査しません\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "有効な自己署名のないユーザIDを1個検出\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "エラーのため1個の署名を検査しません\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "有効な自己署名のないユーザIDを%d個検出\n"
+#, fuzzy, c-format
+#| 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] "有効な自己署名のないユーザIDを%d個検出\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
#, c-format
msgid "Skipping user ID \"%s\", which is not a text ID.\n"
-msgstr ""
+msgstr "ユーザID\"%s\"をスキップします、テキストのIDではありません。\n"
#, c-format
msgid "User ID \"%s\" is revoked."
msgstr "使えないユーザIDをコンパクトにし、すべての署名を鍵から除去"
msgid "Secret key is available.\n"
-msgstr "秘密鍵が使用できます。\n"
+msgstr "秘密鍵が利用できます。\n"
msgid "Need the secret key to do this.\n"
msgstr "この実行には秘密鍵がいります。\n"
msgid "Really sign all user IDs? (y/N) "
msgstr "本当に全ユーザIDに署名しますか? (y/N) "
-#, fuzzy
-#| msgid "Really sign all user IDs? (y/N) "
msgid "Really sign all text user IDs? (y/N) "
-msgstr "本当に全ユーザIDに署名しますか? (y/N) "
+msgstr "æ\9c¬å½\93ã\81«å\85¨ã\81¦ã\81®ã\83\86ã\82ã\82¹ã\83\88ã\83¦ã\83¼ã\82¶IDã\81«ç½²å\90\8dã\81\97ã\81¾ã\81\99ã\81\8b? (y/N) "
msgid "Hint: Select the user IDs to sign\n"
msgstr "ヒント: まず署名するユーザIDを選択します\n"
" ユーザIDが主になると仮定する場合があります。\n"
msgid "WARNING: Your encryption subkey expires soon.\n"
-msgstr "*警告*: あなたの暗号サブ鍵はもうすぐ期限切れとなります。\n"
+msgstr "*警告*: あなたの暗号副鍵はもうすぐ期限切れとなります。\n"
msgid "You may want to change its expiration date too.\n"
msgstr "その有効期限も変更したいでしょう\n"
msgid "Really delete this self-signature? (y/N)"
msgstr "この自己署名を本当に削除しますか? (y/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "%d個の署名を削除しました。\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d個の署名を削除しました。\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "%d個の署名を削除しました。\n"
msgid "Nothing deleted.\n"
msgstr "何も削除していません。\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "ユーザID \"%s\" は、コンパクトになりました: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "ユーザID \"%s\": %d の署名が除去されました\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "ユーザID \"%s\": %d の署名が除去されました\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "ユーザID \"%s\": %d の署名が除去されました\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "本当にこの鍵を指名失効者に任命しますか? (y/N) "
-#, fuzzy
-#| msgid ""
-#| "Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
-msgstr "本当にこの鍵を指名失効者に任命しますか? (y/N) "
+msgstr "本当に複数の副鍵の失効期限を変更しますか? (y/N) "
msgid "Changing expiration time for a subkey.\n"
msgstr "副鍵の有効期限を変更します。\n"
msgid "No user ID with hash %s\n"
msgstr "ハッシュ%sのユーザIDはありません\n"
-#, fuzzy, c-format
-#| msgid "No subkey with index %d\n"
+#, c-format
msgid "No subkey with key ID '%s'.\n"
-msgstr "%d番の副鍵はありません\n"
+msgstr "鍵ID'%s'の副鍵はありません\n"
#, c-format
msgid "No subkey with index %d\n"
#, c-format
msgid "The characters '%s' and '%s' may not appear in name\n"
-msgstr ""
+msgstr "キャラクタ'%s'と'%s'は名前に使えません\n"
msgid "Name may not start with a digit\n"
msgstr "名前を数字で始めてはいけません\n"
msgstr "まずエラーを修正してください\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"秘密鍵を保護するためにパスフレーズがいります。\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"パスフレーズを入力してください。これは新しく作られる暗号化鍵のカード外のバッ"
-"クアップを保護するものです。"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "パスフレーズをちゃんと繰り返していません。再入力してください"
-
-#, c-format
-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 ""
-"パスフレーズを必要としないようですが、おそらくそれは良くない考えです!\n"
-"続けますが、パスフレーズを設定することを検討ください。パスフレーズは、\n"
-"このプログラムの\"--edit-key\"オプションでいつでも変更できます。\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "鍵の生成が取り消されました。\n"
#, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "バックアップ・ファイル'%s'が作成できません: %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "*注意*: カード鍵のバックアップが'%s'へ保存されます\n"
+
+#, c-format
msgid "writing public key to '%s'\n"
msgstr "'%s'へ公開鍵を書き込みます\n"
msgid "Really create? (y/N) "
msgstr "本当に作成しますか? (y/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "カードへの鍵の保管に失敗しました: %s\n"
-
-#, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "バックアップ・ファイル'%s'が作成できません: %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "*注意*: カード鍵のバックアップが'%s'へ保存されます\n"
-
msgid "never "
msgstr "無期限 "
msgid "Signature notation: "
msgstr "署名注釈: "
-msgid "1 good signature\n"
-msgstr "正しい署名1個\n"
-
-#, c-format
-msgid "%d good signatures\n"
-msgstr "正しい署名%d個\n"
+#, fuzzy, c-format
+#| msgid "%d good signatures\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "正しい署名%d個\n"
-#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr "*警告*: %lu 鍵がその大きさのためスキップされました\n"
+#, fuzzy, c-format
+#| msgid "Warning: %lu key(s) skipped due to their large size\n"
+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] "*警告*: %lu 鍵がその大きさのためスキップされました\n"
msgid "Keyring"
msgstr "鍵リング"
msgstr " カードシリアル番号 ="
#, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "'%s'から'%s'へ名前変更に失敗: %s\n"
-
-#, c-format
msgid "caching keyring '%s'\n"
msgstr "鍵リング'%s'をキャッシュします\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu個の鍵までキャッシュ済 (%lu個の署名)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu個の鍵までキャッシュ済 (%lu個の署名)\n"
-#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu個の鍵をキャッシュ済 (%lu個の署名)\n"
+#, fuzzy, c-format
+#| msgid "flush the cache"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "キャッシュをフラッシュします"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "不正な署名1個\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "\"%s\"鍵IDではありません: スキップします\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "1本の鍵を%sから更新\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "%d本の鍵を%sから更新\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "*警告*: 鍵%sを%s経由で更新できません: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "%d本の鍵を%sから更新\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "鍵\"%s\"が鍵サーバに見つかりません\n"
msgid "requesting key %s from %s\n"
msgstr "鍵%sを%sに要求\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "鍵%sを%sサーバ%sへ送信\n"
+#, fuzzy
+#| msgid "invalid keyserver options\n"
+msgid "no keyserver known\n"
+msgstr "無効な鍵サーバ・オプションです\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "注意: アルゴリズム %s を用いた署名は拒否されました\n"
+#, fuzzy, c-format
+#| msgid "%s:%u: read error: %s\n"
+msgid "(reported error: %s)\n"
+msgstr "%s:%u: 読み込みエラー: %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in '%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "'%s'で読み込みエラー: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: 廃止されたオプション\"%s\"\n"
msgid "ECDSA public key is expected to be in SEC encoding multiple of 8 bits\n"
msgstr "ECDSAの公開鍵は8ビットの倍数のSECエンコーディングを期待します\n"
-#, fuzzy, c-format
-#| msgid "Unknown signature type '%s'\n"
+#, c-format
msgid "unknown weak digest '%s'\n"
-msgstr "不明の署名タイプ'%s'\n"
+msgstr "不明の弱いダイジェスト'%s'\n"
#, c-format
msgid "File '%s' exists. "
msgid "Please enter the passphrase to export the OpenPGP secret subkey:"
msgstr ""
-"OpenPGPの秘密サブ鍵をエクスポートするためにパスフレーズを入力してください:"
+"OpenPGPの秘密副鍵をエクスポートするためにパスフレーズを入力してください:"
msgid "Please enter the passphrase to export the OpenPGP secret key:"
msgstr "OpenPGPの秘密鍵をエクスポートするためにパスフレーズを入力してください:"
msgid "Do you really want to permanently delete the OpenPGP secret subkey key:"
-msgstr "選択したOpenPGPサブ鍵を本当に永久に削除しますか? (y/N) "
+msgstr "選択したOpenPGP副鍵を本当に永久に削除しますか? (y/N) "
msgid "Do you really want to permanently delete the OpenPGP secret key:"
msgstr "選択したOpenPGP秘密鍵を本当に永久に削除しますか? (y/N) "
msgid "%s: skipped: public key already present\n"
msgstr "%s: スキップ: 公開鍵はもうあります\n"
+#, fuzzy, c-format
+#| msgid "can't connect to '%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "'%s'へ接続できません: %s\n"
+
+#, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr ""
+"オプション'%s'が与えられましたが、有効なデフォルト鍵が与えられていません\n"
+
+#, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "オプション'%s'が与えられましたが、オプション'%s'は与えられていません\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "ユーザIDを指定していません (\"-r\"を使いましょう) 。\n"
msgstr ""
"データは保存されていません。保存には\"--output\"オプションを使ってください\n"
-#, c-format
-msgid "error creating '%s': %s\n"
-msgstr "'%s'の作成エラー: %s\n"
-
msgid "Detached signature.\n"
msgstr "分遣署名。\n"
msgid "(This is a sensitive revocation key)\n"
msgstr "(これは、機密指定の失効鍵です)\n"
-#, fuzzy
-#| msgid "Secret key is available.\n"
msgid "Secret key is not available.\n"
-msgstr "秘密鍵が使用できます。\n"
+msgstr "秘密鍵が利用できません。\n"
msgid "Create a designated revocation certificate for this key? (y/N) "
msgstr "この鍵に対する指名失効証明書を作成しますか? (y/N) "
msgstr "これは失効証明書でこちらの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 ""
+
+#, fuzzy
+#| msgid ""
+#| "Use it to revoke this key in case of a compromise or loss of\n"
+#| "the secret key. However, if the secret key is still accessible,\n"
+#| "it is better to generate a new revocation certificate and give\n"
+#| "a reason for the revocation."
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
"秘密鍵のコンプロマイズや紛失の場合、これを使ってこの鍵を失効させます。\n"
"しかし、秘密鍵がまだアクセス可能である場合、新しい失効証明書を生成し、\n"
"失効の理由をつける方がよいでしょう。"
+#, fuzzy
+#| 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 making use of this revocation certificate."
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
"このファイルを誤って使うのを避けるため、以下ではコロンが5つのダッシュの前に挿"
"入されます。\n"
"この失効証明書を使う前にはテクスト・エディタでこのコロンを削除してください。"
#, fuzzy, c-format
-#| msgid "secret key \"%s\" not found: %s\n"
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "失効証明書を作成。\n"
+
+#, c-format
msgid "secret key \"%s\" not found\n"
-msgstr "秘密鍵\"%s\"が見つかりません: %s\n"
+msgstr "秘密鍵\"%s\"が見つかりません\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'は以下の複数の秘密鍵にマッチします:\n"
+
+#, c-format
+msgid "error searching the keyring: %s\n"
+msgstr "鍵リング探索エラー: %s\n"
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "この鍵に対する失効証明書を作成しますか? (y/N) "
msgid "WARNING: signing subkey %s has an invalid cross-certification\n"
msgstr "*警告*: 無効な相互証明が、署名副鍵%sにあります\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "公開鍵%sは、署名よりも%lu秒新しいものです\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "公開鍵%sは、署名よりも%lu秒新しいものです\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "公開鍵%sは、署名よりも%lu秒新しいものです\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "公開鍵%sは、署名よりも%lu秒新しいものです\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr "鍵%sは%lu秒未来にできました (時間歪曲か時計の障害でしょう)\n"
-
-#, c-format
-msgid ""
+msgid_plural ""
"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr "鍵%sは%lu秒未来にできました (時間歪曲か時計の障害でしょう)\n"
+msgstr[0] "鍵%sは%lu秒未来にできました (時間歪曲か時計の障害でしょう)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] "鍵%sは%lu秒未来にできました (時間歪曲か時計の障害でしょう)\n"
#, c-format
msgid "Note: signature key %s expired %s\n"
msgid "input line longer than %d characters\n"
msgstr "入力行の長さが%d文字を超えています\n"
+#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "標準オプションを送信エラー: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "サポートされていないアルゴリズム: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "データ送信エラー: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing base64 encoding: %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "base64エンコーディングの書き込みエラー: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error initializing reader object: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "リーダ・オブジェクトの初期化エラー: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening '%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "'%s'を開く際、エラー: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "データ送信エラー: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "公開鍵%sが見つかりません: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error setting OCSP target: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "OCSPターゲットの設定エラー: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting responder ID: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "応答IDの取得エラー: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "有効性: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "保存されたフラグの取得エラー: %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] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "鍵の一覧"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "メッセージ・ダイジェストを表示"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "パイプの作成エラー: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "データ送信エラー: %s\n"
+
#, c-format
msgid "'%s' is not a valid long keyID\n"
msgstr "'%s'は、有効な大型鍵IDでありません\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "信用モデル'%s'で信用データベースの更新は、不要です\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "公開鍵%sが見つかりません: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "--check-trustdbを実行してください\n"
msgid "checking the trustdb\n"
msgstr "信用データベースの検査\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d本の鍵を処理 (うち%d本の有効性数をクリア)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "これまで%lu個の鍵を処理\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d本の鍵を処理 (うち%d本の有効性数をクリア)\n"
msgid "no ultimately trusted keys found\n"
msgstr "究極的に信用する鍵が見つかりません\n"
msgstr "究極的に信用する鍵%sの公開鍵が見つかりません\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "'まぁまぁの信用'%d、'全面的信用'%d、%s信用モデル\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr "深さ: %d 有効性: %3d 署名: %3d 信用: %d-, %dq, %dn, %dm, %df, %du\n"
msgid "card is permanently locked!\n"
msgstr "カードが永久にロックされてます!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr "カードの永久ロック前に%d回の管理者PINの試行が残っています\n"
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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回の管理者PINの試行が残っています\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgid "generating key failed\n"
msgstr "鍵の生成に失敗しました\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "鍵の生成が完了しました (%d秒)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "鍵の生成が完了しました (%d秒)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "OpenPGPカードに無効な構造 (データ・オブジェクト 0x93)\n"
msgid "error retrieving '%s': http status %u\n"
msgstr "'%s'の取得エラー: httpステイタス %u\n"
-#, fuzzy
-#| msgid "CRL access not possible due to TOR mode\n"
msgid "CRL access not possible due to Tor mode\n"
-msgstr "CRLアクセスはTORモードのため不可能です\n"
+msgstr "CRLアクセスはTorモードのため不可能です\n"
#, c-format
msgid "certificate search not possible due to disabled %s\n"
msgid "|FILE|use the CA certificates in FILE for HKP over TLS"
msgstr "|FILE|FILEにあるCA証明書をTLSでのHKPに使う"
-#, fuzzy
-#| msgid "route all network traffic via TOR"
msgid "route all network traffic via Tor"
-msgstr "ネットワーク・トラフィックをすべてTOR経由にする"
+msgstr "ネットワーク・トラフィックをすべてTor経由にする"
msgid ""
"@\n"
msgid "response from server too large; limit is %d bytes\n"
msgstr "サーバからの応答がが長すぎます (上限%dバイト)。\n"
-#, fuzzy
-#| msgid "OCSP request not possible due to TOR mode\n"
msgid "OCSP request not possible due to Tor mode\n"
-msgstr "TORモードのためOCSPリクエストが不可能です\n"
+msgstr "TorモードのためOCSPリクエストが不可能です\n"
msgid "OCSP request not possible due to disabled HTTP\n"
msgstr "HTTPが停止されているためOCSPリクエストが不可能です\n"
#, c-format
msgid "error parsing OCSP response for '%s': %s\n"
-msgstr "'%s'に対するOCSP応答解析エラー: %s\n"
+msgstr "'%s'に対するOCSP応答構文解析エラー: %s\n"
#, c-format
msgid "OCSP responder at '%s' status: %s\n"
msgid "do not allow the reuse of old passphrases"
msgstr "古いパスフレーズを再使用することを認めない"
+#, fuzzy
+#| msgid "|N|set LDAP timeout to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|LDAPのタイムアウトをN秒とする"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NAME|デフォルトの秘密鍵としてNAMEを用いる"
msgid "Options controlling the interactivity and enforcement"
msgstr "インタラクティビティと強制を制御するオプション"
-#, fuzzy
-#| msgid "Options controlling the use of TOR"
msgid "Options controlling the use of Tor"
-msgstr "TORの使用を制御するオプション"
+msgstr "Torの使用を制御するオプション"
msgid "Configuration for HTTP servers"
msgstr "HTTPサーバのコンフィグレーション"
"形式: gpg-check-pattern [オプション] パターンファイル\n"
"パターンファイルに対して標準入力のパスフレーズを確認する\n"
-#~ msgid "cleared passphrase cached with ID: %s\n"
-#~ msgstr "保持したパスフレーズをクリアしました ID: %s\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "鍵の指定'%s'はあいまいです\n"
-#, fuzzy
-#~| msgid "failed to store the key: %s\n"
-#~ msgid "Failed to open the keyring DB.\n"
-#~ msgstr "鍵の保管に失敗しました: %s\n"
+#~ msgid "'%s' matches at least:\n"
+#~ msgstr "'%s'は最低、以下にマッチします:\n"
-#, fuzzy
-#~| msgid "failed to open '%s': %s\n"
-#~ msgid "Failed to parse '%s'.\n"
-#~ msgstr "'%s'が開けません: %s\n"
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "鍵がないため%d個の署名を検査しません\n"
-#, fuzzy
-#~| msgid "invalid value\n"
-#~ msgid "invalid value '%s'\n"
-#~ msgstr "無効な値\n"
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "エラーのため%d個の署名を検査しません\n"
-#, fuzzy
-#~| msgid "error locking keybox: %s\n"
-#~ msgid "error looking up secret key \"%s\": %s\n"
-#~ msgstr "keyboxのロックのエラー: %s\n"
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "有効な自己署名のないユーザIDを1個検出\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "%d個の署名を削除しました。\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "ユーザID \"%s\": %d の署名が除去されました\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "秘密鍵を保護するためにパスフレーズがいります。\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "パスフレーズを入力してください。これは新しく作られる暗号化鍵のカード外の"
+#~ "バックアップを保護するものです。"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "パスフレーズをちゃんと繰り返していません。再入力してください"
+
+#~ 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 ""
+#~ "パスフレーズを必要としないようですが、おそらくそれは良くない考えです!\n"
+#~ "続けますが、パスフレーズを設定することを検討ください。パスフレーズは、\n"
+#~ "このプログラムの\"--edit-key\"オプションでいつでも変更できます。\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "カードへの鍵の保管に失敗しました: %s\n"
+
+#~ msgid "1 good signature\n"
+#~ msgstr "正しい署名1個\n"
+
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "'%s'から'%s'へ名前変更に失敗: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu個の鍵をキャッシュ済 (%lu個の署名)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "1本の鍵を%sから更新\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "鍵%sを%sサーバ%sへ送信\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "公開鍵%sは、署名よりも%lu秒新しいものです\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr "鍵%sは%lu秒未来にできました (時間歪曲か時計の障害でしょう)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr "'まぁまぁの信用'%d、'全面的信用'%d、%s信用モデル\n"
+
+#~ msgid "cleared passphrase cached with ID: %s\n"
+#~ msgstr "保持したパスフレーズをクリアしました ID: %s\n"
#~ msgid "Please select at most one subkey.\n"
#~ msgstr "高々1個の副鍵を選択してください。\n"
msgid "Enter passphrase: "
msgstr "Tast inn passfrase: "
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "feil ved opprettelse av nøkkelknippet «%s»: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "ADVARSEL: %s overstyrere %s\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "OpenPGP-kort er ikke tilgjengelig: %s\n"
msgid "remove as much as possible from key during export"
msgstr ""
+#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: hoppet over: %s\n"
+
msgid "exporting secret keys not allowed\n"
msgstr "eksportering av hemmelige nøkler er ikke tillatt\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "nøkkel %s: nøkkelmateriell på kort - hoppet over\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: hoppet over: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "ADVARSEL: ingenting eksportert\n"
+#, fuzzy, c-format
+#| msgid "error reading `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "feil ved lesing av «%s»: %s\n"
+
msgid "[User ID not found]"
msgstr "[Brukerid ikke funnet]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "ugyldige listevalg\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "feil med «%s»: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "feil ved opprettelse av nøkkelknippet «%s»: %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "feil ved lesing av «%s»: %s\n"
msgstr "hemmelig nøkkel «%s» ble ikke funnet: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "ugyldige listevalg\n"
+#| msgid "unusable secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "ubrukelig hemmelig nøkkel"
#, fuzzy, c-format
#| msgid "unusable secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "ubrukelig hemmelig nøkkel"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "Ugyldig nøkkel %s gjort gyldig av --allow-non-selfsigned-uid\n"
msgstr "MERK: den gamle valgfila «%s» ble ignorert\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "feil ved opprettelse av nøkkelknippet «%s»: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgstr ""
"ADVARSEL: mottakere (-r) angitt uten å bruke offentlig nøkkelkryptering\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "ugyldig hashalgoritme «%s»\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "ugyldig hashalgoritme «%s»\n"
-
msgid "--store [filename]"
msgstr "--store [filnavn]"
msgid "key export failed: %s\n"
msgstr "nøkkeleksport mislyktes: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "nøkkeleksport mislyktes: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "søk på nøkkelserver mislyktes: %s\n"
msgid "[self-signature]"
msgstr "[selvsignatur]"
-msgid "1 bad signature\n"
-msgstr "1 ubrukelig signatur\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d ubrukelige signaturer\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 signatur ble ikke sjekket på grunn av en manglende nøkkel\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signaturer ble ikke sjekket på grunn av manglende nøkler\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 signatur ble ikke sjekket på grunn av en feil\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d ubrukelige signaturer\n"
+msgstr[1] "%d ubrukelige signaturer\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signaturer ble ikke sjekket på grunn av feil\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 signatur ble ikke sjekket på grunn av en manglende nøkkel\n"
+msgstr[1] "1 signatur ble ikke sjekket på grunn av en manglende nøkkel\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 brukerid uten gyldig selvsignatur ble oppdaget\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 signatur ble ikke sjekket på grunn av en feil\n"
+msgstr[1] "1 signatur ble ikke sjekket på grunn av en feil\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d brukerider uten gyldige selvsignaturer ble oppdaget\n"
+#, fuzzy, c-format
+#| 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] "%d brukerider uten gyldige selvsignaturer ble oppdaget\n"
+msgstr[1] "%d brukerider uten gyldige selvsignaturer ble oppdaget\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr ""
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Slettet %d signatur.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Slettet %d signaturer.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Slettet %d signatur.\n"
+msgstr[1] "Slettet %d signatur.\n"
msgid "Nothing deleted.\n"
msgstr "Ingen ble slettet.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "nøkkel: %s: «%s» %d nye signaturer\n"
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "nøkkel: %s: «%s» %d nye signaturer\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "nøkkel: %s: «%s» %d nye signaturer\n"
+msgstr[1] "nøkkel: %s: «%s» %d nye signaturer\n"
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Vennligst korriger feilen først\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Du trenger en passfrase for å beskytte din hemmelige nøkkel.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Du trenger en passfrase for å beskytte din hemmelige nøkkel.\n"
-"\n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "passfrasen ble ikke gjentatt korrekt; prøv igjen"
-
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Du vil ikke ha en passfrase - dette er sannsynligvis en *dum* idé!\n"
-"Jeg fortsetter likevel. Du kan endre passfrasen din når som helst ved\n"
-"hjelp av dette programmet og valget «--edit-key».\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Nøkkelgenereringen ble avbrutt.\n"
#, fuzzy, c-format
+#| msgid "can't create backup file `%s': %s\n"
+msgid "can't create backup file '%s': %s\n"
+msgstr "kan ikke opprette sikkerhetskopifil «%s»: %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "skriver offentlig nøkkel til «%s»\n"
msgid "Really create? (y/N) "
msgstr "Virkelig opprette? (j/N)"
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "lagring av nøkkel på kort mislyktes: %s\n"
-
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
-msgid "can't create backup file '%s': %s\n"
-msgstr "kan ikke opprette sikkerhetskopifil «%s»: %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr ""
-
msgid "never "
msgstr ""
msgid "Signature notation: "
msgstr ""
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 ubrukelig signatur\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d ubrukelige signaturer\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d ubrukelige signaturer\n"
+msgstr[1] "%d ubrukelige signaturer\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Nøkkelknippe"
msgstr " Serienummer for kort ="
#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "omdøping fra «%s» til «%s» mislyktes: %s\n"
-
-#, fuzzy, c-format
#| msgid "caching keyring `%s'\n"
msgid "caching keyring '%s'\n"
msgstr "cacher nøkkelknippet «%s»\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu nøkler cachet så langt (%lu signaturer)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu nøkler cachet så langt (%lu signaturer)\n"
+msgstr[1] "%lu nøkler cachet så langt (%lu signaturer)\n"
#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu nøkler cachet (%lu signaturer)\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 ubrukelig signatur\n"
+msgstr[1] "1 ubrukelig signatur\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr ""
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "oppfrisker 1 nøkkel fra %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "oppfrisker %d nøkler fra %s\n"
+msgstr[1] "oppfrisker %d nøkler fra %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "ADVARSEL: klarte ikke å oppfriske nøkkel %s via %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "oppfrisker %d nøkler fra %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "nøkkelen «%s» ble ikke funnet på nøkkelserveren\n"
msgid "requesting key %s from %s\n"
msgstr "ber om nøkkel %s fra %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr ""
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "ingen handling for nøkkelserver!\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s signatur, digestalgoritme %s\n"
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s)\n"
+msgstr "lesefeil ved «%s»: %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "lesefeil ved «%s»: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr ""
msgid "%s: skipped: public key already present\n"
msgstr "%s: hoppet over: offentlig nøkkel er allerede tilstede\n"
+#, fuzzy, c-format
+#| msgid "can't close `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "kan ikke lukke «%s»: %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "ugyldig hashalgoritme «%s»\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "ugyldig hashalgoritme «%s»\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Du oppga ikke en brukerid. (Du kan bruke «-r»)\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr ""
-#, fuzzy, c-format
-#| msgid "error reading `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "feil ved lesing av «%s»: %s\n"
-
msgid "Detached signature.\n"
msgstr ""
msgstr "Lage et opphevingssertifikat for denne nøkkelen? (j/N) "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "key %s: \"%s\" revocation certificate imported\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "nøkkel %s: «%s» opphevingssertifikat importert\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "hemmelig nøkkel «%s» ble ikke funnet: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "feil ved opprettelse av nøkkelknippet «%s»: %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Lage et opphevingssertifikat for denne nøkkelen? (j/N) "
#, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr ""
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] ""
+msgstr[1] ""
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid "key %s: \"%s\" %d new signatures\n"
+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] "nøkkel: %s: «%s» %d nye signaturer\n"
+msgstr[1] "nøkkel: %s: «%s» %d nye signaturer\n"
# Er dette entallsformen av denne strengen?
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"nøkkel %s ble opprettet %lu sekund i fremtiden (time warp eller "
+"klokkeproblem)\n"
+msgstr[1] ""
"nøkkel %s ble opprettet %lu sekund i fremtiden (time warp eller "
"klokkeproblem)\n"
-# Er dette flertallsformen av denne og den forrige strengen?
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"nøkkel %s ble opprettet %lu sekunder i fremtiden (time warp eller "
+# Er dette entallsformen av denne strengen?
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+msgid "key %s was created %lu day in the future (time warp or clock problem)\n"
+msgid_plural ""
+"key %s was created %lu days in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"nøkkel %s ble opprettet %lu sekund i fremtiden (time warp eller "
+"klokkeproblem)\n"
+msgstr[1] ""
+"nøkkel %s ble opprettet %lu sekund i fremtiden (time warp eller "
"klokkeproblem)\n"
#, fuzzy, c-format
msgstr ""
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "feil ved søking etter tillitspost i «%s»: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Støttede algoritmer:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "feil ved lesing av «%s»: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "feil ved skriving av hemmelig nøkkelknippe «%s»: %s\n"
+
+#, fuzzy, c-format
+msgid "error initializing TOFU database: %s\n"
+msgstr "feil ved søking etter tillitspost i «%s»: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "feil med «%s»: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "feil ved lesing av «%s»: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "fant ikke offentlig nøkkel %s: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "feil ved lesing av «%s»: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting new PIN: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "feil ved henting av ny PIN: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "gyldighet: %s"
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "feil ved henting av ny PIN: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "liste nøkler"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [filer]|skrive meldingsdigester"
+msgstr[1] "|algo [filer]|skrive meldingsdigester"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "feil ved opprettelse av passfrase: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "feil ved lesing av «%s»: %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid character set\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "«%s» er ikke et gyldig tegnsett\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr ""
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "fant ikke offentlig nøkkel %s: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr ""
msgid "checking the trustdb\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu nøkler behandlet hittil\n"
+msgstr[1] "%lu nøkler behandlet hittil\n"
+
#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr ""
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] ""
+msgstr[1] ""
msgid "no ultimately trusted keys found\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "kort er permanent låst!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr "%d Admin PIN-forsøk før kortet blir låst permanent\n"
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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 Admin PIN-forsøk før kortet blir låst permanent\n"
+msgstr[1] "%d Admin PIN-forsøk før kortet blir låst permanent\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgid "generating key failed\n"
msgstr "nøkkelgenerering mislyktes\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "nøkkelgenerering fullført (%d sekunder)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "nøkkelgenerering fullført (%d sekunder)\n"
+msgstr[1] "nøkkelgenerering fullført (%d sekunder)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "ugyldig struktur i OpenPGP-kort (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "feil ved opprettelse av passfrase: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr ""
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d signaturer ble ikke sjekket på grunn av manglende nøkler\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d signaturer ble ikke sjekket på grunn av feil\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 brukerid uten gyldig selvsignatur ble oppdaget\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Slettet %d signaturer.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "nøkkel: %s: «%s» %d nye signaturer\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Du trenger en passfrase for å beskytte din hemmelige nøkkel.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Du trenger en passfrase for å beskytte din hemmelige nøkkel.\n"
+#~ "\n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "passfrasen ble ikke gjentatt korrekt; prøv igjen"
+
+#~ msgid "%s.\n"
+#~ msgstr "%s.\n"
+
+#~ msgid ""
+#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
+#~ "I will do it anyway. You can change your passphrase at any time,\n"
+#~ "using this program with the option \"--edit-key\".\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Du vil ikke ha en passfrase - dette er sannsynligvis en *dum* idé!\n"
+#~ "Jeg fortsetter likevel. Du kan endre passfrasen din når som helst ved\n"
+#~ "hjelp av dette programmet og valget «--edit-key».\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "lagring av nøkkel på kort mislyktes: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 ubrukelig signatur\n"
+
+#, fuzzy
+#~| msgid "renaming `%s' to `%s' failed: %s\n"
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "omdøping fra «%s» til «%s» mislyktes: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu nøkler cachet (%lu signaturer)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "oppfrisker 1 nøkkel fra %s\n"
+
+# Er dette flertallsformen av denne og den forrige strengen?
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "nøkkel %s ble opprettet %lu sekunder i fremtiden (time warp eller "
+#~ "klokkeproblem)\n"
+
#, fuzzy
#~| msgid "failed to store the key: %s\n"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "søker etter «%s» fra %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "ingen handling for nøkkelserver!\n"
-
#~ msgid "keyserver did not send VERSION\n"
#~ msgstr "nøkkelserver sendte ikke VERSION\n"
msgid "Enter passphrase: "
msgstr "Has³o\n"
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "b³±d tworzenia zbioru kluczy `%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "OSTRZE¯ENIE: %s powoduje obej¶cie %s\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "Karta OpenPGP niedostêpna: %s\n"
msgid "remove as much as possible from key during export"
msgstr "usuniêcie jak najwiêkszej czê¶ci klucza przy eksporcie"
+#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: pominiêty: %s\n"
+
msgid "exporting secret keys not allowed\n"
msgstr "eksport kluczy tajnych nie jest dozwolony\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "klucz %s: zawarto¶æ klucza na karcie - pominiêto\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: pominiêty: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "OSTRZE¯ENIE: nic nie zosta³o wyeksportowane!\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "b³±d tworzenia ,,%s'': %s\n"
+
msgid "[User ID not found]"
msgstr "[brak identyfikatora u¿ytkownika]"
#, fuzzy, c-format
+#| msgid "missing argument for option \"%.50s\"\n"
+msgid "(check argument of option '%s')\n"
+msgstr "brak argumentu dla opcji ,,%.50s''\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "b³±d zamykania %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "b³±d tworzenia zbioru kluczy `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "automatically retrieved `%s' via %s\n"
msgid "automatically retrieved '%s' via %s\n"
msgstr "automatycznie pobrano `%s' poprzez %s\n"
msgstr "klucz prywatny ,,%s'' nie zosta³ odnaleziony: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "brak argumentu dla opcji ,,%.50s''\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NAZWA|u¿ycie NAZWY jako domy¶lnego klucza tajnego"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NAZWA|u¿ycie NAZWY jako domy¶lnego klucza tajnego"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
"Opcja --allow-non-selfsigned-uid wymusi³a uznanie za poprawny klucza %s.\n"
msgstr "UWAGA: stary domy¶lny plik opcji ,,%s'' zosta³ zignorowany\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "opcja ,,%.50s'' jest niejednoznaczna\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "b³±d tworzenia zbioru kluczy `%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
"biblioteka libgcrypt jest zbyt stara (potrzebna %s, zainstalowana %s)\n"
msgid "WARNING: recipients (-r) given without using public key encryption\n"
msgstr "OSTRZE¯ENIE: podano adresatów (-r) w dzia³aniu które ich nie dotyczy\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "linia %d: niew³a¶ciwy algorytm\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "linia %d: niew³a¶ciwy algorytm\n"
-
msgid "--store [filename]"
msgstr "--store [plik]"
msgid "key export failed: %s\n"
msgstr "eksport kluczy nie powiód³ siê: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "eksport kluczy nie powiód³ siê: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "szukanie w serwerze kluczy nie powiod³o siê: %s\n"
msgid "[self-signature]"
msgstr "[podpis klucza nim samym]"
-msgid "1 bad signature\n"
-msgstr "1 niepoprawny podpis\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d niepoprawnych podpisów\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 podpis nie zosta³ sprawdzony z powodu braku klucza\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d podpisów nie zosta³o sprawdzonych z powodu braku kluczy\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 podpis nie zosta³ sprawdzony z powodu b³êdu\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d niepoprawnych podpisów\n"
+msgstr[1] "%d niepoprawnych podpisów\n"
+msgstr[2] "%d niepoprawnych podpisów\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d podpisów nie sprawdzonych z powodu b³êdów\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 podpis nie zosta³ sprawdzony z powodu braku klucza\n"
+msgstr[1] "1 podpis nie zosta³ sprawdzony z powodu braku klucza\n"
+msgstr[2] "1 podpis nie zosta³ sprawdzony z powodu braku klucza\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "wykryto 1 identyfikator u¿ytkownika niepodpisany tym samym kluczem\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 podpis nie zosta³ sprawdzony z powodu b³êdu\n"
+msgstr[1] "1 podpis nie zosta³ sprawdzony z powodu b³êdu\n"
+msgstr[2] "1 podpis nie zosta³ sprawdzony z powodu b³êdu\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr ""
+#, fuzzy, c-format
+#| 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] ""
+"wykryto %d identyfikatorów u¿ytkownika niepodpisanych tym samym kluczem\n"
+msgstr[1] ""
+"wykryto %d identyfikatorów u¿ytkownika niepodpisanych tym samym kluczem\n"
+msgstr[2] ""
"wykryto %d identyfikatorów u¿ytkownika niepodpisanych tym samym kluczem\n"
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "Na pewno usun±æ ten podpis klucza nim samym? (t/N) "
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "%d podpis usuniêty.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d podpisów usuniêtych.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "%d podpis usuniêty.\n"
+msgstr[1] "%d podpis usuniêty.\n"
+msgstr[2] "%d podpis usuniêty.\n"
msgid "Nothing deleted.\n"
msgstr "Nic nie zosta³o usuniête.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "Identyfikator u¿ytkownika ,,%s'' upakowany: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Identyfikator u¿ytkownika ,,%s'': %d podpis wyczyszczony\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Identyfikator u¿ytkownika ,,%s'': %d podpisów wyczyszczonych\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Identyfikator u¿ytkownika ,,%s'': %d podpis wyczyszczony\n"
+msgstr[1] "Identyfikator u¿ytkownika ,,%s'': %d podpis wyczyszczony\n"
+msgstr[2] "Identyfikator u¿ytkownika ,,%s'': %d podpis wyczyszczony\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Najpierw trzeba poprawiæ ten b³±d\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Musisz podaæ d³ugie, skomplikowane has³o aby ochroniæ swój klucz tajny.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Proszê wprowadziæ has³o do zabezpieczenia kopii zapasowej poza kart± nowego "
-"klucza szyfruj±cego."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "has³o nie zosta³o poprawnie powtórzone; jeszcze jedna próba"
-
-#, c-format
-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 ""
-"Nie chcesz podaæ has³a - to *z³y* pomys³!\n"
-"W ka¿dej chwili mo¿esz ustawiæ has³o u¿ywaj±c tego programu i opcji\n"
-"\"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Procedura generacji klucza zosta³a anulowana.\n"
#, fuzzy, c-format
+#| msgid "can't create backup file `%s': %s\n"
+msgid "can't create backup file '%s': %s\n"
+msgstr "nie mo¿na utworzyæ pliku kopii zapasowej ,,%s'': %s\n"
+
+#, fuzzy, c-format
+#| msgid "NOTE: backup of card key saved to `%s'\n"
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "UWAGA: kopia zapasowa klucza karty zapisana do ,,%s''\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "zapisujê klucz publiczny w ,,%s''\n"
msgid "Really create? (y/N) "
msgstr "Czy na pewno utworzyæ? (t/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "zapis klucza na karcie nie powiód³ siê: %s\n"
-
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
-msgid "can't create backup file '%s': %s\n"
-msgstr "nie mo¿na utworzyæ pliku kopii zapasowej ,,%s'': %s\n"
-
-#, fuzzy, c-format
-#| msgid "NOTE: backup of card key saved to `%s'\n"
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "UWAGA: kopia zapasowa klucza karty zapisana do ,,%s''\n"
-
msgid "never "
msgstr "nigdy "
msgid "Signature notation: "
msgstr "Adnotacje podpisu: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 niepoprawny podpis\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d niepoprawnych podpisów\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d niepoprawnych podpisów\n"
+msgstr[1] "%d niepoprawnych podpisów\n"
+msgstr[2] "%d niepoprawnych podpisów\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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[2] ""
msgid "Keyring"
msgstr "Zbiór kluczy"
msgstr " Nr seryjny karty ="
#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "zmiana nazwy ,,%s'' na ,,%s'' nie powiod³a siê: %s\n"
-
-#, fuzzy, c-format
#| msgid "caching keyring `%s'\n"
msgid "caching keyring '%s'\n"
msgstr "buforowanie zbioru kluczy ,,%s''\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu kluczy zbuforowano do tej pory (%lu podpisów)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu kluczy zbuforowano do tej pory (%lu podpisów)\n"
+msgstr[1] "%lu kluczy zbuforowano do tej pory (%lu podpisów)\n"
+msgstr[2] "%lu kluczy zbuforowano do tej pory (%lu podpisów)\n"
#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu kluczy zbuforowano (%lu podpisów)\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 niepoprawny podpis\n"
+msgstr[1] "1 niepoprawny podpis\n"
+msgstr[2] "1 niepoprawny podpis\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr ",,%s'' nie jest identyfikatorem klucza - pominiêto\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "od¶wie¿anie 1 klucza z %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "od¶wie¿anie %d kluczy z %s\n"
+msgstr[1] "od¶wie¿anie %d kluczy z %s\n"
+msgstr[2] "od¶wie¿anie %d kluczy z %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "OSTRZE¯ENIE: nie mo¿na od¶wie¿yæ klucza %s przez %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "od¶wie¿anie %d kluczy z %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "klucz ,,%s'' nie zosta³ odnaleziony na serwerze kluczy\n"
msgid "requesting key %s from %s\n"
msgstr "zapytanie o klucz %s z %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "wysy³anie klucza %s na serwer %s %s\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "brak akcji serwera kluczy!\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "podpis %s, skrót %s\n"
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s)\n"
+msgstr "b³±d odczytu w ,,%s'': %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "b³±d odczytu w ,,%s'': %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d jest przestarza³± opcj± ,,%s''\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: pominiêty: zosta³ ju¿ wybrany w innej opcji\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "nie mo¿na siê po³±czyæ z ,,%s'': %s\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "linia %d: niew³a¶ciwy algorytm\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "linia %d: niew³a¶ciwy algorytm\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Nie zosta³ podany identyfikator u¿ytkownika (np. za pomoc± ,,-r'')\n"
msgstr ""
"dane nie zosta³y zapisane; aby to zrobiæ, nale¿y u¿yæ opcji \"--output\"\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "b³±d tworzenia ,,%s'': %s\n"
-
msgid "Detached signature.\n"
msgstr "Podpis oddzielony od danych.\n"
msgstr "Stworzyæ certyfikat uniewa¿nienia tego klucza? (t/N) "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Certyfikat uniewa¿nienia zosta³ utworzony.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "klucz prywatny ,,%s'' nie zosta³ odnaleziony: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "b³±d tworzenia zbioru kluczy `%s': %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Stworzyæ certyfikat uniewa¿nienia tego klucza? (t/N) "
msgstr ""
"OSTRZE¯ENIE: podklucz podpisuj±cy %s jest niepoprawnie skro¶nie podpisany\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "klucz publiczny %s jest o %lu sekundê m³odszy od podpisu\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "klucz publiczny %s jest o %lu sekundê m³odszy od podpisu\n"
+msgstr[1] "klucz publiczny %s jest o %lu sekundê m³odszy od podpisu\n"
+msgstr[2] "klucz publiczny %s jest o %lu sekundê m³odszy od podpisu\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "klucz publiczny %s jest o %lu sekund(y) m³odszy od podpisu\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "klucz publiczny %s jest o %lu sekundê m³odszy od podpisu\n"
+msgstr[1] "klucz publiczny %s jest o %lu sekundê m³odszy od podpisu\n"
+msgstr[2] "klucz publiczny %s jest o %lu sekundê m³odszy od podpisu\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"klucz %s zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n"
+"czasoprzestrzeni lub ¼le ustawiony zegar systemowy)\n"
+msgstr[1] ""
+"klucz %s zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n"
+"czasoprzestrzeni lub ¼le ustawiony zegar systemowy)\n"
+msgstr[2] ""
"klucz %s zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n"
"czasoprzestrzeni lub ¼le ustawiony zegar systemowy)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"klucz %s zosta³ stworzony %lu sekund w przysz³o¶ci (zaburzenia\n"
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] ""
+"klucz %s zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n"
+"czasoprzestrzeni lub ¼le ustawiony zegar systemowy)\n"
+msgstr[1] ""
+"klucz %s zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n"
+"czasoprzestrzeni lub ¼le ustawiony zegar systemowy)\n"
+msgstr[2] ""
+"klucz %s zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n"
"czasoprzestrzeni lub ¼le ustawiony zegar systemowy)\n"
#, fuzzy, c-format
msgstr "linia d³u¿sza ni¿ %d znaków\n"
#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "b³±d wysy³ania standardowych opcji: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "nieobs³ugiwany algorytm: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "b³±d wysy³ania polecenia %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "b³±d podczas zapisu zbioru kluczy tajnych ,,%s'': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: b³±d zapisu wpisu katalogowego: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening `%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "b³±d podczas otwierania ,,%s'': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "b³±d wysy³ania polecenia %s: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "klucz publiczny %s nie odnaleziony: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error storing flags: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "b³±d zapisywania flag: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting new PIN: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "b³±d podczas odczytu nowego PIN-u: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "poprawno¶æ: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "b³±d pobierania zapisanych flag: %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] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "lista kluczy"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "wypisanie skrótów wiadomo¶ci"
+msgstr[1] "wypisanie skrótów wiadomo¶ci"
+msgstr[2] "wypisanie skrótów wiadomo¶ci"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "b³±d tworzenia potoku: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "b³±d wysy³ania polecenia %s: %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr ",,%s'' nie jest poprawnym d³ugim numerem klucza\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "aktualizacja bazy jest niepotrzebna przy modelu zaufania ,,%s''\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "klucz publiczny %s nie odnaleziony: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "nale¿y uruchomiæ gpg z opcj± ,,--check-trustdb''\n"
msgid "checking the trustdb\n"
msgstr "sprawdzanie bazy zaufania\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "przetworzono %d kluczy (rozwi±zano %d przeliczeñ zaufania)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu kluczy przetworzonych do tej chwili\n"
+msgstr[1] "%lu kluczy przetworzonych do tej chwili\n"
+msgstr[2] "%lu kluczy przetworzonych do tej chwili\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "przetworzono %d kluczy (rozwi±zano %d przeliczeñ zaufania)\n"
+msgstr[1] "przetworzono %d kluczy (rozwi±zano %d przeliczeñ zaufania)\n"
+msgstr[2] "przetworzono %d kluczy (rozwi±zano %d przeliczeñ zaufania)\n"
msgid "no ultimately trusted keys found\n"
msgstr "brak absolutnie zaufanych kluczy\n"
msgstr "klucz publiczny absolutnie zaufanego klucza %s nie odnaleziony\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "potrzeba %d marginalnych, %d pe³nych, model zaufania %s\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "karta zosta³a trwale zablokowana!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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] ""
+"Zosta³o %d prób PIN-u administracyjnego do trwa³ego zablokowania karty\n"
+msgstr[1] ""
+"Zosta³o %d prób PIN-u administracyjnego do trwa³ego zablokowania karty\n"
+msgstr[2] ""
"Zosta³o %d prób PIN-u administracyjnego do trwa³ego zablokowania karty\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
msgid "generating key failed\n"
msgstr "generowanie klucza nie powiod³o siê\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "generowanie klucza zakoñczone (%d sekund)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "generowanie klucza zakoñczone (%d sekund)\n"
+msgstr[1] "generowanie klucza zakoñczone (%d sekund)\n"
+msgstr[2] "generowanie klucza zakoñczone (%d sekund)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "niepoprawna struktura karty OpenPGP (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "nie zezwalanie na ponowne u¿ycie starych hase³"
+#, fuzzy
+#| msgid "|N|set maximum PIN cache lifetime to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+"|N|ustawienie maksymalnego czasu ¿ycia pamiêci podrêcznej PIN-ów na N sekund"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NAZWA|u¿ycie NAZWY jako domy¶lnego klucza tajnego"
"Sk³adnia: gpg-check-pattern [opcje] plik-wzorców\n"
"Sprawdzanie has³a ze standardowego wej¶cia wzglêdem pliku wzorców\n"
+#, fuzzy
+#~| msgid "option \"%.50s\" is ambiguous\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "opcja ,,%.50s'' jest niejednoznaczna\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d podpisów nie zosta³o sprawdzonych z powodu braku kluczy\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d podpisów nie sprawdzonych z powodu b³êdów\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr ""
+#~ "wykryto 1 identyfikator u¿ytkownika niepodpisany tym samym kluczem\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "%d podpisów usuniêtych.\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Identyfikator u¿ytkownika ,,%s'': %d podpisów wyczyszczonych\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Musisz podaæ d³ugie, skomplikowane has³o aby ochroniæ swój klucz tajny.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Proszê wprowadziæ has³o do zabezpieczenia kopii zapasowej poza kart± "
+#~ "nowego klucza szyfruj±cego."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "has³o nie zosta³o poprawnie powtórzone; jeszcze jedna próba"
+
+#~ 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 ""
+#~ "Nie chcesz podaæ has³a - to *z³y* pomys³!\n"
+#~ "W ka¿dej chwili mo¿esz ustawiæ has³o u¿ywaj±c tego programu i opcji\n"
+#~ "\"--edit-key\".\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "zapis klucza na karcie nie powiód³ siê: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 niepoprawny podpis\n"
+
+#, fuzzy
+#~| msgid "renaming `%s' to `%s' failed: %s\n"
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "zmiana nazwy ,,%s'' na ,,%s'' nie powiod³a siê: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu kluczy zbuforowano (%lu podpisów)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "od¶wie¿anie 1 klucza z %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "wysy³anie klucza %s na serwer %s %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "klucz publiczny %s jest o %lu sekund(y) m³odszy od podpisu\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "klucz %s zosta³ stworzony %lu sekund w przysz³o¶ci (zaburzenia\n"
+#~ "czasoprzestrzeni lub ¼le ustawiony zegar systemowy)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr "potrzeba %d marginalnych, %d pe³nych, model zaufania %s\n"
+
#~ msgid "cleared passphrase cached with ID: %s\n"
#~ msgstr "wyczyszczono has³o zapamiêtane z ID: %s\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "poszukiwanie ,,%s'' z %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "brak akcji serwera kluczy!\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr ""
#~ "OSTRZE¯ENIE: modu³ obs³ugi serwera kluczy z innej wersji GnuPG (%s)\n"
msgstr "Digite a frase secreta: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "erro ao criar porta-chaves `%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "AVISO: %s sobrepõe %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "chave secreta não disponível"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: ignorado: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "a escrever chave privada para `%s'\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "chave %08lX: assintura da subchave no local errado - ignorado\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: ignorado: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "AVISO: nada exportado\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "erro ao criar `%s': %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[Utilizador não encontrado]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "opções de importação inválidas\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "erro na leitura de `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "erro ao criar porta-chaves `%s': %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "erro ao criar `%s': %s\n"
msgstr "chave `%s' não encontrada: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "opções de importação inválidas\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NOME|usar NOME como chave secreta por omissão"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NOME|usar NOME como chave secreta por omissão"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "Chave inválida %08lX tornada válida por --allow-non-selfsigned-uid\n"
msgstr "NOTA: o ficheiro antigo de opções por omissão `%s' foi ignorado\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "erro ao criar porta-chaves `%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgstr ""
"AVISO: destinatários (-r) dados sem utilizar uma cifra de chave pública\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "algoritmo de dispersão inválido `%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "algoritmo de dispersão inválido `%s'\n"
-
msgid "--store [filename]"
msgstr "--store [nome_do_ficheiro]"
msgstr "A geração de chaves falhou: %s\n"
#, fuzzy, c-format
+msgid "export as ssh key failed: %s\n"
+msgstr "A geração de chaves falhou: %s\n"
+
+#, fuzzy, c-format
msgid "keyserver search failed: %s\n"
msgstr "A geração de chaves falhou: %s\n"
msgid "[self-signature]"
msgstr "[auto-assinatura]"
-msgid "1 bad signature\n"
-msgstr "1 assinatura incorrecta\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d assinaturas incorrectas\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 assinatura não verificada por falta de chave\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d assinaturas não verificadas por falta de chaves\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 assinatura não verificada devido a um erro\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d assinaturas incorrectas\n"
+msgstr[1] "%d assinaturas incorrectas\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d assinaturas não verificadas devido a erros\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 assinatura não verificada por falta de chave\n"
+msgstr[1] "1 assinatura não verificada por falta de chave\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 ID de utilizador sem auto-assinatura válida detectado\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 assinatura não verificada devido a um erro\n"
+msgstr[1] "1 assinatura não verificada devido a um erro\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d IDs de utilizadores sem auto-assinaturas válidas detectados\n"
+#, fuzzy, c-format
+#| 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] "%d IDs de utilizadores sem auto-assinaturas válidas detectados\n"
+msgstr[1] "%d IDs de utilizadores sem auto-assinaturas válidas detectados\n"
#, fuzzy
msgid ""
msgid "Really delete this self-signature? (y/N)"
msgstr "Realmente remover esta auto-assinatura? (s/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "%d assinatura removida.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d assinaturas removidas.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "%d assinatura removida.\n"
+msgstr[1] "%d assinatura removida.\n"
msgid "Nothing deleted.\n"
msgstr "Nada removido.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Utilizador \"%s\" está revocado."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Utilizador \"%s\" está revocado."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Utilizador \"%s\" está revocado."
+msgstr[1] "Utilizador \"%s\" está revocado."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Por favor corrija primeiro o erro\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Você precisa de uma frase secreta para proteger a sua chave.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Por favor digite a frase secreta \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "a frase secreta não foi repetida corretamente; tente outra vez"
-
-#, c-format
-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 ""
-"Você não quer uma frase secreta - provavelmente isto é uma *má* idéia!\n"
-"Vou continuar assim mesmo. Você pode mudar sua frase secreta a\n"
-"qualquer hora, usando este programa com a opção \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Geração de chave cancelada.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "impossível criar `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "NOTA: chave secreta %08lX expirou em %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "a escrever chave pública para `%s'\n"
msgid "Really create? (y/N) "
msgstr "Realmente criar? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "remoção do bloco de chave falhou: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "impossível criar `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "NOTA: chave secreta %08lX expirou em %s\n"
-
msgid "never "
msgstr ""
msgid "Signature notation: "
msgstr "Notação de assinatura: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 assinatura incorrecta\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d assinaturas incorrectas\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d assinaturas incorrectas\n"
+msgstr[1] "%d assinaturas incorrectas\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Porta-chaves"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "criação de armadura falhou: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "a verificar o porta chaves `%s'\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu chave verificadas (%lu assinaturas)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu chave verificadas (%lu assinaturas)\n"
+msgstr[1] "%lu chave verificadas (%lu assinaturas)\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu chave verificadas (%lu assinaturas)\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 assinatura incorrecta\n"
+msgstr[1] "1 assinatura incorrecta\n"
#, c-format
msgid "%s: keyring created\n"
msgstr ""
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "a pedir a chave %08lX de %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "a pedir a chave %08lX de %s\n"
+msgstr[1] "a pedir a chave %08lX de %s\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "AVISO: dono pouco seguro em %s \"%s\"\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "a pedir a chave %08lX de %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "chave `%s' não encontrada: %s\n"
msgid "requesting key %s from %s\n"
msgstr "a pedir a chave %08lX de %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "a procurar por \"%s\" no servidor HKP %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "opções de exportação inválidas\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "assinatura %s de: \"%s\"\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "armadura: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "armadura: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: opção depreciada \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: ignorado: a chave pública já está presente\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "impossível ligar a `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "algoritmo de dispersão inválido `%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "algoritmo de dispersão inválido `%s'\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Não especificou um identificador de utilizador. (pode usar \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "dados não gravados; use a opção \"--output\" para gravá-los\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "erro ao criar `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Assinatura separada.\n"
msgstr "Gerar um certificado de revogação para esta assinatura? (s/N)"
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "chave %08lX: certificado de revogação \"%s\" adicionado\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "chave `%s' não encontrada: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "erro ao criar porta-chaves `%s': %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Gerar um certificado de revogação para esta assinatura? (s/N)"
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "a chave pública %08lX é %lu segundo mais nova que a assinatura\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "a chave pública %08lX é %lu segundo mais nova que a assinatura\n"
+msgstr[1] "a chave pública %08lX é %lu segundo mais nova que a assinatura\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "a chave pública %08lX é %lu segundos mais nova que a assinatura\n"
+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] "a chave pública %08lX é %lu segundo mais nova que a assinatura\n"
+msgstr[1] "a chave pública %08lX é %lu segundo mais nova que a assinatura\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"a chave foi criada %lu segundo no futuro\n"
+"(viagem no tempo ou problema no relógio)\n"
+msgstr[1] ""
"a chave foi criada %lu segundo no futuro\n"
"(viagem no tempo ou problema no relógio)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"a chave foi criada %lu segundos no futuro\n"
+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] ""
+"a chave foi criada %lu segundo no futuro\n"
+"(viagem no tempo ou problema no relógio)\n"
+msgstr[1] ""
+"a chave foi criada %lu segundo no futuro\n"
"(viagem no tempo ou problema no relógio)\n"
#, fuzzy, c-format
msgstr "linha de entrada maior que %d caracteres\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "erro ao enviar para `%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Algoritmos suportados:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "erro ao enviar para `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "erro ao escrever no porta-chaves secreto `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: erro ao escrever registo de diretório: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "erro na leitura de `%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "erro ao enviar para `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "chave pública %08lX não encontrada: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "erro na leitura de `%s': %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "erro na criação da frase secreta: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Política: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "erro na criação da frase secreta: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "listar as chaves"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [ficheiros]|imprimir \"digests\" de mensagens"
+msgstr[1] "|algo [ficheiros]|imprimir \"digests\" de mensagens"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "erro na criação da frase secreta: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "erro ao enviar para `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "`%s' não é um identificador longo de chave válido\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "não é necessária uma verificação da base de dados de confiança\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "chave pública %08lX não encontrada: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr ""
msgid "checking the trustdb\n"
msgstr "a verificar a base de dados de confiança\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu chaves processadas até agora\n"
+msgstr[1] "%lu chaves processadas até agora\n"
+
#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr ""
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy
msgid "no ultimately trusted keys found\n"
"chave pública da chave absolutamente de confiança %08lX não encontrada\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "remoção do bloco de chave falhou: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "A geração de chaves falhou: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "A geração de chaves falhou: %s\n"
+msgstr[1] "A geração de chaves falhou: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "erro na criação da frase secreta: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NOME|usar NOME como chave secreta por omissão"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d assinaturas não verificadas por falta de chaves\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d assinaturas não verificadas devido a erros\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 ID de utilizador sem auto-assinatura válida detectado\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "%d assinaturas removidas.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Utilizador \"%s\" está revocado."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Você precisa de uma frase secreta para proteger a sua chave.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Por favor digite a frase secreta \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "a frase secreta não foi repetida corretamente; tente outra vez"
+
+#~ 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 ""
+#~ "Você não quer uma frase secreta - provavelmente isto é uma *má* idéia!\n"
+#~ "Vou continuar assim mesmo. Você pode mudar sua frase secreta a\n"
+#~ "qualquer hora, usando este programa com a opção \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "remoção do bloco de chave falhou: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 assinatura incorrecta\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "criação de armadura falhou: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu chave verificadas (%lu assinaturas)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "a pedir a chave %08lX de %s\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "a procurar por \"%s\" no servidor HKP %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "a chave pública %08lX é %lu segundos mais nova que a assinatura\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "a chave foi criada %lu segundos no futuro\n"
+#~ "(viagem no tempo ou problema no relógio)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "a procurar por \"%s\" no servidor HKP %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "opções de exportação inválidas\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "erro do servidor de chaves"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX criada: %s expira: %s"
-#~ msgid "Policy: "
-#~ msgstr "Política: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "não consigo obter chave do servidor: %s\n"
msgid "Enter passphrase: "
msgstr "Introduceþi fraza-parolã: "
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "eroare la crearea inelului de chei `%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: "
+msgid "WARNING: %s\n"
+msgstr "AVERTISMENT: "
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "cardul OpenPGP nu e disponibil: %s\n"
msgid "remove as much as possible from key during export"
msgstr ""
+#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: sãritã: %s\n"
+
msgid "exporting secret keys not allowed\n"
msgstr "exportul cheilor secrete nu este permis\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "cheia %s: semnãturã subcheie într-un loc greºit - sãritã\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: sãritã: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "AVERTISMENT: nimic exportat\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "eroare la creearea `%s': %s\n"
+
msgid "[User ID not found]"
msgstr "[ID utilizator nu a fost gãsit]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "opþiuni enumerare invalide\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "eroare în `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "eroare la crearea inelului de chei `%s': %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "eroare la creearea `%s': %s\n"
msgstr "cheia secretã \"%s\" nu a fost gãsitã: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "opþiuni enumerare invalide\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NUME|foloseºte NUME ca cheie secretã implicitã"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NUME|foloseºte NUME ca cheie secretã implicitã"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "Cheia invalidã %s fãcutã validã de --allow-non-selfsigned-uid\n"
msgstr "NOTÃ: fisier opþiuni implicite vechi `%s' ignorat\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "eroare la crearea inelului de chei `%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
"AVERTISMENT: destinatari (-r) furnizaþi fãrã a folosi cifrare cu cheie "
"publicã\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "algoritm hash invalid `%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "algoritm hash invalid `%s'\n"
-
msgid "--store [filename]"
msgstr "--store [nume_fiºier]"
msgid "key export failed: %s\n"
msgstr "export cheie eºuat: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "export cheie eºuat: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "cãutare server de chei eºuatã: %s\n"
msgid "[self-signature]"
msgstr "[auto-semnãturã]"
-msgid "1 bad signature\n"
-msgstr "1 semnãturã incorectã\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d semnãturi incorecte\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 semnãturã nu a fost verificatã din cauza unei chei lipsã\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d semnãturi nu au fost verificate din cauza unor chei lipsã\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 semnãturã nu a fost verificatã din cauza unei erori\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d semnãturi incorecte\n"
+msgstr[1] "%d semnãturi incorecte\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d semnãturi nu au fost verificate din cauza unor erori\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 semnãturã nu a fost verificatã din cauza unei chei lipsã\n"
+msgstr[1] "1 semnãturã nu a fost verificatã din cauza unei chei lipsã\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "am gãsit 1 ID utilizator fãrã auto-semnãturã validã\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 semnãturã nu a fost verificatã din cauza unei erori\n"
+msgstr[1] "1 semnãturã nu a fost verificatã din cauza unei erori\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "am gãsit %d ID-uri utilizator fãrã auto-semnãturi valide\n"
+#, fuzzy, c-format
+#| 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] "am gãsit %d ID-uri utilizator fãrã auto-semnãturi valide\n"
+msgstr[1] "am gãsit %d ID-uri utilizator fãrã auto-semnãturi valide\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr "ªtergeþi într-adevãr aceastã auto-semnãturã? (d/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Am ºters %d semnãturi.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Am ºters %d semnãturi.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Am ºters %d semnãturi.\n"
+msgstr[1] "Am ºters %d semnãturi.\n"
msgid "Nothing deleted.\n"
msgstr "Nu am ºters nimic.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "ID utilizator \"%s\" a fost revocat."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "ID utilizator \"%s\" a fost revocat."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "ID utilizator \"%s\" a fost revocat."
+msgstr[1] "ID utilizator \"%s\" a fost revocat."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Vã rugãm corectaþi mai întâi eroarea\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Aveþi nevoie de o frazã-parolã pentru a vã proteja cheia secretã.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Vã rugãm introduceþi fraza-parolã; aceasta este o propoziþie secretã \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "fraza-parolã nu a fost repetatã corect; mai încercaþi o datã"
-
-#, c-format
-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 ""
-"Nu aveþi nevoie de o frazã-parolã - aceasta este probabil o idee *proastã*!\n"
-"O sã o fac oricum. Puteþi schimba fraza-parolã oricând, folosind acest\n"
-"program cu opþiunea \"--edit-key\".\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Generarea cheii a fost anulatã.\n"
#, fuzzy, c-format
+#| msgid "can't create backup file `%s': %s\n"
+msgid "can't create backup file '%s': %s\n"
+msgstr "nu pot crea fiºier de rezervã `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "NOTE: backup of card key saved to `%s'\n"
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "NOTÃ: copia de siguranþa a cheii cardului salvatã la `%s'\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "scriu cheia publicã în `%s'\n"
msgid "Really create? (y/N) "
msgstr "Creaþi într-adevãr? (d/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "stocarea cheii pe card a eºuat: %s\n"
-
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
-msgid "can't create backup file '%s': %s\n"
-msgstr "nu pot crea fiºier de rezervã `%s': %s\n"
-
-#, fuzzy, c-format
-#| msgid "NOTE: backup of card key saved to `%s'\n"
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "NOTÃ: copia de siguranþa a cheii cardului salvatã la `%s'\n"
-
msgid "never "
msgstr "niciodatã "
msgid "Signature notation: "
msgstr "Notare semnãturã: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 semnãturã incorectã\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d semnãturi incorecte\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d semnãturi incorecte\n"
+msgstr[1] "%d semnãturi incorecte\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Inel de chei"
msgstr " Card nr. serie ="
#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "redenumirea `%s' ca `%s' a eºuat: %s\n"
-
-#, fuzzy, c-format
#| msgid "caching keyring `%s'\n"
msgid "caching keyring '%s'\n"
msgstr "pun în cache inelul de chei `%s'\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu chei puse în cache pânã acum (%lu semnãturi)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu chei puse în cache pânã acum (%lu semnãturi)\n"
+msgstr[1] "%lu chei puse în cache pânã acum (%lu semnãturi)\n"
#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu chei puse în cache (%lu semnãturi)\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 semnãturã incorectã\n"
+msgstr[1] "1 semnãturã incorectã\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "\"%s\" nu este un ID de cheie: sãrit\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "reactualizez 1 cheie de la %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "reactualizez %d chei de la %s\n"
+msgstr[1] "reactualizez %d chei de la %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "AVERTISMENT: nu pot reactualiza cheia %s via %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "reactualizez %d chei de la %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "cheia \"%s\" nu a fost gãsitã pe serverul de chei\n"
msgid "requesting key %s from %s\n"
msgstr "cer cheia %s de la %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "trimit cheia %s serverului %s %s\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "nici o acþiune pentru serverul de chei!\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "semnãturã %s, algoritm rezumat %s\n"
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s)\n"
+msgstr "eroare citire în `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "eroare citire în `%s': %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: opþiune învechitã \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: sãritã: cheia publicã este deja prezentã\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "nu mã pot conecta la `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "algoritm hash invalid `%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "algoritm hash invalid `%s'\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Nu aþi specificat un ID utilizator. (puteþi folosi \"-r\")\n"
msgstr ""
"datele nu au fost salvate: folosiþi opþiunea \"--output\" pentru a le salva\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "eroare la creearea `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Semnãturã detaºatã.\n"
msgstr "Creaþi un certificat de revocare pentru aceastã cheie? (d/N) "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Certificat de revocare creat.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "cheia secretã \"%s\" nu a fost gãsitã: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "eroare la crearea inelului de chei `%s': %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Creaþi un certificat de revocare pentru aceastã cheie? (d/N) "
"AVERTISMENT: subcheia de semnare %s are o certificare-reciprocã invalidã "
"(invalid cross-certification)\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "cheie publicã %s este mai nouã cu %lu secundã decât semnãtura\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "cheie publicã %s este mai nouã cu %lu secundã decât semnãtura\n"
+msgstr[1] "cheie publicã %s este mai nouã cu %lu secundã decât semnãtura\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "cheie publicã %s este mai nouã cu %lu secunde decât semnãtura\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "cheie publicã %s este mai nouã cu %lu secundã decât semnãtura\n"
+msgstr[1] "cheie publicã %s este mai nouã cu %lu secundã decât semnãtura\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"cheia %s a fost creatã %lu secundã în viitor (warp în timp sau probleme cu "
+"ceasul)\n"
+msgstr[1] ""
"cheia %s a fost creatã %lu secundã în viitor (warp în timp sau probleme cu "
"ceasul)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"cheia %s a fost creatã %lu secunde în viitor (warp în timp sau probleme cu "
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] ""
+"cheia %s a fost creatã %lu secundã în viitor (warp în timp sau probleme cu "
+"ceasul)\n"
+msgstr[1] ""
+"cheia %s a fost creatã %lu secundã în viitor (warp în timp sau probleme cu "
"ceasul)\n"
#, fuzzy, c-format
msgstr "linii de intrare mai lungi de %d caractere\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "eroare trimitere la `%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Algoritmuri suportate:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "eroare trimitere la `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "eroare la scrierea inelului de chei secret `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: eroare scriere înregistrare dir: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "eroare în `%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "eroare trimitere la `%s': %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "cheia publicã %s nu a fost gãsitã: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "eroare la citire `%s': %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting new PIN: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "eroare la obþinere noului PIN: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Politica: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "eroare la obþinere noului PIN: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "enumerã chei"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [fiºiere]|afiºeazã rezumate mesaje"
+msgstr[1] "|algo [fiºiere]|afiºeazã rezumate mesaje"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "eroare la crearea frazei-parolã: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "eroare trimitere la `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "`%s' nu este un ID-cheie de lungime validã\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "nu e nevoie de o actualizare trustdb cu modelul de încredere `%s'\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "cheia publicã %s nu a fost gãsitã: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "vã rugãm faceþi un --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "verific trustdb\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d chei procesate (%d numãrãtori valide anulate)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu chei procesate pânã acum\n"
+msgstr[1] "%lu chei procesate pânã acum\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d chei procesate (%d numãrãtori valide anulate)\n"
+msgstr[1] "%d chei procesate (%d numãrãtori valide anulate)\n"
msgid "no ultimately trusted keys found\n"
msgstr "nu am gãsit nici o cheie cu încredere supremã\n"
msgstr "cheia publicã a cheii cu încredere supremã %s nu a fost gãsitã\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-"%d marginal(e) necesare, %d complet(e) necesare, model de încredere %s\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "cardul este încuiat permanent!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr "%d încercãri PIN Admin rãmase înainte de a încuia cardul permanent\n"
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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 încercãri PIN Admin rãmase înainte de a încuia cardul permanent\n"
+msgstr[1] ""
+"%d încercãri PIN Admin rãmase înainte de a încuia cardul permanent\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgid "generating key failed\n"
msgstr "generarea cheii a eºuat\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "generarea cheii este completã (%d secunde)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "generarea cheii este completã (%d secunde)\n"
+msgstr[1] "generarea cheii este completã (%d secunde)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "structurã invalidã a cardului OpenPGP (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "eroare la crearea frazei-parolã: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NUME|foloseºte NUME ca cheie secretã implicitã"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d semnãturi nu au fost verificate din cauza unor chei lipsã\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d semnãturi nu au fost verificate din cauza unor erori\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "am gãsit 1 ID utilizator fãrã auto-semnãturã validã\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Am ºters %d semnãturi.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "ID utilizator \"%s\" a fost revocat."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Aveþi nevoie de o frazã-parolã pentru a vã proteja cheia secretã.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Vã rugãm introduceþi fraza-parolã; aceasta este o propoziþie secretã \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "fraza-parolã nu a fost repetatã corect; mai încercaþi o datã"
+
+#~ 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 ""
+#~ "Nu aveþi nevoie de o frazã-parolã - aceasta este probabil o idee "
+#~ "*proastã*!\n"
+#~ "O sã o fac oricum. Puteþi schimba fraza-parolã oricând, folosind acest\n"
+#~ "program cu opþiunea \"--edit-key\".\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "stocarea cheii pe card a eºuat: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 semnãturã incorectã\n"
+
+#, fuzzy
+#~| msgid "renaming `%s' to `%s' failed: %s\n"
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "redenumirea `%s' ca `%s' a eºuat: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu chei puse în cache (%lu semnãturi)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "reactualizez 1 cheie de la %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "trimit cheia %s serverului %s %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "cheie publicã %s este mai nouã cu %lu secunde decât semnãtura\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "cheia %s a fost creatã %lu secunde în viitor (warp în timp sau probleme "
+#~ "cu ceasul)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr ""
+#~ "%d marginal(e) necesare, %d complet(e) necesare, model de încredere %s\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "caut \"%s\" de pe %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "nici o acþiune pentru serverul de chei!\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr ""
#~ "AVERTISMENT: manipulator server de chei dintr-o versiune diferitã de "
#~ msgid "ERROR: "
#~ msgstr "EROARE: "
-#~ msgid "WARNING: "
-#~ msgstr "AVERTISMENT: "
-
#~ msgid "... this is a bug (%s:%d:%s)\n"
#~ msgstr "... acesta este un bug (%s:%d:%s)\n"
#~ msgid " signed by %08lX at %s%s\n"
#~ msgstr " semnatã de %08lX pe %s%s\n"
-#~ msgid "Policy: "
-#~ msgstr "Politica: "
-
#~ msgid "Experimental algorithms should not be used!\n"
#~ msgstr "Algoritme experimentale nu ar trebui folosite!\n"
msgid "Enter passphrase: "
msgstr "Введите фразу-пароль:"
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "ошибка создания таблицы ключей '%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "Внимание: %s отменяет %s\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "Карта OpenPGP недоступна: %s\n"
msgid "error reading keyblock: %s\n"
msgstr "ошибка чтения блока ключей: %s\n"
-#, fuzzy, c-format
-#| msgid "key \"%s\" not found: %s\n"
+#, c-format
msgid "key \"%s\" not found\n"
-msgstr "ключ \"%s\" не найден: %s\n"
+msgstr "ключ \"%s\" не найден\n"
msgid "(unless you specify the key by fingerprint)\n"
msgstr "(если только Вы не задали ключ отпечатком)\n"
msgid "remove as much as possible from key during export"
msgstr "при экспорте удалить из ключа как можно больше"
+msgid " - skipped"
+msgstr " - пропущено"
+
msgid "exporting secret keys not allowed\n"
msgstr "экспорт секретных ключей не разрешен\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "ключ %s: материал ключа на карте - пропущен\n"
-msgid " - skipped"
-msgstr " - пропущено"
-
msgid "WARNING: nothing exported\n"
msgstr "Внимание: нечего экспортировать\n"
+#, c-format
+msgid "error creating '%s': %s\n"
+msgstr "ошибка создания '%s': %s\n"
+
msgid "[User ID not found]"
msgstr "[ID пользователя не найден]"
#, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "(проверьте аргумент параметра '%s')\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Warning: value '%s' for option '%s' should be a long key ID or a "
+#| "fingerprint\n"
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+"Внимание: значение '%s' параметра '%s' должно быть длинным идентификатором "
+"или отпечатком ключа\n"
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "ошибка закрытия %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error searching the keyring: %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "ошибка поиска в таблице ключей %s\n"
+
+#, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "автоматически получили '%s' через %s\n"
#, c-format
msgid "secret key \"%s\" not found: %s\n"
-msgstr "закрытый ключ \"%s\" не найден: %s\n"
+msgstr "секретный ключ \"%s\" не найден: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "не хватает аргумента для параметра \"%.50s\"\n"
+#| msgid "using \"%s\" as default secret key\n"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "\"%s\" используется в качестве основного секретного ключа\n"
#, fuzzy, c-format
-#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
-msgstr "|NAME|использовать NAME как основной закрытый ключ"
+#| msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
+msgstr "\"%s\" используется в качестве основного секретного ключа\n"
+
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgid "|VALUE|set the TOFU policy for a key (good, unknown, bad, ask, auto)"
msgstr ""
+"|VALUE|установить правила TOFU для ключа (good - хороший, unknown - "
+"неизвестно, bad - плохой, ask - спрашивать, auto - автоматически)"
msgid "create ascii armored output"
msgstr "вывод в текстовом формате"
msgid "show expiration dates during signature listings"
msgstr "показать в списке подписей сроки действия"
-#, fuzzy
-#| msgid "Available keys:\n"
msgid "available TOFU policies:\n"
-msgstr "Ð\94оÑ\81Ñ\82Ñ\83пнÑ\8bе клÑ\8eÑ\87и:\n"
+msgstr "Ð\94оÑ\81Ñ\82Ñ\83пнÑ\8bе пÑ\80авила TOFU:\n"
-#, fuzzy, c-format
-#| msgid "unknown option '%s'\n"
+#, c-format
msgid "unknown TOFU policy '%s'\n"
-msgstr "неизвеÑ\81Ñ\82нÑ\8bй паÑ\80амеÑ\82Ñ\80 '%s'\n"
+msgstr "неизвеÑ\81Ñ\82нÑ\8bе пÑ\80авила TOFU '%s'\n"
msgid "(use \"help\" to list choices)\n"
-msgstr ""
+msgstr "(\"help\" выведет список вариантов)\n"
-#, fuzzy, c-format
-#| msgid "unknown command '%s'\n"
+#, c-format
msgid "unknown TOFU DB format '%s'\n"
-msgstr "неизвестная команда '%s'\n"
+msgstr "неизвестный формат базы данных TOFU '%s'\n"
#, c-format
msgid "Note: old default options file '%s' ignored\n"
msgstr "Замечание: старый основной файл параметров '%s' проигнорирован\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "параметр \"%.50s\" неоднозначен\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring '%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "ошибка создания таблицы ключей '%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "слишком старая версия libcrypt (нужно %s, есть %s)\n"
"ВНИМАНИЕ: получатели (-r) заданы без использования шифрования с открытым "
"ключом\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "строка %d: задана недопустимая дата\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "строка %d: задана недопустимая дата\n"
-
msgid "--store [filename]"
msgstr "--store [файл]"
msgid "key export failed: %s\n"
msgstr "сбой при экспорте ключа: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "сбой при экспорте ключа: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "сбой при поиске на сервере ключей: %s\n"
msgid "invalid hash algorithm '%s'\n"
msgstr "недопустимая хэш-функция '%s'\n"
-#, fuzzy, c-format
-#| msgid "error loading certificate '%s': %s\n"
+#, c-format
msgid "error parsing key specification '%s': %s\n"
-msgstr "ошибка загрузки сертификата '%s': %s\n"
+msgstr "ошибка синтаксического анализа спецификации ключа '%s': %s\n"
#, c-format
msgid "'%s' does not appear to be a valid key ID, fingerprint or keygrip\n"
-msgstr ""
+msgstr "'%s' не является идентификатором, отпечатком или кодом ключа\n"
msgid "[filename]"
msgstr "[файл]"
#. created again.
#, c-format
msgid "To migrate '%s', with each smartcard, run: %s\n"
-msgstr ""
+msgstr "Для переноса '%s' выполните на каждой криптографической карте: %s\n"
#, c-format
msgid "key %s: no public key - can't apply revocation certificate\n"
msgid "keyblock resource '%s': %s\n"
msgstr "источник блока ключей '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "error opening '%s': %s\n"
+#, c-format
msgid "error opening key DB: %s\n"
-msgstr "ошибка открытия '%s': %s\n"
+msgstr "ошибка открытия базы данных ключей: %s\n"
#, c-format
msgid "failed to rebuild keyring cache: %s\n"
msgid "[self-signature]"
msgstr "[самоподпись]"
-msgid "1 bad signature\n"
-msgstr "1 плохая подпись\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d плохих подписей\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 подпись не проверена за отсутствием ключа\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d подписей не проверено за отсутствием ключей\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 подпись не проверена из-за ошибки\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d плохих подписей\n"
+msgstr[1] "%d плохих подписей\n"
+msgstr[2] "%d плохих подписей\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d подписей не проверено из-за ошибок\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 подпись не проверена за отсутствием ключа\n"
+msgstr[1] "1 подпись не проверена за отсутствием ключа\n"
+msgstr[2] "1 подпись не проверена за отсутствием ключа\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "обнаружен 1 ID пользователя без действительной самоподписи\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 подпись не проверена из-за ошибки\n"
+msgstr[1] "1 подпись не проверена из-за ошибки\n"
+msgstr[2] "1 подпись не проверена из-за ошибки\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "обнаружено %d ID пользователя без действительной самоподписи\n"
+#, fuzzy, c-format
+#| 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] "обнаружено %d ID пользователя без действительной самоподписи\n"
+msgstr[1] "обнаружено %d ID пользователя без действительной самоподписи\n"
+msgstr[2] "обнаружено %d ID пользователя без действительной самоподписи\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
#, c-format
msgid "Skipping user ID \"%s\", which is not a text ID.\n"
-msgstr ""
+msgstr "ID пользователя \"%s\" пропущен: это не текстовый ID.\n"
#, c-format
msgid "User ID \"%s\" is revoked."
msgid "Really sign all user IDs? (y/N) "
msgstr "Действительно подписать все ID пользователя? (y/N) "
-#, fuzzy
-#| msgid "Really sign all user IDs? (y/N) "
msgid "Really sign all text user IDs? (y/N) "
-msgstr "Действительно подписать все ID пользователя? (y/N) "
+msgstr "Действительно подписать все текстовые ID пользователя? (y/N) "
msgid "Hint: Select the user IDs to sign\n"
msgstr "Подсказка: Выберите ID пользователей, которые нужно подписать\n"
msgid "Really delete this self-signature? (y/N)"
msgstr "Действительно удалить данную самоподпись? (y/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Удалена %d подпись.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Удалено %d подписей.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Удалена %d подпись.\n"
+msgstr[1] "Удалена %d подпись.\n"
+msgstr[2] "Удалена %d подпись.\n"
msgid "Nothing deleted.\n"
msgstr "Ничего не удалено.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "ID пользователя \"%s\" сжат: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "ID пользователя \"%s\": %d подпись удалена\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "ID пользователя \"%s\": %d подписей удалено\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "ID пользователя \"%s\": %d подпись удалена\n"
+msgstr[1] "ID пользователя \"%s\": %d подпись удалена\n"
+msgstr[2] "ID пользователя \"%s\": %d подпись удалена\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Вы уверены, что хотите назначить данный ключ отзывающим? (y/N) "
-#, fuzzy
-#| msgid ""
-#| "Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
-msgstr "Вы уверены, что хотите назначить данный ключ отзывающим? (y/N) "
+msgstr ""
+"Вы уверены, что хотите изменить срок действия сразу нескольких подключей? (y/"
+"N) "
msgid "Changing expiration time for a subkey.\n"
msgstr "Смена срока действия подключа.\n"
msgid "No user ID with hash %s\n"
msgstr "Нет ID пользователя с хэшем %s\n"
-#, fuzzy, c-format
-#| msgid "No subkey with index %d\n"
+#, c-format
msgid "No subkey with key ID '%s'.\n"
-msgstr "Нет подключа с индексом %d\n"
+msgstr "Нет подключа с ID ключа '%s'.\n"
#, c-format
msgid "No subkey with index %d\n"
#, c-format
msgid "The characters '%s' and '%s' may not appear in name\n"
-msgstr ""
+msgstr "Символы '%s' и '%s' в имени появляться не могут\n"
msgid "Name may not start with a digit\n"
msgstr "Имя не должно начинаться с цифры\n"
msgstr "Сначала исправьте ошибку\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Для защиты секретного ключа необходима фраза-пароль.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Введите фразу-пароль для защиты архивной копии нового ключа для шифрования."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "фраза-пароль повторена неверно; попробуйте еще раз"
-
-#, c-format
-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 ""
-"Хотите обойтись без фразы-пароля? Скорее всего, это ПЛОХАЯ мысль!\n"
-"Работа будет продолжена. Вы можете сменить фразу-пароль в любое время,\n"
-"запустив данную программу с параметром \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Создание ключа прервано.\n"
#, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "не могу создать архивную копию, файл '%s': %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "Замечание: архивная копия ключа с карты сохранена в '%s'\n"
+
+#, c-format
msgid "writing public key to '%s'\n"
msgstr "сохранение открытого ключа в '%s'\n"
msgid "Really create? (y/N) "
msgstr "Действительно создать? (y/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "сбой сохранения ключа на карте: %s\n"
-
-#, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "не могу создать архивную копию, файл '%s': %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "Замечание: архивная копия ключа с карты сохранена в '%s'\n"
-
msgid "never "
msgstr "никогда "
msgid "Signature notation: "
msgstr "Примечание к подписи: "
-msgid "1 good signature\n"
-msgstr "1 хорошая подпись\n"
-
-#, c-format
-msgid "%d good signatures\n"
-msgstr "%d хороших подписей\n"
+#, fuzzy, c-format
+#| msgid "%d good signatures\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d хороших подписей\n"
+msgstr[1] "%d хороших подписей\n"
+msgstr[2] "%d хороших подписей\n"
-#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr "Внимание: %lu ключей пропущено из-за большого размера\n"
+#, fuzzy, c-format
+#| msgid "Warning: %lu key(s) skipped due to their large size\n"
+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] "Внимание: %lu ключей пропущено из-за большого размера\n"
+msgstr[1] "Внимание: %lu ключей пропущено из-за большого размера\n"
+msgstr[2] "Внимание: %lu ключей пропущено из-за большого размера\n"
msgid "Keyring"
msgstr "Таблица ключей"
msgstr " серийный номер карты ="
#, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "сбой при переименовании '%s' в '%s': %s\n"
-
-#, c-format
msgid "caching keyring '%s'\n"
msgstr "занесение таблицы ключей '%s' в буфер\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "пока в буфер помещено %lu ключей (%lu подписей)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "пока в буфер помещено %lu ключей (%lu подписей)\n"
+msgstr[1] "пока в буфер помещено %lu ключей (%lu подписей)\n"
+msgstr[2] "пока в буфер помещено %lu ключей (%lu подписей)\n"
-#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu ключей помещено в буфер (%lu подписей)\n"
+#, fuzzy, c-format
+#| msgid "flush the cache"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "записать буфер на диск"
+msgstr[1] "записать буфер на диск"
+msgstr[2] "записать буфер на диск"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 плохая подпись\n"
+msgstr[1] "1 плохая подпись\n"
+msgstr[2] "1 плохая подпись\n"
#, c-format
msgid "%s: keyring created\n"
#, c-format
msgid "\"%s\" not a key ID: skipping\n"
-msgstr "\"%s\" не идентификатор ключа: пропущен\n"
+msgstr "\"%s\" - не ID ключа: пропущен\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "обновление 1 ключа из %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "обновление %d ключей из %s\n"
+msgstr[1] "обновление %d ключей из %s\n"
+msgstr[2] "обновление %d ключей из %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "Внимание: невозможно обновить ключ %s с %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "обновление %d ключей из %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "ключ \"%s\" не найден на сервере ключей\n"
msgid "requesting key %s from %s\n"
msgstr "получение ключа %s с %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "отправка ключа %s на сервер %s %s\n"
+#, fuzzy
+#| msgid "invalid keyserver options\n"
+msgid "no keyserver known\n"
+msgstr "недопустимые параметры сервера ключей\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "Замечание: подписи с хэш-функцией %s игнорируются\n"
+#, fuzzy, c-format
+#| msgid "%s:%u: read error: %s\n"
+msgid "(reported error: %s)\n"
+msgstr "%s:%u: ошибка чтения: %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in '%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "ошибка чтения в '%s': %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: параметр \"%s\" не рекомендуется\n"
msgid "ECDSA public key is expected to be in SEC encoding multiple of 8 bits\n"
msgstr "Открытый ключ ECDSA бывает в кодировке SEC, кратной 8 битам\n"
-#, fuzzy, c-format
-#| msgid "Unknown signature type '%s'\n"
+#, c-format
msgid "unknown weak digest '%s'\n"
-msgstr "Ð\9dеизвеÑ\81Ñ\82нÑ\8bй Ñ\82ип подпиÑ\81и '%s'\n"
+msgstr "неизвеÑ\81Ñ\82нÑ\8bй Ñ\81лабÑ\8bй Ñ\85Ñ\8dÑ\88 '%s'\n"
#, c-format
msgid "File '%s' exists. "
msgid "%s: skipped: public key already present\n"
msgstr "%s: пропущено: открытый ключ уже существует\n"
+#, fuzzy, c-format
+#| msgid "can't connect to '%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "не могу подключиться к '%s': %s\n"
+
+#, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "задан параметр '%s', но не заданы ключи по умолчанию\n"
+
+#, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "задан параметр '%s', но параметр '%s' не задан\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Не задан ID пользователя (можно использовать \"-r\").\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "данные не сохранены; используйте \"--output\" для сохранения\n"
-#, c-format
-msgid "error creating '%s': %s\n"
-msgstr "ошибка создания '%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Отделенная подпись.\n"
msgid "(This is a sensitive revocation key)\n"
msgstr "(Это особо важный ключ отзыва)\n"
-#, fuzzy
-#| msgid "Secret key is available.\n"
msgid "Secret key is not available.\n"
-msgstr "Ð\97акÑ\80Ñ\8bÑ\82Ñ\8bй клÑ\8eÑ\87 доступен.\n"
+msgstr "СекÑ\80еÑ\82нÑ\8bй клÑ\8eÑ\87 недоступен.\n"
msgid "Create a designated revocation certificate for this key? (y/N) "
msgstr "Создать сертификат отзыва данного ключа? (y/N) "
msgstr "Это сертификат отзыва ключа 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 ""
+
+#, fuzzy
+#| msgid ""
+#| "Use it to revoke this key in case of a compromise or loss of\n"
+#| "the secret key. However, if the secret key is still accessible,\n"
+#| "it is better to generate a new revocation certificate and give\n"
+#| "a reason for the revocation."
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
"Пользуйтесь им для отзыва этого ключа в случае раскрытия или потери\n"
"секретного ключа. Однако, если секретный ключ доступен, лучше создать\n"
"новый сертификат с указанием причины отзыва."
+#, fuzzy
+#| 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 making use of this revocation certificate."
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
"Чтобы избежать случайного применения этого файла, перед 5 дефисами\n"
"вставлено двоеточие. Удалите это двоеточие в текстовом редакторе\n"
"перед использованием этого сертификата отзыва."
#, fuzzy, c-format
-#| msgid "secret key \"%s\" not found: %s\n"
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Сертификат отзыва создан.\n"
+
+#, c-format
msgid "secret key \"%s\" not found\n"
-msgstr "закрытый ключ \"%s\" не найден: %s\n"
+msgstr "секретный ключ \"%s\" не найден\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' соответствует нескольким секретным ключам:\n"
+
+#, c-format
+msgid "error searching the keyring: %s\n"
+msgstr "ошибка поиска в таблице ключей %s\n"
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Создать сертификат отзыва данного ключа? (y/N) "
msgid "WARNING: signing subkey %s has an invalid cross-certification\n"
msgstr "Внимание: подписывающий подключ %s неправильно перекрестно заверен\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "открытый ключ %s на %lu секунду новее подписи\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "открытый ключ %s на %lu секунду новее подписи\n"
+msgstr[1] "открытый ключ %s на %lu секунду новее подписи\n"
+msgstr[2] "открытый ключ %s на %lu секунду новее подписи\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "открытый ключ %s на %lu секунд новее подписи\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "открытый ключ %s на %lu секунду новее подписи\n"
+msgstr[1] "открытый ключ %s на %lu секунду новее подписи\n"
+msgstr[2] "открытый ключ %s на %lu секунду новее подписи\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"ключ %s создан на %lu секунду в будущем (петля во времени или проблемы с "
+"часами)\n"
+msgstr[1] ""
+"ключ %s создан на %lu секунду в будущем (петля во времени или проблемы с "
+"часами)\n"
+msgstr[2] ""
"ключ %s создан на %lu секунду в будущем (петля во времени или проблемы с "
"часами)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"ключ %s создан на %lu секунд в будущем (петля во времени или проблемы с "
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] ""
+"ключ %s создан на %lu секунду в будущем (петля во времени или проблемы с "
+"часами)\n"
+msgstr[1] ""
+"ключ %s создан на %lu секунду в будущем (петля во времени или проблемы с "
+"часами)\n"
+msgstr[2] ""
+"ключ %s создан на %lu секунду в будущем (петля во времени или проблемы с "
"часами)\n"
#, c-format
msgid "input line longer than %d characters\n"
msgstr "строка ввода длиннее %d символов\n"
+#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "ошибка отправки стандартных параметров: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "алгоритм (не поддерживается): %s"
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "ошибка отправки данных: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing base64 encoding: %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "ошибка записи в кодировке base64: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error initializing reader object: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "ошибка инициализации объекта устройства чтения: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening '%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "ошибка открытия '%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "ошибка отправки данных: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "открытый ключ %s не найден: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error setting OCSP target: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "ошибка установки цели OCSP: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting responder ID: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "ошибка при получении ID ответчика: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "достоверность: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "ошибка получения сохраненных признаков: %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] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "вывести список ключей"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "вывести хэши сообщений"
+msgstr[1] "вывести хэши сообщений"
+msgstr[2] "вывести хэши сообщений"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "ошибка при создании канала конвейера: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "ошибка отправки данных: %s\n"
+
#, c-format
msgid "'%s' is not a valid long keyID\n"
msgstr "'%s' не является допустимым длинным ID ключа\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "обновлять таблицу доверия при модели доверия '%s' не нужно\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "открытый ключ %s не найден: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "выполните --check-trustdb, пожалуйста\n"
msgid "checking the trustdb\n"
msgstr "проверка таблицы доверия\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "обработано %d ключей (сброшено %d счетчиков достоверности)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "обработано %lu ключей\n"
+msgstr[1] "обработано %lu ключей\n"
+msgstr[2] "обработано %lu ключей\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "обработано %d ключей (сброшено %d счетчиков достоверности)\n"
+msgstr[1] "обработано %d ключей (сброшено %d счетчиков достоверности)\n"
+msgstr[2] "обработано %d ключей (сброшено %d счетчиков достоверности)\n"
msgid "no ultimately trusted keys found\n"
msgstr "абсолютно доверенных ключей не найдено\n"
msgstr "открытый ключ для абсолютно доверенного ключа %s не найден\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "требуется %d с ограниченным доверием, %d с полным, модель доверия %s\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "карта окончательно заблокирована!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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 попыток ввода административного PIN перед блокировкой карты\n"
+msgstr[1] ""
+"осталось %d попыток ввода административного PIN перед блокировкой карты\n"
+msgstr[2] ""
"осталось %d попыток ввода административного PIN перед блокировкой карты\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
msgid "generating key failed\n"
msgstr "сбой при генерации ключа\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "создание ключа завершено (%d секунд)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "создание ключа завершено (%d секунд)\n"
+msgstr[1] "создание ключа завершено (%d секунд)\n"
+msgstr[2] "создание ключа завершено (%d секунд)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "недопустимая структура карты OpenPGP (DO 0x93)\n"
msgid "error retrieving '%s': http status %u\n"
msgstr "ошибка получения '%s': статус HTTP %u\n"
-#, fuzzy
-#| msgid "CRL access not possible due to disabled %s\n"
msgid "CRL access not possible due to Tor mode\n"
msgstr ""
"Доступ к списку отозванных сертификатов невозможен\n"
-"из-за Ñ\82ого, Ñ\87Ñ\82о не задейÑ\81Ñ\82вÑ\83еÑ\82Ñ\81Ñ\8f %s\n"
+"из-за Ñ\80ежима Tor\n"
#, c-format
msgid "certificate search not possible due to disabled %s\n"
"по TLS"
msgid "route all network traffic via Tor"
-msgstr ""
+msgstr "проводить весь сетевой обмен через Tor"
msgid ""
"@\n"
msgid "response from server too large; limit is %d bytes\n"
msgstr "слишком длинный ответ сервера; предел - %d байт\n"
-#, fuzzy
-#| msgid "OCSP request not possible due to disabled HTTP\n"
msgid "OCSP request not possible due to Tor mode\n"
-msgstr "запрос OCSP невозможен из-за отключения HTTP\n"
+msgstr "запрос OCSP невозможен из-за режима Tor\n"
msgid "OCSP request not possible due to disabled HTTP\n"
msgstr "запрос OCSP невозможен из-за отключения HTTP\n"
msgid "do not allow the reuse of old passphrases"
msgstr "не разрешать повторное использование старых фраз-паролей"
+#, fuzzy
+#| msgid "|N|set LDAP timeout to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|установить время ожидания LDAP N секунд"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NAME|использовать NAME как основной секретный ключ"
msgid "Options controlling the interactivity and enforcement"
msgstr "Параметры, управляющие интерактивностью и принудительными действиями"
-#, fuzzy
-#| msgid "Options controlling the security"
msgid "Options controlling the use of Tor"
-msgstr "Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b, Ñ\83пÑ\80авлÑ\8fÑ\8eÑ\89ие безопаÑ\81ноÑ\81Ñ\82Ñ\8cÑ\8e"
+msgstr "Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b, Ñ\83пÑ\80авлÑ\8fÑ\8eÑ\89ие пÑ\80именением Tor"
msgid "Configuration for HTTP servers"
msgstr "Настройки серверов HTTP"
"Синтаксис: gpg-check-pattern [параметры] файл_образцов\n"
"Проверить фразу-пароль, поступающую из stdin, по файлу образцов\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "спецификация ключа '%s' неоднозначна\n"
+
+#~ msgid "'%s' matches at least:\n"
+#~ msgstr "'%s' соответствует по меньшей мере:\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d подписей не проверено за отсутствием ключей\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d подписей не проверено из-за ошибок\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "обнаружен 1 ID пользователя без действительной самоподписи\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Удалено %d подписей.\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "ID пользователя \"%s\": %d подписей удалено\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Для защиты секретного ключа необходима фраза-пароль.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Введите фразу-пароль для защиты архивной копии нового ключа для "
+#~ "шифрования."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "фраза-пароль повторена неверно; попробуйте еще раз"
+
+#~ 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 ""
+#~ "Хотите обойтись без фразы-пароля? Скорее всего, это ПЛОХАЯ мысль!\n"
+#~ "Работа будет продолжена. Вы можете сменить фразу-пароль в любое время,\n"
+#~ "запустив данную программу с параметром \"--edit-key\".\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "сбой сохранения ключа на карте: %s\n"
+
+#~ msgid "1 good signature\n"
+#~ msgstr "1 хорошая подпись\n"
+
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "сбой при переименовании '%s' в '%s': %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu ключей помещено в буфер (%lu подписей)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "обновление 1 ключа из %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "отправка ключа %s на сервер %s %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "открытый ключ %s на %lu секунд новее подписи\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "ключ %s создан на %lu секунд в будущем (петля во времени или проблемы с "
+#~ "часами)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr ""
+#~ "требуется %d с ограниченным доверием, %d с полным, модель доверия %s\n"
+
#~ msgid "cleared passphrase cached with ID: %s\n"
#~ msgstr "в буфере сброшена фраза-пароль с индексом %s\n"
msgstr "Vlo¾te heslo: "
#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "chyba pri vytváraní súboru kµúèov (keyring)`%s': %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "VAROVANIE: %s prepí¹e %s\n"
+
+#, fuzzy, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "tajný kµúè nie je dostupný"
msgstr ""
#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: preskoèené: %s\n"
+
+#, fuzzy
msgid "exporting secret keys not allowed\n"
msgstr "zapisujem tajný kµúè do `%s'\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "kµúè %08lX: podpis subkµúèa na zlom mieste - preskoèené \n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: preskoèené: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "VAROVANIE: niè nebolo vyexportované\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "chyba pri vytváraní `%s': %s\n"
+
#, fuzzy
msgid "[User ID not found]"
msgstr "[User id not found]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "neplatný parameter pre import\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "chyba pri èítaní `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "chyba pri vytváraní súboru kµúèov (keyring)`%s': %s\n"
+
+#, fuzzy, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "chyba pri vytváraní `%s': %s\n"
msgstr "tajný kµúè `%s' nebol nájdený: %s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "neplatný parameter pre import\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|MENO|pou¾i MENO ako implicitný tajný kµúè"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|MENO|pou¾i MENO ako implicitný tajný kµúè"
+#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
# c-format
#, fuzzy, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "POZNÁMKA: starý implicitný súbor s mo¾nos»ami `%s ignorovaný'\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "chyba pri vytváraní súboru kµúèov (keyring)`%s': %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgstr ""
"VAROVANIE: daný adresát (-r) bez pou¾itia ¹ifrovania s verejným kµúèom\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "neplatný hashovací algoritmus `%s'\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "neplatný hashovací algoritmus `%s'\n"
-
msgid "--store [filename]"
msgstr "--store [meno súboru]"
msgid "key export failed: %s\n"
msgstr "nepodaril sa export kµúèa: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "nepodaril sa export kµúèa: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "nepodarilo sa nájs» server: %s\n"
msgid "[self-signature]"
msgstr "[podpis kµúèa ním samým]"
-msgid "1 bad signature\n"
-msgstr "1 zlý podpis\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d zlých podpisov\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 podpis neoverený, preto¾e chýba kµúè\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d podpisov neoverených, preto¾e chýba kµúè\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 podpis neoverený, preto¾e vznikla chyba\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d zlých podpisov\n"
+msgstr[1] "%d zlých podpisov\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d podpisov neoverených, preto¾e vznikli chyby\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 podpis neoverený, preto¾e chýba kµúè\n"
+msgstr[1] "1 podpis neoverený, preto¾e chýba kµúè\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "zistený 1 identifikátor u¾ívateµa bez platného podpisu ním samým\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 podpis neoverený, preto¾e vznikla chyba\n"
+msgstr[1] "1 podpis neoverený, preto¾e vznikla chyba\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr ""
+#, fuzzy, c-format
+#| 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] ""
+"zistených %d identifikátorov u¾ívateµa bez platného podpisu ním samým\n"
+msgstr[1] ""
"zistených %d identifikátorov u¾ívateµa bez platného podpisu ním samým\n"
#, fuzzy
msgid "Really delete this self-signature? (y/N)"
msgstr "Skutoène zmaza» tento podpis podpísaný sebou samým? (a/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Zmazaný %d podpis.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Zmazaných %d podpisov.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Zmazaný %d podpis.\n"
+msgstr[1] "Zmazaný %d podpis.\n"
msgid "Nothing deleted.\n"
msgstr "Niè nebolo zmaznané.\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "U¾ívateµské ID \"%s\" je revokované."
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "U¾ívateµské ID \"%s\" je revokované."
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "U¾ívateµské ID \"%s\" je revokované."
+msgstr[1] "U¾ívateµské ID \"%s\" je revokované."
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Najskôr, prosím, opravte chybu\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Na ochranu Vá¹ho tajného kµúèa musíte zada» heslo.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "Prosím, vlo¾te heslo; toto je tajná veta \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "heslo nie je zopakované správne; skúste to znovu"
-
-#, c-format
-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 ""
-"Nechcete heslo - to *nie je* dobrý nápad!\n"
-"Dobre, budem pokraèova» bez hesla. Kedykoµvek mô¾ete heslo zmeni» pou¾itím\n"
-"tohto programu s parametrom \"--edit-key\".\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Vytváranie kµúèa bolo zru¹ené.\n"
#, fuzzy, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "nemô¾em vytvori» `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "POZNÁMKA: platnos» tajného kµúèa %08lX skonèila %s\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "zapisujem verejný kµúè do `%s'\n"
msgid "Really create? (y/N) "
msgstr "Skutoène vytvori»? "
-#, fuzzy, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "zmazanie bloku kµúèa sa nepodarilo: %s\n"
-
-#, fuzzy, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "nemô¾em vytvori» `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "POZNÁMKA: platnos» tajného kµúèa %08lX skonèila %s\n"
-
msgid "never "
msgstr "nikdy "
msgid "Signature notation: "
msgstr "Podpisová notácia: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 zlý podpis\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d zlých podpisov\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d zlých podpisov\n"
+msgstr[1] "%d zlých podpisov\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "súbor kµúèov (keyring)"
msgstr ""
#, fuzzy, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "kódovanie do ASCII formátu zlyhalo: %s\n"
-
-#, fuzzy, c-format
msgid "caching keyring '%s'\n"
msgstr "kontrolujem súbor kµúèov (keyring) `%s'\n"
#, fuzzy, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu kµúèov skontrolovaných (%lu podpisov)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu kµúèov skontrolovaných (%lu podpisov)\n"
+msgstr[1] "%lu kµúèov skontrolovaných (%lu podpisov)\n"
+
+#, c-format
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
#, fuzzy, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu kµúèov skontrolovaných (%lu podpisov)\n"
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 zlý podpis\n"
+msgstr[1] "1 zlý podpis\n"
#, c-format
msgid "%s: keyring created\n"
msgstr ""
#, fuzzy, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "po¾adujem kµúè %08lX z %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "po¾adujem kµúè %08lX z %s\n"
+msgstr[1] "po¾adujem kµúè %08lX z %s\n"
#, fuzzy, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "VAROVANIE: nemô¾em vymaza» doèasný súbor (%s) `%s': %s\n"
#, fuzzy, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "po¾adujem kµúè %08lX z %s\n"
-
-#, fuzzy, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "kµúè `%s' nebol nájdený: %s\n"
msgid "requesting key %s from %s\n"
msgstr "po¾adujem kµúè %08lX z %s\n"
-#, fuzzy, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "vyhµadávam \"%s\" na HKP serveri %s\n"
+#, fuzzy
+msgid "no keyserver known\n"
+msgstr "neplatný parameter pre export\n"
#, fuzzy, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s podpis, hashovací algoritmus %s\n"
+#, fuzzy, c-format
+msgid "(reported error: %s)\n"
+msgstr "chyba pri èítaní: %s\n"
+
+#, fuzzy, c-format
+msgid "(reported error: %s <%s>)\n"
+msgstr "chyba pri èítaní: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: pou¾itie parametra \"%s\" sa neodporúèa\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: preskoèené: verejný kµúè je u¾ obsiahnutý v databáze\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "nemô¾em sa pripoji» k `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "neplatný hashovací algoritmus `%s'\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "neplatný hashovací algoritmus `%s'\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr ""
"Ne¹pecifikovali ste identifikátor u¾ívateµa (user ID). Mô¾ete pou¾i» \"-r\"\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "dáta neboli ulo¾ené; na ich ulo¾enie pou¾ite prepínaè \"--output\"\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "chyba pri vytváraní `%s': %s\n"
-
msgid "Detached signature.\n"
msgstr "Podpis oddelený od dokumentu.\n"
msgstr "Vytvori» pre tento podpis revokaèný certifikát? "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Revokaèný certifikát bol vytvorený.\n"
+
+#, fuzzy, c-format
msgid "secret key \"%s\" not found\n"
msgstr "tajný kµúè `%s' nebol nájdený: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "chyba pri vytváraní súboru kµúèov (keyring)`%s': %s\n"
+
#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Vytvori» pre tento podpis revokaèný certifikát? "
#, fuzzy, c-format
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "verejný kµúè %08lX je o %lu sekund nov¹í ne¾ podpis\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "verejný kµúè %08lX je o %lu sekund nov¹í ne¾ podpis\n"
+msgstr[1] "verejný kµúè %08lX je o %lu sekund nov¹í ne¾ podpis\n"
#, fuzzy, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "verejný kµúè %08lX je o %lu sekund nov¹í ne¾ podpis\n"
+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] "verejný kµúè %08lX je o %lu sekund nov¹í ne¾ podpis\n"
+msgstr[1] "verejný kµúè %08lX je o %lu sekund nov¹í ne¾ podpis\n"
#, fuzzy, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"kµúè bol vytvorený %lu sekund v budúcnosti (do¹lo k zmene èasu alebo\n"
+"je problém so systémovým èasom)\n"
+msgstr[1] ""
"kµúè bol vytvorený %lu sekund v budúcnosti (do¹lo k zmene èasu alebo\n"
"je problém so systémovým èasom)\n"
#, fuzzy, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
+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] ""
+"kµúè bol vytvorený %lu sekund v budúcnosti (do¹lo k zmene èasu alebo\n"
+"je problém so systémovým èasom)\n"
+msgstr[1] ""
"kµúè bol vytvorený %lu sekund v budúcnosti (do¹lo k zmene èasu alebo\n"
"je problém so systémovým èasom)\n"
msgstr "vstupný riadok je dlh¹í ako %d znakov\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "chyba pri posielaní na `%s': %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"Podporované algoritmy:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "chyba pri posielaní na `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "chyba pri zápise do súboru tajných kµúèov `%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: chyba pri zápise adresárového záznamu: %s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "chyba pri èítaní `%s': %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "chyba pri posielaní na `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "public key %s not found: %s\n"
+msgstr "verejný kµúè %08lX nebol nájdený: %s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "chyba pri èítaní `%s': %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error gathering other user IDs: %s\n"
+msgstr "chyba pri vytváraní hesla: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Policy: "
+msgid "policy: %s"
+msgstr "Politika: "
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "chyba pri vytváraní hesla: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "vypísa» zoznam kµúèov"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|algo [súbory]|vypí¹ hash"
+msgstr[1] "|algo [súbory]|vypí¹ hash"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "chyba pri vytváraní hesla: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "chyba pri posielaní na `%s': %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "`%s' nie je platné dlhé keyID\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "nie je nutné kontrolova» databázu dôvery\n"
-#, fuzzy, c-format
-msgid "public key %s not found: %s\n"
-msgstr "verejný kµúè %08lX nebol nájdený: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "prosím vykonajte --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "kontrolujem databázu dôvery\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d kµúèov spracovaných (%d poètov platnosti vymazaných)\n"
+#, fuzzy, c-format
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu kµúèe boli doteraz spracované\n"
+msgstr[1] "%lu kµúèe boli doteraz spracované\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d kµúèov spracovaných (%d poètov platnosti vymazaných)\n"
+msgstr[1] "%d kµúèov spracovaných (%d poètov platnosti vymazaných)\n"
msgid "no ultimately trusted keys found\n"
msgstr "neboli nájdené ¾iadne absolútne dôveryhodné kµúèe\n"
msgstr "verejný kµúè k absolútne dôveryhodnému kµúèu %08lX nebol nájdený\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr ""
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgstr ""
#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+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] ""
+msgstr[1] ""
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgstr "zmazanie bloku kµúèa sa nepodarilo: %s\n"
#, fuzzy, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "Vytvorenie kµúèa sa nepodarilo: %s\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "Vytvorenie kµúèa sa nepodarilo: %s\n"
+msgstr[1] "Vytvorenie kµúèa sa nepodarilo: %s\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr ""
msgid "do not allow the reuse of old passphrases"
msgstr "chyba pri vytváraní hesla: %s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr "|MENO|pou¾i MENO ako implicitný tajný kµúè"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d podpisov neoverených, preto¾e chýba kµúè\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d podpisov neoverených, preto¾e vznikli chyby\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "zistený 1 identifikátor u¾ívateµa bez platného podpisu ním samým\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Zmazaných %d podpisov.\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "U¾ívateµské ID \"%s\" je revokované."
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Na ochranu Vá¹ho tajného kµúèa musíte zada» heslo.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "Prosím, vlo¾te heslo; toto je tajná veta \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "heslo nie je zopakované správne; skúste to znovu"
+
+#~ 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 ""
+#~ "Nechcete heslo - to *nie je* dobrý nápad!\n"
+#~ "Dobre, budem pokraèova» bez hesla. Kedykoµvek mô¾ete heslo zmeni» "
+#~ "pou¾itím\n"
+#~ "tohto programu s parametrom \"--edit-key\".\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "zmazanie bloku kµúèa sa nepodarilo: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 zlý podpis\n"
+
+#, fuzzy
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "kódovanie do ASCII formátu zlyhalo: %s\n"
+
+#, fuzzy
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu kµúèov skontrolovaných (%lu podpisov)\n"
+
+#, fuzzy
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "po¾adujem kµúè %08lX z %s\n"
+
+#, fuzzy
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "vyhµadávam \"%s\" na HKP serveri %s\n"
+
+#, fuzzy
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "verejný kµúè %08lX je o %lu sekund nov¹í ne¾ podpis\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "kµúè bol vytvorený %lu sekund v budúcnosti (do¹lo k zmene èasu alebo\n"
+#~ "je problém so systémovým èasom)\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "vyhµadávam \"%s\" na HKP serveri %s\n"
#, fuzzy
-#~ msgid "no keyserver action!\n"
-#~ msgstr "neplatný parameter pre export\n"
-
-#, fuzzy
#~ msgid "keyserver timed out\n"
#~ msgstr "chyba servera kµúèov"
#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
#~ msgstr "%s%c %4u%c/%08lX vytvorený: %s platnos» do: %s"
-#~ msgid "Policy: "
-#~ msgstr "Politika: "
-
#~ msgid "can't get key from keyserver: %s\n"
#~ msgstr "nemô¾em dosta» kµúè zo servera kµúèov: %s\n"
msgid "Enter passphrase: "
msgstr "Ange lösenfrasen\n"
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "fel när nyckelringen \"%s\" skapades: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "VARNING: %s gäller istället för %s\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "OpenPGP-kort är inte tillgängligt: %s\n"
msgid "remove as much as possible from key during export"
msgstr "ta bort så mycket som möjligt från nyckeln under exportering"
+#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: hoppade över: %s\n"
+
msgid "exporting secret keys not allowed\n"
msgstr "export av hemliga nycklar tillåts inte\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "nyckeln %s: nyckelmaterial på kortet - hoppade över\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: hoppade över: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "VARNING: ingenting exporterat\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "Fel när \"%s\" skapades: %s\n"
+
msgid "[User ID not found]"
msgstr "[Användaridentiteten hittades inte]"
#, fuzzy, c-format
+#| msgid "missing argument for option \"%.50s\"\n"
+msgid "(check argument of option '%s')\n"
+msgstr "argument för flaggan \"%.50s\" saknas\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "fel vid stängning av %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "fel när nyckelringen \"%s\" skapades: %s\n"
+
+#, fuzzy, c-format
#| msgid "automatically retrieved `%s' via %s\n"
msgid "automatically retrieved '%s' via %s\n"
msgstr "hämtade \"%s\" automatiskt via %s\n"
msgstr "hemliga nyckeln \"%s\" hittades inte: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "argument för flaggan \"%.50s\" saknas\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NAMN|använd NAMN som förvald hemlig nyckel"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NAMN|använd NAMN som förvald hemlig nyckel"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
"Ogiltiga nyckeln %s tvingades till giltig med --allow-non-selfsigned-uid\n"
msgstr "OBS: den gamla inställningsfilen \"%s\" används inte\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "flagga \"%.50s\" är tvetydig\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "fel när nyckelringen \"%s\" skapades: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt är för gammalt (behöver %s, har %s)\n"
msgstr ""
"VARNING: mottagare (-r) angivna utan att använda publik nyckel-kryptering\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "rad %d: ogiltig algoritm\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "rad %d: ogiltig algoritm\n"
-
msgid "--store [filename]"
msgstr "--store [filnamn]"
msgid "key export failed: %s\n"
msgstr "export av nyckeln misslyckades: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "export av nyckeln misslyckades: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "sökning på nyckelservern misslyckades: %s\n"
msgid "[self-signature]"
msgstr "[självsignatur]"
-msgid "1 bad signature\n"
-msgstr "1 felaktig signatur\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d felaktiga signaturer\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 signatur validerades inte eftersom nyckeln saknades\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signaturer validerades inte eftersom nycklar saknades\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 signatur validerades inte eftersom ett fel uppstod\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d felaktiga signaturer\n"
+msgstr[1] "%d felaktiga signaturer\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signaturer validerades inte eftersom fel uppstod\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 signatur validerades inte eftersom nyckeln saknades\n"
+msgstr[1] "1 signatur validerades inte eftersom nyckeln saknades\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 användaridentitet utan giltig självsignatur hittades\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 signatur validerades inte eftersom ett fel uppstod\n"
+msgstr[1] "1 signatur validerades inte eftersom ett fel uppstod\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d användaridentiteter utan giltiga självsignaturer hittades\n"
+#, fuzzy, c-format
+#| 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] "%d användaridentiteter utan giltiga självsignaturer hittades\n"
+msgstr[1] "%d användaridentiteter utan giltiga självsignaturer hittades\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgstr "Verkligen ta bort denna självsignatur? (j/N)"
# skulle lika gärna kunna heta 1 signatur va?
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Raderade %d signatur.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Raderade %d signaturer.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Raderade %d signatur.\n"
+msgstr[1] "Raderade %d signatur.\n"
msgid "Nothing deleted.\n"
msgstr "Ingenting raderat.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "Användaridentiteten \"%s\" komprimerad: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Användaridentitet \"%s\": %d signaturer borttagna\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Användaridentitet \"%s\": %d signaturer borttagna\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Användaridentitet \"%s\": %d signaturer borttagna\n"
+msgstr[1] "Användaridentitet \"%s\": %d signaturer borttagna\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgid "Please correct the error first\n"
msgstr "Rätta först felet\n"
-# fel kapitalisering i originalet?
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Du behöver en lösenfras för att skydda din hemliga nyckel\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Ange en lösenfras för att skydda säkerhetskopian av den nya "
-"krypteringsnyckeln."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "lösenfrasen repeterades inte korrekt; försök igen."
-
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Du vill inte ha någon lösenfras - det är möjligen en *dålig* idé!\n"
-"Jag kommer att göra det ändå. Du kan ändra din lösenfras när som helst\n"
-"om du använder detta program med flaggan \"--edit-key\".\n"
-"\n"
-
msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
msgstr "Skapandet av nycklar avbröts.\n"
#, fuzzy, c-format
+#| msgid "can't create backup file `%s': %s\n"
+msgid "can't create backup file '%s': %s\n"
+msgstr "kan inte skapa säkerhetskopian \"%s\": %s\n"
+
+#, fuzzy, c-format
+#| msgid "NOTE: backup of card key saved to `%s'\n"
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "OBSERVERA: säkerhetskopia av kortnyckeln sparades i \"%s\"\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "skriver den publika nyckeln till \"%s\"\n"
msgid "Really create? (y/N) "
msgstr "Verkligen skapa? (j/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "misslyckades med att lagra nyckeln på kortet: %s\n"
-
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
-msgid "can't create backup file '%s': %s\n"
-msgstr "kan inte skapa säkerhetskopian \"%s\": %s\n"
-
-#, fuzzy, c-format
-#| msgid "NOTE: backup of card key saved to `%s'\n"
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "OBSERVERA: säkerhetskopia av kortnyckeln sparades i \"%s\"\n"
-
msgid "never "
msgstr "aldrig"
msgid "Signature notation: "
msgstr "Signaturnotation: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 felaktig signatur\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d felaktiga signaturer\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d felaktiga signaturer\n"
+msgstr[1] "%d felaktiga signaturer\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Nyckelring"
msgstr " Kortets serienr ="
#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "namnbyte från \"%s\" till \"%s\" misslyckades: %s\n"
-
-#, fuzzy, c-format
#| msgid "caching keyring `%s'\n"
msgid "caching keyring '%s'\n"
msgstr "mellanlagrar nyckelringen \"%s\"\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "%lu nycklar mellanlagrade än så länge (%lu signaturer)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "%lu nycklar mellanlagrade än så länge (%lu signaturer)\n"
+msgstr[1] "%lu nycklar mellanlagrade än så länge (%lu signaturer)\n"
#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu nycklar mellanlagrade (%lu signaturer)\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 felaktig signatur\n"
+msgstr[1] "1 felaktig signatur\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "\"%s\" inte ett nyckel-id: hoppar över\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "uppdaterar 1 nyckel från %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "uppdaterar %d nycklar från %s\n"
+msgstr[1] "uppdaterar %d nycklar från %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "VARNING: kunde inte uppdatera nyckeln %s via %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "uppdaterar %d nycklar från %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "nyckeln \"%s\" hittades inte på nyckelservern\n"
msgid "requesting key %s from %s\n"
msgstr "begär nyckeln %s från %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "skickar nyckeln %s till %s-servern %s\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "ingen nyckelserveråtgärd!\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s signatur, sammandragsalgoritm %s\n"
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s)\n"
+msgstr "läsfel i \"%s\": %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "läsfel i \"%s\": %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: flaggan är föråldrad \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: hoppades över: publik nyckel finns redan\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "kan inte ansluta till \"%s\": %s\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "rad %d: ogiltig algoritm\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "rad %d: ogiltig algoritm\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Du angav ingen användaridentitet. (du kan använda \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "data sparades inte, använd flaggan \"--output\" för att spara det\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "Fel när \"%s\" skapades: %s\n"
-
msgid "Detached signature.\n"
msgstr "Signatur i en separat fil.\n"
msgstr "Skapa ett spärrcertifikat för denna nyckel? (j/N) "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Spärrcertifikat skapat.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "hemliga nyckeln \"%s\" hittades inte: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "fel när nyckelringen \"%s\" skapades: %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Skapa ett spärrcertifikat för denna nyckel? (j/N) "
msgstr "VARNING signeringsundernyckel %s har en ogiltig korscertifiering\n"
# behövs verkligen c-format här?
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "den publika nyckeln %s är %lu sekund nyare än signaturen\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "den publika nyckeln %s är %lu sekund nyare än signaturen\n"
+msgstr[1] "den publika nyckeln %s är %lu sekund nyare än signaturen\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "den publika nyckeln %s är %lu sekunder nyare än signaturen\n"
+# behövs verkligen c-format här?
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "den publika nyckeln %s är %lu sekund nyare än signaturen\n"
+msgstr[1] "den publika nyckeln %s är %lu sekund nyare än signaturen\n"
# c-format behövs inte i singularis
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"nyckeln %s skapades %lu sekund in i framtiden (tidsresande eller felinställd "
+"klocka)\n"
+msgstr[1] ""
"nyckeln %s skapades %lu sekund in i framtiden (tidsresande eller felinställd "
"klocka)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"nyckeln %s skapades %lu sekunder in i framtiden (tidsresande eller "
-"felinställd klocka)\n"
+# c-format behövs inte i singularis
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] ""
+"nyckeln %s skapades %lu sekund in i framtiden (tidsresande eller felinställd "
+"klocka)\n"
+msgstr[1] ""
+"nyckeln %s skapades %lu sekund in i framtiden (tidsresande eller felinställd "
+"klocka)\n"
#, fuzzy, c-format
#| msgid "NOTE: signature key %s expired %s\n"
msgstr "indataraden är längre än %d tecken\n"
#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "fel vid sändning av standardflaggor: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "algoritmen stöds inte: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "fel vid sändning av %s-kommando: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "fel vid skrivning av hemliga nyckelringen \"%s\": %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: fel vid läsning av katalogpost: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening `%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "fel vid öppnandet av \"%s\": %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "fel vid sändning av %s-kommando: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "publika nyckeln %s hittades inte: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error storing flags: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "fel vid lagring av flaggor: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting new PIN: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "fel vid hämtning av ny PIN-kod: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "giltighet: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "fel vid hämtning av lagrade flaggor: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "lista nycklar"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "skriv ut kontrollsummor"
+msgstr[1] "skriv ut kontrollsummor"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "fel när ett rör skapades: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "fel vid sändning av %s-kommando: %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "\"%s\" är inget giltigt långt nyckel-id\n"
msgstr ""
"det behövs ingen uppdatering av tillitsdatabasen med tillitsmodellen \"%s\"\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "publika nyckeln %s hittades inte: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "gör en kontroll av tillitsdatabasen --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "kontrollerar tillitsdatabasen\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "%lu nycklar behandlade än så länge\n"
+msgstr[1] "%lu nycklar behandlade än så länge\n"
+
# Vad är detta!?
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d nycklar behandlade (%d validity counts rensade)\n"
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d nycklar behandlade (%d validity counts rensade)\n"
+msgstr[1] "%d nycklar behandlade (%d validity counts rensade)\n"
msgid "no ultimately trusted keys found\n"
msgstr "hittade inga nycklar med förbehållslöst förtroende\n"
msgstr "publik nyckel för förbehållslöst betrodda nyckeln %s hittades inte\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "%d marginal(er) behövs, %d fullständig(a) behövs, tillitsmodell %s\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "kortet är låst permanent!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr "%d försök för Admin PIN-koden återstår innan kortet låses permanent\n"
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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 försök för Admin PIN-koden återstår innan kortet låses permanent\n"
+msgstr[1] ""
+"%d försök för Admin PIN-koden återstår innan kortet låses permanent\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgid "generating key failed\n"
msgstr "nyckelgenereringen misslyckades\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "nyckelgenereringen är färdig (%d sekunder)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "nyckelgenereringen är färdig (%d sekunder)\n"
+msgstr[1] "nyckelgenereringen är färdig (%d sekunder)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "ogiltig struktur för OpenPGP-kort (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "tillåt inte återanvändning av gamla lösenfraser"
+#, fuzzy
+#| msgid "|N|set maximum PIN cache lifetime to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|ställ in maximal livstid för PIN-cache till N sekunder"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NAMN|använd NAMN som förvald hemlig nyckel"
"Syntax: gpg-check-pattern [flaggor] mönsterfil\n"
"Kontrollera en lösenfras angiven på standard in mot mönsterfilen\n"
+#, fuzzy
+#~| msgid "option \"%.50s\" is ambiguous\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "flagga \"%.50s\" är tvetydig\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d signaturer validerades inte eftersom nycklar saknades\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d signaturer validerades inte eftersom fel uppstod\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 användaridentitet utan giltig självsignatur hittades\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Raderade %d signaturer.\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Användaridentitet \"%s\": %d signaturer borttagna\n"
+
+# fel kapitalisering i originalet?
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Du behöver en lösenfras för att skydda din hemliga nyckel\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Ange en lösenfras för att skydda säkerhetskopian av den nya "
+#~ "krypteringsnyckeln."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "lösenfrasen repeterades inte korrekt; försök igen."
+
+#~ msgid "%s.\n"
+#~ msgstr "%s.\n"
+
+#~ msgid ""
+#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
+#~ "I will do it anyway. You can change your passphrase at any time,\n"
+#~ "using this program with the option \"--edit-key\".\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Du vill inte ha någon lösenfras - det är möjligen en *dålig* idé!\n"
+#~ "Jag kommer att göra det ändå. Du kan ändra din lösenfras när som helst\n"
+#~ "om du använder detta program med flaggan \"--edit-key\".\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "misslyckades med att lagra nyckeln på kortet: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 felaktig signatur\n"
+
+#, fuzzy
+#~| msgid "renaming `%s' to `%s' failed: %s\n"
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "namnbyte från \"%s\" till \"%s\" misslyckades: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu nycklar mellanlagrade (%lu signaturer)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "uppdaterar 1 nyckel från %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "skickar nyckeln %s till %s-servern %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "den publika nyckeln %s är %lu sekunder nyare än signaturen\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "nyckeln %s skapades %lu sekunder in i framtiden (tidsresande eller "
+#~ "felinställd klocka)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr ""
+#~ "%d marginal(er) behövs, %d fullständig(a) behövs, tillitsmodell %s\n"
+
#~ msgid "cleared passphrase cached with ID: %s\n"
#~ msgstr "tömde mellanlagrad lösenfras med ID: %s\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "söker efter \"%s\" från %s\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "ingen nyckelserveråtgärd!\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr ""
#~ "VARNING: nyckelserverhanteraren från en annan version av GnuPG (%s)\n"
msgid "Enter passphrase: "
msgstr "Anahtar parolasını giriniz\n"
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "`%s' anahtarlığı oluşturulurken hata: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "UYARI: %s %s'i aşıyor\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "OpenPGP anahtarı kullanılabilir değil: %s\n"
msgid "remove as much as possible from key during export"
msgstr "ihraç sırasında anahtardan mümkün olduğunca çok şey kaldırılır"
+#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s: atlandı: %s\n"
+
msgid "exporting secret keys not allowed\n"
msgstr "gizli anahtarların ihracına izin verilmez\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "anahtar %s: anahtar malzemesi kartta - atlandı\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s: atlandı: %s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "UYARI: hiçbir şey dışarı aktarılmadı\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "`%s' oluşturulurken hata: %s\n"
+
msgid "[User ID not found]"
msgstr "[Kullanıcı kimliği yok]"
#, fuzzy, c-format
+#| msgid "missing argument for option \"%.50s\"\n"
+msgid "(check argument of option '%s')\n"
+msgstr "\"%.50s\" seçeneği için değiştirge eksik\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "%s kapanırken hata: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "`%s' anahtarlığı oluşturulurken hata: %s\n"
+
+#, fuzzy, c-format
#| msgid "automatically retrieved `%s' via %s\n"
msgid "automatically retrieved '%s' via %s\n"
msgstr "`%s' %s üzerinden özdevinimli olarak alındı\n"
msgstr "gizli anahtar \"%s\" yok: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "\"%.50s\" seçeneği için değiştirge eksik\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|İSİM|öntanımlı gizli anahtar olarak İSİM kullanılır"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|İSİM|öntanımlı gizli anahtar olarak İSİM kullanılır"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
"Geçersiz %s anahtarı --allow-non-selfsigned-uid kullanılarak geçerli oldu\n"
msgstr "BİLGİ: eski öntanımlı seçenekler dosyası `%s' yoksayıldı\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "\"%.50s\" seçeneği belirsiz\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "`%s' anahtarlığı oluşturulurken hata: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt çok eski (%s lazım, sizinki %s)\n"
msgstr ""
"UYARI: alıcılar (-r) genel anahtar şifrelemesi kullanılmadan belirtilmiş\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "`%d. satır: algoritma geçersiz\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid algorithm\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "`%d. satır: algoritma geçersiz\n"
-
msgid "--store [filename]"
msgstr "--store [dosyaismi]"
msgid "key export failed: %s\n"
msgstr "anahtar ihracı başarısızlığa uğradı: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "anahtar ihracı başarısızlığa uğradı: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "anahtar sunucusunda arama başarısız: %s\n"
msgid "[self-signature]"
msgstr "[öz-imza]"
-msgid "1 bad signature\n"
-msgstr "1 kötü imza\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d kötü imza\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 imza kayıp bir anahtar yüzünden kontrol edilmedi\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d imza kayıp bir anahtar yüzünden kontrol edilmedi\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 imza bir hata yüzünden kontrol edilmedi\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d kötü imza\n"
+msgstr[1] "%d kötü imza\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d imza hatalardan dolayı kontrol edilmedi\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 imza kayıp bir anahtar yüzünden kontrol edilmedi\n"
+msgstr[1] "1 imza kayıp bir anahtar yüzünden kontrol edilmedi\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 öz-imzası geçersiz kullanıcı kimliği saptandı\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 imza bir hata yüzünden kontrol edilmedi\n"
+msgstr[1] "1 imza bir hata yüzünden kontrol edilmedi\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d öz-imzası geçersiz kullanıcı kimliği saptandı\n"
+#, fuzzy, c-format
+#| 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] "%d öz-imzası geçersiz kullanıcı kimliği saptandı\n"
+msgstr[1] "%d öz-imzası geçersiz kullanıcı kimliği saptandı\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr "Bu öz-imza gerçekten silinecek mi? (e/H veya y/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "%d imza silindi.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d imza silindi.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "%d imza silindi.\n"
+msgstr[1] "%d imza silindi.\n"
msgid "Nothing deleted.\n"
msgstr "Hiçbir şey silinmedi.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "kullanıcı kimliği \"%s\" yoğun: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Kullanıcı kimliği \"%s\": %d imza temizlendi\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Kullanıcı kimliği \"%s\": %d imza temizlendi\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Kullanıcı kimliği \"%s\": %d imza temizlendi\n"
+msgstr[1] "Kullanıcı kimliği \"%s\": %d imza temizlendi\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Lütfen önce hatayı düzeltin\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Gizli anahtarınızı korumak için bir Anahtar Parolanız olmalı.\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Lütfen GnuPG sistemine ithal edilen nesneyi koruyacak anahtar parolasını "
-"giriniz."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr ""
-"ikinci kez yazdığınız anahtar parolası ilkiyle aynı değil; işlem "
-"tekrarlanacak"
-
-#, c-format
-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 ""
-"Bir anahtar parolası istemediniz - bu *kötü* bir fikir!\n"
-"Nasıl isterseniz. Anahtar parolanızı bu programı \"--edit-key\"\n"
-"seçeneği ile kullanarak her zaman değiştirebilirsiniz.\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Anahtar üretimi durduruldu.\n"
#, fuzzy, c-format
+#| msgid "can't create backup file `%s': %s\n"
+msgid "can't create backup file '%s': %s\n"
+msgstr "'%s' yedek dosyası oluşturulamıyor: %s\n"
+
+#, fuzzy, c-format
+#| msgid "NOTE: backup of card key saved to `%s'\n"
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "BİLGİ: kart anahtarının yedeklemesi '%s' e kaydedildi\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "genel anahtarı `%s'e yazıyor\n"
msgid "Really create? (y/N) "
msgstr "Gerçekten oluşturulsun mu? (e/H ya da y/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "anahtarın kart üzerinde saklanması başarısız: %s\n"
-
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
-msgid "can't create backup file '%s': %s\n"
-msgstr "'%s' yedek dosyası oluşturulamıyor: %s\n"
-
-#, fuzzy, c-format
-#| msgid "NOTE: backup of card key saved to `%s'\n"
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "BİLGİ: kart anahtarının yedeklemesi '%s' e kaydedildi\n"
-
msgid "never "
msgstr "asla "
msgid "Signature notation: "
msgstr "imza simgelemi: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 kötü imza\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d kötü imza\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d kötü imza\n"
+msgstr[1] "%d kötü imza\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "Anahtar zinciri"
msgstr " Kart seri no. ="
#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "`%s' > `%s' isim değişikliği başarısız: %s\n"
-
-#, fuzzy, c-format
#| msgid "caching keyring `%s'\n"
msgid "caching keyring '%s'\n"
msgstr "`%s' anahtar zinciri önbellekleniyor\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "şimdiye kadar %lu anahtar arabelleklendi (%lu imza)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "şimdiye kadar %lu anahtar arabelleklendi (%lu imza)\n"
+msgstr[1] "şimdiye kadar %lu anahtar arabelleklendi (%lu imza)\n"
#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "%lu anahtar arabelleklendi (%lu imza)\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 kötü imza\n"
+msgstr[1] "1 kötü imza\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "\"%s\" bir anahtar kimliği değil: atlanıyor\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "1 anahtar %s adresinden tazeleniyor\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "%d anahtar %s adresinden tazeleniyor\n"
+msgstr[1] "%d anahtar %s adresinden tazeleniyor\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "UYARI: %s anahtarı %s üzerinden tazelenemiyor: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "%d anahtar %s adresinden tazeleniyor\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "anahtar \"%s\" anahtar sunucusunda yok\n"
msgid "requesting key %s from %s\n"
msgstr "%s anahtarı %s adresinden isteniyor\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "anahtar %1$s, %3$s sunucusunun %2$s adresine gönderiliyor\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "bir anahtar sunucusu eylemi yok!\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s imzası, %s özet algoritması\n"
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s)\n"
+msgstr "`%s' için okuma hatası: %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "`%s' için okuma hatası: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: \"%s\" seçeneği kullanımdan kaldırılmak üzere.\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: atlandı: genel anahtar zaten var\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "\"%s\" sunucusuna bağlanılamadı: %s\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "`%d. satır: algoritma geçersiz\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid algorithm\n"
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "`%d. satır: algoritma geçersiz\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Bir kullanıcı kimliği belirtmediniz. (\"-r\" kullanabilirsiniz)\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "veri kaydedilmedi; kaydetmek için \"--output\" seçeneğini kullanın\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "`%s' oluşturulurken hata: %s\n"
-
msgid "Detached signature.\n"
msgstr "Bağımsız imza.\n"
"ya da y/N) "
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Yürürlükten kaldırma sertifikası üretildi.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "gizli anahtar \"%s\" yok: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "`%s' anahtarlığı oluşturulurken hata: %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr ""
"Bu anahtar için bir yürürlükten kaldırma sertifikası oluşturulsun mu? (e/H "
msgstr ""
"UYARI: yardımcı imzalama anahtarı %s geçersiz çapraz sertifikalamaya sahip\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "genel anahtar %s imzadan %lu saniye daha yeni\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "genel anahtar %s imzadan %lu saniye daha yeni\n"
+msgstr[1] "genel anahtar %s imzadan %lu saniye daha yeni\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "genel anahtar %s imzadan %lu saniye daha yeni.\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "genel anahtar %s imzadan %lu saniye daha yeni\n"
+msgstr[1] "genel anahtar %s imzadan %lu saniye daha yeni\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"anahtar %s %lu saniye sonra üretilmiş (zaman sapması veya saat problemi)\n"
+msgstr[1] ""
"anahtar %s %lu saniye sonra üretilmiş (zaman sapması veya saat problemi)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"anahtar %s bundan %lu saniye sonra üretilmiş (zaman sapması veya saat "
-"problemi)\n"
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] ""
+"anahtar %s %lu saniye sonra üretilmiş (zaman sapması veya saat problemi)\n"
+msgstr[1] ""
+"anahtar %s %lu saniye sonra üretilmiş (zaman sapması veya saat problemi)\n"
#, fuzzy, c-format
#| msgid "NOTE: signature key %s expired %s\n"
msgstr "girdi satırı %d karakterden daha uzun\n"
#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "standart seçenekler gönderilirken hata: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "desteklenmeyen algoritma: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "%s komutu gönderilirken hata: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "`%s' gizli anahtarlığa yazılırken hata oluştu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s: dizin kaydını yazma hatası: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening `%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "'%s' açılırken hata: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "%s komutu gönderilirken hata: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "genel anahtar %s yok: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error storing flags: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "bayraklar saklanırken hata: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting new PIN: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "yeni PIN alınırken hata: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "geçerliliği: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "saklanmış bayraklar alınırken hata: %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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "anahtarları listeler"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "ileti özetlerini gösterir"
+msgstr[1] "ileti özetlerini gösterir"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "boru oluşturulurken hata: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "error sending %s command: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "%s komutu gönderilirken hata: %s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "`%s' geçerli bir anahtar kimliği değil\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "`%s' güvence modelli güvence veritabanı güncellemesi için gereksiz\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "genel anahtar %s yok: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "lütfen bir --check-trustdb yapın\n"
msgid "checking the trustdb\n"
msgstr "güvence veritabanı denetleniyor\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "%d anahtar işlendi (%d doğrulama temizlendi)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "şu ana kadar %lu anahtar işlendi\n"
+msgstr[1] "şu ana kadar %lu anahtar işlendi\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "%d anahtar işlendi (%d doğrulama temizlendi)\n"
+msgstr[1] "%d anahtar işlendi (%d doğrulama temizlendi)\n"
msgid "no ultimately trusted keys found\n"
msgstr "son derece güvenli bir anahtar yok\n"
msgstr "son derece güvenli %s için genel anahtar yok\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "%d şöyle böyle gerekli, %d tamamen gerekli, %s güvence modeli\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "kart kalıcı olarak kilitli!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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] ""
+"kart kalıcı olarak kilitlenmeden önce %d Yönetici PIN kalmasına çalışılıyor\n"
+msgstr[1] ""
"kart kalıcı olarak kilitlenmeden önce %d Yönetici PIN kalmasına çalışılıyor\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
msgid "generating key failed\n"
msgstr "anahtar üretimi başarısızlığa uğradı\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "anahtar üretimi tamamlandı (%d saniye)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "anahtar üretimi tamamlandı (%d saniye)\n"
+msgstr[1] "anahtar üretimi tamamlandı (%d saniye)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "OpenPGP kartının yapısı geçersiz (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "eski anahtar parolalarının yeniden kullanılmasına izin vermez"
+#, fuzzy
+#| msgid "|N|set maximum PIN cache lifetime to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|azami PIN önbelleği ömrü N saniyeye ayarlanır"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|İSİM|öntanımlı gizli anahtar olarak İSİM kullanılır"
"karşılaştırır\n"
#, fuzzy
+#~| msgid "option \"%.50s\" is ambiguous\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "\"%.50s\" seçeneği belirsiz\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d imza kayıp bir anahtar yüzünden kontrol edilmedi\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d imza hatalardan dolayı kontrol edilmedi\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "1 öz-imzası geçersiz kullanıcı kimliği saptandı\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "%d imza silindi.\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Kullanıcı kimliği \"%s\": %d imza temizlendi\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Gizli anahtarınızı korumak için bir Anahtar Parolanız olmalı.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Lütfen GnuPG sistemine ithal edilen nesneyi koruyacak anahtar parolasını "
+#~ "giriniz."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr ""
+#~ "ikinci kez yazdığınız anahtar parolası ilkiyle aynı değil; işlem "
+#~ "tekrarlanacak"
+
+#~ 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 ""
+#~ "Bir anahtar parolası istemediniz - bu *kötü* bir fikir!\n"
+#~ "Nasıl isterseniz. Anahtar parolanızı bu programı \"--edit-key\"\n"
+#~ "seçeneği ile kullanarak her zaman değiştirebilirsiniz.\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "anahtarın kart üzerinde saklanması başarısız: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 kötü imza\n"
+
+#, fuzzy
+#~| msgid "renaming `%s' to `%s' failed: %s\n"
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "`%s' > `%s' isim değişikliği başarısız: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "%lu anahtar arabelleklendi (%lu imza)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "1 anahtar %s adresinden tazeleniyor\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "anahtar %1$s, %3$s sunucusunun %2$s adresine gönderiliyor\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "genel anahtar %s imzadan %lu saniye daha yeni.\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "anahtar %s bundan %lu saniye sonra üretilmiş (zaman sapması veya saat "
+#~ "problemi)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr "%d şöyle böyle gerekli, %d tamamen gerekli, %s güvence modeli\n"
+
+#, fuzzy
#~| msgid "failed to store the key: %s\n"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "anahtarın saklanması başarısız: %s\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "%2$s adresinde \"%1$s\" aranıyor\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "bir anahtar sunucusu eylemi yok!\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr ""
#~ "UYARI: GnuPG'nin başka bir sürümünün anahtar sunucusu eylemcisi (%s)\n"
msgid "Enter passphrase: "
msgstr "Введіть пароль: "
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "помилка під час спроби створення сховища ключів «%s»: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "УВАГА: %s перевизначає %s\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "Не вдалося отримати доступ до картки OpenPGP: %s\n"
msgid "remove as much as possible from key during export"
msgstr "вилучити максимум частин з ключа під час експортування"
+msgid " - skipped"
+msgstr " - пропущено"
+
msgid "exporting secret keys not allowed\n"
msgstr "експортування закритих ключів заборонено\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "ключ %s: матеріал ключа на карті — пропущено\n"
-msgid " - skipped"
-msgstr " - пропущено"
-
msgid "WARNING: nothing exported\n"
msgstr "УВАГА: нічого не експортовано\n"
+#, c-format
+msgid "error creating '%s': %s\n"
+msgstr "помилка створення «%s»: %s.\n"
+
msgid "[User ID not found]"
msgstr "[Ідентифікатор не знайдено]"
+#, fuzzy, c-format
+#| msgid "missing argument for option \"%.50s\"\n"
+msgid "(check argument of option '%s')\n"
+msgstr "не вказано аргументу до параметра «%.50s»\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "помилка під час спроби закрити %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "помилка під час спроби створення сховища ключів «%s»: %s\n"
+
#, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "автоматично отримано «%s» за допомогою %s\n"
msgstr "закритий ключ «%s» не знайдено: %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "не вказано аргументу до параметра «%.50s»\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|NAME|використовувати вказаний типовий закритий ключ"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|NAME|використовувати вказаний типовий закритий ключ"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr ""
"Некоректний ключ %s визнано чинним через параметр --allow-non-selfsigned-"
msgstr "ЗАУВАЖЕННЯ: застарілий файл типових параметрів «%s» проігноровано\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "параметр «%.50s» є неоднозначним\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring '%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "помилка під час спроби створення сховища ключів «%s»: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt занадто стара (потрібна — %s, маємо %s)\n"
"УВАГА: отримувачів (-r) вказано без використання шифрування відкритим "
"ключем\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "рядок %d: вказано некоректну дату\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "рядок %d: вказано некоректну дату\n"
-
msgid "--store [filename]"
msgstr "--store [назва файла]"
msgid "key export failed: %s\n"
msgstr "помилка під час спроби експортування ключа: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "помилка під час спроби експортування ключа: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "помилка пошуку на сервері ключів: %s\n"
msgid "[self-signature]"
msgstr "[самопідпис]"
-msgid "1 bad signature\n"
-msgstr "1 помилковий підпис\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d помилкових підписів\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 підпис не перевірено через те, що немає ключа\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d підписів не перевірено через те, що немає ключів\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "1 підпис не перевірено через помилку\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d помилкових підписів\n"
+msgstr[1] "%d помилкових підписів\n"
+msgstr[2] "%d помилкових підписів\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d підписів не перевірено через помилки\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "1 підпис не перевірено через те, що немає ключа\n"
+msgstr[1] "1 підпис не перевірено через те, що немає ключа\n"
+msgstr[2] "1 підпис не перевірено через те, що немає ключа\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "виявлено 1 ідентифікатор користувача без коректного самопідпису\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "1 підпис не перевірено через помилку\n"
+msgstr[1] "1 підпис не перевірено через помилку\n"
+msgstr[2] "1 підпис не перевірено через помилку\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "виявлено %d ідентифікаторів користувачів без коректних самопідписів\n"
+#, fuzzy, c-format
+#| 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] ""
+"виявлено %d ідентифікаторів користувачів без коректних самопідписів\n"
+msgstr[1] ""
+"виявлено %d ідентифікаторів користувачів без коректних самопідписів\n"
+msgstr[2] ""
+"виявлено %d ідентифікаторів користувачів без коректних самопідписів\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr "Вилучити цей самопідпис? (y/N або т/Н)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "Вилучено %d підпис.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Вилучено %d підписів.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "Вилучено %d підпис.\n"
+msgstr[1] "Вилучено %d підпис.\n"
+msgstr[2] "Вилучено %d підпис.\n"
msgid "Nothing deleted.\n"
msgstr "Нічого не вилучено.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "Ідентифікатор користувача «%s» ущільнено: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "Ідентифікатор користувача «%s»: вилучено %d підпис\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "Ідентифікатор користувача «%s»: вилучено %d підписів\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "Ідентифікатор користувача «%s»: вилучено %d підпис\n"
+msgstr[1] "Ідентифікатор користувача «%s»: вилучено %d підпис\n"
+msgstr[2] "Ідентифікатор користувача «%s»: вилучено %d підпис\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "Спочатку виправте помилку\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Вам потрібен пароль для захисту вашого закритого ключа.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr ""
-"Будь ласка, вкажіть пароль для захисту позакарткової резервної копії нового "
-"ключа шифрування."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "помилка під час повторного введення пароля, повторіть спробу"
-
-#, c-format
-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 ""
-"Ви не використовуєте пароля — дуже погана робота!\n"
-"Вашу забаганку буде виконано. Пізніше ви зможете змінити пароль,\n"
-"за допомогою цієї програми з параметром «--edit-key».\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "Створення ключа скасовано.\n"
#, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "не вдалося створити файл резервної копії «%s»: %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "ЗАУВАЖЕННЯ: резервну копію ключа на картці збережено до «%s»\n"
+
+#, c-format
msgid "writing public key to '%s'\n"
msgstr "записуємо відкритий ключ до «%s»\n"
msgid "Really create? (y/N) "
msgstr "Створити? (y/N або т/Н) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "спроба зберігання ключа на картці зазнала невдачі: %s\n"
-
-#, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "не вдалося створити файл резервної копії «%s»: %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "ЗАУВАЖЕННЯ: резервну копію ключа на картці збережено до «%s»\n"
-
msgid "never "
msgstr "ніколи "
msgid "Signature notation: "
msgstr "Примітка підпису: "
-msgid "1 good signature\n"
-msgstr "1 добрий підпис\n"
-
-#, c-format
-msgid "%d good signatures\n"
-msgstr "%d добрих підписів\n"
+#, fuzzy, c-format
+#| msgid "%d good signatures\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d добрих підписів\n"
+msgstr[1] "%d добрих підписів\n"
+msgstr[2] "%d добрих підписів\n"
-#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr "Попередження: %lu ключів пропущено через їхній надто великий розмір\n"
+#, fuzzy, c-format
+#| msgid "Warning: %lu key(s) skipped due to their large size\n"
+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] ""
+"Попередження: %lu ключів пропущено через їхній надто великий розмір\n"
+msgstr[1] ""
+"Попередження: %lu ключів пропущено через їхній надто великий розмір\n"
+msgstr[2] ""
+"Попередження: %lu ключів пропущено через їхній надто великий розмір\n"
msgid "Keyring"
msgstr "Сховище ключів"
msgstr "Серійний номер картки ="
#, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "спроба перейменування «%s» на «%s» зазнала невдачі: %s\n"
-
-#, c-format
msgid "caching keyring '%s'\n"
msgstr "кешування сховища ключів «%s»\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "зараз кешовано %lu ключів (%lu підписів)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "зараз кешовано %lu ключів (%lu підписів)\n"
+msgstr[1] "зараз кешовано %lu ключів (%lu підписів)\n"
+msgstr[2] "зараз кешовано %lu ключів (%lu підписів)\n"
-#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "кешовано %lu ключів (%lu підписів)\n"
+#, fuzzy, c-format
+#| msgid "flush the cache"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "спорожнити кеш"
+msgstr[1] "спорожнити кеш"
+msgstr[2] "спорожнити кеш"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 помилковий підпис\n"
+msgstr[1] "1 помилковий підпис\n"
+msgstr[2] "1 помилковий підпис\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "«%s» не є ідентифікатором ключа: пропускаємо\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "оновлюємо 1 ключ з %s\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "оновлюємо %d ключів з %s\n"
+msgstr[1] "оновлюємо %d ключів з %s\n"
+msgstr[2] "оновлюємо %d ключів з %s\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "УВАГА: не вдалося оновити ключ %s за допомогою %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "оновлюємо %d ключів з %s\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "ключ «%s» не знайдено на сервері ключів\n"
msgid "requesting key %s from %s\n"
msgstr "надсилаємо запит щодо ключа %s з %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "надсилаємо ключ %s до %s сервера %s\n"
+#, fuzzy
+#| msgid "invalid keyserver options\n"
+msgid "no keyserver known\n"
+msgstr "некоректні параметри сервера ключів\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "Зауваження: підписи за допомогою алгоритму %s відкинуто\n"
+#, fuzzy, c-format
+#| msgid "%s:%u: read error: %s\n"
+msgid "(reported error: %s)\n"
+msgstr "%s:%u: помилка під час читання: %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in '%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "помилка читання у «%s»: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: застарілий параметр «%s»\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: пропущено: відкритий ключ вже існує\n"
+#, fuzzy, c-format
+#| msgid "can't connect to '%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "не вдалося встановити з’єднання з «%s»: %s\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid date given\n"
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "рядок %d: вказано некоректну дату\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid date given\n"
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "рядок %d: вказано некоректну дату\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr ""
"Вами не вказано ідентифікатора користувача. (можете скористатися «-r»)\n"
"дані не збережено; скористайтеся для їхнього збереження параметром «--"
"output»\n"
-#, c-format
-msgid "error creating '%s': %s\n"
-msgstr "помилка створення «%s»: %s.\n"
-
msgid "Detached signature.\n"
msgstr "Від’єднаний підпис.\n"
msgstr "Це сертифікат відкликання для ключа 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 ""
+
+#, fuzzy
+#| msgid ""
+#| "Use it to revoke this key in case of a compromise or loss of\n"
+#| "the secret key. However, if the secret key is still accessible,\n"
+#| "it is better to generate a new revocation certificate and give\n"
+#| "a reason for the revocation."
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
"Скористайтеся цим для відкликання цього ключа у випадку його\n"
"компрометації або втрати закритої частини. Втім, якщо доступ до\n"
"закритого ключа не втрачено, краще створити новий сертифікат\n"
"відкликання і вказати причину відкликання."
+#, fuzzy
+#| 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 making use of this revocation certificate."
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
"Щоб уникнути випадкового використання цього файла, перед п’ятьма\n"
"дефісами нижче додано двокрапку. Вилучіть цю двокрапку у текстовому\n"
"редакторі, перш ніж скористатися цим сертифікатом відкликання."
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "Створено сертифікат відкликання.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "закритий ключ «%s» не знайдено: %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "помилка під час спроби створення сховища ключів «%s»: %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Створити сертифікат відкликання для цього ключа? (y/N або т/Н) "
msgstr ""
"УВАГА: підписування підключа %s містить некоректну перехресну сертифікацію\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "відкритий ключ %s є на %lu секунду новішим за підпис\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "відкритий ключ %s є на %lu секунду новішим за підпис\n"
+msgstr[1] "відкритий ключ %s є на %lu секунду новішим за підпис\n"
+msgstr[2] "відкритий ключ %s є на %lu секунду новішим за підпис\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "відкритий ключ %s є на %lu секунд новішим за підпис\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "відкритий ключ %s є на %lu секунду новішим за підпис\n"
+msgstr[1] "відкритий ключ %s є на %lu секунду новішим за підпис\n"
+msgstr[2] "відкритий ключ %s є на %lu секунду новішим за підпис\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr ""
+msgid_plural ""
+"key %s was created %lu seconds in the future (time warp or clock problem)\n"
+msgstr[0] ""
+"ключ %s було створено з позначкою на %lu секунду у майбутньому (часова петля "
+"або проблема з годинником)\n"
+msgstr[1] ""
+"ключ %s було створено з позначкою на %lu секунду у майбутньому (часова петля "
+"або проблема з годинником)\n"
+msgstr[2] ""
"ключ %s було створено з позначкою на %lu секунду у майбутньому (часова петля "
"або проблема з годинником)\n"
-#, c-format
-msgid ""
-"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr ""
-"ключ %s було створено з позначкою на %lu секунд у майбутньому (часова петля "
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] ""
+"ключ %s було створено з позначкою на %lu секунду у майбутньому (часова петля "
+"або проблема з годинником)\n"
+msgstr[1] ""
+"ключ %s було створено з позначкою на %lu секунду у майбутньому (часова петля "
+"або проблема з годинником)\n"
+msgstr[2] ""
+"ключ %s було створено з позначкою на %lu секунду у майбутньому (часова петля "
"або проблема з годинником)\n"
#, c-format
msgid "input line longer than %d characters\n"
msgstr "рядок вхідних даних довший за %d символів\n"
+#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "помилка під час спроби надсилання стандартних параметрів: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "непідтримуваний алгоритм: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "помилка під час спроби надсилання даних: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing base64 encoding: %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "помилка під час спроби запису у кодуванні base64: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error initializing reader object: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "помилка під час спроби ініціалізації об’єкта читання: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening '%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "помилка під час відкриття «%s»: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "помилка під час спроби надсилання даних: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "відкритий ключ %s не знайдено: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error setting OCSP target: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "помилка під час встановлення призначення за OCSP: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting responder ID: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "помилка під час спроби отримання ідентифікатора відповідача: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "чинність: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "помилка під час спроби отримання збережених прапорців: %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] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "показати список ключів"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "показати контрольні суми повідомлень"
+msgstr[1] "показати контрольні суми повідомлень"
+msgstr[2] "показати контрольні суми повідомлень"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "помилка під час спроби створення каналу: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "помилка під час спроби надсилання даних: %s\n"
+
#, c-format
msgid "'%s' is not a valid long keyID\n"
msgstr "«%s» не є коректним довгим ідентифікатором ключа\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "потреби у оновленні trustdb на основі моделі довіри «%s» немає\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "відкритий ключ %s не знайдено: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "будь ласка, скористайтеся параметром --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "перевірка trustdb\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "Оброблено %d ключів (очищено %d значень чинності)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "оброблено %lu ключів\n"
+msgstr[1] "оброблено %lu ключів\n"
+msgstr[2] "оброблено %lu ключів\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "Оброблено %d ключів (очищено %d значень чинності)\n"
+msgstr[1] "Оброблено %d ключів (очищено %d значень чинності)\n"
+msgstr[2] "Оброблено %d ключів (очищено %d значень чинності)\n"
msgid "no ultimately trusted keys found\n"
msgstr "не знайдено ключів з необмеженою довірою\n"
msgstr "не знайдено відкритий ключ ключа з необмеженою довірою %s\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "потрібно %d обмежених, потрібно %d повних, модель довіри %s\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "картку заблоковано!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr ""
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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 спроб визначення адміністративного пінкоду перед тим, як "
+"картку буде остаточно заблоковано\n"
+msgstr[1] ""
+"залишилося %d спроб визначення адміністративного пінкоду перед тим, як "
+"картку буде остаточно заблоковано\n"
+msgstr[2] ""
"залишилося %d спроб визначення адміністративного пінкоду перед тим, як "
"картку буде остаточно заблоковано\n"
msgid "generating key failed\n"
msgstr "помилка під час створення ключа\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "створення ключа завершено (за %d секунд)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "створення ключа завершено (за %d секунд)\n"
+msgstr[1] "створення ключа завершено (за %d секунд)\n"
+msgstr[2] "створення ключа завершено (за %d секунд)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "некоректна структура картки OpenPGP (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "не дозволяти повторне використання старих паролів"
+#, fuzzy
+#| msgid "|N|set LDAP timeout to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|встановити вказаний час очікування даних від LDAP"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|NAME|використовувати вказаний типовий закритий ключ"
"Синтаксис: gpg-check-pattern [параметри] файл_шаблонів\n"
"Перевірити пароль, вказаний у stdin, за допомогою файла_шаблонів\n"
+#, fuzzy
+#~| msgid "option \"%.50s\" is ambiguous\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "параметр «%.50s» є неоднозначним\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "%d підписів не перевірено через те, що немає ключів\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "%d підписів не перевірено через помилки\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "виявлено 1 ідентифікатор користувача без коректного самопідпису\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "Вилучено %d підписів.\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "Ідентифікатор користувача «%s»: вилучено %d підписів\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Вам потрібен пароль для захисту вашого закритого ключа.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr ""
+#~ "Будь ласка, вкажіть пароль для захисту позакарткової резервної копії "
+#~ "нового ключа шифрування."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "помилка під час повторного введення пароля, повторіть спробу"
+
+#~ 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 ""
+#~ "Ви не використовуєте пароля — дуже погана робота!\n"
+#~ "Вашу забаганку буде виконано. Пізніше ви зможете змінити пароль,\n"
+#~ "за допомогою цієї програми з параметром «--edit-key».\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "спроба зберігання ключа на картці зазнала невдачі: %s\n"
+
+#~ msgid "1 good signature\n"
+#~ msgstr "1 добрий підпис\n"
+
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "спроба перейменування «%s» на «%s» зазнала невдачі: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "кешовано %lu ключів (%lu підписів)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "оновлюємо 1 ключ з %s\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "надсилаємо ключ %s до %s сервера %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "відкритий ключ %s є на %lu секунд новішим за підпис\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "ключ %s було створено з позначкою на %lu секунд у майбутньому (часова "
+#~ "петля або проблема з годинником)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr "потрібно %d обмежених, потрібно %d повних, модель довіри %s\n"
+
#~ msgid "Failed to open the keyring DB.\n"
#~ msgstr "Не вдалося відкрити базу даних сховища ключів.\n"
msgid "Enter passphrase: "
msgstr "请输入密码:"
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "建立钥匙环‘%s’时发生错误:%s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: "
+msgid "WARNING: %s\n"
+msgstr "警告:"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "OpenPGP 卡不可用:%s\n"
msgid "remove as much as possible from key during export"
msgstr "导出时尽可能清除密钥中的可选部分"
+#, fuzzy
+#| msgid "%s: skipped: %s\n"
+msgid " - skipped"
+msgstr "%s:已跳过:%s\n"
+
msgid "exporting secret keys not allowed\n"
msgstr "不允许导出私钥\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "密钥 %s:密钥在卡上——已跳过\n"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
-msgid " - skipped"
-msgstr "%s:已跳过:%s\n"
-
msgid "WARNING: nothing exported\n"
msgstr "警告:没有导出任何东西\n"
+#, fuzzy, c-format
+#| msgid "error creating `%s': %s\n"
+msgid "error creating '%s': %s\n"
+msgstr "建立‘%s’时发生错误:%s\n"
+
msgid "[User ID not found]"
msgstr "[找不到用户标识]"
#, fuzzy, c-format
+msgid "(check argument of option '%s')\n"
+msgstr "无效的列表选项\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error looking up: %s\n"
+msgstr "‘%s’中出错:%s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "建立钥匙环‘%s’时发生错误:%s\n"
+
+#, fuzzy, c-format
#| msgid "automatically retrieved `%s' via %s\n"
msgid "automatically retrieved '%s' via %s\n"
msgstr "自动获取‘%s’,通过 %s\n"
msgstr "找不到私钥“%s”:%s\n"
#, fuzzy, c-format
-msgid "(check argument of option '%s')\n"
-msgstr "无效的列表选项\n"
+#| msgid "unusable secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "不可用的私钥"
#, fuzzy, c-format
#| msgid "unusable secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "不可用的私钥"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "--allow-non-selfsigned-uid 使无效密钥 %s 生效\n"
msgstr "注意:旧式的默认配置文件‘%s’已被忽略\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, c-format
-msgid "key specification '%s' is ambiguous\n"
-msgstr ""
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "建立钥匙环‘%s’时发生错误:%s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr ""
msgid "WARNING: recipients (-r) given without using public key encryption\n"
msgstr "警告:给定了收件人(-r)但并未使用公钥加密\n"
-#, fuzzy, c-format
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "无效的‘%s’散列算法\n"
-
-#, fuzzy, c-format
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "无效的‘%s’散列算法\n"
-
msgid "--store [filename]"
msgstr "--store [文件名]"
msgid "key export failed: %s\n"
msgstr "导出密钥失败:%s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "导出密钥失败:%s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "搜寻公钥服务器失败:%s\n"
msgid "[self-signature]"
msgstr "[自身签名]"
-msgid "1 bad signature\n"
-msgstr "1 个损坏的签名\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d 个损坏的签名\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "有 1 份签名因为遗失密钥而未被检查\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "有 %d 份签名因为遗失密钥而未被检查\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "有 1 份签名因为某个错误而未被检查\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d 个损坏的签名\n"
+msgstr[1] "%d 个损坏的签名\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "有 %d 份签名因为某些错误而未被检查\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "有 1 份签名因为遗失密钥而未被检查\n"
+msgstr[1] "有 1 份签名因为遗失密钥而未被检查\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "检测到 1 个没有有效自身签名的用户标识\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "有 1 份签名因为某个错误而未被检查\n"
+msgstr[1] "有 1 份签名因为某个错误而未被检查\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "检测到 %d 个没有有效自身签名的用户标识\n"
+#, fuzzy, c-format
+#| 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] "检测到 %d 个没有有效自身签名的用户标识\n"
+msgstr[1] "检测到 %d 个没有有效自身签名的用户标识\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr "真的要删除这个自身签名吗?(y/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "已经删除了 %d 个签名。\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "已经删除了 %d 个签名。\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "已经删除了 %d 个签名。\n"
+msgstr[1] "已经删除了 %d 个签名。\n"
msgid "Nothing deleted.\n"
msgstr "没有东西被删除。\n"
#, fuzzy, c-format
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "密钥 %s:“%s”%d 个签名被清除\n"
-
-#, fuzzy, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "密钥 %s:“%s”%d 个签名被清除\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "密钥 %s:“%s”%d 个签名被清除\n"
+msgstr[1] "密钥 %s:“%s”%d 个签名被清除\n"
#, fuzzy, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "请先改正错误\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"您需要一个密码来保护您的私钥。\n"
-"\n"
-
-#, fuzzy
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "请输入密码:这是一个秘密的句子 \n"
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "密码再次输入时与首次输入不符;请再试一次"
-
-#, c-format
-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 ""
-"您不想要有密码――这个想法实在是遭透了!\n"
-"不过,我仍然会照您想的去做。您任何时候都可以变更您的密码,仅需要\n"
-"再次执行这个程序,并且使用“--edit-key”选项即可。\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "密钥生成已取消。\n"
#, fuzzy, c-format
+#| msgid "can't create backup file `%s': %s\n"
+msgid "can't create backup file '%s': %s\n"
+msgstr "不能创建备份文件‘%s’:%s\n"
+
+#, fuzzy, c-format
+#| msgid "NOTE: backup of card key saved to `%s'\n"
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "注意:卡密钥的备份已保存到‘%s’\n"
+
+#, fuzzy, c-format
#| msgid "writing public key to `%s'\n"
msgid "writing public key to '%s'\n"
msgstr "正在将公钥写至`%s'\n"
msgid "Really create? (y/N) "
msgstr "真的要建立吗?(y/N)"
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "向卡上存储密钥时失败:%s\n"
-
-#, fuzzy, c-format
-#| msgid "can't create backup file `%s': %s\n"
-msgid "can't create backup file '%s': %s\n"
-msgstr "不能创建备份文件‘%s’:%s\n"
-
-#, fuzzy, c-format
-#| msgid "NOTE: backup of card key saved to `%s'\n"
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "注意:卡密钥的备份已保存到‘%s’\n"
-
msgid "never "
msgstr "永不过期"
msgid "Signature notation: "
msgstr "签名注记:"
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 个损坏的签名\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d 个损坏的签名\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d 个损坏的签名\n"
+msgstr[1] "%d 个损坏的签名\n"
#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr ""
+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] ""
msgid "Keyring"
msgstr "钥匙环"
msgstr "卡序列号 ="
#, fuzzy, c-format
-#| msgid "renaming `%s' to `%s' failed: %s\n"
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
-
-#, fuzzy, c-format
#| msgid "caching keyring `%s'\n"
msgid "caching keyring '%s'\n"
msgstr "缓存钥匙环‘%s’\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "目前已缓存 %lu 把密钥(%lu 份签名)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "目前已缓存 %lu 把密钥(%lu 份签名)\n"
+msgstr[1] "目前已缓存 %lu 把密钥(%lu 份签名)\n"
#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "缓存了 %lu 把密钥(%lu 份签名)\n"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 个损坏的签名\n"
+msgstr[1] "1 个损坏的签名\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "“%s”不是一个用户标识:跳过\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "1 个密钥正从 %s 得到更新\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "%d 个密钥正从 %s 得到更新\n"
+msgstr[1] "%d 个密钥正从 %s 得到更新\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "警告:无法更新密钥 %s,通过 %s:%s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "%d 个密钥正从 %s 得到更新\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "在公钥服务器上找不到密钥“%s”\n"
msgid "requesting key %s from %s\n"
msgstr "下载密钥 %s,从 %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "将密钥‘%s’上传到 %s 服务器 %s\n"
+#, fuzzy
+#| msgid "no keyserver action!\n"
+msgid "no keyserver known\n"
+msgstr "公钥服务器无动作!\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "%s 签名,散列算法 %s\n"
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s)\n"
+msgstr "读取‘%s’错误:%s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in `%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "读取‘%s’错误:%s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d:不建议使用该选项“%s”\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: 已跳过:公钥已存在\n"
+#, fuzzy, c-format
+#| msgid "can't connect to `%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "无法连接至‘%s’:%s\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "无效的‘%s’散列算法\n"
+
+#, fuzzy, c-format
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "无效的‘%s’散列算法\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "您没有指定用户标识。(您可以在命令行中用“-r”指定)\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "数据未被保存;请用“--output”选项来保存它们\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
-msgid "error creating '%s': %s\n"
-msgstr "建立‘%s’时发生错误:%s\n"
-
msgid "Detached signature.\n"
msgstr "分离的签名。\n"
msgstr "要为这把密钥建立一份吊销证书吗?(y/N)"
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 ""
+
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "已建立吊销证书。\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "找不到私钥“%s”:%s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring `%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "建立钥匙环‘%s’时发生错误:%s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "要为这把密钥建立一份吊销证书吗?(y/N)"
msgid "WARNING: signing subkey %s has an invalid cross-certification\n"
msgstr "警告:签名的子钥 %s 交叉验证无效\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "公钥 %s 在其签名后 %lu 秒生成\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "公钥 %s 在其签名后 %lu 秒生成\n"
+msgstr[1] "公钥 %s 在其签名后 %lu 秒生成\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "公钥 %s 在其签名后 %lu 秒生成\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "公钥 %s 在其签名后 %lu 秒生成\n"
+msgstr[1] "公钥 %s 在其签名后 %lu 秒生成\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
-
-#, c-format
-msgid ""
+msgid_plural ""
"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+msgstr[0] "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+msgstr[1] "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+msgstr[1] "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
#, fuzzy, c-format
#| msgid "NOTE: signature key %s expired %s\n"
msgstr "输入行长度超过 %d 字符\n"
#, fuzzy, c-format
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "在‘%s’中寻找信任度记录时出错:%s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "unsupported TOFU database version: %s\n"
+msgstr ""
+"\n"
+"支持的算法:\n"
+
+#, fuzzy, c-format
+msgid "error reading TOFU database: %s\n"
+msgstr "读取‘%s’时出错:%s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing secret keyring `%s': %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "写入私钥钥匙环‘%s’时发生错误: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error writing dir record: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "%s:写入目录记录时出错:%s\n"
+
+#, fuzzy, c-format
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "‘%s’中出错:%s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error updating TOFU database: %s\n"
+msgstr "读取‘%s’时出错:%s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "找不到公钥 %s:%s\n"
+
+#, fuzzy, c-format
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "读取‘%s’时出错:%s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting new PIN: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "获取新 PIN 时出错:%s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "有效性:%s"
+
+#, fuzzy, c-format
+msgid "error gathering signature stats: %s\n"
+msgstr "获取新 PIN 时出错:%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] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "列出密钥"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "|算法 [文件]|使用指定的散列算法打印报文散列值"
+msgstr[1] "|算法 [文件]|使用指定的散列算法打印报文散列值"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+msgstr[1] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+msgid "error changing TOFU policy: %s\n"
+msgstr "生成密码的时候发生错误:%s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#, fuzzy, c-format
+msgid "error opening TOFU database: %s\n"
+msgstr "读取‘%s’时出错:%s\n"
+
+#, fuzzy, c-format
#| msgid "`%s' is not a valid long keyID\n"
msgid "'%s' is not a valid long keyID\n"
msgstr "‘%s’不是一个有效的长式钥匙号\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "使用‘%s’信任模型时不需要更新信任度数据库\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "找不到公钥 %s:%s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "请执行一次 --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "正在检查信任度数据库\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "已经处理了 %d 把密钥(共计已解决了 %d 份的有效性)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "目前已处理 %lu 把密钥\n"
+msgstr[1] "目前已处理 %lu 把密钥\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "已经处理了 %d 把密钥(共计已解决了 %d 份的有效性)\n"
+msgstr[1] "已经处理了 %d 把密钥(共计已解决了 %d 份的有效性)\n"
msgid "no ultimately trusted keys found\n"
msgstr "没有找到任何绝对信任的密钥\n"
msgstr "绝对信任的密钥 %s 的公钥未被找到\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "需要 %d 份勉强信任和 %d 份完全信任,%s 信任模型\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
msgid "card is permanently locked!\n"
msgstr "卡被永久锁定!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr "尝试管理员 PIN %d 次后,卡将被永久锁定!\n"
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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] "尝试管理员 PIN %d 次后,卡将被永久锁定!\n"
+msgstr[1] "尝试管理员 PIN %d 次后,卡将被永久锁定!\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgid "generating key failed\n"
msgstr "生成密钥失败\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "密钥已生成(耗时 %d 秒)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "密钥已生成(耗时 %d 秒)\n"
+msgstr[1] "密钥已生成(耗时 %d 秒)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "无效的 OpenPGP 卡结构(D0 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "生成密码的时候发生错误:%s\n"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr ""
+
msgid "|NAME|use NAME as default secret key"
msgstr ""
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "有 %d 份签名因为遗失密钥而未被检查\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "有 %d 份签名因为某些错误而未被检查\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "检测到 1 个没有有效自身签名的用户标识\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "已经删除了 %d 个签名。\n"
+
+#, fuzzy
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "密钥 %s:“%s”%d 个签名被清除\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "您需要一个密码来保护您的私钥。\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "请输入密码:这是一个秘密的句子 \n"
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "密码再次输入时与首次输入不符;请再试一次"
+
+#~ 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 ""
+#~ "您不想要有密码――这个想法实在是遭透了!\n"
+#~ "不过,我仍然会照您想的去做。您任何时候都可以变更您的密码,仅需要\n"
+#~ "再次执行这个程序,并且使用“--edit-key”选项即可。\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "向卡上存储密钥时失败:%s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 个损坏的签名\n"
+
+#, fuzzy
+#~| msgid "renaming `%s' to `%s' failed: %s\n"
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "将‘%s’重命名为‘%s’时失败:%s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "缓存了 %lu 把密钥(%lu 份签名)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "1 个密钥正从 %s 得到更新\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "将密钥‘%s’上传到 %s 服务器 %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "公钥 %s 在其签名后 %lu 秒生成\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr "需要 %d 份勉强信任和 %d 份完全信任,%s 信任模型\n"
+
#, fuzzy
#~| msgid "can't open the keyring"
#~ msgid "Failed to open the keyring DB.\n"
#~ msgid "searching for \"%s\" from %s\n"
#~ msgstr "搜索“%s”,在 %s 上\n"
-#~ msgid "no keyserver action!\n"
-#~ msgstr "公钥服务器无动作!\n"
-
#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
#~ msgstr "警告:处理公钥服务器的程序来自不同版本的 GnuPG (%s)\n"
#~ msgid "ERROR: "
#~ msgstr "错误:"
-#~ msgid "WARNING: "
-#~ msgstr "警告:"
-
#~ msgid "... this is a bug (%s:%d:%s)\n"
#~ msgstr "……这是个程序缺陷(%s:%d:%s)\n"
msgid "Enter passphrase: "
msgstr "請輸入密語: "
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error getting version from '%s': %s\n"
+msgstr "建立鑰匙圈 '%s' 時出錯: %s\n"
+
+#, c-format
+msgid "server '%s' is older than us (%s < %s)"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "WARNING: %s overrides %s\n"
+msgid "WARNING: %s\n"
+msgstr "警告: %s 會推翻 %s\n"
+
#, c-format
msgid "OpenPGP card not available: %s\n"
msgstr "沒有可用的 OpenPGP 卡片: %s\n"
msgid "remove as much as possible from key during export"
msgstr "匯出時盡可能地從金鑰中移除"
+msgid " - skipped"
+msgstr " - 已跳過"
+
msgid "exporting secret keys not allowed\n"
msgstr "不允許匯出私鑰\n"
msgid "key %s: key material on-card - skipped\n"
msgstr "金鑰 %s: 金鑰資料在卡片上 - 已跳過\n"
-msgid " - skipped"
-msgstr " - 已跳過"
-
msgid "WARNING: nothing exported\n"
msgstr "警告: 沒有匯出任何東西\n"
+#, c-format
+msgid "error creating '%s': %s\n"
+msgstr "建立 '%s' 時出錯: %s\n"
+
msgid "[User ID not found]"
msgstr "[找不到使用者 ID]"
+#, fuzzy, c-format
+#| msgid "missing argument for option \"%.50s\"\n"
+msgid "(check argument of option '%s')\n"
+msgstr "\"%.50s\" 選項遺失了引數\n"
+
+#, c-format
+msgid "Warning: '%s' should be a long key ID or a fingerprint\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error closing %s: %s\n"
+msgid "error looking up: %s\n"
+msgstr "關閉 %s 時出錯: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "Warning: %s appears in the keyring %d times\n"
+msgstr "建立鑰匙圈 '%s' 時出錯: %s\n"
+
#, c-format
msgid "automatically retrieved '%s' via %s\n"
msgstr "已自動取回 '%s' (經由 %s )\n"
msgstr "找不到私鑰 \"%s\": %s\n"
#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
-msgid "(check argument of option '%s')\n"
-msgstr "\"%.50s\" 選項遺失了引數\n"
+#| msgid "|NAME|use NAME as default secret key"
+msgid "Warning: not using '%s' as default key: %s\n"
+msgstr "|名字|使用指定名字做為預設私鑰"
#, fuzzy, c-format
#| msgid "|NAME|use NAME as default secret key"
-msgid "using \"%s\" as default secret key\n"
+msgid "using \"%s\" as default secret key for signing\n"
msgstr "|名字|使用指定名字做為預設私鑰"
#, c-format
+msgid "all values passed to '%s' ignored\n"
+msgstr ""
+
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
msgstr "無效的金鑰 %s 可以藉由 --allow-non-selfsigned-uid 而生效\n"
msgstr "請注意: 已忽略舊有的預設選項檔 '%s'\n"
#, c-format
-msgid ""
-"Warning: value '%s' for option '%s' should be a long key ID or a "
-"fingerprint\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "option \"%.50s\" is ambiguous\n"
-msgid "key specification '%s' is ambiguous\n"
-msgstr "\"%.50s\" 選項不明確\n"
-
-#. TRANSLATORS: The %s prints a key specification which
-#. for example has been given at the command line. Two
-#. lines with fingerprints are printed after this message.
-#, c-format
-msgid "'%s' matches at least:\n"
-msgstr ""
-
-#, fuzzy, c-format
-#| msgid "error creating keyring '%s': %s\n"
-msgid "error searching the keyring: %s\n"
-msgstr "建立鑰匙圈 '%s' 時出錯: %s\n"
-
-#, c-format
msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "libgcrypt 太舊了 (需要 %s, 但是祇有 %s)\n"
msgid "WARNING: recipients (-r) given without using public key encryption\n"
msgstr "警告: 給定的收件者 (-r) 未使用公鑰加密\n"
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but no valid default keys given\n"
-msgstr "第 %d 列: 無效的給定日期\n"
-
-#, fuzzy, c-format
-#| msgid "line %d: invalid date given\n"
-msgid "option '%s' given, but option '%s' not given\n"
-msgstr "第 %d 列: 無效的給定日期\n"
-
msgid "--store [filename]"
msgstr "--store [檔名]"
msgid "key export failed: %s\n"
msgstr "金鑰匯出失敗: %s\n"
+#, fuzzy, c-format
+#| msgid "key export failed: %s\n"
+msgid "export as ssh key failed: %s\n"
+msgstr "金鑰匯出失敗: %s\n"
+
#, c-format
msgid "keyserver search failed: %s\n"
msgstr "用金鑰伺服器搜尋失敗: %s\n"
msgid "[self-signature]"
msgstr "[自我簽章]"
-msgid "1 bad signature\n"
-msgstr "1 份損壞的簽章\n"
-
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d 份損壞的簽章\n"
-
-msgid "1 signature not checked due to a missing key\n"
-msgstr "有 1 份簽章因為遺失金鑰而未被檢查\n"
-
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "有 %d 份簽章因為遺失金鑰而未被檢查\n"
-
-msgid "1 signature not checked due to an error\n"
-msgstr "有 1 份簽章因錯誤而未被檢查\n"
+#, fuzzy, c-format
+#| msgid "%d bad signatures\n"
+msgid "%d bad signature\n"
+msgid_plural "%d bad signatures\n"
+msgstr[0] "%d 份損壞的簽章\n"
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "有 %d 份簽章因錯誤而未被檢查\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to a missing key\n"
+msgid "%d signature not checked due to a missing key\n"
+msgid_plural "%d signatures not checked due to missing keys\n"
+msgstr[0] "有 1 份簽章因為遺失金鑰而未被檢查\n"
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "偵測到 1 個沒有有效自我簽章的使用者 ID\n"
+#, fuzzy, c-format
+#| msgid "1 signature not checked due to an error\n"
+msgid "%d signature not checked due to an error\n"
+msgid_plural "%d signatures not checked due to errors\n"
+msgstr[0] "有 1 份簽章因錯誤而未被檢查\n"
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "偵測到 %d 個沒有有效自我簽章的使用者 ID\n"
+#, fuzzy, c-format
+#| 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] "偵測到 %d 個沒有有效自我簽章的使用者 ID\n"
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
msgid "Really delete this self-signature? (y/N)"
msgstr "真的要刪除這份自我簽章嗎? (y/N)"
-#, c-format
+#, fuzzy, c-format
+#| msgid "Deleted %d signature.\n"
msgid "Deleted %d signature.\n"
-msgstr "已經刪除了 %d 份簽章.\n"
-
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "已經刪除了 %d 份簽章.\n"
+msgid_plural "Deleted %d signatures.\n"
+msgstr[0] "已經刪除了 %d 份簽章.\n"
msgid "Nothing deleted.\n"
msgstr "沒有刪除任何東西.\n"
msgid "User ID \"%s\" compacted: %s\n"
msgstr "使用者 ID \"%s\" 已精簡: %s\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "User ID \"%s\": %d signature removed\n"
msgid "User ID \"%s\": %d signature removed\n"
-msgstr "使用者 ID \"%s\": 已移除 %d 份簽章\n"
-
-#, c-format
-msgid "User ID \"%s\": %d signatures removed\n"
-msgstr "使用者 ID \"%s\": 已移除 %d 份簽章\n"
+msgid_plural "User ID \"%s\": %d signatures removed\n"
+msgstr[0] "使用者 ID \"%s\": 已移除 %d 份簽章\n"
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "請先訂正錯誤\n"
msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"你需要一個密語來保護你的私鑰.\n"
-"\n"
-
-msgid ""
-"Please enter a passphrase to protect the off-card backup of the new "
-"encryption key."
-msgstr "請輸入密語以保護新加密金鑰的卡片外備份."
-
-msgid "passphrase not correctly repeated; try again"
-msgstr "前後兩次輸入的密語不一致; 請再試一次"
-
-#, c-format
-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 ""
-"你不想要有密語 - 這個想法實在是 **遭透了**!\n"
-"我仍然會照你想的去做. 你任何時候都可以變更你的密語,\n"
-"僅需要再次執行這個程式, 並且使用 \"--edit-key\" 選項即可.\n"
-"\n"
-
-msgid ""
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
msgstr "金鑰產生已取消.\n"
#, c-format
+msgid "can't create backup file '%s': %s\n"
+msgstr "無法建立備份檔案 '%s': %s\n"
+
+#, c-format
+msgid "Note: backup of card key saved to '%s'\n"
+msgstr "請注意: 卡片金鑰的備份已儲存至 '%s'\n"
+
+#, c-format
msgid "writing public key to '%s'\n"
msgstr "正在寫入公鑰至 '%s'\n"
msgid "Really create? (y/N) "
msgstr "真的要建立嗎? (y/N) "
-#, c-format
-msgid "storing key onto card failed: %s\n"
-msgstr "儲存金鑰到卡片上時失敗: %s\n"
-
-#, c-format
-msgid "can't create backup file '%s': %s\n"
-msgstr "無法建立備份檔案 '%s': %s\n"
-
-#, c-format
-msgid "Note: backup of card key saved to '%s'\n"
-msgstr "請注意: 卡片金鑰的備份已儲存至 '%s'\n"
-
msgid "never "
msgstr "永遠不過期"
msgid "Signature notation: "
msgstr "簽章註記: "
-#, fuzzy
-#| msgid "1 bad signature\n"
-msgid "1 good signature\n"
-msgstr "1 份損壞的簽章\n"
-
#, fuzzy, c-format
#| msgid "%d bad signatures\n"
-msgid "%d good signatures\n"
-msgstr "%d 份損壞的簽章\n"
+msgid "%d good signature\n"
+msgid_plural "%d good signatures\n"
+msgstr[0] "%d 份損壞的簽章\n"
-#, c-format
-msgid "Warning: %lu key(s) skipped due to their large size\n"
-msgstr "警告: %lu 把金鑰因尺寸太大已跳過\n"
+#, fuzzy, c-format
+#| msgid "Warning: %lu key(s) skipped due to their large size\n"
+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] "警告: %lu 把金鑰因尺寸太大已跳過\n"
msgid "Keyring"
msgstr "鑰匙圈"
msgstr " 卡片序號 ="
#, c-format
-msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "把 '%s' 重新新命成 '%s' 時失敗: %s\n"
-
-#, c-format
msgid "caching keyring '%s'\n"
msgstr "快取鑰匙圈 '%s' 中\n"
-#, c-format
-msgid "%lu keys cached so far (%lu signatures)\n"
-msgstr "目前已檢查 %lu 把金鑰 (共 %lu 份簽章)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys cached so far (%lu signatures)\n"
+msgid "%lu keys cached so far (%lu signature)\n"
+msgid_plural "%lu keys cached so far (%lu signatures)\n"
+msgstr[0] "目前已檢查 %lu 把金鑰 (共 %lu 份簽章)\n"
-#, c-format
-msgid "%lu keys cached (%lu signatures)\n"
-msgstr "已檢查 %lu 把金鑰 (共 %lu 份簽章)\n"
+#, fuzzy, c-format
+#| msgid "flush the cache"
+msgid "%lu key cached"
+msgid_plural "%lu keys cached"
+msgstr[0] "清除快取"
+
+#, fuzzy, c-format
+#| msgid "1 bad signature\n"
+msgid " (%lu signature)\n"
+msgid_plural " (%lu signatures)\n"
+msgstr[0] "1 份損壞的簽章\n"
#, c-format
msgid "%s: keyring created\n"
msgid "\"%s\" not a key ID: skipping\n"
msgstr "\"%s\" 並非金鑰 ID: 跳過中\n"
-#, c-format
-msgid "refreshing 1 key from %s\n"
-msgstr "更新 1 份金鑰中 (從 %s )\n"
+#, fuzzy, c-format
+#| msgid "refreshing %d keys from %s\n"
+msgid "refreshing %d key from %s\n"
+msgid_plural "refreshing %d keys from %s\n"
+msgstr[0] "更新 %d 份金鑰中 (從 %s )\n"
#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
msgstr "警告: 無法更新金鑰 %s 於 %s: %s\n"
#, c-format
-msgid "refreshing %d keys from %s\n"
-msgstr "更新 %d 份金鑰中 (從 %s )\n"
-
-#, c-format
msgid "key \"%s\" not found on keyserver\n"
msgstr "在金鑰伺服器上找不到金鑰 \"%s\"\n"
msgid "requesting key %s from %s\n"
msgstr "正在請求金鑰 %s 自 %s\n"
-#, c-format
-msgid "sending key %s to %s server %s\n"
-msgstr "遞送金鑰 %s 至 %s 伺服器 %s\n"
+#, fuzzy
+#| msgid "invalid keyserver options\n"
+msgid "no keyserver known\n"
+msgstr "無效的金鑰伺服器選項\n"
#, c-format
msgid "sending key %s to %s\n"
msgid "Note: signatures using the %s algorithm are rejected\n"
msgstr "請注意: 採用 %s 演算法的簽章已遭駁回\n"
+#, fuzzy, c-format
+#| msgid "%s:%u: read error: %s\n"
+msgid "(reported error: %s)\n"
+msgstr "%s:%u: 讀取錯誤: %s\n"
+
+#, fuzzy, c-format
+#| msgid "read error in '%s': %s\n"
+msgid "(reported error: %s <%s>)\n"
+msgstr "'%s' 讀取錯誤: %s\n"
+
+msgid "(further info: "
+msgstr ""
+
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
msgstr "%s:%d: 不建議使用的選項 \"%s\"\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: 已跳過: 公鑰已存在\n"
+#, fuzzy, c-format
+#| msgid "can't connect to '%s': %s\n"
+msgid "can't encrypt to '%s'\n"
+msgstr "無法連接至 '%s': %s\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid date given\n"
+msgid "option '%s' given, but no valid default keys given\n"
+msgstr "第 %d 列: 無效的給定日期\n"
+
+#, fuzzy, c-format
+#| msgid "line %d: invalid date given\n"
+msgid "option '%s' given, but option '%s' not given\n"
+msgstr "第 %d 列: 無效的給定日期\n"
+
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "你沒有指定使用者 ID. (你可能得用 \"-r\")\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr "資料未被儲存; 請用 \"--output\" 選項來儲存\n"
-#, c-format
-msgid "error creating '%s': %s\n"
-msgstr "建立 '%s' 時出錯: %s\n"
-
msgid "Detached signature.\n"
msgstr "分離的簽章.\n"
msgstr "這把 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 ""
+
+#, fuzzy
+#| msgid ""
+#| "Use it to revoke this key in case of a compromise or loss of\n"
+#| "the secret key. However, if the secret key is still accessible,\n"
+#| "it is better to generate a new revocation certificate and give\n"
+#| "a reason for the revocation."
+msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
"the secret key. However, if the secret key is still accessible,\n"
"it is better to generate a new revocation certificate and give\n"
-"a reason for the revocation."
+"a reason for the revocation. For details see the description of\n"
+"of the gpg command \"--gen-revoke\" in the GnuPG manual."
msgstr ""
"萬一私鑰外流或遺失時, 可以用來撤銷金鑰.\n"
"然而, 如果其實還可以存取私鑰, 建議更好的\n"
"辦法是產生一份新的撤銷憑證, 並且指明撤銷\n"
"的理由."
+#, fuzzy
+#| 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 making use of this revocation certificate."
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 making use of this revocation certificate."
+"before importing and publishing this revocation certificate."
msgstr ""
"為了避免意外誤用此檔案, 底下五個破折號前面多插了一個冒號.\n"
"真的要使用這份撤銷憑證前, 請先用文字編輯器把那個冒號移除,\n"
"撤銷憑證才能使用."
#, fuzzy, c-format
+#| msgid "Revocation certificate created.\n"
+msgid "revocation certificate stored as '%s.rev'\n"
+msgstr "已建立撤銷憑證.\n"
+
+#, fuzzy, c-format
#| msgid "secret key \"%s\" not found: %s\n"
msgid "secret key \"%s\" not found\n"
msgstr "找不到私鑰 \"%s\": %s\n"
msgid "'%s' matches multiple secret keys:\n"
msgstr ""
+#, fuzzy, c-format
+#| msgid "error creating keyring '%s': %s\n"
+msgid "error searching the keyring: %s\n"
+msgstr "建立鑰匙圈 '%s' 時出錯: %s\n"
+
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "要為這把金鑰建立一份撤銷憑證嗎? (y/N) "
msgid "WARNING: signing subkey %s has an invalid cross-certification\n"
msgstr "警告: 簽署子鑰 %s 有無效的交叉憑證\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
msgid "public key %s is %lu second newer than the signature\n"
-msgstr "公鑰 %s 比簽章還要新了 %lu 秒\n"
+msgid_plural "public key %s is %lu seconds newer than the signature\n"
+msgstr[0] "公鑰 %s 比簽章還要新了 %lu 秒\n"
-#, c-format
-msgid "public key %s is %lu seconds newer than the signature\n"
-msgstr "公鑰 %s 比簽章還要新了 %lu 秒\n"
+#, fuzzy, c-format
+#| msgid "public key %s is %lu second newer than the signature\n"
+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] "公鑰 %s 比簽章還要新了 %lu 秒\n"
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
-msgstr "金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n"
-
-#, c-format
-msgid ""
+msgid_plural ""
"key %s was created %lu seconds in the future (time warp or clock problem)\n"
-msgstr "金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n"
+msgstr[0] ""
+"金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "key %s was created %lu second in the future (time warp or clock problem)\n"
+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] ""
+"金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n"
#, c-format
msgid "Note: signature key %s expired %s\n"
msgid "input line longer than %d characters\n"
msgstr "輸入列比 %d 字符還長\n"
+#, fuzzy, c-format
+#| msgid "error sending standard options: %s\n"
+msgid "error beginning transaction on TOFU database: %s\n"
+msgstr "送出標準選項時出錯: %s\n"
+
+#, c-format
+msgid "error committing transaction on TOFU database: %s\n"
+msgstr ""
+
+#, c-format
+msgid "error rolling back transaction on TOFU database: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "unsupported algorithm: %s"
+msgid "unsupported TOFU database version: %s\n"
+msgstr "未支援的演算法: %s"
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error reading TOFU database: %s\n"
+msgstr "送出資料時出錯: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error writing base64 encoding: %s\n"
+msgid "error determining TOFU database's version: %s\n"
+msgstr "寫入 base64 編碼時出錯: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error initializing reader object: %s\n"
+msgid "error initializing TOFU database: %s\n"
+msgstr "啟始讀取程式物件時出錯: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error opening '%s': %s\n"
+msgid "error opening TOFU database '%s': %s\n"
+msgstr "開啟 '%s' 時出錯: %s\n"
+
+msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
+msgstr ""
+
+msgid "Using split format for TOFU database\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error updating TOFU database: %s\n"
+msgstr "送出資料時出錯: %s\n"
+
+#, c-format
+msgid "public key %s not found: %s\n"
+msgstr "找不到公鑰 %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "error setting OCSP target: %s\n"
+msgid "error setting TOFU binding's trust level to %s\n"
+msgstr "設定 OCSP 目標時出錯: %s\n"
+
+#, c-format
+msgid "The binding %s is NOT known."
+msgstr ""
+
+#, c-format
+msgid ""
+"The key %s raised a conflict with this binding (%s). Since this binding's "
+"policy was 'auto', it was changed to 'ask'."
+msgstr ""
+
+#, c-format
+msgid ""
+"Please indicate whether you believe the binding %s%sis legitimate (the key "
+"belongs to the stated owner) or a forgery (bad)."
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error getting responder ID: %s\n"
+msgid "error gathering other user IDs: %s\n"
+msgstr "取得回應程式 ID 時出錯: %s\n"
+
+msgid "Known user IDs associated with this key:\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "validity: %s"
+msgid "policy: %s"
+msgstr "有效性: %s"
+
+#, fuzzy, c-format
+#| msgid "error getting stored flags: %s\n"
+msgid "error gathering signature stats: %s\n"
+msgstr "取得已存放的旗標時出錯: %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] ""
+
+#, c-format
+msgid "Statistics for keys with the email address \"%s\":\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "list keys"
+msgid "this key"
+msgstr "列出金鑰"
+
+#, c-format
+msgid "%ld message signed in the future."
+msgid_plural "%ld messages signed in the future."
+msgstr[0] ""
+
+#, fuzzy, c-format
+#| msgid "print message digests"
+msgid "%ld message signed"
+msgid_plural "%ld messages signed"
+msgstr[0] "印出訊息摘要"
+
+#, c-format
+msgid " over the past %ld day."
+msgid_plural " over the past %ld days."
+msgstr[0] ""
+
+#, c-format
+msgid " over the past %ld week."
+msgid_plural " over the past %ld weeks."
+msgstr[0] ""
+
+#, c-format
+msgid " over the past %ld month."
+msgid_plural " over the past %ld months."
+msgstr[0] ""
+
+#. 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 ""
+
+#. 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 ""
+
+msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "error creating a pipe: %s\n"
+msgid "error changing TOFU policy: %s\n"
+msgstr "建立管道時出錯: %s\n"
+
+#, c-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+
+#, c-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+
+#, c-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+
+#, c-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+
+#, c-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
+#, c-format
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
+#, c-format
+msgid "Have never verified a message signed by key %s!\n"
+msgstr ""
+
+#, c-format
+msgid "Failed to collect signature statistics for \"%s\" (key %s)\n"
+msgstr ""
+
+#, c-format
+msgid "Verified 0 messages signed by \"%s\" (key: %s, policy: %s)."
+msgstr ""
+
+#. TRANSLATORS: The final %s is replaced by a string like
+#. "7 months, 1 day, 5 minutes, 0 seconds".
+#, c-format
+msgid ""
+"Verified %ld message signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgid_plural ""
+"Verified %ld messages signed by \"%s\" (key: %s, policy: %s) in the past %s."
+msgstr[0] ""
+
+#, c-format
+msgid "The most recent message was verified %s ago."
+msgstr ""
+
+msgid "Warning: we've have yet to see a message signed by this key!\n"
+msgstr ""
+
+msgid "Warning: we've only seen a single message signed by this key!\n"
+msgstr ""
+
+#. TRANSLATORS: translate the below text. We don't
+#. directly internationalize that text so that we can
+#. tweak it without breaking translations.
+#, c-format
+msgid "TOFU: few signatures %d message %s"
+msgid_plural "TOFU: few signatures %d messages %s"
+msgstr[0] ""
+
+#, fuzzy, c-format
+#| msgid "error sending data: %s\n"
+msgid "error opening TOFU database: %s\n"
+msgstr "送出資料時出錯: %s\n"
+
#, c-format
msgid "'%s' is not a valid long keyID\n"
msgstr "'%s' 不是有效的長式金鑰 ID\n"
msgid "no need for a trustdb update with '%s' trust model\n"
msgstr "在 '%s' 信任模型中並不需要更新信任資料庫\n"
-#, c-format
-msgid "public key %s not found: %s\n"
-msgstr "找不到公鑰 %s: %s\n"
-
msgid "please do a --check-trustdb\n"
msgstr "請做一次 --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "正在檢查信任資料庫\n"
-#, c-format
-msgid "%d keys processed (%d validity counts cleared)\n"
-msgstr "已經處理了 %d 把金鑰 (共計已解決了 %d 份有效性)\n"
+#, fuzzy, c-format
+#| msgid "%lu keys processed so far\n"
+msgid "%d key processed"
+msgid_plural "%d keys processed"
+msgstr[0] "目前已處理 %lu 把金鑰\n"
+
+#, fuzzy, c-format
+#| msgid "%d keys processed (%d validity counts cleared)\n"
+msgid " (%d validity count cleared)\n"
+msgid_plural " (%d validity counts cleared)\n"
+msgstr[0] "已經處理了 %d 把金鑰 (共計已解決了 %d 份有效性)\n"
msgid "no ultimately trusted keys found\n"
msgstr "沒有找到任何徹底信任的金鑰\n"
msgstr "找不到徹底信任金鑰 %s 的公鑰\n"
#, c-format
-msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-msgstr "%d 個勉強信任以及 %d 個完全信任是 %s 信任模型的最小需求\n"
-
-#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr "深度: %d 有效: %3d 已簽署: %3d 信任: %d-, %dq, %dn, %dm, %df, %du\n"
msgid "card is permanently locked!\n"
msgstr "卡片永久鎖定了!!\n"
-#, c-format
-msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
-msgstr "%d 管理者個人識別碼 (PIN) 試圖在卡片永久鎖定前遺留下來\n"
+#, fuzzy, c-format
+#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
+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 管理者個人識別碼 (PIN) 試圖在卡片永久鎖定前遺留下來\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %%0A to force a linefeed.
msgid "generating key failed\n"
msgstr "產生金鑰時失敗\n"
-#, c-format
-msgid "key generation completed (%d seconds)\n"
-msgstr "金鑰產生完畢 (%d 秒)\n"
+#, fuzzy, c-format
+#| msgid "key generation completed (%d seconds)\n"
+msgid "key generation completed (%d second)\n"
+msgid_plural "key generation completed (%d seconds)\n"
+msgstr[0] "金鑰產生完畢 (%d 秒)\n"
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "無效的 OpenPGP 卡片結構 (DO 0x93)\n"
msgid "do not allow the reuse of old passphrases"
msgstr "不允許重複使用舊密語"
+#, fuzzy
+#| msgid "|N|set LDAP timeout to N seconds"
+msgid "|N|set the Pinentry timeout to N seconds"
+msgstr "|N|把 LDAP 逾時設成 N 秒"
+
msgid "|NAME|use NAME as default secret key"
msgstr "|名字|使用指定名字做為預設私鑰"
"語法: gpg-check-pattern [選項] 樣式檔案\n"
"用樣式檔案來檢查由標準輸入給定的密語\n"
+#, fuzzy
+#~| msgid "option \"%.50s\" is ambiguous\n"
+#~ msgid "key specification '%s' is ambiguous\n"
+#~ msgstr "\"%.50s\" 選項不明確\n"
+
+#~ msgid "%d signatures not checked due to missing keys\n"
+#~ msgstr "有 %d 份簽章因為遺失金鑰而未被檢查\n"
+
+#~ msgid "%d signatures not checked due to errors\n"
+#~ msgstr "有 %d 份簽章因錯誤而未被檢查\n"
+
+#~ msgid "1 user ID without valid self-signature detected\n"
+#~ msgstr "偵測到 1 個沒有有效自我簽章的使用者 ID\n"
+
+#~ msgid "Deleted %d signatures.\n"
+#~ msgstr "已經刪除了 %d 份簽章.\n"
+
+#~ msgid "User ID \"%s\": %d signatures removed\n"
+#~ msgstr "使用者 ID \"%s\": 已移除 %d 份簽章\n"
+
+#~ msgid ""
+#~ "You need a Passphrase to protect your secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "你需要一個密語來保護你的私鑰.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Please enter a passphrase to protect the off-card backup of the new "
+#~ "encryption key."
+#~ msgstr "請輸入密語以保護新加密金鑰的卡片外備份."
+
+#~ msgid "passphrase not correctly repeated; try again"
+#~ msgstr "前後兩次輸入的密語不一致; 請再試一次"
+
+#~ 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 ""
+#~ "你不想要有密語 - 這個想法實在是 **遭透了**!\n"
+#~ "我仍然會照你想的去做. 你任何時候都可以變更你的密語,\n"
+#~ "僅需要再次執行這個程式, 並且使用 \"--edit-key\" 選項即可.\n"
+#~ "\n"
+
+#~ msgid "storing key onto card failed: %s\n"
+#~ msgstr "儲存金鑰到卡片上時失敗: %s\n"
+
+#, fuzzy
+#~| msgid "1 bad signature\n"
+#~ msgid "1 good signature\n"
+#~ msgstr "1 份損壞的簽章\n"
+
+#~ msgid "renaming '%s' to '%s' failed: %s\n"
+#~ msgstr "把 '%s' 重新新命成 '%s' 時失敗: %s\n"
+
+#~ msgid "%lu keys cached (%lu signatures)\n"
+#~ msgstr "已檢查 %lu 把金鑰 (共 %lu 份簽章)\n"
+
+#~ msgid "refreshing 1 key from %s\n"
+#~ msgstr "更新 1 份金鑰中 (從 %s )\n"
+
+#~ msgid "sending key %s to %s server %s\n"
+#~ msgstr "遞送金鑰 %s 至 %s 伺服器 %s\n"
+
+#~ msgid "public key %s is %lu seconds newer than the signature\n"
+#~ msgstr "公鑰 %s 比簽章還要新了 %lu 秒\n"
+
+#~ msgid ""
+#~ "key %s was created %lu seconds in the future (time warp or clock "
+#~ "problem)\n"
+#~ msgstr ""
+#~ "金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n"
+
+#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
+#~ msgstr "%d 個勉強信任以及 %d 個完全信任是 %s 信任模型的最小需求\n"
+
#~ msgid "cleared passphrase cached with ID: %s\n"
#~ msgstr "清除此 ID 被快取住的密語: %s\n"
#define PCSC_E_NOT_TRANSACTED 0x80100016
#define PCSC_E_READER_UNAVAILABLE 0x80100017
#define PCSC_E_NO_SERVICE 0x8010001D
+#define PCSC_E_SERVICE_STOPPED 0x8010001E
#define PCSC_W_REMOVED_CARD 0x80100069
/* Fix pcsc-lite ABI incompatibilty. */
case PCSC_E_CANCELLED: rc = SW_HOST_ABORTED; break;
case PCSC_E_NO_MEMORY: rc = SW_HOST_OUT_OF_CORE; break;
case PCSC_E_TIMEOUT: rc = SW_HOST_CARD_IO_ERROR; break;
+ case PCSC_E_NO_SERVICE:
+ case PCSC_E_SERVICE_STOPPED:
case PCSC_E_UNKNOWN_READER: rc = SW_HOST_NO_READER; break;
case PCSC_E_SHARING_VIOLATION: rc = SW_HOST_LOCKING_FAILED; break;
case PCSC_E_NO_SMARTCARD: rc = SW_HOST_NO_CARD; break;
remaining = value[6];
xfree (relptr);
- log_info(_("%d Admin PIN attempts remaining before card"
- " is permanently locked\n"), remaining);
+ log_info (ngettext("%d Admin PIN attempt remaining before card"
+ " is permanently locked\n",
+ "%d Admin PIN attempts remaining before card"
+ " is permanently locked\n",
+ remaining), remaining);
if (remaining < 3)
{
log_error (_("generating key failed\n"));
goto leave;
}
- log_info (_("key generation completed (%d seconds)\n"),
- (int)(time (NULL) - start_at));
+
+ {
+ int nsecs = (int)(time (NULL) - start_at);
+ log_info (ngettext("key generation completed (%d second)\n",
+ "key generation completed (%d seconds)\n",
+ nsecs), nsecs);
+ }
keydata = find_tlv (buffer, buflen, 0x7F49, &keydatalen);
if (!keydata)
send_status_info (ctrl, "KEY-CREATED-AT",
numbuf, (size_t)strlen(numbuf), NULL, 0);
+ for (; mlen && !*m; mlen--, m++) /* strip leading zeroes */
+ ;
+ for (; elen && !*e; elen--, e++) /* strip leading zeroes */
+ ;
+
rc = store_fpr (app, keyno, (u32)created_at, fprbuf, PUBKEY_ALGO_RSA,
m, mlen, e, elen);
if (rc)
\f
+/* Print a warning if the server's version number is less than our
+ version number. Returns an error code on a connection problem. */
+static gpg_error_t
+warn_version_mismatch (ctrl_t ctrl, assuan_context_t ctx,
+ const char *servername, int mode)
+{
+ gpg_error_t err;
+ char *serverversion;
+ const char *myversion = strusage (13);
+
+ err = get_assuan_server_version (ctx, mode, &serverversion);
+ if (err)
+ log_error (_("error getting version from '%s': %s\n"),
+ servername, gpg_strerror (err));
+ else if (!compare_version_strings (serverversion, myversion))
+ {
+ char *warn;
+
+ warn = xtryasprintf (_("server '%s' is older than us (%s < %s)"),
+ servername, serverversion, myversion);
+ if (!warn)
+ err = gpg_error_from_syserror ();
+ else
+ {
+ log_info (_("WARNING: %s\n"), warn);
+ gpgsm_status2 (ctrl, STATUS_WARNING, "server_version_mismatch 0",
+ warn, NULL);
+ xfree (warn);
+ }
+ }
+ xfree (serverversion);
+ return err;
+}
+
+
/* Try to connect to the agent via socket or fork it off and work by
pipes. Handle the server's initial greeting */
static int
log_info (_("no gpg-agent running in this session\n"));
}
}
- else if (!rc)
+ else if (!rc && !(rc = warn_version_mismatch (ctrl, agent_ctx,
+ GPG_AGENT_NAME, 0)))
{
/* Tell the agent that we support Pinentry notifications. No
error checking so that it will work also with older
}
-
-static gpg_error_t
-membuf_data_cb (void *opaque, const void *buffer, size_t length)
-{
- membuf_t *data = opaque;
-
- if (buffer)
- put_membuf (data, buffer, length);
- return 0;
-}
-
-
/* This is the default inquiry callback. It mainly handles the
Pinentry notifications. */
static gpg_error_t
init_membuf (&data, 1024);
rc = assuan_transact (agent_ctx, "PKSIGN",
- membuf_data_cb, &data, default_inq_cb, ctrl,
+ put_membuf_cb, &data, default_inq_cb, ctrl,
NULL, NULL);
if (rc)
{
snprintf (line, DIM(line)-1, "SCD PKSIGN %s %s", hashopt, keyid);
line[DIM(line)-1] = 0;
rc = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data, default_inq_cb, ctrl,
+ put_membuf_cb, &data, default_inq_cb, ctrl,
NULL, NULL);
if (rc)
{
cipher_parm.ciphertext = ciphertext;
cipher_parm.ciphertextlen = ciphertextlen;
rc = assuan_transact (agent_ctx, "PKDECRYPT",
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
inq_ciphertext_cb, &cipher_parm, NULL, NULL);
if (rc)
{
if (!gk_parm.sexplen)
return gpg_error (GPG_ERR_INV_VALUE);
rc = assuan_transact (agent_ctx, "GENKEY",
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
inq_genkey_parms, &gk_parm, NULL, NULL);
if (rc)
{
init_membuf (&data, 1024);
rc = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, ctrl, NULL, NULL);
if (rc)
{
if (rc)
return rc;
+ rc = warn_version_mismatch (ctrl, agent_ctx, SCDAEMON_NAME, 2);
+ if (rc)
+ return rc;
+
init_membuf (&data, 4096);
learn_parm.error = 0;
learn_parm.ctrl = ctrl;
init_membuf_secure (&data, 64);
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, NULL, NULL, NULL);
if (err)
init_membuf_secure (&data, 64);
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, ctrl, NULL, NULL);
if (err)
{
init_membuf_secure (&data, 1024);
err = assuan_transact (agent_ctx, line,
- membuf_data_cb, &data,
+ put_membuf_cb, &data,
default_inq_cb, ctrl, NULL, NULL);
if (err)
{
}
+/* Print a warning if the server's version number is less than our
+ version number. Returns an error code on a connection problem. */
+static gpg_error_t
+warn_version_mismatch (ctrl_t ctrl, assuan_context_t ctx,
+ const char *servername, int mode)
+{
+ gpg_error_t err;
+ char *serverversion;
+ const char *myversion = strusage (13);
+
+ err = get_assuan_server_version (ctx, mode, &serverversion);
+ if (err)
+ log_error (_("error getting version from '%s': %s\n"),
+ servername, gpg_strerror (err));
+ else if (!compare_version_strings (serverversion, myversion))
+ {
+ char *warn;
+
+ warn = xtryasprintf (_("server '%s' is older than us (%s < %s)"),
+ servername, serverversion, myversion);
+ if (!warn)
+ err = gpg_error_from_syserror ();
+ else
+ {
+ log_info (_("WARNING: %s\n"), warn);
+ gpgsm_status2 (ctrl, STATUS_WARNING, "server_version_mismatch 0",
+ warn, NULL);
+ xfree (warn);
+ }
+ }
+ xfree (serverversion);
+ return err;
+}
+
+
/* This function prepares the dirmngr for a new session. The
audit-events option is used so that other dirmngr clients won't get
disturbed by such events. */
struct keyserver_spec *server;
if (!err)
+ err = warn_version_mismatch (ctrl, ctx, DIRMNGR_NAME, 0);
+
+ if (!err)
{
err = assuan_transact (ctx, "OPTION audit-events=1",
NULL, NULL, NULL, NULL, NULL, NULL);
server->host, server->port, user, pass, base);
line[DIM (line) - 1] = 0;
- err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (gpg_err_code (err) == GPG_ERR_ASS_UNKNOWN_CMD)
- err = 0; /* Allow the use of old dirmngr versions. */
+ assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
+ /* The code below is not required becuase we don't return an error. */
+ /* err = [above call] */
+ /* if (gpg_err_code (err) == GPG_ERR_ASS_UNKNOWN_CMD) */
+ /* err = 0; /\* Allow the use of old dirmngr versions. *\/ */
server = server->next;
}
;
if (*s || (n != 40))
return 0; /* no fingerprint (invalid or wrong length). */
- n /= 2;
for (s=hexstr, n=0; *s; s += 2, n++)
fpr[n] = xtoi_2 (s);
return 1; /* okay */
}
while (!*p || *p == '\n' || *p == '#');
- /* parse line */
+ /* Parse line. Note that the line has always a LF and spacep
+ does not consider a LF a space. Thus strpbrk will always
+ succeed. */
for (allowed=line; spacep (allowed); allowed++)
;
p = strpbrk (allowed, " :\n");
exptime, listmode, listfp,
(depth && is_root)? -1: depth);
if (gpg_err_code (rc) == GPG_ERR_CERT_EXPIRED)
- {
- any_expired = 1;
- rc = 0;
- }
+ any_expired = 1;
else if (rc)
goto leave;
if (gpg_err_code (rc) == GPG_ERR_NO_POLICY_MATCH)
{
any_no_policy_match = 1;
- rc = 1;
+ rc = 1; /* Be on the safe side and set RC. */
}
else if (rc)
goto leave;
/* The find next did not work or returned an
identical certificate. We better stop here
to avoid infinite checks. */
- rc = gpg_error (GPG_ERR_BAD_SIGNATURE);
+ /* No need to set RC because it is not used:
+ rc = gpg_error (GPG_ERR_BAD_SIGNATURE); */
ksba_cert_release (tmp_cert);
}
else
gcry_sexp_release (s_pkey);
/* Reformat it. */
- rc = make_canon_sexp (s_ciph, encval, NULL);
- gcry_sexp_release (s_ciph);
+ if (!rc)
+ {
+ rc = make_canon_sexp (s_ciph, encval, NULL);
+ gcry_sexp_release (s_ciph);
+ }
return rc;
}
#error cannot handle a table larger than 16 bits or smaller than 8 bits
#elif DUPTABLE_BITS > 8
idx <<= (DUPTABLE_BITS - 8);
- idx |= (fpr[1] & ~(~0 << 4));
+ idx |= (fpr[1] & ~(~0U << 4));
#endif
for (t = table[idx]; t; t = t->next)
gcry_sexp_release (s_pkey);
if (!array)
{
- rc = gpg_error (GPG_ERR_GENERAL);
log_error ("can't calculate keygrip\n");
return NULL;
}
}
}
if (p)
- p = stpcpy(p, "\n" );
+ strcpy (p, "\n" );
return list;
}
locked. This lock check does not work if the directory itself is
not yet available. If R_CREATED is not NULL it will be set to true
if the function created a new keybox. */
-static int
+static gpg_error_t
maybe_create_keybox (char *filename, int force, int *r_created)
{
dotlock_t lockhd = NULL;
* does not exist. If AUTO_CREATED is not NULL it will be set to true
* if the function has created a new keybox.
*/
-int
+gpg_error_t
keydb_add_resource (const char *url, int force, int secret, int *auto_created)
{
static int any_secret, any_public;
const char *resname = url;
char *filename = NULL;
- int rc = 0;
+ gpg_error_t err = 0;
KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE;
if (auto_created)
else if (strchr (resname, ':'))
{
log_error ("invalid key resource URL '%s'\n", url );
- rc = gpg_error (GPG_ERR_GENERAL);
+ err = gpg_error (GPG_ERR_GENERAL);
goto leave;
}
#endif /* !HAVE_DRIVE_LETTERS && !__riscos__ */
{
case KEYDB_RESOURCE_TYPE_NONE:
log_error ("unknown type of key resource '%s'\n", url );
- rc = gpg_error (GPG_ERR_GENERAL);
+ err = gpg_error (GPG_ERR_GENERAL);
goto leave;
case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = maybe_create_keybox (filename, force, auto_created);
- if (rc)
+ err = maybe_create_keybox (filename, force, auto_created);
+ if (err)
goto leave;
/* Now register the file */
{
- void *token = keybox_register_file (filename, secret);
- if (!token)
- ; /* already registered - ignore it */
+ void *token;
+
+ err = keybox_register_file (filename, secret, &token);
+ if (gpg_err_code (err) == GPG_ERR_EEXIST)
+ ; /* Already registered - ignore. */
+ else if (err)
+ ; /* Other error. */
else if (used_resources >= MAX_KEYDB_RESOURCES)
- rc = gpg_error (GPG_ERR_RESOURCE_LIMIT);
+ err = gpg_error (GPG_ERR_RESOURCE_LIMIT);
else
{
all_resources[used_resources].type = rt;
default:
log_error ("resource type of '%s' not supported\n", url);
- rc = gpg_error (GPG_ERR_NOT_SUPPORTED);
+ err = gpg_error (GPG_ERR_NOT_SUPPORTED);
goto leave;
}
/* fixme: check directory permissions and print a warning */
leave:
- if (rc)
- log_error ("keyblock resource '%s': %s\n", filename, gpg_strerror(rc));
+ if (err)
+ log_error ("keyblock resource '%s': %s\n", filename, gpg_strerror (err));
else if (secret)
any_secret = 1;
else
any_public = 1;
xfree (filename);
- return rc;
+ return err;
}
/*
* Start the next search on this handle right at the beginning
*/
-int
+gpg_error_t
keydb_search_reset (KEYDB_HANDLE hd)
{
- int i, rc = 0;
+ int i;
+ gpg_error_t rc = 0;
if (!hd)
return gpg_error (GPG_ERR_INV_VALUE);
break;
}
}
- return rc; /* fixme: we need to map error codes or share them with
- all modules*/
+ return rc;
}
/*
NULL, &skipped);
break;
}
- if (rc == -1) /* EOF -> switch to next resource */
- hd->current++;
+ if (rc == -1 || gpg_err_code (rc) == GPG_ERR_EOF)
+ { /* EOF -> switch to next resource */
+ hd->current++;
+ }
else if (!rc)
hd->found = hd->current;
}
{
rc = classify_user_id (sl->d, desc+ndesc, 0);
if (rc)
- {
- log_error ("key '%s' not found: %s\n",
- sl->d, gpg_strerror (rc));
- rc = 0;
- }
+ log_error ("key '%s' not found: %s\n", sl->d, gpg_strerror (rc));
else
ndesc++;
}
/*-- keydb.c --*/
-int keydb_add_resource (const char *url, int force, int secret,
- int *auto_created);
+gpg_error_t keydb_add_resource (const char *url, int force, int secret,
+ int *auto_created);
KEYDB_HANDLE keydb_new (int secret);
void keydb_release (KEYDB_HANDLE hd);
int keydb_set_ephemeral (KEYDB_HANDLE hd, int yes);
int keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved);
void keydb_rebuild_caches (void);
-int keydb_search_reset (KEYDB_HANDLE hd);
+gpg_error_t keydb_search_reset (KEYDB_HANDLE hd);
int keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc);
int keydb_search_first (KEYDB_HANDLE hd);
int keydb_search_next (KEYDB_HANDLE hd);
opt_data = has_option (line, "--data");
opt_html = has_option (line, "--html");
- line = skip_options (line);
+ /* Not needed: line = skip_options (line); */
if (!ctrl->audit)
return gpg_error (GPG_ERR_NO_DATA);
if ! $GPG --list-packets $i >/dev/null
then
- echo Failed to parse 4GB packet.
- exit 1
+ error Failed to parse 4GB packet.
else
- echo Can parse 4GB packets.
- exit 0
+ info Can parse 4GB packets.
fi
multisig.test verify.test armor.test \
import.test ecc.test 4gb-packet.test \
$(sqlite3_dependent_tests) \
- gpgtar.test use-exact-key.test \
+ gpgtar.test use-exact-key.test default-key.test \
finish.test
--- /dev/null
+#!/bin/sh
+
+. $srcdir/defs.inc || exit 3
+
+#set -x
+
+# Make sure $srcdir is set.
+if test "x$srcdir" = x
+then
+ echo srcdir environment variable not set!
+ exit 1
+fi
+
+# Import the sample key
+#
+# pub 1024R/8BC90111 2015-12-02
+# Key fingerprint = E657 FB60 7BB4 F21C 90BB 6651 BC06 7AF2 8BC9 0111
+# uid [ultimate] Barrett Brown <barrett@example.org>
+# sub 1024R/3E880CFF 2015-12-02 (encryption)
+# sub 1024R/F5F77B83 2015-12-02 (signing)
+# sub 1024R/45117079 2015-12-02 (encryption)
+# sub 1024R/1EA97479 2015-12-02 (signing)
+info "Importing public key."
+if $GPG --import $srcdir/samplekeys/E657FB607BB4F21C90BB6651BC067AF28BC90111.asc
+then
+ :
+else
+ error "$k: import failed"
+fi
+
+# By default, the most recent, valid signing subkey (1EA97479).
+for x in 8BC90111 3E880CFF F5F77B83 45117079 1EA97479
+do
+ info
+ info "Trying --default-key $x"
+
+ if ! echo | $GPG --default-key "$x" -s | $GPG --verify --status-fd=1 \
+ | grep -q 'VALIDSIG 5FBA84ACE02DCB17DA3DFF6BBCA43C441EA97479'
+ then
+ echo | $GPG --default-key "$x" -s | $GPG --verify --status-fd=2
+ error "Unexpected key used for signing (not the signing subkey, specified \"$x\")."
+ exit 1
+ fi
+done
+
+# By default, the most recent, valid encryption subkey (45117079).
+for x in 8BC90111 3E880CFF F5F77B83 45117079 1EA97479
+do
+ info
+ info "Trying --default-key $x --encrypt-to-default-key"
+
+ # We need another recipient, because --encrypt-to-default-key is
+ # not considered a recipient and gpg doesn't encrypt without any
+ # recipients.
+ #
+ # Note: it doesn't matter whether we specify the primary key or
+ # a subkey: the newest encryption subkey will be used.
+ if ! echo | $GPG --trust-model=always \
+ --default-key "$x" --encrypt-to-default-key \
+ -r 439F02CA -e \
+ | $GPG --list-packets \
+ | grep -q "keyid[ ][A-F0-9]*45117079"
+ then
+ echo | $GPG --trust-model=always \
+ --default-key "$x" --encrypt-to-default-key \
+ -r 439F02CA -e \
+ | $GPG --list-packets 1>&2
+ error "Unexpected key used for signing (specified \"$x\")."
+ exit 1
+ fi
+done
+
+exit 0
TESTDIR=gpgtar.d
FILELIST="${TESTDIR}/filelist"
+PPFILE="${TESTDIR}/passphrase"
+PPFLAGS="--gpg-args --passphrase-file=$PPFILE"
+
GPG=../../g10/gpg2
-GPGARGS="--trust-model=always"
+GPGARGS="$opt_always --no-permission-warning"
GPGTAR="../../tools/gpgtar"
GPGZIP="sh ../../tools/gpg-zip"
-for TOOL in "$GPGTAR" "$GPGZIP"
-do
+# Create, inspect, and extract an archive with the given options.
+#
+# $1 the tool to test
+# $2 options used to create the archive
+# $3 options used to inspect the archive
+# $4 options used to extract the archive
+do_test()
+{
+ (
+ TOOL="$1"
+ CREATE_FLAGS="$2"
+ INSPECT_FLAGS="$3"
+ EXTRACT_FLAGS="$4"
+
rm -rf -- "${TESTDIR}"
mkdir "${TESTDIR}"
+ echo frob >"$PPFILE"
- $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" \
- --encrypt --recipient "$usrname2" \
+ $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" $CREATE_FLAGS \
--output "${TESTDIR}/test.tar.pgp" $TESTFILES
- $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" \
- --list-archive "${TESTDIR}/test.tar.pgp" \
+ $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" $INSPECT_FLAGS \
+ "${TESTDIR}/test.tar.pgp" \
>"$FILELIST"
for F in $TESTFILES
do
grep -qe "\\b${F}\\b" "$FILELIST"
done
- $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" \
+ $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" $EXTRACT_FLAGS \
--tar-args --directory="${TESTDIR}" \
- --decrypt "${TESTDIR}/test.tar.pgp"
+ "${TESTDIR}/test.tar.pgp"
for F in $TESTFILES
do
diff -q "$F" "${TESTDIR}/$F"
done
+ )
+}
+
+for TOOL in "$GPGTAR" "$GPGZIP"
+#for TOOL in "$GPGZIP"
+do
+ # Asymmetric encryption.
+ do_test "$TOOL" \
+ "--encrypt --recipient $usrname2" \
+ "--list-archive" \
+ "--decrypt"
+
+ # Asymmetric encryption and signing.
+ do_test "$TOOL" \
+ "--encrypt --recipient $usrname2 --sign --local-user $usrname3" \
+ "--list-archive" \
+ "--decrypt"
+
+ # Signing only.
+ do_test "$TOOL" \
+ "--sign --local-user $usrname3" \
+ "--list-archive" \
+ "--decrypt"
+
+ # Symmetric encryption.
+ do_test "$TOOL" \
+ "${PPFLAGS} --symmetric" \
+ "${PPFLAGS} --list-archive" \
+ "${PPFLAGS} --decrypt"
+
+ # Symmetric encryption, explicitly choose cipher.
+ for a in `all_cipher_algos`; do
+ do_test "$TOOL" \
+ "${PPFLAGS} --gpg-args --cipher=$a --symmetric" \
+ "${PPFLAGS} --list-archive" \
+ "${PPFLAGS} --decrypt"
+ break
+ done
+
+ # Asymmetric and symmetric encryption, and signing.
+ do_test "$TOOL" \
+ "${PPFLAGS} --encrypt --symmetric --recipient $usrname2 --sign --local-user $usrname3" \
+ "${PPFLAGS} --list-archive" \
+ "${PPFLAGS} --decrypt"
done
# Success!
gpgtar =
endif
-# Fixme: We should remove the gpgkey2ssh tool.
bin_PROGRAMS = gpgconf gpg-connect-agent ${symcryptrun}
if !HAVE_W32_SYSTEM
bin_PROGRAMS += watchgnupg gpgparsemail
endif
if !HAVE_W32CE_SYSTEM
-bin_PROGRAMS += gpgkey2ssh ${gpgtar}
+bin_PROGRAMS += ${gpgtar}
endif
if !DISABLE_REGEX
$(LIBREADLINE) $(LIBINTL) $(NETLIBS) $(LIBICONV) \
$(resource_objs)
-if !HAVE_W32CE_SYSTEM
-gpgkey2ssh_SOURCES = gpgkey2ssh.c
-gpgkey2ssh_CFLAGS = $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS)
-# common via use of BUG() in an inline function, which
-# some compilers do not eliminate.
-gpgkey2ssh_LDADD = $(common_libs) \
- $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) $(LIBINTL) $(LIBICONV) \
- $(NETLIBS)
-endif
if !DISABLE_REGEX
gpg_check_pattern_SOURCES = gpg-check-pattern.c
gpgtar-extract.c \
gpgtar-list.c \
no-libgcrypt.c
-gpgtar_CFLAGS = $(GPG_ERROR_CFLAGS) $(NPTH_CFLAGS) $(LIBASSUAN_CFLAGS)
-gpgtar_LDADD = $(libcommonpth) $(GPG_ERROR_LIBS) \
- $(NPTH_LIBS) $(LIBASSUAN_LIBS) \
+gpgtar_CFLAGS = $(GPG_ERROR_CFLAGS)
+gpgtar_LDADD = $(libcommon) $(GPG_ERROR_LIBS) \
$(LIBINTL) $(NETLIBS) $(LIBICONV) $(W32SOCKLIBS)
GC_LEVEL_EXPERT, "gnupg",
N_("do not allow the reuse of old passphrases"),
GC_ARG_TYPE_NONE, GC_BACKEND_GPG_AGENT },
+ { "pinentry-timeout", GC_OPT_FLAG_RUNTIME,
+ GC_LEVEL_ADVANCED, "gnupg",
+ N_("|N|set the Pinentry timeout to N seconds"),
+ GC_ARG_TYPE_UINT32, GC_BACKEND_GPG_AGENT },
GC_OPTION_NULL
};
+++ /dev/null
-/* gpgkey2ssh.c - Converter (Debug helper)
- * Copyright (C) 2005 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
- * License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- FIXME: This tool needs some cleanup:
-
- - Do not use assert() for error output.
- - Add proper option parsing and standard options.
- - retrieve_key_material needs to take the ordinal at field 1 in account.
- 0 Write a man page.
-*/
-
-#include <config.h>
-
-#include <gcrypt.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <stdio.h>
-#include <errno.h>
-
-#include "util.h"
-#include "sysutils.h"
-
-\f
-
-typedef struct pkdbuf
-{
- unsigned char *buffer;
- size_t buffer_n;
-} pkdbuf_t;
-
-\f
-
-/* Retrieve the public key material for the RSA key, whose fingerprint
- is FPR, from gpg output, which can be read through the stream FP.
- The RSA modulus will be stored at the address of M and MLEN, the
- 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. */
-static gpg_error_t
-retrieve_key_material (FILE *fp, const char *hexkeyid, int *algorithm_id,
- pkdbuf_t **pkdbuf, size_t *pkdbuf_n)
-{
- pkdbuf_t *pkdbuf_new;
- pkdbuf_t *pkdbuf_tmp;
- size_t pkdbuf_new_n;
- gcry_error_t err = 0;
- char *line = NULL; /* read_line() buffer. */
- size_t line_size = 0; /* Helper for for read_line. */
- int found_key = 0; /* Helper to find a matching key. */
- int id;
- unsigned char *buffer;
- size_t buffer_n;
- int i;
-
- pkdbuf_new = NULL;
- pkdbuf_new_n = 0;
- id = 0;
-
- /* Loop over all records until we have found the subkey
- corresponding to the fingerprint. In general the first record
- should be the pub record, but we don't rely on that. Given that
- we only need to look at one key, it is sufficient to compare the
- keyid so that we don't need to look at "fpr" records. */
- for (;;)
- {
- char *p;
- char *fields[6];
- int nfields;
- size_t max_length;
- gcry_mpi_t mpi;
-
- max_length = 4096;
- i = read_line (fp, &line, &line_size, &max_length);
- if (!i)
- break; /* EOF. */
- if (i < 0)
- {
- err = gpg_error_from_syserror ();
- goto leave; /* Error. */
- }
- if (!max_length)
- {
- err = gpg_error (GPG_ERR_TRUNCATED);
- goto leave; /* Line truncated - we better stop processing. */
- }
-
- /* Parse the line into fields. */
- for (nfields=0, p=line; p && nfields < DIM (fields); nfields++)
- {
- fields[nfields] = p;
- p = strchr (p, ':');
- if (p)
- *(p++) = 0;
- }
- if (!nfields)
- continue; /* No fields at all - skip line. */
-
- if (!found_key)
- {
- if ( (!strcmp (fields[0], "sub") || !strcmp (fields[0], "pub") )
- && nfields > 4 &&
- (((strlen (hexkeyid) == 8)
- && (strlen (fields[4]) == 16)
- && (! strcmp (fields[4] + 8, hexkeyid)))
- || ((strlen (hexkeyid) == 16)
- && (! strcmp (fields[4], hexkeyid)))))
- {
- found_key = 1;
- /* Save algorithm ID. */
- id = atoi (fields[3]);
- }
- continue;
- }
-
- if ( !strcmp (fields[0], "sub") || !strcmp (fields[0], "pub") )
- break; /* Next key - stop. */
-
- if ( strcmp (fields[0], "pkd") )
- continue; /* Not a key data record. */
-
- /* FIXME, necessary? */
-
- i = atoi (fields[1]);
- if ((nfields < 4) || (i < 0))
- {
- err = gpg_error (GPG_ERR_GENERAL);
- goto leave;
- }
-
- err = gcry_mpi_scan (&mpi, GCRYMPI_FMT_HEX, fields[3], 0, NULL);
- if (err)
- mpi = NULL;
-
- err = gcry_mpi_aprint (GCRYMPI_FMT_STD, &buffer, &buffer_n, mpi);
- gcry_mpi_release (mpi);
- if (err)
- goto leave;
-
- pkdbuf_tmp = xrealloc (pkdbuf_new, sizeof (*pkdbuf_new) * (pkdbuf_new_n + 1));
- if (pkdbuf_new != pkdbuf_tmp)
- pkdbuf_new = pkdbuf_tmp;
- pkdbuf_new[pkdbuf_new_n].buffer = buffer;
- pkdbuf_new[pkdbuf_new_n].buffer_n = buffer_n;
- pkdbuf_new_n++;
- }
-
- *algorithm_id = id;
- *pkdbuf = pkdbuf_new;
- *pkdbuf_n = pkdbuf_new_n;
-
- leave:
-
- if (err)
- if (pkdbuf_new)
- {
- for (i = 0; i < pkdbuf_new_n; i++)
- xfree (pkdbuf_new[i].buffer);
- xfree (pkdbuf_new);
- }
- xfree (line);
-
- return err;
-}
-
-\f
-
-int
-key_to_blob (unsigned char **blob, size_t *blob_n, const char *identifier, ...)
-{
- unsigned char *blob_new;
- size_t blob_new_n;
- unsigned char uint32_buffer[4];
- u32 identifier_n;
- FILE *stream;
- va_list ap;
- int ret;
- pkdbuf_t *pkd;
-
- stream = gnupg_tmpfile ();
- assert (stream);
-
- identifier_n = strlen (identifier);
- uint32_buffer[0] = identifier_n >> 24;
- uint32_buffer[1] = identifier_n >> 16;
- uint32_buffer[2] = identifier_n >> 8;
- uint32_buffer[3] = identifier_n >> 0;
- ret = fwrite (uint32_buffer, sizeof (uint32_buffer), 1, stream);
- assert (ret == 1);
- ret = fwrite (identifier, identifier_n, 1, stream);
- assert (ret == 1);
-
- va_start (ap, identifier);
- while (1)
- {
- pkd = va_arg (ap, pkdbuf_t *);
- if (! pkd)
- break;
-
- uint32_buffer[0] = pkd->buffer_n >> 24;
- uint32_buffer[1] = pkd->buffer_n >> 16;
- uint32_buffer[2] = pkd->buffer_n >> 8;
- uint32_buffer[3] = pkd->buffer_n >> 0;
- ret = fwrite (uint32_buffer, sizeof (uint32_buffer), 1, stream);
- assert (ret == 1);
- ret = fwrite (pkd->buffer, pkd->buffer_n, 1, stream);
- assert (ret == 1);
- }
-
- va_end (ap);
-
- blob_new_n = ftell (stream);
- rewind (stream);
-
- blob_new = xmalloc (blob_new_n);
- ret = fread (blob_new, blob_new_n, 1, stream);
- assert (ret == 1);
-
- *blob = blob_new;
- *blob_n = blob_new_n;
-
- fclose (stream);
-
- return 0;
-}
-
-int
-main (int argc, char **argv)
-{
- const char *keyid;
- int algorithm_id;
- pkdbuf_t *pkdbuf;
- size_t pkdbuf_n;
- char *command = NULL;
- FILE *fp;
- int ret;
- gcry_error_t err;
- unsigned char *blob;
- size_t blob_n;
- struct b64state b64_state;
- const char *identifier;
-
- pkdbuf = NULL;
- pkdbuf_n = 0;
-
- algorithm_id = 0; /* (avoid cc warning) */
- identifier = NULL; /* (avoid cc warning) */
-
- if (argc != 2)
- {
- fprintf (stderr, "Usage: %s KEYID\n", argv[0]);
- exit (1);
- }
- if (strcmp (argv[1], "--help") == 0)
- {
- fprintf (stderr, "Usage: %s KEYID\n", argv[0]);
- fprintf (stderr, "\n");
- fprintf (stderr,
- "Convert a gpg key to a format appropriate for inclusion in an\n"
- "ssh authorized_keys file.\n");
- exit (0);
- }
-
- keyid = argv[1];
-
- asprintf (&command,
- "gpg2 --list-keys --with-colons --with-key-data '%s'",
- keyid);
- if (! command)
- {
- fprintf (stderr, "Out of memory.\n");
- exit (1);
- }
-
- fp = popen (command, "r");
- if (! fp)
- {
- fprintf (stderr, "Failed to running: '%s'\n", command);
- exit (1);
- }
-
- err = retrieve_key_material (fp, keyid, &algorithm_id, &pkdbuf, &pkdbuf_n);
- if (err)
- {
- fprintf (stderr, "Error looking up key: %s\n", gpg_strerror (err));
- exit (1);
- }
- if (! ((algorithm_id == 1) || (algorithm_id == 17)))
- {
- fprintf (stderr, "Unsupported algorithm: %d\n", algorithm_id);
- exit (1);
- }
-
- if (algorithm_id == 1)
- {
- identifier = "ssh-rsa";
- ret = key_to_blob (&blob, &blob_n, identifier,
- &pkdbuf[1], &pkdbuf[0], NULL);
- }
- else if (algorithm_id == 17)
- {
- identifier = "ssh-dss";
- ret = key_to_blob (&blob, &blob_n, identifier,
- &pkdbuf[0], &pkdbuf[1], &pkdbuf[2], &pkdbuf[3], NULL);
- }
- assert (! ret);
-
- printf ("%s ", identifier);
-
- err = b64enc_start (&b64_state, stdout, "");
- assert (! err);
- err = b64enc_write (&b64_state, blob, blob_n);
- assert (! err);
- err = b64enc_finish (&b64_state);
- assert (! err);
-
- printf (" COMMENT\n");
-
- return 0;
-}
#include <assert.h>
#include "i18n.h"
-#include "../common/call-gpg.h"
+#include "../common/exectool.h"
#include "../common/sysutils.h"
#include "gpgtar.h"
for (p=hdr->name; *p; p++)
if (*p == '/')
*p = '\\';
- wfname = utf8_to_wchar (hdr->name);
+ wfname = native_to_wchar (hdr->name);
for (p=hdr->name; *p; p++)
if (*p == '\\')
*p = '/';
if (!wfname)
{
- log_error ("error utf8-ing '%s': %s\n", hdr->name, w32_strerror (-1));
+ log_error ("error converting '%s': %s\n", hdr->name, w32_strerror (-1));
return gpg_error_from_syserror ();
}
if (!GetFileAttributesExW (wfname, GetFileExInfoStandard, &fad))
for (p=fname; *p; p++)
if (*p == '/')
*p = '\\';
- wfname = utf8_to_wchar (fname);
+ wfname = native_to_wchar (fname);
xfree (fname);
if (!wfname)
{
do
{
- char *fname = wchar_to_utf8 (fi.cFileName);
+ char *fname = wchar_to_native (fi.cFileName);
if (!fname)
{
err = gpg_error_from_syserror ();
- log_error ("error utf8-ing filename: %s\n", w32_strerror (-1));
+ log_error ("error converting filename: %s\n", w32_strerror (-1));
break;
}
for (p=fname; *p; p++)
INPATTERN is NULL take the pattern as null terminated strings from
stdin. */
gpg_error_t
-gpgtar_create (char **inpattern, int encrypt)
+gpgtar_create (char **inpattern, int encrypt, int sign)
{
gpg_error_t err = 0;
struct scanctrl_s scanctrl_buffer;
if (outstream == es_stdout)
es_set_binary (es_stdout);
- if (encrypt)
+ if (encrypt || sign)
{
cipher_stream = outstream;
outstream = es_fopenmem (0, "rwb");
if (err)
goto leave;
- if (encrypt)
+ if (encrypt || sign)
{
+ int i;
+ strlist_t arg;
+ const char **argv;
+
err = es_fseek (outstream, 0, SEEK_SET);
if (err)
goto leave;
- err = gpg_encrypt_stream (NULL,
- opt.gpg_program,
- opt.gpg_arguments,
- outstream,
- opt.recipients,
- cipher_stream);
+ /* '--encrypt' may be combined with '--symmetric', but 'encrypt'
+ is set either way. Clear it if no recipients are specified.
+ XXX: Fix command handling. */
+ if (opt.symmetric && opt.recipients == NULL)
+ encrypt = 0;
+
+ argv = xtrycalloc (strlist_length (opt.gpg_arguments)
+ + 2 * strlist_length (opt.recipients)
+ + 1 + !!encrypt + !!sign + 2 * !!opt.user
+ + !!opt.symmetric,
+ sizeof *argv);
+ if (argv == NULL)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+ i = 0;
+ if (encrypt)
+ argv[i++] = "--encrypt";
+ if (sign)
+ argv[i++] = "--sign";
+ if (opt.user)
+ {
+ argv[i++] = "--local-user";
+ argv[i++] = opt.user;
+ }
+ if (opt.symmetric)
+ argv[i++] = "--symmetric";
+ for (arg = opt.recipients; arg; arg = arg->next)
+ {
+ argv[i++] = "--recipient";
+ argv[i++] = arg->d;
+ }
+ for (arg = opt.gpg_arguments; arg; arg = arg->next)
+ argv[i++] = arg->d;
+ argv[i++] = NULL;
+ assert (i == strlist_length (opt.gpg_arguments)
+ + 2 * strlist_length (opt.recipients)
+ + 1 + !!encrypt + !!sign + 2 * !!opt.user
+ + !!opt.symmetric);
+
+ err = gnupg_exec_tool_stream (opt.gpg_program, argv,
+ outstream, cipher_stream);
+ xfree (argv);
if (err)
goto leave;
}
#include <assert.h>
#include "i18n.h"
-#include "../common/call-gpg.h"
+#include "../common/exectool.h"
#include "../common/sysutils.h"
#include "gpgtar.h"
if (decrypt)
{
+ int i;
+ strlist_t arg;
+ const char **argv;
+
cipher_stream = stream;
stream = es_fopenmem (0, "rwb");
if (! stream)
err = gpg_error_from_syserror ();
goto leave;
}
- err = gpg_decrypt_stream (NULL, opt.gpg_program, opt.gpg_arguments,
- cipher_stream, stream);
+
+ argv = xtrycalloc (strlist_length (opt.gpg_arguments) + 2,
+ sizeof *argv);
+ if (argv == NULL)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+ i = 0;
+ argv[i++] = "--decrypt";
+ for (arg = opt.gpg_arguments; arg; arg = arg->next)
+ argv[i++] = arg->d;
+ argv[i++] = NULL;
+ assert (i == strlist_length (opt.gpg_arguments) + 2);
+
+ err = gnupg_exec_tool_stream (opt.gpg_program, argv,
+ cipher_stream, stream);
+ xfree (argv);
if (err)
goto leave;
#include "i18n.h"
#include "gpgtar.h"
-#include "../common/call-gpg.h"
+#include "../common/exectool.h"
\f
}
else
{
- log_error ("%s: invalid octal number encountered - assuming 0\n",
+ log_error ("%s: invalid octal number encountered - assuming 0\n",
filename);
value = 0;
break;
tar_header_t header;
int use_prefix;
- use_prefix = (!memcmp (raw->magic, "ustar", 5)
+ use_prefix = (!memcmp (raw->magic, "ustar", 5)
&& (raw->magic[5] == ' ' || !raw->magic[5]));
n = 0;
memcpy (header->name+n, raw->name, namelen);
header->name[n+namelen] = 0;
-
+
header->mode = parse_xoctal (raw->mode, sizeof raw->mode, filename);
header->uid = parse_xoctal (raw->uid, sizeof raw->uid, filename);
header->gid = parse_xoctal (raw->gid, sizeof raw->gid, filename);
header->nrecords = (header->size + RECORDSIZE-1)/RECORDSIZE;
else
header->nrecords = 0;
-
+
return header;
}
if (decrypt)
{
+ int i;
+ strlist_t arg;
+ const char **argv;
+
cipher_stream = stream;
stream = es_fopenmem (0, "rwb");
if (! stream)
err = gpg_error_from_syserror ();
goto leave;
}
- err = gpg_decrypt_stream (NULL, opt.gpg_program, opt.gpg_arguments,
- cipher_stream, stream);
+
+ argv = xtrycalloc (strlist_length (opt.gpg_arguments) + 2,
+ sizeof *argv);
+ if (argv == NULL)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+ i = 0;
+ argv[i++] = "--decrypt";
+ for (arg = opt.gpg_arguments; arg; arg = arg->next)
+ argv[i++] = arg->d;
+ argv[i++] = NULL;
+ assert (i == strlist_length (opt.gpg_arguments) + 2);
+
+ err = gnupg_exec_tool_stream (opt.gpg_program, argv,
+ cipher_stream, stream);
+ xfree (argv);
if (err)
goto leave;
gpg. So here we go. */
#include <config.h>
-#include <assuan.h>
#include <ctype.h>
#include <errno.h>
#include <npth.h>
#include "util.h"
#include "i18n.h"
#include "sysutils.h"
-#include "../common/asshelp.h"
#include "../common/openpgpdefs.h"
#include "../common/init.h"
#include "../common/strlist.h"
return 0;
}
\f
-/* Define Assuan hooks for NPTH. */
-
-ASSUAN_SYSTEM_NPTH_IMPL;
-
-\f
/* Global flags. */
enum cmd_and_opt_values cmd = 0;
int skip_crypto = 0;
break;
case oUser:
- log_info ("note: ignoring option --user\n");
opt.user = pargs->r.ret_str;
break;
case oSymmetric:
- log_info ("note: ignoring option --symmetric\n");
set_cmd (&cmd, aEncrypt);
opt.symmetric = 1;
break;
/* Make sure that our subsystems are ready. */
i18n_init();
init_common_subsystems (&argc, &argv);
- npth_init ();
- assuan_set_assuan_log_prefix (log_get_prefix (NULL));
- assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
- assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH);
- assuan_sock_init ();
/* Parse the command line. */
pargs.argc = &argc;
log_info (_("NOTE: '%s' is not considered an option\n"), argv[i]);
}
+ if (! opt.gpg_program)
+ opt.gpg_program = gnupg_module_name (GNUPG_MODULE_NAME_GPG);
+
if (opt.verbose > 1)
opt.debug_level = 1024;
- setup_libassuan_logging (&opt.debug_level);
switch (cmd)
{
break;
case aEncrypt:
+ case aSign:
+ case aSignEncrypt:
if ((!argc && !null_names)
|| (argc && null_names))
usage (1);
if (opt.filename)
log_info ("note: ignoring option --set-filename\n");
- err = gpgtar_create (null_names? NULL :argv, !skip_crypto);
+ err = gpgtar_create (null_names? NULL :argv,
+ !skip_crypto
+ && (cmd == aEncrypt || cmd == aSignEncrypt),
+ cmd == aSign || cmd == aSignEncrypt);
if (err && log_get_errorcount (0) == 0)
log_error ("creating archive failed: %s\n", gpg_strerror (err));
break;
gpg_error_t write_record (estream_t stream, const void *record);
/*-- gpgtar-create.c --*/
-gpg_error_t gpgtar_create (char **inpattern, int encrypt);
+gpg_error_t gpgtar_create (char **inpattern, int encrypt, int sign);
/*-- gpgtar-extract.c --*/
gpg_error_t gpgtar_extract (const char *filename, int decrypt);