From 4738256f2e0d22302377c9ec7b2ae3999338e6c6 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Thu, 26 Oct 2017 14:40:38 +0900 Subject: [PATCH 01/26] agent: Allow recursive use of pinentry. * agent/agent.h (struct server_control_s): Add pinentry_level. * agent/call-pinentry.c (agent_popup_message_stop): Not clear ENTRY_CTX here. (unlock_pinentry): Handle recursion. Clear ENTRY_CTX here. (start_pinentry): Allow recursive use. -- GnuPG-bug-id: 3190 Signed-off-by: NIIBE Yutaka (cherry picked from commit 3b66a256e3760e88066ca11b7b49d924e42aa46b) --- agent/agent.h | 3 +++ agent/call-pinentry.c | 34 +++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/agent/agent.h b/agent/agent.h index f5df75e6e..cde38fe4a 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -254,6 +254,9 @@ struct server_control_s /* The current S2K which might be different from the calibrated count. */ unsigned long s2k_count; + + /* Recursion level of pinentry. */ + int pinentry_level; }; diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c index 6a5c1fe1e..0fe83454e 100644 --- a/agent/call-pinentry.c +++ b/agent/call-pinentry.c @@ -177,15 +177,19 @@ unlock_pinentry (gpg_error_t rc) } } - entry_ctx = NULL; - err = npth_mutex_unlock (&entry_lock); - if (err) + if (--entry_owner->pinentry_level == 0) { - log_error ("failed to release the entry lock: %s\n", strerror (err)); - if (!rc) - rc = gpg_error_from_errno (err); + entry_owner = NULL; + entry_ctx = NULL; + err = npth_mutex_unlock (&entry_lock); + if (err) + { + log_error ("failed to release the entry lock: %s\n", strerror (err)); + if (!rc) + rc = gpg_error_from_errno (err); + } + assuan_release (ctx); } - assuan_release (ctx); return rc; } @@ -288,6 +292,13 @@ start_pinentry (ctrl_t ctrl) char *flavor_version; int err; + if (entry_owner == ctrl) + { + /* Allow recursive use of pinentry. */ + ctrl->pinentry_level++; + return 0; + } + npth_clock_gettime (&abstime); abstime.tv_sec += LOCK_TIMEOUT; err = npth_mutex_timedlock (&entry_lock, &abstime); @@ -371,6 +382,10 @@ start_pinentry (ctrl_t ctrl) log_error ("can't allocate assuan context: %s\n", gpg_strerror (rc)); return rc; } + + ctrl->pinentry_level = 1; + entry_ctx = ctx; + /* We don't want to log the pinentry communication to make the logs easier to read. We might want to add a new debug option to enable pinentry logging. */ @@ -382,17 +397,15 @@ start_pinentry (ctrl_t ctrl) that atfork is used to change the environment for pinentry. We start the server in detached mode to suppress the console window under Windows. */ - rc = assuan_pipe_connect (ctx, full_pgmname, argv, + rc = assuan_pipe_connect (entry_ctx, full_pgmname, argv, no_close_list, atfork_cb, ctrl, ASSUAN_PIPE_CONNECT_DETACHED); if (rc) { log_error ("can't connect to the PIN entry module '%s': %s\n", full_pgmname, gpg_strerror (rc)); - assuan_release (ctx); return unlock_pinentry (gpg_error (GPG_ERR_NO_PIN_ENTRY)); } - entry_ctx = ctx; if (DBG_IPC) log_debug ("connection to PIN entry established\n"); @@ -1551,7 +1564,6 @@ agent_popup_message_stop (ctrl_t ctrl) /* Thread IDs are opaque, but we try our best here by resetting it to the same content that a static global variable has. */ memset (&popup_tid, '\0', sizeof (popup_tid)); - entry_owner = NULL; /* Now we can close the connection. */ unlock_pinentry (0); From 3924e1442c6625a2b57573a1a634a5ec56b09a29 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 27 Oct 2017 09:54:48 +0900 Subject: [PATCH 02/26] agent: Clean up pinentry access locking. * agent/agent.h (struct server_control_s): Rename PINENTRY_ACTIVE. * agent/call-pinentry.c (entry_owner): Remove. (agent_reset_query): Use thread private object of PINENTRY_ACTIVE. (unlock_pinentry): Add CTRL to arguments to access thread private. Check and decrement PINENTRY_ACTIVE for recursive use. (start_pinentry): Check and increment PINENTRY_ACTIVE for recursion. (agent_askpin): Follow the change of unlock_pinentry API. (agent_get_passphrase, agent_get_confirmation): Likewise. (agent_show_message, agent_popup_message_start): Likewise. (agent_popup_message_stop, agent_clear_passphrase): Likewise. -- We use the member PINENTRY_ACTIVE as a thread private object. It's only valid for a single thread at a time. It would be possible to have a thread shared object of PINENTRY_ACTIVE, keeping ENTRY_OWNER for distinguishing its owner (which is also a thread shared object). But, in this case, access to ENTRY_OWNER is tricky (only comparison to accessing thread would be OK with no lock), or we need to introduce another lock for accessing ENTRY_OWNER, which complicates the code too much. So, simply have a thread private object for recursive pinentry access. GnuPG-bug-id: 3190 Signed-off-by: NIIBE Yutaka (cherry picked from commit fb7828676cc2c01047498898378711e049f73fee) --- agent/agent.h | 5 +- agent/call-pinentry.c | 122 ++++++++++++++++++++---------------------- 2 files changed, 60 insertions(+), 67 deletions(-) diff --git a/agent/agent.h b/agent/agent.h index cde38fe4a..7bb46faa1 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -255,8 +255,9 @@ struct server_control_s count. */ unsigned long s2k_count; - /* Recursion level of pinentry. */ - int pinentry_level; + /* If pinentry is active for this thread. It can be more than 1, + when pinentry is called recursively. */ + int pinentry_active; }; diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c index 0fe83454e..a0886814f 100644 --- a/agent/call-pinentry.c +++ b/agent/call-pinentry.c @@ -67,12 +67,6 @@ static struct } entry_features; -/* The control variable of the connection owning the current pinentry. - This is only valid if ENTRY_CTX is not NULL. Note, that we care - only about the value of the pointer and that it should never be - dereferenced. */ -static ctrl_t entry_owner; - /* A mutex used to serialize access to the pinentry. */ static npth_mutex_t entry_lock; @@ -128,7 +122,7 @@ agent_query_dump_state (void) void agent_reset_query (ctrl_t ctrl) { - if (entry_ctx && popup_tid && entry_owner == ctrl) + if (entry_ctx && popup_tid && ctrl->pinentry_active) { agent_popup_message_stop (ctrl); } @@ -140,7 +134,7 @@ agent_reset_query (ctrl_t ctrl) stalled pinentry does not block other threads. Fixme: We should have a timeout in Assuan for the disconnect operation. */ static gpg_error_t -unlock_pinentry (gpg_error_t rc) +unlock_pinentry (ctrl_t ctrl, gpg_error_t rc) { assuan_context_t ctx = entry_ctx; int err; @@ -177,9 +171,8 @@ unlock_pinentry (gpg_error_t rc) } } - if (--entry_owner->pinentry_level == 0) + if (--ctrl->pinentry_active == 0) { - entry_owner = NULL; entry_ctx = NULL; err = npth_mutex_unlock (&entry_lock); if (err) @@ -292,10 +285,11 @@ start_pinentry (ctrl_t ctrl) char *flavor_version; int err; - if (entry_owner == ctrl) + if (ctrl->pinentry_active) { - /* Allow recursive use of pinentry. */ - ctrl->pinentry_level++; + /* It's trying to use pinentry recursively. In this situation, + the thread holds ENTRY_LOCK already. */ + ctrl->pinentry_active++; return 0; } @@ -313,8 +307,6 @@ start_pinentry (ctrl_t ctrl) return rc; } - entry_owner = ctrl; - if (entry_ctx) return 0; @@ -336,7 +328,7 @@ start_pinentry (ctrl_t ctrl) the Wine implementation does not flush stdin,stdout and stderr - see above. Let's try to ignore the error. */ #ifndef HAVE_W32_SYSTEM - return unlock_pinentry (tmperr); + return unlock_pinentry (ctrl, tmperr); #endif } @@ -383,7 +375,7 @@ start_pinentry (ctrl_t ctrl) return rc; } - ctrl->pinentry_level = 1; + ctrl->pinentry_active = 1; entry_ctx = ctx; /* We don't want to log the pinentry communication to make the logs @@ -404,7 +396,7 @@ start_pinentry (ctrl_t ctrl) { log_error ("can't connect to the PIN entry module '%s': %s\n", full_pgmname, gpg_strerror (rc)); - return unlock_pinentry (gpg_error (GPG_ERR_NO_PIN_ENTRY)); + return unlock_pinentry (ctrl, gpg_error (GPG_ERR_NO_PIN_ENTRY)); } if (DBG_IPC) @@ -415,65 +407,65 @@ start_pinentry (ctrl_t ctrl) { char *optstr; if (asprintf (&optstr, "OPTION pinentry-user-data=%s", value) < 0 ) - return unlock_pinentry (out_of_core ()); + return unlock_pinentry (ctrl, out_of_core ()); rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL, NULL); xfree (optstr); if (rc && gpg_err_code (rc) != GPG_ERR_UNKNOWN_OPTION) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } rc = assuan_transact (entry_ctx, opt.no_grab? "OPTION no-grab":"OPTION grab", NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); value = session_env_getenv (ctrl->session_env, "GPG_TTY"); if (value) { char *optstr; if (asprintf (&optstr, "OPTION ttyname=%s", value) < 0 ) - return unlock_pinentry (out_of_core ()); + return unlock_pinentry (ctrl, out_of_core ()); rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL, NULL); xfree (optstr); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } value = session_env_getenv (ctrl->session_env, "TERM"); if (value) { char *optstr; if (asprintf (&optstr, "OPTION ttytype=%s", value) < 0 ) - return unlock_pinentry (out_of_core ()); + return unlock_pinentry (ctrl, out_of_core ()); rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL, NULL); xfree (optstr); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } if (ctrl->lc_ctype) { char *optstr; if (asprintf (&optstr, "OPTION lc-ctype=%s", ctrl->lc_ctype) < 0 ) - return unlock_pinentry (out_of_core ()); + return unlock_pinentry (ctrl, out_of_core ()); rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL, NULL); xfree (optstr); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } if (ctrl->lc_messages) { char *optstr; if (asprintf (&optstr, "OPTION lc-messages=%s", ctrl->lc_messages) < 0 ) - return unlock_pinentry (out_of_core ()); + return unlock_pinentry (ctrl, out_of_core ()); rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL, NULL); xfree (optstr); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } @@ -489,7 +481,7 @@ start_pinentry (ctrl_t ctrl) rc = assuan_transact (entry_ctx, "OPTION allow-external-password-cache", NULL, NULL, NULL, NULL, NULL, NULL); if (rc && gpg_err_code (rc) != GPG_ERR_UNKNOWN_OPTION) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } if (opt.allow_emacs_pinentry) @@ -499,7 +491,7 @@ start_pinentry (ctrl_t ctrl) rc = assuan_transact (entry_ctx, "OPTION allow-emacs-prompt", NULL, NULL, NULL, NULL, NULL, NULL); if (rc && gpg_err_code (rc) != GPG_ERR_UNKNOWN_OPTION) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } @@ -537,7 +529,7 @@ start_pinentry (ctrl_t ctrl) if (*s == '|' && (s2=strchr (s+1,'|'))) s = s2+1; if (asprintf (&optstr, "OPTION default-%s=%s", tbl[idx].key, s) < 0 ) - return unlock_pinentry (out_of_core ()); + return unlock_pinentry (ctrl, out_of_core ()); assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL, NULL); xfree (optstr); @@ -664,8 +656,8 @@ start_pinentry (ctrl_t ctrl) rc = agent_inq_pinentry_launched (ctrl, pinentry_pid, flavor_version); if (gpg_err_code (rc) == GPG_ERR_CANCELED || gpg_err_code (rc) == GPG_ERR_FULLY_CANCELED) - return unlock_pinentry (gpg_err_make (GPG_ERR_SOURCE_DEFAULT, - gpg_err_code (rc))); + return unlock_pinentry (ctrl, gpg_err_make (GPG_ERR_SOURCE_DEFAULT, + gpg_err_code (rc))); rc = 0; } @@ -1035,18 +1027,18 @@ agent_askpin (ctrl_t ctrl, rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc && gpg_err_code (rc) != GPG_ERR_ASS_UNKNOWN_CMD) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); build_cmd_setdesc (line, DIM(line), desc_text); rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); snprintf (line, DIM(line), "SETPROMPT %s", prompt_text? prompt_text : is_pin? L_("PIN:") : L_("Passphrase:")); rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); /* If a passphrase quality indicator has been requested and a minimum passphrase length has not been disabled, send the command @@ -1055,7 +1047,7 @@ agent_askpin (ctrl_t ctrl, { rc = setup_qualitybar (ctrl); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } if (initial_errtext) @@ -1064,7 +1056,7 @@ agent_askpin (ctrl_t ctrl, rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } if (pininfo->with_repeat) @@ -1095,7 +1087,7 @@ agent_askpin (ctrl_t ctrl, rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); errtext = NULL; } @@ -1105,7 +1097,7 @@ agent_askpin (ctrl_t ctrl, rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } saveflag = assuan_get_flag (entry_ctx, ASSUAN_CONFIDENTIAL); @@ -1133,7 +1125,7 @@ agent_askpin (ctrl_t ctrl, errtext = is_pin? L_("PIN too long") : L_("Passphrase too long"); else if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); if (!errtext && pininfo->min_digits) { @@ -1159,7 +1151,7 @@ agent_askpin (ctrl_t ctrl, || gpg_err_code (rc) == GPG_ERR_BAD_PIN) errtext = (is_pin? L_("Bad PIN") : L_("Bad Passphrase")); else if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } if (!errtext) @@ -1167,7 +1159,7 @@ agent_askpin (ctrl_t ctrl, if (pininfo->with_repeat && (pinentry_status & PINENTRY_STATUS_PIN_REPEATED)) pininfo->repeat_okay = 1; - return unlock_pinentry (0); /* okay, got a PIN or passphrase */ + return unlock_pinentry (ctrl, 0); /* okay, got a PIN or passphrase */ } if ((pinentry_status & PINENTRY_STATUS_PASSWORD_FROM_CACHE)) @@ -1176,7 +1168,7 @@ agent_askpin (ctrl_t ctrl, pininfo->failed_tries --; } - return unlock_pinentry (gpg_error (pininfo->min_digits? GPG_ERR_BAD_PIN + return unlock_pinentry (ctrl, gpg_error (pininfo->min_digits? GPG_ERR_BAD_PIN : GPG_ERR_BAD_PASSPHRASE)); } @@ -1242,7 +1234,7 @@ agent_get_passphrase (ctrl_t ctrl, rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc && gpg_err_code (rc) != GPG_ERR_ASS_UNKNOWN_CMD) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); if (desc) @@ -1251,18 +1243,18 @@ agent_get_passphrase (ctrl_t ctrl, snprintf (line, DIM(line), "RESET"); rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); snprintf (line, DIM(line), "SETPROMPT %s", prompt); rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); if (with_qualitybar && opt.min_passphrase_len) { rc = setup_qualitybar (ctrl); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } if (errtext) @@ -1270,14 +1262,14 @@ agent_get_passphrase (ctrl_t ctrl, snprintf (line, DIM(line), "SETERROR %s", errtext); rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } memset (&parm, 0, sizeof parm); parm.size = ASSUAN_LINELENGTH/2 - 5; parm.buffer = gcry_malloc_secure (parm.size+10); if (!parm.buffer) - return unlock_pinentry (out_of_core ()); + return unlock_pinentry (ctrl, out_of_core ()); saveflag = assuan_get_flag (entry_ctx, ASSUAN_CONFIDENTIAL); assuan_begin_confidential (entry_ctx); @@ -1301,7 +1293,7 @@ agent_get_passphrase (ctrl_t ctrl, xfree (parm.buffer); else *retpass = parm.buffer; - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } @@ -1345,7 +1337,7 @@ agent_get_confirmation (ctrl_t ctrl, rc = gpg_err_make (gpg_err_source (rc), GPG_ERR_CANCELED); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); if (ok) { @@ -1353,7 +1345,7 @@ agent_get_confirmation (ctrl_t ctrl, rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } if (notok) { @@ -1376,7 +1368,7 @@ agent_get_confirmation (ctrl_t ctrl, NULL, NULL, NULL, NULL, NULL, NULL); } if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } rc = assuan_transact (entry_ctx, "CONFIRM", @@ -1384,7 +1376,7 @@ agent_get_confirmation (ctrl_t ctrl, if (rc && gpg_err_source (rc) && gpg_err_code (rc) == GPG_ERR_ASS_CANCELED) rc = gpg_err_make (gpg_err_source (rc), GPG_ERR_CANCELED); - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } @@ -1418,7 +1410,7 @@ agent_show_message (ctrl_t ctrl, const char *desc, const char *ok_btn) rc = gpg_err_make (gpg_err_source (rc), GPG_ERR_CANCELED); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); if (ok_btn) { @@ -1426,7 +1418,7 @@ agent_show_message (ctrl_t ctrl, const char *desc, const char *ok_btn) rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } rc = assuan_transact (entry_ctx, "CONFIRM --one-button", NULL, NULL, NULL, @@ -1434,7 +1426,7 @@ agent_show_message (ctrl_t ctrl, const char *desc, const char *ok_btn) if (rc && gpg_err_source (rc) && gpg_err_code (rc) == GPG_ERR_ASS_CANCELED) rc = gpg_err_make (gpg_err_source (rc), GPG_ERR_CANCELED); - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } @@ -1482,19 +1474,19 @@ agent_popup_message_start (ctrl_t ctrl, const char *desc, const char *ok_btn) snprintf (line, DIM(line), "RESET"); rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); if (ok_btn) { snprintf (line, DIM(line), "SETOK %s", ok_btn); rc = assuan_transact (entry_ctx, line, NULL,NULL,NULL,NULL,NULL,NULL); if (rc) - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } err = npth_attr_init (&tattr); if (err) - return unlock_pinentry (gpg_error_from_errno (err)); + return unlock_pinentry (ctrl, gpg_error_from_errno (err)); npth_attr_setdetachstate (&tattr, NPTH_CREATE_JOINABLE); popup_finished = 0; @@ -1505,7 +1497,7 @@ agent_popup_message_start (ctrl_t ctrl, const char *desc, const char *ok_btn) rc = gpg_error_from_errno (err); log_error ("error spawning popup message handler: %s\n", strerror (err) ); - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } npth_setname_np (popup_tid, "popup-message"); @@ -1566,7 +1558,7 @@ agent_popup_message_stop (ctrl_t ctrl) memset (&popup_tid, '\0', sizeof (popup_tid)); /* Now we can close the connection. */ - unlock_pinentry (0); + unlock_pinentry (ctrl, 0); } int @@ -1592,5 +1584,5 @@ agent_clear_passphrase (ctrl_t ctrl, rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); - return unlock_pinentry (rc); + return unlock_pinentry (ctrl, rc); } From 0e5bd473a07f188615c4fce26b73bb452d689d68 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 19 Sep 2017 16:09:05 +0900 Subject: [PATCH 03/26] common: Accept the Z-suffix for yymmddThhmmssZ format. * common/gettime.c (isotime_p): Accept the Z suffix. -- The intention is use for human interface. GnuPG-bug-id: 3278 Signed-off-by: NIIBE Yutaka (cherry picked from commit ba8afc4966cca1f6aaf9b2a9bfc3220782306c2b) --- common/gettime.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/common/gettime.c b/common/gettime.c index 3e1ee5569..4ad99f54d 100644 --- a/common/gettime.c +++ b/common/gettime.c @@ -222,6 +222,8 @@ isotime_p (const char *string) for (s++, i=9; i < 15; i++, s++) if (!digitp (s)) return 0; + if (*s == 'Z') + s++; if ( !(!*s || (isascii (*s) && isspace(*s)) || *s == ':' || *s == ',')) return 0; /* Wrong delimiter. */ @@ -354,9 +356,10 @@ string2isotime (gnupg_isotime_t atime, const char *string) } -/* Scan an ISO timestamp and return an Epoch based timestamp. The only - supported format is "yyyymmddThhmmss" delimited by white space, nul, a - colon or a comma. Returns (time_t)(-1) for an invalid string. */ +/* Scan an ISO timestamp and return an Epoch based timestamp. The + only supported format is "yyyymmddThhmmss[Z]" delimited by white + space, nul, a colon or a comma. Returns (time_t)(-1) for an + invalid string. */ time_t isotime2epoch (const char *string) { From 3da47d19df89d302c0ea25921f4bd8ce55705afe Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Thu, 2 Nov 2017 16:23:10 +0900 Subject: [PATCH 04/26] agent: Fix returning GPG_ERR_NOT_FOUND wrongly. * agent/learncard.c (agent_handle_learn): Find SERIALNO. -- Bug is: "gpg-connect-agent learn /bye" just fails wrongly. Fixes-commit: 8c8ce8711d9c938fcb982b0341e6b052742cb887 Signed-off-by: NIIBE Yutaka (cherry picked from commit 5e96fe72e477d09e35ccee48af0fd9ab2b3ae409) --- agent/learncard.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/agent/learncard.c b/agent/learncard.c index e0c882ac5..abe1dd0bf 100644 --- a/agent/learncard.c +++ b/agent/learncard.c @@ -340,14 +340,12 @@ agent_handle_learn (ctrl_t ctrl, int send, void *assuan_context, int force) } /* Pass on all the collected status information. */ - if (assuan_context) + for (sitem = sparm.info; sitem; sitem = sitem->next) { - for (sitem = sparm.info; sitem; sitem = sitem->next) - { - if (!strcmp (sitem->keyword, "SERIALNO")) - serialno = sitem->data; - assuan_write_status (assuan_context, sitem->keyword, sitem->data); - } + if (!strcmp (sitem->keyword, "SERIALNO")) + serialno = sitem->data; + if (assuan_context) + assuan_write_status (assuan_context, sitem->keyword, sitem->data); } if (!serialno) From de3a740c2e1156e58d2f94faa85c051740c8988e Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 27 Oct 2017 14:44:53 +0200 Subject: [PATCH 05/26] gpg: Rename two card related functions in card-util. * g10/card-util.c (ask_card_rsa_keysize): Rename to ask_card_keyattr. (do_change_rsa_keysize): Rename to do_change_keyattr. -- We want to support other algos than RSA and thus we need a better name for the functions. Signed-off-by: Werner Koch (cherry picked from commit f795f4529d8ab5a05db1cc1960abd34390bfae1b) --- g10/card-util.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/g10/card-util.c b/g10/card-util.c index 62b2a6755..022e9a6fd 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -1328,7 +1328,7 @@ show_keysize_warning (void) select the prompt. Returns 0 to use the default size (i.e. NBITS) or the selected size. */ static unsigned int -ask_card_rsa_keysize (int keyno, unsigned int nbits) +ask_card_keyattr (int keyno, unsigned int nbits) { unsigned int min_nbits = 1024; unsigned int max_nbits = 4096; @@ -1378,7 +1378,7 @@ ask_card_rsa_keysize (int keyno, unsigned int nbits) /* Change the size of key KEYNO (0..2) to NBITS and show an error message if that fails. */ static gpg_error_t -do_change_rsa_keysize (int keyno, unsigned int nbits) +do_change_keyattr (int keyno, unsigned int nbits) { gpg_error_t err; char args[100]; @@ -1459,8 +1459,8 @@ generate_card_keys (ctrl_t ctrl) { if (info.key_attr[keyno].algo == PUBKEY_ALGO_RSA) { - nbits = ask_card_rsa_keysize (keyno, info.key_attr[keyno].nbits); - if (nbits && do_change_rsa_keysize (keyno, nbits)) + nbits = ask_card_keyattr (keyno, info.key_attr[keyno].nbits); + if (nbits && do_change_keyattr (keyno, nbits)) { /* Error: Better read the default key size again. */ agent_release_card_info (&info); @@ -1542,8 +1542,8 @@ card_generate_subkey (ctrl_t ctrl, kbnode_t pub_keyblock) unsigned int nbits; ask_again: - nbits = ask_card_rsa_keysize (keyno-1, info.key_attr[keyno-1].nbits); - if (nbits && do_change_rsa_keysize (keyno-1, nbits)) + nbits = ask_card_keyattr (keyno-1, info.key_attr[keyno-1].nbits); + if (nbits && do_change_keyattr (keyno-1, nbits)) { /* Error: Better read the default key size again. */ agent_release_card_info (&info); From acb300543422c660c87ac2f0211a42f792a65cc4 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 2 Nov 2017 17:11:03 +0100 Subject: [PATCH 06/26] gpg: Introduce magic value 25519 to switch a card to ECC. * g10/card-util.c (ask_card_keyattr): Handle special value 25519. (do_change_keyattr): Allow changing to cv25519/ed25519. (generate_card_keys): Ditto. (card_generate_subkey): Ditto. -- This is kludge to make it easier for gnuk to be switched into ECC mode. This is basically the same change as commit ea09b6cded9d31a8ebd91878553c3eaa2b76e817 but without the string change in show_keysize_warning. Signed-off-by: Werner Koch --- g10/card-util.c | 75 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/g10/card-util.c b/g10/card-util.c index 022e9a6fd..ef6761091 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -1350,40 +1350,61 @@ ask_card_keyattr (int keyno, unsigned int nbits) xfree (prompt); xfree (answer); - if (req_nbits != nbits && (req_nbits % 32) ) + if (req_nbits == 25519) { - req_nbits = ((req_nbits + 31) / 32) * 32; - tty_printf (_("rounded up to %u bits\n"), req_nbits); - } + if (req_nbits == nbits) + return 0; /* Use default. */ - if (req_nbits == nbits) - return 0; /* Use default. */ - - if (req_nbits < min_nbits || req_nbits > max_nbits) - { - tty_printf (_("%s keysizes must be in the range %u-%u\n"), - "RSA", min_nbits, max_nbits); + tty_printf (_("The card will now be re-configured" + " to generate a key of type: %s\n"), + keyno==1? "cv25519":"ed25519"); + show_keysize_warning (); + return req_nbits; } else { - tty_printf (_("The card will now be re-configured " - "to generate a key of %u bits\n"), req_nbits); - show_keysize_warning (); - return req_nbits; + if (req_nbits != nbits && (req_nbits % 32) ) + { + req_nbits = ((req_nbits + 31) / 32) * 32; + tty_printf (_("rounded up to %u bits\n"), req_nbits); + } + + if (req_nbits == nbits) + return 0; /* Use default. */ + + if (req_nbits < min_nbits || req_nbits > max_nbits) + { + tty_printf (_("%s keysizes must be in the range %u-%u\n"), + "RSA", min_nbits, max_nbits); + } + else + { + tty_printf (_("The card will now be re-configured" + " to generate a key of %u bits\n"), req_nbits); + show_keysize_warning (); + return req_nbits; + } } } } /* Change the size of key KEYNO (0..2) to NBITS and show an error - message if that fails. */ + * message if that fails. Using the magic value 25519 for NBITS + * switches to ed25519 or cv25519 depending on the KEYNO. */ static gpg_error_t do_change_keyattr (int keyno, unsigned int nbits) { gpg_error_t err; char args[100]; - snprintf (args, sizeof args, "--force %d 1 rsa%u", keyno+1, nbits); + if (nbits == 25519) + snprintf (args, sizeof args, "--force %d %d %s", + keyno+1, + keyno == 1? PUBKEY_ALGO_ECDH : PUBKEY_ALGO_EDDSA, + keyno == 1? "cv25519" : "ed25519"); + else + snprintf (args, sizeof args, "--force %d 1 rsa%u", keyno+1, nbits); err = agent_scd_setattr ("KEY-ATTR", args, strlen (args), NULL); if (err) log_error (_("error changing size of key %d to %u bits: %s\n"), @@ -1457,9 +1478,15 @@ generate_card_keys (ctrl_t ctrl) for (keyno = 0; keyno < DIM (info.key_attr); keyno++) { - if (info.key_attr[keyno].algo == PUBKEY_ALGO_RSA) + if (info.key_attr[keyno].algo == PUBKEY_ALGO_RSA + || info.key_attr[keyno].algo == PUBKEY_ALGO_ECDH + || info.key_attr[keyno].algo == PUBKEY_ALGO_EDDSA) { - nbits = ask_card_keyattr (keyno, info.key_attr[keyno].nbits); + if (info.key_attr[keyno].algo == PUBKEY_ALGO_RSA) + nbits = ask_card_keyattr (keyno, info.key_attr[keyno].nbits); + else + nbits = ask_card_keyattr (keyno, 25519 /* magic */); + if (nbits && do_change_keyattr (keyno, nbits)) { /* Error: Better read the default key size again. */ @@ -1537,12 +1564,18 @@ card_generate_subkey (ctrl_t ctrl, kbnode_t pub_keyblock) key size. */ if (info.is_v2 && info.extcap.aac) { - if (info.key_attr[keyno-1].algo == PUBKEY_ALGO_RSA) + if (info.key_attr[keyno-1].algo == PUBKEY_ALGO_RSA + || info.key_attr[keyno].algo == PUBKEY_ALGO_ECDH + || info.key_attr[keyno].algo == PUBKEY_ALGO_EDDSA) { unsigned int nbits; ask_again: - nbits = ask_card_keyattr (keyno-1, info.key_attr[keyno-1].nbits); + if (info.key_attr[keyno].algo == PUBKEY_ALGO_RSA) + nbits = ask_card_keyattr (keyno-1, info.key_attr[keyno-1].nbits); + else + nbits = ask_card_keyattr (keyno-1, 25519); + if (nbits && do_change_keyattr (keyno-1, nbits)) { /* Error: Better read the default key size again. */ From a124907742ab9c2fa382caa4e52803565cb083a3 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 2 Nov 2017 17:38:02 +0100 Subject: [PATCH 07/26] po: Update German translation -- --- po/de.po | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/po/de.po b/po/de.po index 2f82d9910..e974ddcd7 100644 --- a/po/de.po +++ b/po/de.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg-2.1.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-09-26 11:51+0200\n" +"PO-Revision-Date: 2017-11-02 17:36+0100\n" "Last-Translator: Werner Koch \n" "Language-Team: German \n" "Language: de\n" @@ -1377,6 +1377,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "" "Welche Schlüssellänge wünschen Sie für den Authentisierungs-Schlüssel? (%u) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Die Karte wird nun rekonfiguriert für einen Schlüssel des Typs: %s\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "aufgerundet auf %u Bit\n" @@ -2628,14 +2632,6 @@ msgstr "Schlüssel %s: Öffentlicher Schlüssel \"%s\" importiert\n" msgid "key %s: doesn't match our copy\n" msgstr "Schlüssel %s: Stimmt nicht mit unserer Kopie überein\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "Schlüssel %s: der originale Schlüsselblock wurde nicht gefunden: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "Schlüssel %s: Lesefehler im originalen Schlüsselblock: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "Schlüssel %s: \"%s\" 1 neue User-ID\n" @@ -2726,6 +2722,14 @@ msgstr "" "Schlüssel %s: Kein öffentlicher Schlüssel - der Schlüsselwiderruf kann nicht " "angebracht werden\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "Schlüssel %s: der originale Schlüsselblock wurde nicht gefunden: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "Schlüssel %s: Lesefehler im originalen Schlüsselblock: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "Schlüssel %s: Ungültiges Widerrufzertifikat: %s - zurückgewiesen\n" @@ -3191,6 +3195,9 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Geheimer Schlüssel ist vorhanden.\n" +msgid "Secret subkeys are available.\n" +msgstr "Geheimer Unterschlüssel ist vorhanden.\n" + msgid "Need the secret key to do this.\n" msgstr "Hierzu wird der geheime Schlüssel benötigt.\n" @@ -5841,8 +5848,6 @@ msgstr "" "WARNUNG: Wir müssen noch eine mit diesem Schlüssel signierte Nachricht " "sehen.\n" -#, fuzzy -#| msgid "Warning: we've only seen a single message signed by this key!\n" msgid "" "Warning: we've only seen one message signed using this key and user id!\n" msgstr "" From 296783a3181afa605248e27c672cbce7aa88ac0d Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 2 Nov 2017 17:43:21 +0100 Subject: [PATCH 08/26] po: Fixed one string wrongly marked as fuzzy. -- These seems to a a small gettext bug which claimed that "NOTE: There is no guarantee that the card supports[...]" was changed. Also committed changes due to msgmerge. Signed-off-by: Werner Koch --- po/ca.po | 25 +++++++++++++++++-------- po/cs.po | 28 +++++++++++++++++++--------- po/da.po | 33 +++++++++++++++++++-------------- po/el.po | 25 +++++++++++++++++-------- po/eo.po | 25 +++++++++++++++++-------- po/es.po | 33 +++++++++++++++++++-------------- po/et.po | 25 +++++++++++++++++-------- po/fi.po | 25 +++++++++++++++++-------- po/fr.po | 29 ++++++++++++++++++++--------- po/gl.po | 33 +++++++++++++++++++++------------ po/hu.po | 25 +++++++++++++++++-------- po/id.po | 25 +++++++++++++++++-------- po/it.po | 25 +++++++++++++++++-------- po/ja.po | 28 +++++++++++++++++++--------- po/nb.po | 28 +++++++++++++++++++--------- po/pl.po | 33 +++++++++++++++++++-------------- po/pt.po | 25 +++++++++++++++++-------- po/ro.po | 25 +++++++++++++++++-------- po/ru.po | 28 +++++++++++++++++++--------- po/sk.po | 25 +++++++++++++++++-------- po/sv.po | 35 +++++++++++++++++++++-------------- po/tr.po | 25 +++++++++++++++++-------- po/uk.po | 29 ++++++++++++++++++++--------- po/zh_CN.po | 25 +++++++++++++++++-------- po/zh_TW.po | 28 +++++++++++++++++++--------- 25 files changed, 455 insertions(+), 235 deletions(-) diff --git a/po/ca.po b/po/ca.po index 738c5f71b..4d9ce668f 100644 --- a/po/ca.po +++ b/po/ca.po @@ -1504,6 +1504,10 @@ msgstr "Quina grandària voleu? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Quina grandària voleu? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "arrodonida fins a %u bits\n" @@ -2848,14 +2852,6 @@ msgstr "clau %08lX: s'ha importat la clau pública «%s»\n" msgid "key %s: doesn't match our copy\n" msgstr "clau %08lX: no correspon a la nostra còpia\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "clau %08lX: no s'ha trobat el bloc de claus original: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "clau %08lX: no s'ha pogut llegir el bloc de claus original: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clau %08lX: «%s» 1 ID d'usuari nou\n" @@ -2945,6 +2941,14 @@ msgstr "" "clau %08lX: falta la clau pública: no es pot aplicar el certificat\n" "de revocació\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "clau %08lX: no s'ha trobat el bloc de claus original: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "clau %08lX: no s'ha pogut llegir el bloc de claus original: %s\n" + # O «rebutjara»? ivb # Per tots els canvis d'anglicisme «ignorat» -> «es descarta», # «es rebutja» està bé. jm @@ -3466,6 +3470,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "La clau secreta està disponible.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "La clau secreta està disponible.\n" + msgid "Need the secret key to do this.\n" msgstr "Cal la clau secreta per a fer açò.\n" diff --git a/po/cs.po b/po/cs.po index 17bff35aa..24d54c7c9 100644 --- a/po/cs.po +++ b/po/cs.po @@ -35,7 +35,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg2 2.1.10\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2015-12-07 20:45+0100\n" +"PO-Revision-Date: 2017-11-02 17:38+0100\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -1393,6 +1393,11 @@ msgstr "Jakou délku klíče pro šifrování si přejete? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Jakou délku klíče pro autentizaci si přejete? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Karta bude nyní přenastavena na generování klíče dlouhého %u bitů\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrouhleno na %u bitů\n" @@ -2669,14 +2674,6 @@ msgstr "klíč %s: veřejný klíč „%s“ importován\n" msgid "key %s: doesn't match our copy\n" msgstr "klíč %s: neodpovídá naší kopii\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "klíč %s: nemohu najít originální blok klíče: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "klíč %s: nemohu číst originální blok klíče: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "klíč %s: „%s“ 1 nový identifikátor uživatele\n" @@ -2762,6 +2759,14 @@ msgstr "Pro migraci „%s“ u každé karty spusťte: %s\n" msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "klíč %s: chybí veřejný klíč – nemohu aplikovat revokační certifikát\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "klíč %s: nemohu najít originální blok klíče: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "klíč %s: nemohu číst originální blok klíče: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "klíč %s: neplatný revokační certifikát: %s – zamítnuto\n" @@ -3214,6 +3219,11 @@ msgstr "směstnat nepoužitelná ID uživatelů a odstranit z klíče všechny msgid "Secret key is available.\n" msgstr "Tajný klíč je dostupný.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Tajný klíč je dostupný.\n" + msgid "Need the secret key to do this.\n" msgstr "Pro provedení této operace je potřeba tajný klíč.\n" diff --git a/po/da.po b/po/da.po index e124de51b..bd6e9c5d4 100644 --- a/po/da.po +++ b/po/da.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2012-11-01 20:27+0200\n" +"PO-Revision-Date: 2017-11-02 17:39+0100\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" @@ -1451,11 +1451,6 @@ msgstr "fejl ved indhentelse af aktuel nøgleinformation: %s\n" msgid "Replace existing key? (y/N) " msgstr "Erstat eksisterende nøgle? (j/N) " -#, fuzzy -#| msgid "" -#| "NOTE: There is no guarantee that the card supports the requested size.\n" -#| " If the key generation does not succeed, please check the\n" -#| " documentation of your card to see what sizes are allowed.\n" msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" @@ -1478,6 +1473,11 @@ msgstr "Hvilken nøglestørrelse ønsker du for krypteringsnøglen? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Hvilken nøglestørrelse ønsker du for godkendelsesnøglen? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Kortet vil nu blive omkonfigureret til at oprette en nøgle på %u bit\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "afrundet op til %u bit\n" @@ -2810,14 +2810,6 @@ msgstr "nøgle %s: offentlig nøgle »%s« importeret\n" msgid "key %s: doesn't match our copy\n" msgstr "nøgle %s: stemmer ikke med vores kopi\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "nøgle %s: kan ikke lokalisere original nøgleblok: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "nøgle %s: kan ikke læse original nøgleblok: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nøgle %s: »%s« 1 ny bruger-id\n" @@ -2907,6 +2899,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "nøgle %s: ingen offentlig nøgle - kan ikke anvende tilbagekaldscertifikat\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "nøgle %s: kan ikke lokalisere original nøgleblok: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "nøgle %s: kan ikke læse original nøgleblok: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nøgle %s: ugyldigt tilbagekaldscertifikat: %s - afvist\n" @@ -3382,6 +3382,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Hemmelig nøgle er tilgængelig.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Hemmelig nøgle er tilgængelig.\n" + msgid "Need the secret key to do this.\n" msgstr "Har brug for den hemmelige nøgle for dette.\n" diff --git a/po/el.po b/po/el.po index a57c8b8dd..cc9439ecf 100644 --- a/po/el.po +++ b/po/el.po @@ -1439,6 +1439,10 @@ msgstr "Τι μέγεθος κλειδιού θα θέλατε; (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Τι μέγεθος κλειδιού θα θέλατε; (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "στρογγυλοποιήθηκε έως τα %u bits\n" @@ -2770,14 +2774,6 @@ msgstr "κλειδί %08lX: το δημόσιο κλειδί \"%s\" έχει ε msgid "key %s: doesn't match our copy\n" msgstr "κλειδί %08lX: δεν ταιριάζει με το αντίγραφο μας\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "κλειδί %08lX: αδυναμία εντοπισμού του αρχικού τμήματος κλειδιού: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "κλειδί %08lX: αδυναμία ανάγνωσης του αρχικού τμήματος κλειδιού: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "κλειδί %08lX: \"%s\" 1 νέο user ID\n" @@ -2867,6 +2863,14 @@ msgstr "" "κλειδί %08lX: όχι δημόσιο κλειδί - αδυναμία εφαρμογής πιστοποιητικού " "ανάκλησης\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "κλειδί %08lX: αδυναμία εντοπισμού του αρχικού τμήματος κλειδιού: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "κλειδί %08lX: αδυναμία ανάγνωσης του αρχικού τμήματος κλειδιού: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "κλειδί %08lX: μη έγκυρο πιστοποιητικό ανάκλησης: %s - απόρριψη\n" @@ -3373,6 +3377,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Το μυστικό κλειδί είναι διαθέσιμο.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Το μυστικό κλειδί είναι διαθέσιμο.\n" + msgid "Need the secret key to do this.\n" msgstr "Απαιτείται το μυστικό κλειδί για να γίνει αυτό.\n" diff --git a/po/eo.po b/po/eo.po index 3c4969803..611b987ae 100644 --- a/po/eo.po +++ b/po/eo.po @@ -1441,6 +1441,10 @@ msgstr "Kiun ŝlosilgrandon vi deziras? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Kiun ŝlosilgrandon vi deziras? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "rondigita ĝis %u bitoj\n" @@ -2751,14 +2755,6 @@ msgstr "ŝlosilo %08lX: publika ŝlosilo importita\n" msgid "key %s: doesn't match our copy\n" msgstr "ŝlosilo %08lX: diferencas de nia kopio\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "ŝlosilo %08lX: ne povas trovi originalan ŝlosilblokon: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "ŝlosilo %08lX: ne povas legi originalan ŝlosilblokon: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "ŝlosilo %08lX: 1 nova uzantidentigilo\n" @@ -2847,6 +2843,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "ŝlosilo %08lX: publika ŝlosilo mankas - ne povas apliki revokatestilon\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "ŝlosilo %08lX: ne povas trovi originalan ŝlosilblokon: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "ŝlosilo %08lX: ne povas legi originalan ŝlosilblokon: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "ŝlosilo %08lX: nevalida revokatestilo: %s - malakceptita\n" @@ -3357,6 +3361,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Sekreta ŝlosilo estas havebla.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Sekreta ŝlosilo estas havebla.\n" + msgid "Need the secret key to do this.\n" msgstr "Bezonas la sekretan ŝlosilon por fari tion.\n" diff --git a/po/es.po b/po/es.po index 95a258989..76d3952e5 100644 --- a/po/es.po +++ b/po/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 2.0.9\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2015-10-09 17:10+0200\n" +"PO-Revision-Date: 2017-11-02 17:39+0100\n" "Last-Translator: Jaime Suárez \n" "Language-Team: Spanish \n" "Language: es\n" @@ -1469,11 +1469,6 @@ msgstr "error obteniendo la información actual de la clave: %s\n" msgid "Replace existing key? (y/N) " msgstr "¿Reemplazar la clave existente? (s/N) " -#, fuzzy -#| msgid "" -#| "NOTE: There is no guarantee that the card supports the requested size.\n" -#| " If the key generation does not succeed, please check the\n" -#| " documentation of your card to see what sizes are allowed.\n" msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" @@ -1495,6 +1490,11 @@ msgstr "¿De qué tamaño quiere la clave de Cifrado? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "¿De qué tamaño quiere la clave de Autenticación? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Ahora la tarjeta se reconfigurará para generar una clave de %u bits\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "redondeados a %u bits\n" @@ -2839,14 +2839,6 @@ msgstr "clave %s: clave pública \"%s\" importada\n" msgid "key %s: doesn't match our copy\n" msgstr "clave %s: no coincide con nuestra copia\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "clave %s: no puede localizarse el bloque de claves original: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "clave %s: no puede leerse el bloque de claves original: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clave %s: \"%s\" 1 ID de usuario nuevo\n" @@ -2937,6 +2929,14 @@ msgstr "" "clave %s: falta la clave pública - imposible emplear el\n" "certificado de revocación\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "clave %s: no puede localizarse el bloque de claves original: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "clave %s: no puede leerse el bloque de claves original: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "clave %s: certificado de revocación inválido: %s - rechazado\n" @@ -3395,6 +3395,11 @@ msgstr "compactar IDs inutilizables y borrar todas las firmas de la clave" msgid "Secret key is available.\n" msgstr "Clave secreta disponible.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Clave secreta disponible.\n" + msgid "Need the secret key to do this.\n" msgstr "Se necesita la clave secreta para hacer esto.\n" diff --git a/po/et.po b/po/et.po index f852a295f..66e905b5f 100644 --- a/po/et.po +++ b/po/et.po @@ -1435,6 +1435,10 @@ msgstr "Millist võtmepikkust te soovite? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Millist võtmepikkust te soovite? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "ümardatud üles %u bitini\n" @@ -2755,14 +2759,6 @@ msgstr "võti %08lX: avalik võti \"%s\" on imporditud\n" msgid "key %s: doesn't match our copy\n" msgstr "võti %08lX: ei sobi meie koopiaga\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "võti %08lX: ei leia algset võtmeblokki: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "võti %08lX: ei õnnestu lugeda algset võtmeblokki: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "võti %08lX: \"%s\" 1 uus kasutaja ID\n" @@ -2851,6 +2847,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "võti %08lX: avalik võti puudub - tühistamise sertifikaati ei saa rakendada\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "võti %08lX: ei leia algset võtmeblokki: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "võti %08lX: ei õnnestu lugeda algset võtmeblokki: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "võti %08lX: vigane tühistamise sertifikaat: %s - lükkasin tagasi\n" @@ -3346,6 +3350,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Salajane võti on kasutatav.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Salajane võti on kasutatav.\n" + msgid "Need the secret key to do this.\n" msgstr "Selle tegamiseks on vaja salajast võtit.\n" diff --git a/po/fi.po b/po/fi.po index ea38194f1..15f7ce7ce 100644 --- a/po/fi.po +++ b/po/fi.po @@ -1454,6 +1454,10 @@ msgstr "Minkä kokoisen avaimen haluat? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Minkä kokoisen avaimen haluat? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "pyöristetty %u bittiin\n" @@ -2772,14 +2776,6 @@ msgstr "avain %08lX: julkinen avain \"%s\" tuotu\n" msgid "key %s: doesn't match our copy\n" msgstr "avain %08lX: ei vastaa omaa kopiotamme\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "avain %08lX: alkuperäistä avainlohkoa ei löydy: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "avain %08lX. alkuperäisen avainlohko lukeminen ei onnistu: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "avain %08lX: \"%s\" 1 uusi käyttäjätunnus\n" @@ -2868,6 +2864,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "avain %08lX: ei julkista avainta - mitätöintivarmennetta ei voida käyttää\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "avain %08lX: alkuperäistä avainlohkoa ei löydy: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "avain %08lX. alkuperäisen avainlohko lukeminen ei onnistu: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "avain %08lX: pätemätön mitätöintivarmenne: %s - hylätty\n" @@ -3366,6 +3370,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Salainen avain on saatavilla.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Salainen avain on saatavilla.\n" + msgid "Need the secret key to do this.\n" msgstr "Tähän tarvitaan salainen avain.\n" diff --git a/po/fr.po b/po/fr.po index 916aef718..fa1e87f2b 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 2.1\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2015-09-10 16:22+0200\n" +"PO-Revision-Date: 2017-11-02 17:40+0100\n" "Last-Translator: David Prévot \n" "Language-Team: French \n" "Language: fr\n" @@ -1403,6 +1403,12 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "" "Quelle taille de clef désirez-vous pour la clef d'authentification ? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" +"La carte sera maintenant reconfigurée pour générer une clef de %u bits\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "arrondie à %u bits\n" @@ -2709,14 +2715,6 @@ msgstr "clef %s : clef publique « %s » importée\n" msgid "key %s: doesn't match our copy\n" msgstr "clef %s : ne correspond pas à notre copie\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "clef %s : impossible de trouver le bloc de clef d'origine : %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "clef %s : impossible de lire le bloc de clef d'origine : %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clef %s : « %s » 1 nouvelle identité\n" @@ -2804,6 +2802,14 @@ msgstr "" "clef %s : pas de clef publique — impossible d'appliquer le certificat\n" " de révocation\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "clef %s : impossible de trouver le bloc de clef d'origine : %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "clef %s : impossible de lire le bloc de clef d'origine : %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "clef %s : certificat de révocation incorrect : %s — rejeté\n" @@ -3265,6 +3271,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "La clef secrète est disponible.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "La clef secrète est disponible.\n" + msgid "Need the secret key to do this.\n" msgstr "La clef secrète est nécessaire pour faire cela.\n" diff --git a/po/gl.po b/po/gl.po index d8434f6e8..3b1870296 100644 --- a/po/gl.po +++ b/po/gl.po @@ -1444,6 +1444,10 @@ msgstr "¿Qué tamaño de chave quere? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "¿Qué tamaño de chave quere? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "redondeado a %u bits\n" @@ -2764,18 +2768,6 @@ msgstr "chave %08lX: chave pública \"%s\" importada\n" msgid "key %s: doesn't match our copy\n" msgstr "chave %08lX: non coincide coa nosa copia\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "" -"chave %08lX: non foi posible localiza-lo bloque de chaves original:\n" -"%s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "" -"chave %08lX: non foi posible le-lo bloque de chaves original:\n" -"%s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chave %08lX: \"%s\" 1 novo ID de usuario\n" @@ -2865,6 +2857,18 @@ msgstr "" "chave %08lX: non hai chave pública - non se pode aplica-lo\n" "certificado de revocación\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "" +"chave %08lX: non foi posible localiza-lo bloque de chaves original:\n" +"%s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "" +"chave %08lX: non foi posible le-lo bloque de chaves original:\n" +"%s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "" @@ -3370,6 +3374,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "A chave secreta está disponible.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "A chave secreta está disponible.\n" + msgid "Need the secret key to do this.\n" msgstr "Cómpre a chave secreta para facer isto.\n" diff --git a/po/hu.po b/po/hu.po index 49bef6cd5..f18609df0 100644 --- a/po/hu.po +++ b/po/hu.po @@ -1435,6 +1435,10 @@ msgstr "Milyen kulcsméretet szeretne? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Milyen kulcsméretet szeretne? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "Felkerekítve %u bitre.\n" @@ -2752,14 +2756,6 @@ msgstr "%08lX kulcs: \"%s\" nyilvános kulcs importálva.\n" msgid "key %s: doesn't match our copy\n" msgstr "%08lX kulcs: Nem egyezik a mi másolatunkkal!\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "%08lX kulcs: Nem találom az eredeti kulcsblokkot: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "%08lX kulcs: Nem tudom beolvasni az eredeti kulcsblokkot: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "%08lX kulcs: \"%s\" 1 új felhasználói azonosító.\n" @@ -2848,6 +2844,14 @@ msgstr "" msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "%08lX kulcs: Nincs nyilvános kulcs - nem tudok visszavonni.\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "%08lX kulcs: Nem találom az eredeti kulcsblokkot: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "%08lX kulcs: Nem tudom beolvasni az eredeti kulcsblokkot: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "%08lX kulcs: Érvénytelen visszavonó igazolás: %s - visszautasítva.\n" @@ -3345,6 +3349,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Titkos kulcs rendelkezésre áll.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Titkos kulcs rendelkezésre áll.\n" + msgid "Need the secret key to do this.\n" msgstr "Ehhez szükség van a titkos kulcsra.\n" diff --git a/po/id.po b/po/id.po index 786dc42b4..635ed7d55 100644 --- a/po/id.po +++ b/po/id.po @@ -1441,6 +1441,10 @@ msgstr "Keysize yang anda inginkan? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Keysize yang anda inginkan? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "dibulatkan hingga %u bit\n" @@ -2757,14 +2761,6 @@ msgstr "kunci %08lX: kunci publik \"%s\" diimpor\n" msgid "key %s: doesn't match our copy\n" msgstr "kunci %08lX: tidak cocok dengan duplikat kami\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "kunci %08lX: tidak dapat menemukan keyblock orisinal: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "kunci %08lX: tidak dapat membaca keyblok orisinal: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "kunci %08lX: 1 user ID baru \"%s\"\n" @@ -2854,6 +2850,14 @@ msgstr "" "kunci %08lX: tdk ada kunci publik-tdk dpt mengaplikasikan sertifikat " "pembatalan\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "kunci %08lX: tidak dapat menemukan keyblock orisinal: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "kunci %08lX: tidak dapat membaca keyblok orisinal: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "kunci %08lX: sertifikat pembatalan tidak valid: %s - ditolak\n" @@ -3350,6 +3354,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Kunci rahasia tersedia.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Kunci rahasia tersedia.\n" + msgid "Need the secret key to do this.\n" msgstr "Perlu kunci rahasia untuk melakukan hal ini.\n" diff --git a/po/it.po b/po/it.po index 1bcc8b889..fc4324447 100644 --- a/po/it.po +++ b/po/it.po @@ -1439,6 +1439,10 @@ msgstr "Di che dimensioni vuoi la chiave? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Di che dimensioni vuoi la chiave? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "arrotondate a %u bit\n" @@ -2763,14 +2767,6 @@ msgstr "chiave %08lX: importata la chiave pubblica \"%s\"\n" msgid "key %s: doesn't match our copy\n" msgstr "chiave %08lX: non corrisponde alla nostra copia\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chiave %08lX: \"%s\" 1 nuovo user ID\n" @@ -2860,6 +2856,14 @@ msgstr "" "chiave %08lX: manca la chiave pubblica - impossibile applicare il\n" "certificato di revoca\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "chiave %08lX: certificato di revoca non valido: %s - rifiutato\n" @@ -3357,6 +3361,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "È disponibile una chiave segreta.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "È disponibile una chiave segreta.\n" + msgid "Need the secret key to do this.\n" msgstr "Per fare questo serve la chiave segreta.\n" diff --git a/po/ja.po b/po/ja.po index 6567ab3c0..bdbc95320 100644 --- a/po/ja.po +++ b/po/ja.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 2.1.23\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-08-22 11:22+0900\n" +"PO-Revision-Date: 2017-11-02 17:40+0100\n" "Last-Translator: NIIBE Yutaka \n" "Language-Team: none\n" "Language: ja\n" @@ -1340,6 +1340,11 @@ msgstr "暗号化鍵の鍵長は? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "認証鍵の鍵長は? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "今、%uビットの鍵を生成するようにカードは再コンフィグされました\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "%uビットに切り上げます\n" @@ -2544,14 +2549,6 @@ msgstr "鍵%s: 公開鍵\"%s\"をインポートしました\n" msgid "key %s: doesn't match our copy\n" msgstr "鍵%s: こちらの複製と合いません\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "鍵%s: 元の鍵ブロックに位置づけできません: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "鍵%s: 元の鍵ブロックを読み込めません: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "鍵%s: \"%s\" 新しいユーザIDを1個\n" @@ -2637,6 +2634,14 @@ msgstr "'%s'の移行には、スマードカードそれぞれで、以下を msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "鍵%s: 公開鍵がありません - 失効証明書を適用できません\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "鍵%s: 元の鍵ブロックに位置づけできません: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "鍵%s: 元の鍵ブロックを読み込めません: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "鍵%s: 無効な失効証明書: %s - 拒否\n" @@ -3079,6 +3084,11 @@ msgstr "使えないユーザIDをコンパクトにし、すべての署名を msgid "Secret key is available.\n" msgstr "秘密鍵が利用できます。\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "秘密鍵が利用できます。\n" + msgid "Need the secret key to do this.\n" msgstr "この実行には秘密鍵がいります。\n" diff --git a/po/nb.po b/po/nb.po index 7a72323a6..8be672407 100644 --- a/po/nb.po +++ b/po/nb.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU gnupg 2.1\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-08-15 10:19+0200\n" +"PO-Revision-Date: 2017-11-02 17:40+0100\n" "Last-Translator: Åka Sikrom \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" @@ -1343,6 +1343,11 @@ msgstr "Hvor stor skal krypteringsnøkkelen være? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Hvor stor skal autentiseringsnøkkelen være? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Kortet blir nå satt opp på nytt for å lage nøkkel på %u bit\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "rundet opp til %u bit\n" @@ -2555,14 +2560,6 @@ msgstr "nøkkel %s: offentlig nøkkel «%s» importert\n" msgid "key %s: doesn't match our copy\n" msgstr "nøkkel %s: stemmer ikke med vår kopi\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "nøkkel %s: finner ikke original nøkkelblokk: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "nøkkel %s: klarte ikke å lese opprinnelig nøkkelblokk: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nøkkel %s: «%s» 1 ny bruker-ID\n" @@ -2651,6 +2648,14 @@ msgstr "" "nøkkel %s: offentlig nøkkel mangler. Klarte ikke å bruke " "opphevelsessertifikat\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "nøkkel %s: finner ikke original nøkkelblokk: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "nøkkel %s: klarte ikke å lese opprinnelig nøkkelblokk: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nøkkel %s: ugyldig opphevingssertifikat: %s - avvist\n" @@ -3103,6 +3108,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Hemmelig nøkkel er tilgjengelig.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Hemmelig nøkkel er tilgjengelig.\n" + msgid "Need the secret key to do this.\n" msgstr "Du trenger tilhørende hemmelig nøkkel for å gjøre dette.\n" diff --git a/po/pl.po b/po/pl.po index c4e2d07a3..ef392ac41 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg-2.0.20\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-02-22 16:03+0100\n" +"PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -1438,11 +1438,6 @@ msgstr "błąd podczas odczytu aktualnych informacji o kluczu: %s\n" msgid "Replace existing key? (y/N) " msgstr "Zastąpić istniejący klucz? (t/N) " -#, fuzzy -#| msgid "" -#| "NOTE: There is no guarantee that the card supports the requested size.\n" -#| " If the key generation does not succeed, please check the\n" -#| " documentation of your card to see what sizes are allowed.\n" msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" @@ -1464,6 +1459,11 @@ msgstr "Jakiej długości klucz do szyfrowania wygenerować? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Jakiej długości klucz do uwierzytelniania wygenerować? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Karta zostanie przekonfigurowana do tworzenia klucza %u-bitowego\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrąglono do %u bitów\n" @@ -2816,14 +2816,6 @@ msgstr "klucz %s: klucz publiczny ,,%s'' wczytano do zbioru\n" msgid "key %s: doesn't match our copy\n" msgstr "klucz %s: nie zgadza się z lokalną kopią\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "klucz %s: brak oryginalnego bloku klucza; %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "klucz %s: nie można odczytać oryginalnego bloku klucza: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "klucz %s: ,,%s'' 1 nowy identyfikator użytkownika\n" @@ -2914,6 +2906,14 @@ msgstr "" "klucz %s: brak klucza publicznego którego dotyczy wczytany certyfikat\n" " unieważnienia\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "klucz %s: brak oryginalnego bloku klucza; %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "klucz %s: nie można odczytać oryginalnego bloku klucza: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "klucz %s: niepoprawny certyfikat unieważnienia: %s - odrzucony\n" @@ -3391,6 +3391,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Dostępny jest klucz tajny.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Dostępny jest klucz tajny.\n" + msgid "Need the secret key to do this.\n" msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n" diff --git a/po/pt.po b/po/pt.po index e95b887aa..3caa5cab2 100644 --- a/po/pt.po +++ b/po/pt.po @@ -1440,6 +1440,10 @@ msgstr "Qual o tamanho de chave desejado? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Qual o tamanho de chave desejado? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "arredondado para %u bits\n" @@ -2757,14 +2761,6 @@ msgstr "chave %08lX: chave pública \"%s\" importada\n" msgid "key %s: doesn't match our copy\n" msgstr "chave %08lX: não corresponde à nossa cópia\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "chave %08lX: impossível localizar bloco de chaves original: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chave %8lX: \"%s\" 1 novo ID de utilizador\n" @@ -2854,6 +2850,14 @@ msgstr "" "chave %08lX: sem chave pública - impossível aplicar certificado\n" "de revogação\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "chave %08lX: impossível localizar bloco de chaves original: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "chave %08lX: certificado de revogação inválido: %s - rejeitado\n" @@ -3356,6 +3360,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Chave secreta disponível.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Chave secreta disponível.\n" + msgid "Need the secret key to do this.\n" msgstr "A chave secreta é necessária para fazer isto.\n" diff --git a/po/ro.po b/po/ro.po index d938da704..30a99249d 100644 --- a/po/ro.po +++ b/po/ro.po @@ -1445,6 +1445,10 @@ msgstr "Ce lungime de cheie doriţi? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Ce lungime de cheie doriţi? (%u) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "rotunjită prin adaos la %u biţi\n" @@ -2797,14 +2801,6 @@ msgstr "cheia %s: cheia publică \"%s\" importată\n" msgid "key %s: doesn't match our copy\n" msgstr "cheia %s: nu se potriveşte cu copia noastră\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "cheia %s: nu pot găsi keyblock-ul original: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "cheia %s: nu pot citi keyblock-ul original: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "cheia %s: \"%s\" 1 nou ID utilizator\n" @@ -2893,6 +2889,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "cheia %s: nici o cheie publică - nu pot aplica certificatul de revocare\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "cheia %s: nu pot găsi keyblock-ul original: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "cheia %s: nu pot citi keyblock-ul original: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "cheia %s: certificat de revocare invalid: %s - respins\n" @@ -3358,6 +3362,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Cheia secretă este disponibilă.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Cheia secretă este disponibilă.\n" + msgid "Need the secret key to do this.\n" msgstr "Aveţi nevoie de cheia secretă pentru a face aceasta.\n" diff --git a/po/ru.po b/po/ru.po index f995349e7..930af2712 100644 --- a/po/ru.po +++ b/po/ru.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: GnuPG 2.1.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-08-05 17:17+0000\n" +"PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Ineiev \n" "Language-Team: Russian \n" "Language: ru\n" @@ -1350,6 +1350,11 @@ msgstr "Какой Вам нужен размер ключа для шифров msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Какой Вам нужен размер ключа для аутентификации? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Теперь карта будет перенастроена на генерацию ключа длиной %u бит\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "округлен до %u бит\n" @@ -2584,14 +2589,6 @@ msgstr "ключ %s: импортирован открытый ключ \"%s\"\n msgid "key %s: doesn't match our copy\n" msgstr "ключ %s: не совпадает с нашей копией\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "ключ %s: оригинальный блок ключей не найден: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "ключ %s: оригинальный блок ключей не читается: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "ключ %s: \"%s\" 1 новый идентификатор пользователя\n" @@ -2677,6 +2674,14 @@ msgstr "Для переноса '%s' выполните на каждой кри msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "ключ %s: нет открытого ключа - не могу применить сертификат отзыва\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "ключ %s: оригинальный блок ключей не найден: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "ключ %s: оригинальный блок ключей не читается: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "ключ %s: недействительный сертификат отзыва: %s - отвергнут\n" @@ -3135,6 +3140,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Секретный ключ доступен.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Секретный ключ доступен.\n" + msgid "Need the secret key to do this.\n" msgstr "Для данного действия нужен секретный ключ.\n" diff --git a/po/sk.po b/po/sk.po index d8b898c91..6880122c0 100644 --- a/po/sk.po +++ b/po/sk.po @@ -1441,6 +1441,10 @@ msgstr "Akú veľkosť kľúča si prajete? (1024) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Akú veľkosť kľúča si prajete? (1024) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrúhlené na %u bitov\n" @@ -2772,14 +2776,6 @@ msgstr "kľúč %08lX: verejný kľúč \"%s\" importovaný\n" msgid "key %s: doesn't match our copy\n" msgstr "kľúč %08lX: nezodpovedá našej kópii\n" -#, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "kľúč %08lX: nemôžem nájsť originálny blok kľúča: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "kľúč %08lX: nemôžem čítať originálny blok kľúča: %s\n" - #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "kľúč %08lX: \"%s\" 1 nový identifikátor užívateľa\n" @@ -2868,6 +2864,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "kľúč %08lX: chýba verejný kľúč - nemôžem aplikovať revokačný certifikát\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "kľúč %08lX: nemôžem nájsť originálny blok kľúča: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "kľúč %08lX: nemôžem čítať originálny blok kľúča: %s\n" + #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "kľúč %08lX: neplatný revokačný certifikát: %s - zamietnuté\n" @@ -3369,6 +3373,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Tajný kľúč je dostupný.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Tajný kľúč je dostupný.\n" + msgid "Need the secret key to do this.\n" msgstr "Na vykonanie tejto operácie je potrebný tajný kľúč.\n" diff --git a/po/sv.po b/po/sv.po index ca7ba7ed4..8d94c9a89 100644 --- a/po/sv.po +++ b/po/sv.po @@ -24,7 +24,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg trunk\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2011-01-12 14:53+0100\n" +"PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -1479,11 +1479,6 @@ msgstr "fel vid hämtning av aktuell nyckelinformation: %s\n" msgid "Replace existing key? (y/N) " msgstr "Ersätt existerande nyckel? (j/N) " -#, fuzzy -#| msgid "" -#| "NOTE: There is no guarantee that the card supports the requested size.\n" -#| " If the key generation does not succeed, please check the\n" -#| " documentation of your card to see what sizes are allowed.\n" msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" @@ -1506,6 +1501,13 @@ msgstr "Vilken nyckelstorlek vill du använda för krypteringsnyckeln? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Vilken nyckelstorlek vill du använda för autentiseringsnyckeln? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" +"Kortet kommer nu att konfigureras om för att generera en nyckel med %u " +"bitar\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "avrundade uppåt till %u bitar\n" @@ -2874,14 +2876,6 @@ msgstr "nyckel %s: publika nyckeln \"%s\" importerades\n" msgid "key %s: doesn't match our copy\n" msgstr "nyckel %s: stämmer inte mot vår lokala kopia\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "nyckel %s: kan inte hitta det ursprungliga nyckelblocket: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "nyckel %s: kan inte läsa det ursprungliga nyckelblocket %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nyckel %s: \"%s\" 1 ny användaridentitet\n" @@ -2970,6 +2964,14 @@ msgstr "" msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "nyckel %s: ingen publik nyckel - kan inte verkställa spärrcertifikat\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "nyckel %s: kan inte hitta det ursprungliga nyckelblocket: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "nyckel %s: kan inte läsa det ursprungliga nyckelblocket %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nyckel %s: ogiltigt spärrcertifikat: %s - avvisat\n" @@ -3441,6 +3443,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Den hemliga nyckeln finns tillgänglig.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Den hemliga nyckeln finns tillgänglig.\n" + msgid "Need the secret key to do this.\n" msgstr "Den hemliga nyckeln behövs för att göra detta.\n" diff --git a/po/tr.po b/po/tr.po index c1743f364..cc77eb919 100644 --- a/po/tr.po +++ b/po/tr.po @@ -1460,6 +1460,10 @@ msgstr "İstediğiniz anahtar uzunluğu nedir? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "İstediğiniz anahtar uzunluğu nedir? (%u) " +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "%u bite yuvarlandı\n" @@ -2801,14 +2805,6 @@ msgstr "anahtar %s: genel anahtar \"%s\" alındı\n" msgid "key %s: doesn't match our copy\n" msgstr "anahtar %s: bizim kopyamızla eşleşmiyor\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "anahtar %s: özgün anahtar bloku bulunamadı: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "anahtar %s: özgün anahtar bloku okunamadı: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "anahtar %s: \"%s\" 1 yeni kullanıcı kimliği\n" @@ -2899,6 +2895,14 @@ msgstr "" "anahtar %s: genel anahtar değil - yürürlükten kaldırma sertifikası " "uygulanamaz\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "anahtar %s: özgün anahtar bloku bulunamadı: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "anahtar %s: özgün anahtar bloku okunamadı: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "" @@ -3377,6 +3381,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Gizli anahtar mevcut.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Gizli anahtar mevcut.\n" + msgid "Need the secret key to do this.\n" msgstr "Bunu yapmak için gizli anahtar gerekli.\n" diff --git a/po/uk.po b/po/uk.po index abbe11668..9316d8156 100644 --- a/po/uk.po +++ b/po/uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU gnupg 2.1.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-01-27 14:10+0200\n" +"PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -1356,6 +1356,12 @@ msgstr "Яким має бути розмір ключа для шифруван msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Якому розміру ключа для розпізнавання ви надаєте перевагу? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" +"Зараз налаштування картки буде змінено для створення %u-бітового ключа\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "округлено до %u бітів\n" @@ -2625,14 +2631,6 @@ msgstr "ключ %s: імпортовано відкритий ключ «%s»\n msgid "key %s: doesn't match our copy\n" msgstr "ключ %s: не відповідає нашій копії\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "ключ %s: не вдалося знайти початковий блок ключів: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "ключ %s: не вдалося прочитати початковий блок ключів: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "ключ %s: «%s» 1 новий ідентифікатор користувача\n" @@ -2722,6 +2720,14 @@ msgstr "" "ключ %s: немає відкритого ключа — не можна застосовувати сертифікат " "відкликання\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "ключ %s: не вдалося знайти початковий блок ключів: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "ключ %s: не вдалося прочитати початковий блок ключів: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "ключ %s: некоректний сертифікат відкликання: %s — відкинуто\n" @@ -3182,6 +3188,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Доступний закритий ключ.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Доступний закритий ключ.\n" + msgid "Need the secret key to do this.\n" msgstr "Для цього потрібен закритий ключ.\n" diff --git a/po/zh_CN.po b/po/zh_CN.po index 0cf93cbac..4b3954c6b 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1426,6 +1426,10 @@ msgstr "您想要用多大的密钥尺寸?(%u)" msgid "What keysize do you want for the Authentication key? (%u) " msgstr "您想要用多大的密钥尺寸?(%u)" +#, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + #, c-format msgid "rounded up to %u bits\n" msgstr "舍入到 %u 位\n" @@ -2738,14 +2742,6 @@ msgstr "密钥 %s:公钥“%s”已导入\n" msgid "key %s: doesn't match our copy\n" msgstr "密钥 %s:与我们的副本不吻合\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "密钥 %s:无法定位原始的密钥区块:%s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "密钥 %s:无法读取原始的密钥区块: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "密钥 %s:“%s”一个新的用户标识\n" @@ -2833,6 +2829,14 @@ msgstr "" msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "密钥 %s:没有公钥――无法应用吊销证书\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "密钥 %s:无法定位原始的密钥区块:%s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "密钥 %s:无法读取原始的密钥区块: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "密钥 %s:无效的吊销证书:%s――已拒绝\n" @@ -3280,6 +3284,11 @@ msgstr "压缩不可用的用户标识并删除所有签名" msgid "Secret key is available.\n" msgstr "私钥可用。\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "私钥可用。\n" + msgid "Need the secret key to do this.\n" msgstr "要有私钥才能这么做。\n" diff --git a/po/zh_TW.po b/po/zh_TW.po index a3f29b6c6..f997fa1b2 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU gnupg 2.1.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2014-11-22 20:56+0800\n" +"PO-Revision-Date: 2017-11-02 17:42+0100\n" "Last-Translator: Jedi Lin \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" @@ -1355,6 +1355,11 @@ msgstr "你的加密金鑰想要用多大的金鑰尺寸? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "你的認證金鑰想要用多大的金鑰尺寸? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "這張卡片將重新加以組態, 以便產生 %u 位元的金鑰\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "加大到 %u 位元\n" @@ -2599,14 +2604,6 @@ msgstr "金鑰 %s: 公鑰 \"%s\" 已匯入\n" msgid "key %s: doesn't match our copy\n" msgstr "金鑰 %s: 跟我們的副本不吻合\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "金鑰 %s: 無法定址原始的金鑰區塊: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "金鑰 %s: 無法讀取原始的金鑰區塊: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "金鑰 %s: \"%s\" 1 個新的使用者 ID\n" @@ -2692,6 +2689,14 @@ msgstr "" msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "金鑰 %s: 沒有公鑰 - 無法套用撤銷憑證\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "金鑰 %s: 無法定址原始的金鑰區塊: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "金鑰 %s: 無法讀取原始的金鑰區塊: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "金鑰 %s: 無效的撤銷憑證: %s - 已駁回\n" @@ -3139,6 +3144,11 @@ msgstr "從金鑰中精簡無法使用的使用者 ID 並移除所有的簽章" msgid "Secret key is available.\n" msgstr "私鑰可用.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "私鑰可用.\n" + msgid "Need the secret key to do this.\n" msgstr "要有私鑰纔能這麼做.\n" From 6070f5a61d4d17ff437c69e1b708d49d107c22dc Mon Sep 17 00:00:00 2001 From: Ineiev Date: Tue, 31 Oct 2017 14:22:51 +0300 Subject: [PATCH 09/26] po: Update Russian translation --- po/ru.po | 203 +++++++++++++++++++++++++++---------------------------- 1 file changed, 100 insertions(+), 103 deletions(-) diff --git a/po/ru.po b/po/ru.po index 930af2712..3e3a0c505 100644 --- a/po/ru.po +++ b/po/ru.po @@ -9,7 +9,7 @@ # Designated-Translator: none msgid "" msgstr "" -"Project-Id-Version: GnuPG 2.1.0\n" +"Project-Id-Version: GnuPG 2.2.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Ineiev \n" @@ -111,7 +111,7 @@ msgid "Passphrase too long" msgstr "Слишком длинная фраза-пароль" msgid "Invalid characters in PIN" -msgstr "Недопустимый символ в PIN" +msgstr "Недопустимые символы в PIN" msgid "PIN too short" msgstr "Слишком короткий PIN" @@ -144,7 +144,7 @@ msgstr "обнаружена карта, серийный номер: %s\n" #, c-format msgid "no authentication key for ssh on card: %s\n" -msgstr "на карте нет основного аутентификационного ключа для ssh: %s\n" +msgstr "на карте нет ключа удостоверения личности для ssh: %s\n" #, c-format msgid "no suitable card key found: %s\n" @@ -263,9 +263,9 @@ msgstr "Да, защита не нужна" #, c-format msgid "A passphrase should be at least %u character long." msgid_plural "A passphrase should be at least %u characters long." -msgstr[0] "Фраза-пароль не должна быть короче %u символа" -msgstr[1] "Фраза-пароль не должна быть короче %u символов" -msgstr[2] "Фраза-пароль не должна быть короче %u символов" +msgstr[0] "Фраза-пароль не должна быть короче %u символа." +msgstr[1] "Фраза-пароль не должна быть короче %u символов." +msgstr[2] "Фраза-пароль не должна быть короче %u символов." #, c-format msgid "A passphrase should contain at least %u digit or%%0Aspecial character." @@ -378,7 +378,7 @@ msgid "enable ssh support" msgstr "включить поддержку ssh" msgid "|ALGO|use ALGO to show ssh fingerprints" -msgstr "|ALGO|использовать алгоритм ALGO для отображения отпечатков" +msgstr "|ALGO|использовать для отображения отпечатков алгоритм ALGO" msgid "enable putty support" msgstr "включить поддержку putty" @@ -390,7 +390,7 @@ msgid "Please report bugs to <@EMAIL@>.\n" msgstr "Об ошибках в программе сообщайте по адресу <@EMAIL@>.\n" msgid "Usage: @GPG_AGENT@ [options] (-h for help)" -msgstr "Вызов: @GPG_AGENT@ [параметры] (-h для подсказки)" +msgstr "Вызов: @GPG_AGENT@ [параметры] (-h - подсказка)" msgid "" "Syntax: @GPG_AGENT@ [options] [command [args]]\n" @@ -501,7 +501,7 @@ msgstr "в этом сеансе агент gpg не работает\n" msgid "Usage: gpg-preset-passphrase [options] KEYGRIP (-h for help)\n" msgstr "" -"Вызов: gpg-preset-passphrase [параметры] КОД_КЛЮЧА (-h для подсказки)\n" +"Вызов: gpg-preset-passphrase [параметры] КОД_КЛЮЧА (-h - подсказка)\n" msgid "" "Syntax: gpg-preset-passphrase [options] KEYGRIP\n" @@ -527,7 +527,7 @@ msgstr "" " " msgid "Usage: gpg-protect-tool [options] (-h for help)\n" -msgstr "Вызов: gpg-protect-tool [параметры] (-h для подсказки)\n" +msgstr "Вызов: gpg-protect-tool [параметры] (-h - подсказка)\n" msgid "" "Syntax: gpg-protect-tool [options] [args]\n" @@ -678,7 +678,7 @@ msgstr "DSA требует длины хеша, кратной 8 битам\n" #, c-format msgid "%s key uses an unsafe (%u bit) hash\n" -msgstr "%s ключ использует небезопасный (%u бит) хеш\n" +msgstr "%s ключ использует небезопасный (%u-битный) хеш\n" #, c-format msgid "a %zu bit hash is not valid for a %u bit %s key\n" @@ -752,15 +752,15 @@ msgstr "не могу отключить создание файла образ #, c-format msgid "Warning: unsafe ownership on %s \"%s\"\n" -msgstr "Внимание: небезопасный владелец %s \"%s\"\n" +msgstr "Внимание: небезопасный владелец объекта %s \"%s\"\n" #, c-format msgid "Warning: unsafe permissions on %s \"%s\"\n" -msgstr "Внимание: небезопасные права доступа %s \"%s\"\n" +msgstr "Внимание: небезопасные права доступа объекта %s \"%s\"\n" #, c-format msgid "waiting for file '%s' to become accessible ...\n" -msgstr "ожидаю доступности файла '%s'\n" +msgstr "ожидаю доступа к файлу '%s'\n" #, c-format msgid "renaming '%s' to '%s' failed: %s\n" @@ -906,7 +906,7 @@ msgid "unsupported algorithm: %s" msgstr "алгоритм (не поддерживается): %s" msgid "seems to be not encrypted" -msgstr "кажется, не зашифровано" +msgstr "по-видимому, не зашифровано" msgid "Number of recipients" msgstr "Количество получателей" @@ -924,7 +924,7 @@ msgstr "хеш-функция данных: %s" #, c-format msgid "Signer %d" -msgstr "Подпись %d" +msgstr "Подпись ключом %d" #, c-format msgid "attr hash algorithm: %s" @@ -1077,11 +1077,11 @@ msgstr "ошибка записи в '%s': %s\n" #, c-format msgid "removing stale lockfile (created by %d)\n" -msgstr "удаляю залипшую блокировку (созданную %d)\n" +msgstr "удаляю залипшую блокировку (созданную процессом %d)\n" #, c-format msgid "waiting for lock (held by %d%s) %s...\n" -msgstr "жду снятия блокировки (заблокировано %d%s) %s...\n" +msgstr "жду снятия блокировки (заблокировано процессом %d%s) %s...\n" msgid "(deadlock?) " msgstr "(мертвая точка?) " @@ -1171,7 +1171,7 @@ msgstr "" "заканчиваться знаком '='\n" msgid "a user notation name must contain the '@' character\n" -msgstr "имя замечания должно содержать символ '@'\n" +msgstr "имя пользовательского замечания должно содержать символ '@'\n" msgid "a notation name must not contain more than one '@' character\n" msgstr "имя замечания не должно содержать более одного символа '@'\n" @@ -1180,7 +1180,7 @@ msgid "a notation value must not use any control characters\n" msgstr "в тексте замечания не должно быть управляющих символов\n" msgid "a notation name may not contain an '=' character\n" -msgstr "имя примечания не должно содержать символа '='\n" +msgstr "имя замечания не должно содержать символа '='\n" msgid "a notation name must have only printable characters or spaces\n" msgstr "имя замечания должно содержать только печатные символы или пробелы\n" @@ -1209,7 +1209,7 @@ msgstr "Внимание: %s\n" msgid "Note: Outdated servers may lack important security fixes.\n" msgstr "" -"Замечание: На старых серверах могут быть оставаться ошибки, критичные для " +"Замечание: На старых серверах могут оставаться ошибки, критичные для " "безопасности.\n" #, c-format @@ -1232,7 +1232,7 @@ msgid "can't do this in batch mode\n" msgstr "в пакетном режиме это действие невозможно\n" msgid "This command is only available for version 2 cards\n" -msgstr "Эта команда доступна только для карт версии 2.\n" +msgstr "Эта команда доступна только для карт версии 2\n" msgid "Reset Code not or not anymore available\n" msgstr "Код сброса (больше) не доступен\n" @@ -1253,10 +1253,10 @@ msgid "unspecified" msgstr "не указан" msgid "not forced" -msgstr "не принудительный" +msgstr "не требуется" msgid "forced" -msgstr "принудительный" +msgstr "требуется" msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Ошибка: Допустим только простой текст ASCII.\n" @@ -1348,7 +1348,7 @@ msgstr "Какой Вам нужен размер ключа для шифров #, c-format msgid "What keysize do you want for the Authentication key? (%u) " -msgstr "Какой Вам нужен размер ключа для аутентификации? (%u) " +msgstr "Какой Вам нужен размер ключа для удостоверения личности? (%u) " #, fuzzy, c-format #| msgid "The card will now be re-configured to generate a key of %u bits\n" @@ -1400,7 +1400,7 @@ msgid " (2) Encryption key\n" msgstr " (2) Ключ шифрования\n" msgid " (3) Authentication key\n" -msgstr " (3) Ключ аутентификации\n" +msgstr " (3) Ключ удостоверения личности\n" msgid "Invalid selection.\n" msgstr "Неправильный выбор.\n" @@ -1413,7 +1413,7 @@ msgid "KEYTOCARD failed: %s\n" msgstr "сбой записи ключа на карту: %s\n" msgid "This command is not supported by this card\n" -msgstr "Данная команда этой картой не поддерживается.\n" +msgstr "Данная команда этой картой не поддерживается\n" msgid "Note: This command destroys all keys stored on the card!\n" msgstr "Замечание: эта команда сотрет с карты все ключи!\n" @@ -1717,7 +1717,7 @@ msgstr "(проверьте аргумент параметра '%s')\n" #, c-format msgid "Warning: '%s' should be a long key ID or a fingerprint\n" msgstr "" -"Внимание: '%s' должно быть должно быть длинным идентификатором или " +"Внимание: '%s' должно быть длинным идентификатором или " "отпечатком ключа\n" #, c-format @@ -1944,7 +1944,7 @@ msgstr "" " --fingerprint [имена] показать отпечатки\n" msgid "Usage: @GPG@ [options] [files] (-h for help)" -msgstr "Вызов: @GPG@ [параметры] [файлы] (-h для подсказки)" +msgstr "Вызов: @GPG@ [параметры] [файлы] (-h - подсказка)" msgid "" "Syntax: @GPG@ [options] [files]\n" @@ -2050,43 +2050,43 @@ msgid "unknown configuration item '%s'\n" msgstr "неизвестный элемент в файле настроек '%s'\n" msgid "display photo IDs during key listings" -msgstr "показать в списке ключей фотоидентификаторы" +msgstr "показывать в списке ключей фотоидентификаторы" msgid "show key usage information during key listings" -msgstr "показать в списке ключей сведения о назначении ключа" +msgstr "показывать в списке ключей сведения о назначении ключа" msgid "show policy URLs during signature listings" -msgstr "показать в списке подписей URL правил" +msgstr "показывать в списке подписей URL правил" msgid "show all notations during signature listings" -msgstr "показать в списке подписей все замечания" +msgstr "показывать в списке подписей все замечания" msgid "show IETF standard notations during signature listings" -msgstr "показать в списке подписей замечания стандарта IETF" +msgstr "показывать в списке подписей замечания стандарта IETF" msgid "show user-supplied notations during signature listings" -msgstr "показать в списке подписей пользовательские замечания" +msgstr "показывать в списке подписей пользовательские замечания" msgid "show preferred keyserver URLs during signature listings" -msgstr "показать в списке подписей URL предпочтительных серверов ключей" +msgstr "показывать в списке подписей URL предпочтительных серверов ключей" msgid "show user ID validity during key listings" msgstr "" -"показать в списке ключей действительность идентификаторов пользователей" +"показывать в списке ключей действительность идентификаторов пользователей" msgid "show revoked and expired user IDs in key listings" msgstr "" -"показать в списке ключей отозванные и просроченные идентификаторы " +"показывать в списке ключей отозванные и просроченные идентификаторы " "пользователей" msgid "show revoked and expired subkeys in key listings" -msgstr "показать в списке ключей отозванные и просроченные подключи" +msgstr "показывать в списке ключей отозванные и просроченные подключи" msgid "show the keyring name in key listings" -msgstr "показать в списке ключей название таблицы ключей" +msgstr "показывать в списке ключей название таблицы ключей" msgid "show expiration dates during signature listings" -msgstr "показать в списке подписей сроки действия" +msgstr "показывать в списке подписей сроки действия" #, c-format msgid "unknown TOFU policy '%s'\n" @@ -2229,7 +2229,7 @@ msgstr "Внимание: работаем с фальшивым системн #, c-format msgid "will not run with insecure memory due to %s\n" -msgstr "не будет работать с небезопасной памятью из-за %s\n" +msgstr "отказываюсь работать с небезопасной памятью из-за %s\n" msgid "selected cipher algorithm is invalid\n" msgstr "выбран недопустимый алгоритм шифрования\n" @@ -2385,7 +2385,7 @@ msgid "|ALGO|reject signatures made with ALGO" msgstr "|ALGO|отвергать подписи, сделанные по данному алгоритму" msgid "Usage: gpgv [options] [files] (-h for help)" -msgstr "Вызов: gpgv [параметры] [файлы] (-h для подсказки)" +msgstr "Вызов: gpgv [параметры] [файлы] (-h - подсказка)" msgid "" "Syntax: gpgv [options] [files]\n" @@ -2399,7 +2399,7 @@ msgstr "Справки нет" #, c-format msgid "No help available for '%s'" -msgstr "Нет справки для '%s'" +msgstr "Нет справки по ключевому слову '%s'" msgid "import signatures that are marked as local-only" msgstr "импортировать подписи, обозначенные как 'только локальные'" @@ -2408,7 +2408,7 @@ msgid "repair damage from the pks keyserver during import" msgstr "устранить при импорте повреждения от сервера ключей pks" msgid "do not clear the ownertrust values during import" -msgstr "не сбрасывать уровни доверия владельцам после импорта" +msgstr "не сбрасывать уровни доверия владельцам при импорте" msgid "do not update the trustdb after import" msgstr "не обновлять таблицу доверия после импорта" @@ -2723,7 +2723,7 @@ msgstr "ключ %s: недопустимая связь подключей\n" #, c-format msgid "key %s: removed multiple subkey binding\n" -msgstr "ключ %s: удалено многократное связывание подключей\n" +msgstr "ключ %s: удалена многократная связь подключей\n" #, c-format msgid "key %s: no subkey for key revocation\n" @@ -3140,10 +3140,8 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Секретный ключ доступен.\n" -#, fuzzy -#| msgid "Secret key is available.\n" msgid "Secret subkeys are available.\n" -msgstr "Секретный ключ доступен.\n" +msgstr "Секретные подключи доступны.\n" msgid "Need the secret key to do this.\n" msgstr "Для данного действия нужен секретный ключ.\n" @@ -3247,7 +3245,7 @@ msgstr "" "пользователем\n" msgid "Set preference list to:\n" -msgstr "Установить предпочтения в:\n" +msgstr "Установить предпочтения, равные:\n" msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" @@ -3358,7 +3356,7 @@ msgid "expires: %s" msgstr " годен до: %s" # perhaps this should be somewhere in help/man -# (S - подпись, C - сертификация, E - шифрование, A - аутентификация) +# (S - подпись, C - сертификация, E - шифрование, A - удостоверение личности) # too long for repeating messages. #, c-format msgid "usage: %s" @@ -3446,7 +3444,7 @@ msgid "Nothing deleted.\n" msgstr "Ничего не удалено.\n" msgid "invalid" -msgstr "недопустимый" +msgstr "недопустим" #, c-format msgid "User ID \"%s\" compacted: %s\n" @@ -3630,24 +3628,24 @@ msgstr "Подключ %s уже отозван.\n" #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" -msgstr "Показ фотоидентификатора %s размера %ld для ключа %s (uid %d)\n" +msgstr "Показ фотоидентификатора %s размера %ld для ключа %s (идентификатор пользователя %d)\n" #, c-format msgid "invalid value for option '%s'\n" -msgstr "недопустимое значения для параметра \"%s\"\n" +msgstr "недопустимое значения параметра \"%s\"\n" #, c-format msgid "preference '%s' duplicated\n" msgstr "предпочтение '%s' дублируется\n" msgid "too many cipher preferences\n" -msgstr "слишком много шифровых предпочтений\n" +msgstr "слишком много предпочтений шифров\n" msgid "too many digest preferences\n" -msgstr "слишком много предпочтений для хеш-функций\n" +msgstr "слишком много предпочтений хеш-функций\n" msgid "too many compression preferences\n" -msgstr "слишком много предпочтений для методов сжатия\n" +msgstr "слишком много предпочтений методов сжатия\n" #, c-format msgid "invalid item '%s' in preference string\n" @@ -3660,7 +3658,7 @@ msgid "writing self signature\n" msgstr "запись самоподписи\n" msgid "writing key binding signature\n" -msgstr "запись объединяющей подписи\n" +msgstr "запись связующей подписи\n" #, c-format msgid "keysize invalid; using %u bits\n" @@ -3686,7 +3684,7 @@ msgid "Encrypt" msgstr "Зашифровать" msgid "Authenticate" -msgstr "Аутентифицировать" +msgstr "Удостоверить личность" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. The @@ -3710,15 +3708,15 @@ msgstr "Допустимы действия: " #, c-format msgid " (%c) Toggle the sign capability\n" -msgstr " (%c) Переключить возможность использования для подписи\n" +msgstr " (%c) Переключить возможность подписи\n" #, c-format msgid " (%c) Toggle the encrypt capability\n" -msgstr " (%c) Переключить возможность использования для шифрования\n" +msgstr " (%c) Переключить возможность шифрования\n" #, c-format msgid " (%c) Toggle the authenticate capability\n" -msgstr " (%c) Переключить возможность использования для аутентификации\n" +msgstr " (%c) Переключить возможность удостоверения личности\n" #, c-format msgid " (%c) Finished\n" @@ -3753,11 +3751,11 @@ msgstr " (%d) RSA (только для шифрования)\n" #, c-format msgid " (%d) DSA (set your own capabilities)\n" -msgstr " (%d) DSA (с требуемыми возможностями)\n" +msgstr " (%d) DSA (задать возможности)\n" #, c-format msgid " (%d) RSA (set your own capabilities)\n" -msgstr " (%d) RSA (с требуемыми возможностями)\n" +msgstr " (%d) RSA (задать возможности)\n" #, c-format msgid " (%d) ECC and ECC\n" @@ -3769,7 +3767,7 @@ msgstr " (%d) ECC (только для подписи)\n" #, c-format msgid " (%d) ECC (set your own capabilities)\n" -msgstr " (%d) ECC (с требуемыми возможностями)\n" +msgstr " (%d) ECC (задать возможности)\n" #, c-format msgid " (%d) ECC (encrypt only)\n" @@ -3794,7 +3792,7 @@ msgstr "округлен до %u бит\n" #, c-format msgid "%s keys may be between %u and %u bits long.\n" -msgstr "длина ключей %s может быть от %u до %u бит.\n" +msgstr "длина ключей %s может быть от %u до %u.\n" #, c-format msgid "What keysize do you want for the subkey? (%u) " @@ -3933,7 +3931,7 @@ msgstr "Недопустимый символ в примечании\n" #, c-format msgid "You are using the '%s' character set.\n" -msgstr "Используется таблица символов: '%s'.\n" +msgstr "Используется таблица символов '%s'.\n" #, c-format msgid "" @@ -3964,16 +3962,16 @@ msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " -msgstr "Сменить (N)Имя, (C)Примечание, (E)Адрес или (Q)Выход? " +msgstr "Сменить (N)Имя, (C)Примечание, (E)Адрес; (Q)Выход? " msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " -msgstr "Сменить (N)Имя, (C)Примечание, (E)Адрес или (O)Принять/(Q)Выход? " +msgstr "Сменить (N)Имя, (C)Примечание, (E)Адрес; (O)Принять/(Q)Выход? " msgid "Change (N)ame, (E)mail, or (Q)uit? " -msgstr "Сменить (N)Имя, (E)Адрес или (Q)Выход? " +msgstr "Сменить (N)Имя, (E)Адрес; (Q)Выход? " msgid "Change (N)ame, (E)mail, or (O)kay/(Q)uit? " -msgstr "Сменить (N)Имя, (E)Адрес или (O)Принять/(Q)Выход? " +msgstr "Сменить (N)Имя, (E)Адрес; (O)Принять/(Q)Выход? " msgid "Please correct the error first\n" msgstr "Сначала исправьте ошибку\n" @@ -4000,7 +3998,7 @@ msgid "" " \"%s\"\n" "\n" msgstr "" -"Создается ключ для:\n" +"Создается ключ пользователя\n" " \"%s\"\n" "\n" @@ -4009,7 +4007,7 @@ msgstr "Продолжить? (Y/n) " #, c-format msgid "A key for \"%s\" already exists\n" -msgstr "Ключ для \"%s\" уже существует\n" +msgstr "Ключ пользователя \"%s\" уже существует\n" msgid "Create anyway? (y/N) " msgstr "Все равно создать новый? (y/N) " @@ -4052,7 +4050,7 @@ msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" -"Учтите, что данный ключ не может использоваться для шифрования. Вы можете\n" +"Учтите, что данный ключ не может использоваться для шифрования. Можно\n" "воспользоваться командой \"--edit-key\" и создать подключ для этих целей.\n" #, c-format @@ -4193,7 +4191,7 @@ msgid "include revoked keys in search results" msgstr "включить в результаты поиска отозванные ключи" msgid "include subkeys when searching by key ID" -msgstr "искать по идентификатору ключа, включая подключи" +msgstr "добавить подключи в поиск по идентификатору ключа" msgid "override timeout options set for dirmngr" msgstr "переназначить настройки времени ожидания для dirmngr" @@ -4211,7 +4209,7 @@ msgid "disabled" msgstr "отключен" msgid "Enter number(s), N)ext, or Q)uit > " -msgstr "Введите числа, N) Следующее или Q) Выход> " +msgstr "Введите числа, N) Следующее; Q) Выход > " #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" @@ -4234,7 +4232,7 @@ msgstr "Внимание: невозможно обновить ключ %s с % #, c-format msgid "key \"%s\" not found on keyserver\n" -msgstr "ключ \"%s\" не найден на сервере ключей\n" +msgstr "ключ \"%s\" на сервере ключей не найден\n" msgid "key not found on keyserver\n" msgstr "ключ не найден на сервере ключей\n" @@ -4251,7 +4249,7 @@ msgid "requesting key %s from %s\n" msgstr "получение ключа %s с %s\n" msgid "no keyserver known\n" -msgstr "ни один сервер ключей не известен\n" +msgstr "не известно ни одного сервера ключей\n" #, c-format msgid "skipped \"%s\": %s\n" @@ -4629,7 +4627,7 @@ msgid "" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" -"Выберите изображение для Вашего фотоидентификатора. Это должен быть файл " +"Выберите изображение для своего фотоидентификатора. Это должен быть файл " "JPEG.\n" "Помните, что изображение будет храниться в Вашем открытом ключе и увеличит\n" "его размер! Рекомендуется размер около 240x288.\n" @@ -5014,7 +5012,7 @@ msgid "" "of the gpg command \"--generate-revocation\" in the GnuPG manual." msgstr "" "Пользуйтесь им для отзыва этого ключа в случае раскрытия или потери\n" -"секретного ключа. Однако, если секретный ключ доступен, лучше создать\n" +"секретного ключа. Однако если секретный ключ доступен, лучше создать\n" "новый сертификат с указанием причины отзыва. Подробности см. в описании\n" "команды gpg \"--generate-revocation\" в руководстве по GnuPG." @@ -5286,11 +5284,11 @@ msgstr "таблица доверия: сбой синхронизации: %s\n #, c-format msgid "can't create lock for '%s'\n" -msgstr "невозможно создать блокировку для '%s'\n" +msgstr "не удается создать блокировку для '%s'\n" #, c-format msgid "can't lock '%s'\n" -msgstr "невозможно заблокировать '%s'\n" +msgstr "не удается заблокировать '%s'\n" #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" @@ -5936,7 +5934,7 @@ msgid "enable full debugging" msgstr "полностью включить отладку" msgid "Usage: kbxutil [options] [files] (-h for help)" -msgstr "Вызов: kbxutil [параметры] [файлы] (-h для подсказки)" +msgstr "Вызов: kbxutil [параметры] [файлы] (-h - подсказка)" msgid "" "Syntax: kbxutil [options] [files]\n" @@ -6134,7 +6132,7 @@ msgstr "пропущена метка времени создания\n" #, c-format msgid "RSA prime %s missing or not of size %d bits\n" -msgstr "Простое число RSA %s пропущено или его размер не равен %d бит\n" +msgstr "Простое число RSA %s пропущено или его размер не равен %d\n" #, c-format msgid "failed to store the key: %s\n" @@ -6222,7 +6220,7 @@ msgid "use variable length input for pinpad" msgstr "использовать входные данные переменой длины для клавиатуры считывателя" msgid "Usage: @SCDAEMON@ [options] (-h for help)" -msgstr "Вызов: @SCDAEMON@ [параметры] (-h для подсказки)" +msgstr "Вызов: @SCDAEMON@ [параметры] (-h - подсказка)" msgid "" "Syntax: scdaemon [options] [command [args]]\n" @@ -6292,7 +6290,7 @@ msgstr "число соответствующих сертификатов: %d\n #, c-format msgid "dirmngr cache-only key lookup failed: %s\n" -msgstr "ключ не найден в буфере dirmngr: %s\n" +msgstr "ключ в буфере dirmngr не найден: %s\n" msgid "failed to allocate keyDB handle\n" msgstr "сбой при выделении памяти под указатель на базу данных\n" @@ -6779,7 +6777,7 @@ msgid "|NAME|use message digest algorithm NAME" msgstr "|NAME|использовать хеш-функцию NAME" msgid "Usage: @GPGSM@ [options] [files] (-h for help)" -msgstr "Вызов: @GPGSM@ [параметры] [файлы] (-h для подсказки)" +msgstr "Вызов: @GPGSM@ [параметры] [файлы] (-h - подсказка)" msgid "" "Syntax: @GPGSM@ [options] [files]\n" @@ -6787,7 +6785,7 @@ msgid "" "Default operation depends on the input data\n" msgstr "" "Синтаксис: @GPGSM@ [параметры] [файлы]\n" -"Подписать, проверить, зашифровать или расшифровать, используя протокол S/" +"Подписать, проверить, зашифровать или расшифровать по протоколу S/" "MIME\n" "Операция по умолчанию зависит от входных данных\n" @@ -6921,11 +6919,11 @@ msgstr "" #, c-format msgid "hash algorithm %d (%s) for signer %d not supported; using %s\n" -msgstr "хеш-функция %d (%s) для %d не поддерживается; использую %s\n" +msgstr "хеш-функция %d (%s) для пользователя %d не поддерживается; использую %s\n" #, c-format msgid "hash algorithm used for signer %d: %s (%s)\n" -msgstr "хеш-функция для подписи %d: %s (%s)\n" +msgstr "хеш-функция для пользователя %d: %s (%s)\n" #, c-format msgid "checking for qualified certificate failed: %s\n" @@ -7030,7 +7028,7 @@ msgstr "ошибка помещения сертификата в буфер: %s #, c-format msgid "invalid SHA1 fingerprint string '%s'\n" -msgstr "неверный отпечаток SHA1 '%s'\n" +msgstr "неверная строка отпечатока SHA1 '%s'\n" #, c-format msgid "error fetching certificate by S/N: %s\n" @@ -7519,8 +7517,7 @@ msgstr "принудительно использовать основной о msgid "Usage: dirmngr-client [options] [certfile|pattern] (-h for help)\n" msgstr "" -"Вызов: dirmngr-client [параметры] [файл_сертификата|шаблон] (-h для " -"подсказки)\n" +"Вызов: dirmngr-client [параметры] [файл_сертификата|шаблон] (-h - подсказка)\n" msgid "" "Syntax: dirmngr-client [options] [certfile|pattern]\n" @@ -7529,9 +7526,9 @@ msgid "" "not valid and other error codes for general failures\n" msgstr "" "Синтаксис: dirmngr-client [параметры] [файл_сертификата|шаблон]\n" -"Проверка сертификата X.509 по списку отозванных сертификатов или по OCSP\n" +"Проверка сертификата X.509 по списку отозванных сертификатов или по OCSP.\n" "Процесс возвращает 0, если сертификат достоверен, 1, если недостоверен,\n" -"и другие коды ошибок при общих отказах\n" +"и другие коды ошибок при общих отказах.\n" #, c-format msgid "error reading certificate from stdin: %s\n" @@ -7685,7 +7682,7 @@ msgstr "" "(Полный список команд и параметров см. в руководстве \"info\")\n" msgid "Usage: @DIRMNGR@ [options] (-h for help)" -msgstr "Вызов: @DIRMNGR@ [параметры] (-h для подсказки)" +msgstr "Вызов: @DIRMNGR@ [параметры] (-h - подсказка)" msgid "" "Syntax: @DIRMNGR@ [options] [command [args]]\n" @@ -7765,10 +7762,10 @@ msgid "|N|connect to port N" msgstr "|N|подключиться к порту N" msgid "|NAME|use user NAME for authentication" -msgstr "|NAME|использовать для аутентификации пользователя NAME" +msgstr "|NAME|использовать имя пользователя NAME для удостоверения личности" msgid "|PASS|use password PASS for authentication" -msgstr "|PASS|использовать для аутентификации пароль PASS" +msgstr "|PASS|использовать для удостоверения личности пароль PASS" msgid "take password from $DIRMNGR_LDAP_PASS" msgstr "взять пароль из $DIRMNGR_LDAP_PASS" @@ -7783,7 +7780,7 @@ msgid "|STRING|return the attribute STRING" msgstr "|STRING|вернуть атрибут STRING" msgid "Usage: dirmngr_ldap [options] [URL] (-h for help)\n" -msgstr "Вызов: dirmngr_ldap [параметры] [URL] (-h для подсказки)\n" +msgstr "Вызов: dirmngr_ldap [параметры] [URL] (-h - подсказка)\n" msgid "" "Syntax: dirmngr_ldap [options] [URL]\n" @@ -8198,7 +8195,7 @@ msgid "run /subst on startup" msgstr "выполнить при запуске подстановку subst" msgid "Usage: @GPG@-connect-agent [options] (-h for help)" -msgstr "Вызов: @GPG@-connect-agent [параметры] (-h для подсказки)" +msgstr "Вызов: @GPG@-connect-agent [параметры] (-h - подсказка)" msgid "" "Syntax: @GPG@-connect-agent [options]\n" @@ -8423,7 +8420,7 @@ msgid "activate changes at runtime, if possible" msgstr "задействовать изменения во время исполнения, если возможно" msgid "Usage: @GPGCONF@ [options] (-h for help)" -msgstr "Вызов: @GPGCONF@ [параметры] (-h для подсказки)" +msgstr "Вызов: @GPGCONF@ [параметры] (-h - подсказка)" msgid "" "Syntax: @GPGCONF@ [options]\n" @@ -8469,7 +8466,7 @@ msgid "input file name (default stdin)" msgstr "имя входного файла (по умолчанию stdin)" msgid "Usage: symcryptrun [options] (-h for help)" -msgstr "Вызов: symcryptrun [параметры] (-h для подсказки)" +msgstr "Вызов: symcryptrun [параметры] (-h - подсказка)" msgid "" "Syntax: symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE " @@ -8577,7 +8574,7 @@ msgstr "класс %s не поддерживается\n" msgid "Usage: gpg-check-pattern [options] patternfile (-h for help)\n" msgstr "" -"Вызов: gpg-check-pattern [параметры] файл_образцов (-h для подсказки)\n" +"Вызов: gpg-check-pattern [параметры] файл_образцов (-h - подсказка)\n" msgid "" "Syntax: gpg-check-pattern [options] patternfile\n" From f183b9768b42a6792c55a6129488bd8fbf5e8e6d Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Mon, 30 Oct 2017 11:59:11 +0900 Subject: [PATCH 10/26] g10: Simplify "factory-reset" procedure. * g10/card-util.c (factory_reset): Simplify. -- In this summer, I got report about old code before this change didn't work with newer Yubikey. I got another report test version of OpenPGP card V3.3 implementation didn't work, either. Then, I confirmed that according to the OpenPGP card specification, the procedure of old code is not expected by its author. This change simplify "factory-reset" as simple. Only versions of Gnuk 1.2.2, 1.2.3, 1.2.4, won't work with this change. That's because the factory-reset feature of Gnuk was introduced by reading the implementation of GnuPG, instead of reading the specification. Gnuk 1.2.5 and later works well. All OpenPGPcard implementations I have work well (2.0, 2.1, 2.2, test version of 3). GnuPG-bug-id: 3286 Signed-off-by: NIIBE Yutaka (cherry picked from commit d63b7966cdd72548c60466c620de5cd6104a779e) --- g10/card-util.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/g10/card-util.c b/g10/card-util.c index ef6761091..a396b7df4 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -1760,9 +1760,6 @@ factory_reset (void) scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40 scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40 scd apdu 00 e6 00 00 - scd reset - scd serialno undefined - scd apdu 00 A4 04 00 06 D2 76 00 01 24 01 scd apdu 00 44 00 00 /echo Card has been reset to factory defaults @@ -1837,17 +1834,6 @@ factory_reset (void) goto leave; } - /* The card is in termination state - reset and select again. */ - err = send_apdu (NULL, "RESET", 0); - if (err) - goto leave; - err = send_apdu ("undefined", "dummy select", 0); - if (err) - goto leave; - - /* Select the OpenPGP application. (no error checking here). */ - send_apdu ("00A4040006D27600012401", "SELECT AID", 0xffff); - /* Send activate datafile command. This is used without confirmation if the card is already in termination state. */ err = send_apdu ("00440000", "ACTIVATE DF", 0); From 680161647ad56d1ca92988f80bcc4d6fcb20b1eb Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Wed, 1 Nov 2017 10:19:35 +0900 Subject: [PATCH 11/26] g10: Unattended key generation "Key-Grip" and "Subkey-Grip". * g10/keygen.c (pSUBKEYGRIP): New. (read_parameter_file): Add "Key-Grip" and "Subkey-Grip". (do_generate_keypair): Support pSUBKEYGRIP. -- In the manual, it says "Key-Grip". gpgsm also supports "Key-Grip". Adding "Subkey-Grip" now, adding "Key-Grip" makes sense. GnuPG-bug-id: 3478 Signed-off-by: NIIBE Yutaka (cherry picked from commit 6c63a04569c07c9c2817c7c530a92ccfa58155cc) --- g10/keygen.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/g10/keygen.c b/g10/keygen.c index 8f30b7ecc..38686b213 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -90,7 +90,8 @@ enum para_name { pCARDBACKUPKEY, pHANDLE, pKEYSERVER, - pKEYGRIP + pKEYGRIP, + pSUBKEYGRIP, }; struct para_data_s { @@ -3649,6 +3650,8 @@ read_parameter_file (ctrl_t ctrl, const char *fname ) { "Handle", pHANDLE }, { "Keyserver", pKEYSERVER }, { "Keygrip", pKEYGRIP }, + { "Key-Grip", pKEYGRIP }, + { "Subkey-grip", pSUBKEYGRIP }, { NULL, 0 } }; IOBUF fp; @@ -4697,8 +4700,7 @@ do_generate_keypair (ctrl_t ctrl, struct para_data_s *para, if (!err && card && get_parameter (para, pAUTHKEYTYPE)) { err = gen_card_key (3, get_parameter_algo( para, pAUTHKEYTYPE, NULL ), - 0, pub_root, ×tamp, - get_parameter_u32 (para, pKEYEXPIRE)); + 0, pub_root, ×tamp, expire); if (!err) err = write_keybinding (ctrl, pub_root, pri_psk, NULL, PUBKEY_USAGE_AUTH, timestamp, cache_nonce); @@ -4706,11 +4708,18 @@ do_generate_keypair (ctrl_t ctrl, struct para_data_s *para, if (!err && get_parameter (para, pSUBKEYTYPE)) { - sub_psk = NULL; + int subkey_algo = get_parameter_algo (para, pSUBKEYTYPE, NULL); + s = NULL; - if (!card || (s = get_parameter_value (para, pCARDBACKUPKEY))) + key_from_hexgrip = get_parameter_value (para, pSUBKEYGRIP); + if (key_from_hexgrip) + err = do_create_from_keygrip (ctrl, subkey_algo, key_from_hexgrip, + pub_root, timestamp, + get_parameter_u32 (para, pSUBKEYEXPIRE), + 1); + else if (!card || (s = get_parameter_value (para, pCARDBACKUPKEY))) { - err = do_create (get_parameter_algo (para, pSUBKEYTYPE, NULL), + err = do_create (subkey_algo, get_parameter_uint (para, pSUBKEYLENGTH), get_parameter_value (para, pSUBKEYCURVE), pub_root, @@ -4736,9 +4745,7 @@ do_generate_keypair (ctrl_t ctrl, struct para_data_s *para, } else { - err = gen_card_key (2, get_parameter_algo (para, pSUBKEYTYPE, NULL), - 0, pub_root, ×tamp, - get_parameter_u32 (para, pKEYEXPIRE)); + err = gen_card_key (2, subkey_algo, 0, pub_root, ×tamp, expire); } if (!err) From 78a6d0ce88ae14d8324fbab3aee3286b17e49259 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 6 Nov 2017 13:57:30 +0100 Subject: [PATCH 12/26] agent: New option --s2k-count. * agent/agent.h (opt): New field 's2k_count'. * agent/gpg-agent.c (oS2KCount): New enum value. (opts): New option --s2k-count. (parse_rereadable_options): Set opt.s2k_count. -- This option is useful to speed up the starting of gpg-agent and in cases where the auto-calibration runs into problems due to a broken time measurement facility. Signed-off-by: Werner Koch (cherry picked from commit f7212f1d11aad5d910d2c77b2e5c6ab31a0e786e) --- agent/agent.h | 4 ++++ agent/gpg-agent.c | 9 +++++++++ agent/protect.c | 3 +++ doc/gpg-agent.texi | 14 ++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/agent/agent.h b/agent/agent.h index 7bb46faa1..19f9f4997 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -171,6 +171,10 @@ struct /* The digest algorithm to use for ssh fingerprints when * communicating with the user. */ int ssh_fingerprint_digest; + + /* The value of the option --s2k-count. If this option is not given + * or 0 an auto-calibrated value is used. */ + unsigned long s2k_count; } opt; diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index 030d1da83..2e19d19c1 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -134,6 +134,8 @@ enum cmd_and_opt_values oPuttySupport, oDisableScdaemon, oDisableCheckOwnSocket, + oS2KCount, + oWriteEnvFile }; @@ -248,6 +250,8 @@ static ARGPARSE_OPTS opts[] = { ), ARGPARSE_s_n (oEnableExtendedKeyFormat, "enable-extended-key-format", "@"), + ARGPARSE_s_u (oS2KCount, "s2k-count", "@"), + /* Dummy options for backward compatibility. */ ARGPARSE_o_s (oWriteEnvFile, "write-env-file", "@"), ARGPARSE_s_n (oUseStandardSocket, "use-standard-socket", "@"), @@ -819,6 +823,7 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread) disable_check_own_socket = 0; /* Note: When changing the next line, change also gpgconf_list. */ opt.ssh_fingerprint_digest = GCRY_MD_MD5; + opt.s2k_count = 0; return 1; } @@ -910,6 +915,10 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread) opt.ssh_fingerprint_digest = i; break; + case oS2KCount: + opt.s2k_count = pargs->r.ret_ulong; + break; + default: return 0; /* not handled */ } diff --git a/agent/protect.c b/agent/protect.c index c257861e2..ab26220f5 100644 --- a/agent/protect.c +++ b/agent/protect.c @@ -198,6 +198,9 @@ get_standard_s2k_count (void) { static unsigned long count; + if (opt.s2k_count) + return opt.s2k_count < 65536 ? 65536 : opt.s2k_count; + if (!count) count = calibrate_s2k_count (); diff --git a/doc/gpg-agent.texi b/doc/gpg-agent.texi index d7a562af1..6579622d8 100644 --- a/doc/gpg-agent.texi +++ b/doc/gpg-agent.texi @@ -648,6 +648,19 @@ Select the digest algorithm used to compute ssh fingerprints that are communicated to the user, e.g. in pinentry dialogs. OpenSSH has transitioned from using MD5 to the more secure SHA256. +@item --s2k-count @var{n} +@opindex s2k-count +Specify the iteration count used to protect the passphrase. This +option can be used to override the auto-calibration done by default. +This auto-calibration computes a count which requires 100ms to mangle +a given passphrase. To view the auto-calibrated count do not use this +option (or use 0 for @var{n}) and run this command: + +@example +gpg-connect-agent 'GETINFO s2k_count' /bye +@end example + + @end table All the long options may also be given in the configuration file after @@ -813,6 +826,7 @@ again. Only certain options are honored: @code{quiet}, @code{pinentry-invisible-char}, @code{default-cache-ttl}, @code{max-cache-ttl}, @code{ignore-cache-for-signing}, +@code{s2k-count}, @code{no-allow-external-cache}, @code{allow-emacs-pinentry}, @code{no-allow-mark-trusted}, @code{disable-scdaemon}, and @code{disable-check-own-socket}. @code{scdaemon-program} is also From 3607ab2cf382296cb398a92d5ec792239960bf7b Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 6 Nov 2017 14:20:03 +0100 Subject: [PATCH 13/26] agent: New GETINFO sub-commands "s2k_count_cal" and "s2k_time". * agent/command.c (cmd_getinfo): New sub-commands. * agent/protect.c (get_standard_s2k_count): Factor some code out to ... (get_calibrated_s2k_count): new. (get_standard_s2k_time): New. Signed-off-by: Werner Koch (cherry picked from commit 52d41c8b0f4af6278d18d8935399ddad16a26856) --- agent/agent.h | 2 ++ agent/command.c | 36 ++++++++++++++++++++++++++---------- agent/protect.c | 29 +++++++++++++++++++++++------ doc/gpg-agent.texi | 26 ++++++++++++++++++-------- 4 files changed, 69 insertions(+), 24 deletions(-) diff --git a/agent/agent.h b/agent/agent.h index 19f9f4997..c2d857959 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -485,8 +485,10 @@ gpg_error_t agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey, char **passphrase_addr); /*-- protect.c --*/ +unsigned long get_calibrated_s2k_count (void); unsigned long get_standard_s2k_count (void); unsigned char get_standard_s2k_count_rfc4880 (void); +unsigned long get_standard_s2k_time (void); int agent_protect (const unsigned char *plainkey, const char *passphrase, unsigned char **result, size_t *resultlen, unsigned long s2k_count, int use_ocb); diff --git a/agent/command.c b/agent/command.c index e20361a11..0916f886a 100644 --- a/agent/command.c +++ b/agent/command.c @@ -2843,20 +2843,22 @@ static const char hlp_getinfo[] = "Multipurpose function to return a variety of information.\n" "Supported values for WHAT are:\n" "\n" - " version - Return the version of the program.\n" - " pid - Return the process id of the server.\n" - " socket_name - Return the name of the socket.\n" + " version - Return the version of the program.\n" + " pid - Return the process id of the server.\n" + " socket_name - Return the name of the socket.\n" " ssh_socket_name - Return the name of the ssh socket.\n" - " scd_running - Return OK if the SCdaemon is already running.\n" - " s2k_count - Return the calibrated S2K count.\n" + " scd_running - Return OK if the SCdaemon is already running.\n" + " s2k_time - Return the time in milliseconds required for S2K.\n" + " s2k_count - Return the standard S2K count.\n" + " s2k_count_cal - Return the calibrated S2K count.\n" " std_env_names - List the names of the standard environment.\n" " std_session_env - List the standard session environment.\n" " std_startup_env - List the standard startup environment.\n" - " cmd_has_option\n" - " - Returns OK if the command CMD implements the option OPT.\n" - " connections - Return number of active connections.\n" - " jent_active - Returns OK if Libgcrypt's JENT is active.\n" - " restricted - Returns OK if the connection is in restricted mode.\n"; + " connections - Return number of active connections.\n" + " jent_active - Returns OK if Libgcrypt's JENT is active.\n" + " restricted - Returns OK if the connection is in restricted mode.\n" + " cmd_has_option CMD OPT\n" + " - Returns OK if command CMD has option OPT.\n"; static gpg_error_t cmd_getinfo (assuan_context_t ctx, char *line) { @@ -3014,6 +3016,20 @@ cmd_getinfo (assuan_context_t ctx, char *line) rc = gpg_error (GPG_ERR_FALSE); #endif } + else if (!strcmp (line, "s2k_count_cal")) + { + char numbuf[50]; + + snprintf (numbuf, sizeof numbuf, "%lu", get_calibrated_s2k_count ()); + rc = assuan_send_data (ctx, numbuf, strlen (numbuf)); + } + else if (!strcmp (line, "s2k_time")) + { + char numbuf[50]; + + snprintf (numbuf, sizeof numbuf, "%lu", get_standard_s2k_time ()); + rc = assuan_send_data (ctx, numbuf, strlen (numbuf)); + } else rc = set_error (GPG_ERR_ASS_PARAMETER, "unknown value for WHAT"); return rc; diff --git a/agent/protect.c b/agent/protect.c index ab26220f5..3073fc4de 100644 --- a/agent/protect.c +++ b/agent/protect.c @@ -191,16 +191,13 @@ calibrate_s2k_count (void) } - -/* Return the standard S2K count. */ +/* Return the calibrated S2K count. This is only public for the use + * of the Assuan getinfo s2k_count_cal command. */ unsigned long -get_standard_s2k_count (void) +get_calibrated_s2k_count (void) { static unsigned long count; - if (opt.s2k_count) - return opt.s2k_count < 65536 ? 65536 : opt.s2k_count; - if (!count) count = calibrate_s2k_count (); @@ -209,6 +206,26 @@ get_standard_s2k_count (void) } +/* Return the standard S2K count. */ +unsigned long +get_standard_s2k_count (void) +{ + if (opt.s2k_count) + return opt.s2k_count < 65536 ? 65536 : opt.s2k_count; + + return get_calibrated_s2k_count (); +} + + +/* Return the milliseconds required for the standard S2K + * operation. */ +unsigned long +get_standard_s2k_time (void) +{ + return calibrate_s2k_count_one (get_standard_s2k_count ()); +} + + /* Same as get_standard_s2k_count but return the count in the encoding as described by rfc4880. */ unsigned char diff --git a/doc/gpg-agent.texi b/doc/gpg-agent.texi index 6579622d8..afe280462 100644 --- a/doc/gpg-agent.texi +++ b/doc/gpg-agent.texi @@ -186,6 +186,9 @@ this convention). @node Agent Options @section Option Summary +Options may either be used on the command line or, after stripping off +the two leading dashes, in the configuration file. + @table @gnupgtabopt @anchor{option --options} @@ -193,8 +196,9 @@ this convention). @opindex options Reads configuration from @var{file} instead of from the default per-user configuration file. The default configuration file is named -@file{gpg-agent.conf} and expected in the @file{.gnupg} directory directly -below the home directory of the user. +@file{gpg-agent.conf} and expected in the @file{.gnupg} directory +directly below the home directory of the user. This option is ignored +if used in an options file. @anchor{option --homedir} @include opt-homedir.texi @@ -652,20 +656,26 @@ transitioned from using MD5 to the more secure SHA256. @opindex s2k-count Specify the iteration count used to protect the passphrase. This option can be used to override the auto-calibration done by default. -This auto-calibration computes a count which requires 100ms to mangle -a given passphrase. To view the auto-calibrated count do not use this -option (or use 0 for @var{n}) and run this command: +The auto-calibration computes a count which requires 100ms to mangle +a given passphrase. + +To view the actually used iteration count and the milliseconds +required for an S2K operation use: @example gpg-connect-agent 'GETINFO s2k_count' /bye +gpg-connect-agent 'GETINFO s2k_time' /bye +@end example + +To view the auto-calibrated count use: + +@example +gpg-connect-agent 'GETINFO s2k_count_cal' /bye @end example @end table -All the long options may also be given in the configuration file after -stripping off the two leading dashes. - @mansect files @node Agent Configuration From 96d441b315ec5c9f329596cfda28ac13a8bfa21a Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 7 Nov 2017 11:16:02 +0900 Subject: [PATCH 14/26] po: Update Japanese translation --- po/ja.po | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/po/ja.po b/po/ja.po index bdbc95320..26c032f4a 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,9 +8,9 @@ # msgid "" msgstr "" -"Project-Id-Version: gnupg 2.1.23\n" +"Project-Id-Version: gnupg 2.2.2\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-11-02 17:40+0100\n" +"PO-Revision-Date: 2017-11-07 11:11+0900\n" "Last-Translator: NIIBE Yutaka \n" "Language-Team: none\n" "Language: ja\n" @@ -3084,10 +3084,8 @@ msgstr "使えないユーザIDをコンパクトにし、すべての署名を msgid "Secret key is available.\n" msgstr "秘密鍵が利用できます。\n" -#, fuzzy -#| msgid "Secret key is available.\n" msgid "Secret subkeys are available.\n" -msgstr "秘密鍵が利用できます。\n" +msgstr "秘密副鍵が利用できます。\n" msgid "Need the secret key to do this.\n" msgstr "この実行には秘密鍵がいります。\n" From 1941287c9d2c9e666bad1bd330db169f0e3d6b6c Mon Sep 17 00:00:00 2001 From: Ineiev Date: Tue, 7 Nov 2017 09:28:04 +0100 Subject: [PATCH 15/26] po: Update Russian translation --- po/ru.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/po/ru.po b/po/ru.po index 3e3a0c505..a2d038352 100644 --- a/po/ru.po +++ b/po/ru.po @@ -500,8 +500,7 @@ msgid "no gpg-agent running in this session\n" msgstr "в этом сеансе агент gpg не работает\n" msgid "Usage: gpg-preset-passphrase [options] KEYGRIP (-h for help)\n" -msgstr "" -"Вызов: gpg-preset-passphrase [параметры] КОД_КЛЮЧА (-h - подсказка)\n" +msgstr "Вызов: gpg-preset-passphrase [параметры] КОД_КЛЮЧА (-h - подсказка)\n" msgid "" "Syntax: gpg-preset-passphrase [options] KEYGRIP\n" @@ -1717,8 +1716,7 @@ msgstr "(проверьте аргумент параметра '%s')\n" #, c-format msgid "Warning: '%s' should be a long key ID or a fingerprint\n" msgstr "" -"Внимание: '%s' должно быть длинным идентификатором или " -"отпечатком ключа\n" +"Внимание: '%s' должно быть длинным идентификатором или отпечатком ключа\n" #, c-format msgid "error looking up: %s\n" @@ -3628,7 +3626,9 @@ msgstr "Подключ %s уже отозван.\n" #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" -msgstr "Показ фотоидентификатора %s размера %ld для ключа %s (идентификатор пользователя %d)\n" +msgstr "" +"Показ фотоидентификатора %s размера %ld для ключа %s (идентификатор " +"пользователя %d)\n" #, c-format msgid "invalid value for option '%s'\n" @@ -6785,8 +6785,7 @@ msgid "" "Default operation depends on the input data\n" msgstr "" "Синтаксис: @GPGSM@ [параметры] [файлы]\n" -"Подписать, проверить, зашифровать или расшифровать по протоколу S/" -"MIME\n" +"Подписать, проверить, зашифровать или расшифровать по протоколу S/MIME\n" "Операция по умолчанию зависит от входных данных\n" #, c-format @@ -6919,7 +6918,8 @@ msgstr "" #, c-format msgid "hash algorithm %d (%s) for signer %d not supported; using %s\n" -msgstr "хеш-функция %d (%s) для пользователя %d не поддерживается; использую %s\n" +msgstr "" +"хеш-функция %d (%s) для пользователя %d не поддерживается; использую %s\n" #, c-format msgid "hash algorithm used for signer %d: %s (%s)\n" @@ -7517,7 +7517,8 @@ msgstr "принудительно использовать основной о msgid "Usage: dirmngr-client [options] [certfile|pattern] (-h for help)\n" msgstr "" -"Вызов: dirmngr-client [параметры] [файл_сертификата|шаблон] (-h - подсказка)\n" +"Вызов: dirmngr-client [параметры] [файл_сертификата|шаблон] (-h - " +"подсказка)\n" msgid "" "Syntax: dirmngr-client [options] [certfile|pattern]\n" @@ -8573,8 +8574,7 @@ msgid "class %s is not supported\n" msgstr "класс %s не поддерживается\n" msgid "Usage: gpg-check-pattern [options] patternfile (-h for help)\n" -msgstr "" -"Вызов: gpg-check-pattern [параметры] файл_образцов (-h - подсказка)\n" +msgstr "Вызов: gpg-check-pattern [параметры] файл_образцов (-h - подсказка)\n" msgid "" "Syntax: gpg-check-pattern [options] patternfile\n" From 23bfac6d1a8bd2d0af5a6fac3ba3a6e986d6c9e8 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 7 Nov 2017 09:21:10 +0100 Subject: [PATCH 16/26] speedo: Include software versions in the W32 README Signed-off-by: Werner Koch (cherry picked from commit f9f72ffbfa9fd7d1a7a1823697d116d76155b407) --- build-aux/speedo.mk | 20 +- build-aux/speedo/w32/README.txt | 25 ++- build-aux/speedo/w32/pkg-copyright.txt | 291 ++++++++++++++++++++++--- 3 files changed, 296 insertions(+), 40 deletions(-) diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk index b1c6ef8b8..7276787e1 100644 --- a/build-aux/speedo.mk +++ b/build-aux/speedo.mk @@ -757,6 +757,7 @@ define SETVARS git="$(call GETVAR,speedo_pkg_$(1)_git)"; \ gitref="$(call GETVAR,speedo_pkg_$(1)_gitref)"; \ tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \ + ver="$(call GETVAR,$(1)_ver)"; \ sha2="$(call GETVAR,$(1)_sha2)"; \ sha1="$(call GETVAR,$(1)_sha1)"; \ pkgsdir="$(sdir)/$(1)"; \ @@ -792,6 +793,7 @@ define SETVARS_W64 git="$(call GETVAR,speedo_pkg_$(1)_git)"; \ gitref="$(call GETVAR,speedo_pkg_$(1)_gitref)"; \ tar="$(call GETVAR,speedo_pkg_$(1)_tar)"; \ + ver="$(call GETVAR,$(1)_ver)"; \ sha2="$(call GETVAR,$(1)_sha2)"; \ sha1="$(call GETVAR,$(1)_sha1)"; \ pkgsdir="$(sdir)/$(1)"; \ @@ -1048,6 +1050,9 @@ endif touch $(stampdir)/stamp-w64-$(1)-03-install $(stampdir)/stamp-final-$(1): $(stampdir)/stamp-$(1)-03-install + @($(call SETVARS,$(1)); \ + printf "%-14s %-12s %s\n" $(1) "$$$${ver}" "$$$${sha1}" \ + >> $(bdir)/pkg-versions.txt) @echo "speedo: $(1) done" @touch $(stampdir)/stamp-final-$(1) @@ -1097,13 +1102,16 @@ endef # Insert the template for each source package. $(foreach spkg, $(speedo_spkgs), $(eval $(call SPKG_template,$(spkg)))) -$(stampdir)/stamp-final: $(stampdir)/stamp-directories +$(stampdir)/stamp-final: $(stampdir)/stamp-directories clean-pkg-versions ifeq ($(TARGETOS),w32) $(stampdir)/stamp-final: $(addprefix $(stampdir)/stamp-w64-final-,$(speedo_w64_build_list)) endif $(stampdir)/stamp-final: $(addprefix $(stampdir)/stamp-final-,$(speedo_build_list)) touch $(stampdir)/stamp-final +clean-pkg-versions: + @: >$(bdir)/pkg-versions.txt + all-speedo: $(stampdir)/stamp-final report-speedo: $(addprefix report-,$(speedo_build_list)) @@ -1143,12 +1151,18 @@ $(bdir)/NEWS.tmp: $(topsrc)/NEWS awk '/^Notewo/ {if(okay>1){exit}; okay++};okay {print $0}' \ <$(topsrc)/NEWS >$(bdir)/NEWS.tmp +# Sort the file with the package versions. +$(bdir)/pkg-versions.sorted: $(bdir)/pkg-versions.txt + grep -v '^gnupg ' <$(bdir)/pkg-versions.txt \ + | sort | uniq >$(bdir)/pkg-versions.sorted + $(bdir)/README.txt: $(bdir)/NEWS.tmp $(topsrc)/README $(w32src)/README.txt \ - $(w32src)/pkg-copyright.txt + $(w32src)/pkg-copyright.txt $(bdir)/pkg-versions.sorted sed -e '/^;.*/d;' \ -e '/!NEWSFILE!/{r $(bdir)/NEWS.tmp' -e 'd;}' \ -e '/!GNUPGREADME!/{r $(topsrc)/README' -e 'd;}' \ -e '/!PKG-COPYRIGHT!/{r $(w32src)/pkg-copyright.txt' -e 'd;}' \ + -e '/!PKG-VERSIONS!/{r $(bdir)/pkg-versions.sorted' -e 'd;}' \ -e 's,!VERSION!,$(INST_VERSION),g' \ < $(w32src)/README.txt \ | sed -e '/^#/d' \ @@ -1252,4 +1266,4 @@ check-tools: # Mark phony targets # .PHONY: all all-speedo report-speedo clean-stamps clean-speedo installer \ - w32_insthelpers check-tools + w32_insthelpers check-tools clean-pkg-versions diff --git a/build-aux/speedo/w32/README.txt b/build-aux/speedo/w32/README.txt index 0d72fe662..7c2909507 100644 --- a/build-aux/speedo/w32/README.txt +++ b/build-aux/speedo/w32/README.txt @@ -5,8 +5,9 @@ ;; replaced by the Makefile; those words are enclosed by exclamation ;; marks. - GNUPG for Windows - =================== + + GNU Privacy Guard for Windows + =============================== This is GnuPG for Windows, version !VERSION!. @@ -15,7 +16,8 @@ Content: 1. Important notes 2. Changes 3. GnuPG README file - 4. Legal notices + 4. Package versions + 5. Legal notices 1. Important Notes @@ -47,7 +49,7 @@ release. !NEWSFILE! -3. GnuPG README file +3. GnuPG README File ==================== Below is the README file as distributed with the GnuPG source. @@ -55,8 +57,19 @@ Below is the README file as distributed with the GnuPG source. !GNUPGREADME! -4. Legal notices pertaining to the individual packets -===================================================== +4. Software Versions of the Included Packages +============================================= + +GnuPG for Windows depends on several independet developed packages +which are part of the installation. These packages along with their +version numbers and the SHA-1 checksums of their compressed tarballs +are listed here: + +!PKG-VERSIONS! + + +5. Legal Notices Pertaining to the Individual Packages +====================================================== GnuPG for Windows consist of several independent developed packages, available under different license conditions. Most of these packages diff --git a/build-aux/speedo/w32/pkg-copyright.txt b/build-aux/speedo/w32/pkg-copyright.txt index a630c8e44..11056e883 100644 --- a/build-aux/speedo/w32/pkg-copyright.txt +++ b/build-aux/speedo/w32/pkg-copyright.txt @@ -1,11 +1,12 @@ Here is a list with collected copyright notices. For details see the -description of each individual package. [Compiled by wk 2016-06-17] +description of each individual package. [Compiled by wk 2017-11-07] -GnuPG is - Copyright (C) 1997-2016 Werner Koch - Copyright (C) 1994-2016 Free Software Foundation, Inc. - Copyright (C) 2003-2016 g10 Code GmbH +GNUPG is + + Copyright (C) 1997-2017 Werner Koch + Copyright (C) 1994-2017 Free Software Foundation, Inc. + Copyright (C) 2003-2017 g10 Code GmbH Copyright (C) 2002 Klarälvdalens Datakonsult AB Copyright (C) 1995-1997, 2000-2007 Ulrich Drepper Copyright (C) 1994 X Consortium @@ -32,31 +33,46 @@ GnuPG is License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA + along with this program; if not, see . -GPGME is - Copyright (C) 2000 Werner Koch (dd9jn) - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 g10 Code GmbH +LIBGCRYPT is - GPGME is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as + Copyright (C) 1989,1991-2017 Free Software Foundation, Inc. + Copyright (C) 1994 X Consortium + Copyright (C) 1996 L. Peter Deutsch + Copyright (C) 1997 Werner Koch + Copyright (C) 1998 The Internet Society + Copyright (C) 1996-1999 Peter Gutmann, Paul Kendall, and Chris Wedgwood + Copyright (C) 1996-2006 Peter Gutmann, Matt Thomlinson and Blake Coverett + Copyright (C) 2003 Nikos Mavroyanopoulos + Copyright (C) 2006-2007 NTT (Nippon Telegraph and Telephone Corporation) + Copyright (C) 2012-2017 g10 Code GmbH + Copyright (C) 2012 Simon Josefsson, Niels Möller + Copyright (c) 2012 Intel Corporation + Copyright (C) 2013 Christian Grothoff + Copyright (C) 2013-2017 Jussi Kivilinna + Copyright (C) 2013-2014 Dmitry Eremin-Solenikov + Copyright (C) 2014 Stephan Mueller + Copyright (C) 2017 Bundesamt für Sicherheit in der Informationstechnik + + Libgcrypt is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - GPGME 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 - Lesser General Public License for more details. + Libgcrypt 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see . - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . LIBGPG-ERROR is - Copyright (C) 2003, 2004 g10 Code GmbH + Copyright (C) 2003-2004, 2010, 2013-2017 g10 Code GmbH libgpg-error is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License @@ -72,9 +88,167 @@ LIBGPG-ERROR is along with this program; if not, see . +LIBASSUAN is + + Copyright (C) 1992-2013 Free Software Foundation, Inc. + Copyright (C) 1994 X Consortium + Copyright (C) 2000 Werner Koch (dd9jn) + Copyright (C) 2001-2016 g10 Code GmbH + Copyright (C) 2004 Simon Josefsson + + Assuan is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + Assuan 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see . + + +LIBKSBA is + + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2010, 2011 + 2012, 2013, 2014, 2015 g10 Code GmbH + Copyright (C) 2001, 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Fabio Fiorina + + The library and the header files are distributed under the following + terms (LGPLv3+/GPLv2+): + + KSBA 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. + + KSBA 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. + + The other parts (e.g. manual, build system, tests) are distributed + under the following terms (GPLv3): + + KSBA 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. + + KSBA 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. + + +NPTH is + + Copyright (C) 2011, 2012, 2014, 2015, 2017 g10 Code GmbH + + nPth is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + nPth 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see . + + +NTBTLS is + + Copyright (C) 2006-2014 Brainspark B.V. + Copyright (C) 2014-2017 g10 Code GmbH + + NTBTLS 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. + + NTBTLS 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 . + + +PINENTRY is + + Copyright (C) 1999 Robert Bihlmeyer + Copyright (C) 2001-2004, 2007-2008, 2010, 2015-2016 g10 Code GmbH + Copyright (C) 2002, 2008 Klarälvdalens Datakonsult AB (KDAB) + Copyright (C) 2004 by Albrecht Dreß + Copyright 2007 Ingo Klöcker + Copyright (C) 2014 Serge Voilokov + Copyright (C) 2015 Daiki Ueno + Copyright (C) 2015 Daniel Kahn Gillmor + Copyright 2016 Intevation GmbH + + PINENTRY 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 2 of the License, or + (at your option) any later version. + + PINENTRY 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 . + + +GPGME is + + Copyright (C) 1991-2013 Free Software Foundation, Inc. + Copyright (C) 2000-2001 Werner Koch + Copyright (C) 2001-2017 g10 Code GmbH + Copyright (C) 2002 Klarälvdalens Datakonsult AB + Copyright (C) 2004-2008 Igor Belyi + Copyright (C) 2002 John Goerzen + Copyright (C) 2014, 2015 Martin Albrecht + Copyright (C) 2015 Ben McGinnes + Copyright (C) 2015-2016 Bundesamt für Sicherheit in der Informationstechnik + Copyright (C) 2016 Intevation GmbH + + GPGME is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + GPGME 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + + NSIS is - Copyright (C) 1999-2005 Nullsoft, Inc. + Copyright 1999-2009 Nullsoft and Contributors + Copyright 2002-2008 Amir Szekely + Copyright 2003 Ramon This license applies to everything in the NSIS package, except where otherwise noted. @@ -100,19 +274,12 @@ NSIS is The user interface used with the installer is - Copyright (C) 2002-2005 Joost Verburg + Copyright 2002-2009 Joost Verburg [It is distributed along with NSIS and the same conditions as stated above apply] -ADNS is - - Copyright (C) 1997-2000,2003,2006 Ian Jackson - Copyright (C) 1999-2000,2003,2006 Tony Finch - Copyright (C) 1991 Massachusetts Institute of Technology - - TinySCHEME is part of the GnuPG package and is Copyright (c) 2000, Dimitrios Souflis @@ -146,7 +313,7 @@ TinySCHEME is part of the GnuPG package and is SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -libdns is part of the GnuPG package and is +LIBDNS is part of the GnuPG package and is Copyright (c) 2008, 2009, 2010, 2012-2016 William Ahern @@ -170,7 +337,69 @@ libdns is part of the GnuPG package and is USE OR OTHER DEALINGS IN THE SOFTWARE. -SQLite has +ZLIB is + + (C) 1995-2013 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + +BZIP2 is + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +SQLITE has been put into the public-domain by its author D. Richard Hipp: The author disclaims copyright to this source code. In place of From 30f21f8b0fa6844a9bba3f24dc41b3ac32170109 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 7 Nov 2017 10:02:53 +0100 Subject: [PATCH 17/26] dirmngr: Reduce default LDAP timeout to 15 seconds. * dirmngr/dirmngr.c (DEFAULT_LDAP_TIMEOUT): Change to 15. * dirmngr/dirmngr_ldap.c (DEFAULT_LDAP_TIMEOUT): Ditto. Signed-off-by: Werner Koch (cherry picked from commit ab7ac827041b5cd97bbca7a75b0930072dd6611f) GnuPG-bug-id: 3487 --- dirmngr/dirmngr.c | 2 +- dirmngr/dirmngr_ldap.c | 2 +- doc/dirmngr.texi | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c index 0d133c61b..5317c214a 100644 --- a/dirmngr/dirmngr.c +++ b/dirmngr/dirmngr.c @@ -279,7 +279,7 @@ static struct debug_flags_s debug_flags [] = }; #define DEFAULT_MAX_REPLIES 10 -#define DEFAULT_LDAP_TIMEOUT 100 /* arbitrary large timeout */ +#define DEFAULT_LDAP_TIMEOUT 15 /* seconds */ #define DEFAULT_CONNECT_TIMEOUT (15*1000) /* 15 seconds */ #define DEFAULT_CONNECT_QUICK_TIMEOUT ( 2*1000) /* 2 seconds */ diff --git a/dirmngr/dirmngr_ldap.c b/dirmngr/dirmngr_ldap.c index 5a9ae977c..5be4e5814 100644 --- a/dirmngr/dirmngr_ldap.c +++ b/dirmngr/dirmngr_ldap.c @@ -104,7 +104,7 @@ static void npth_protect (void) { } typedef struct timeval my_ldap_timeval_t; #endif -#define DEFAULT_LDAP_TIMEOUT 100 /* Arbitrary long timeout. */ +#define DEFAULT_LDAP_TIMEOUT 15 /* Arbitrary long timeout. */ /* Constants for the options. */ diff --git a/doc/dirmngr.texi b/doc/dirmngr.texi index eef78a8b7..9654a0e74 100644 --- a/doc/dirmngr.texi +++ b/doc/dirmngr.texi @@ -416,7 +416,7 @@ percent-escaped strings.} @item --ldaptimeout @var{secs} @opindex ldaptimeout Specify the number of seconds to wait for an LDAP query before timing -out. The default is currently 100 seconds. 0 will never timeout. +out. The default are 15 seconds. 0 will never timeout. @item --add-servers From 5bd515005032f9340bd73e4346bbd0aef8518074 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 7 Nov 2017 10:23:01 +0100 Subject: [PATCH 18/26] Release 2.2.2 Signed-off-by: Werner Koch --- AUTHORS | 175 ++------------------------------------------------------ NEWS | 43 +++++++++++++- README | 3 +- 3 files changed, 47 insertions(+), 174 deletions(-) diff --git a/AUTHORS b/AUTHORS index 99bb0e26e..d27dfb6f9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -38,182 +38,15 @@ List of Copyright holders Authors with a FSF copyright assignment ======================================= -Ales Nyakhaychyk Translations [be] - -Andrey Jivsov Assigns past and future changes for ECC. - (g10/ecdh.c. other changes to support ECC) - -Ben Kibbey Assigns past and future changes. - -Birger Langkjer Translations [da] - -Maxim Britov Translations [ru] - -Daniel Resare Translations [sv] -Per Tunedal Translations [sv] -Daniel Nylander Translations [sv] - -Daiki Ueno Assigns Past and Future Changes. - (changed:passphrase.c and related code) - -David Shaw Assigns past and future changes. - (all in keyserver/, - a lot of changes in g10/ see the ChangeLog, - bug fixes here and there) - -Dokianakis Theofanis Translations [el] - -Edmund GRIMLEY EVANS Translations [eo] - -Florian Weimer Assigns past and future changes - (changed:g10/parse-packet.c, include/iobuf.h, util/iobuf.c) - -g10 Code GmbH Assigns past and future changes - (all work since 2001 as indicated by mail addresses in ChangeLogs) - -Gaël Quéri Translations [fr] - (fixed a lot of typos) - -Gregory Steuck Translations [ru] - -Nagy Ferenc László Translations [hu] - -Ivo Timmermans Translations [nl] - -Jacobo Tarri'o Barreiro Translations [gl] - -Janusz Aleksander Urbanowicz Translations [pl] -Jakub Bogusz Translations [pl] - -Jedi Lin Translations [zh-tw] - -Jouni Hiltunen Translations [fi] -Tommi Vainikainen Translations [fi] - -Laurentiu Buzdugan Translations [ro] - -Magda Procha'zkova' Translations [cs] - -Michael Roth Assigns changes. - (wrote cipher/des.c., changes and bug fixes all over the place) - -Michal Majer Translations [sk] - -Marco d'Itri Translations [it] - -Marcus Brinkmann - (gpgconf and fixes all over the place) - -Matthew Skala Disclaimer - (wrote cipher/twofish.c) - -Moritz Schulte - (ssh support gpg-agent) - -Niklas Hernaeus Disclaimer - (weak key patches) - -Nilgun Belma Buguner Translations [tr] - -Nils Ellmenreich - Assigns past and future changes - (configure.in, cipher/rndlinux.c, FAQ) - -Paul Eggert - (configuration macros for LFS) - -Pavel I. Shajdo Translations [ru] - (man pages) - -Pedro Morais Translations [pt_PT] - -Rémi Guyomarch Assigns past and future changes. - (g10/compress.c, g10/encr-data.c, - g10/free-packet.c, g10/mdfilter.c, g10/plaintext.c, util/iobuf.c) - -Stefan Bellon Assigns past and future changes. - (All patches to support RISC OS) - -Timo Schulz Assigns past and future changes. - (util/w32reg.c, g10/passphrase.c, g10/hkp.c) - -Tedi Heriyanto Translations [id] - -Thiago Jung Bauermann Translations [pt_BR] -Rafael Caetano dos Santos Translations [pt_BR] - -Toomas Soome Translations [et] - -Urko Lusa Translations [es_ES] - -Walter Koch Translations [de] - -Werner Koch Assigns GNU Privacy Guard and future changes. - (started the whole thing, wrote the S/MIME extensions, the - smartcard daemon and the gpg-agent) - -Yosiaki IIDA Translations [ja] - -Yuri Chornoivan, yurchor at ukr dot net: Translations [uk] - -Yutaka Niibe Assigns Past and Future Changes - (scd/) +The list of authors who signed a FSF copyright assignment is kept in +the GIT master branch's copy of this file. Authors with a DCO ================== -Andre Heinecke -2014-09-19:4525694.FcpLvWDUFT@esus: - -Andreas Schwier -2014-07-22:53CED1D8.1010306@cardcontact.de: - -Christian Aistleitner -2013-05-26:20130626112332.GA2228@quelltextlich.at: - -Damien Goutte-Gattat -2015-01-17:54BA49AA.2040708@incenp.org: - -Daniel Kahn Gillmor -2014-09-24:87oau6w9q7.fsf@alice.fifthhorseman.net: - -Hans of Guardian -2013-06-26:D84473D7-F3F7-43D5-A9CE-16580B88D574@guardianproject.info: - -Ineiev -2017-05-09:20170509121611.GH25850@gnu.org: - -Jonas Borgström -2013-08-29:521F1E7A.5080602@borgstrom.se: - -Joshua Rogers -2014-12-22:5497FE75.7010503@internot.info: - -Kyle Butt -2013-05-29:CAAODAYLbCtqOG6msLLL0UTdASKWT6u2ptxsgUQ1JpusBESBoNQ@mail.gmail.com: - -Stefan Tomanek -2014-01-30:20140129234449.GY30808@zirkel.wertarbyte.de: - -Tobias Mueller -2016-11-23:1479937342.11180.3.camel@cryptobitch.de: - -Werner Koch -2013-03-29:87620ahchj.fsf@vigenere.g10code.de: - -William L. Thomson Jr. -2017-05-23:assp.0316398ca8.20170523093623.00a17d03@o-sinc.com: - -Yann E. MORIN -2016-07-10:20160710093202.GA3688@free.fr: - -Arnaud Fontaine -2016-10-17:580484F4.8040806@ssi.gouv.fr: - -Phil Pennock -Phil Pennock -2017-01-19:20170119061225.GA26207@breadbox.private.spodhuis.org: +The list of authors who signed the Developer's Certificate of Origin +is kept in the GIT master branch's copy of this file. Other authors diff --git a/NEWS b/NEWS index 2dd4e53a0..0ffff2fbd 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,45 @@ -Noteworthy changes in version 2.2.2 (unreleased) +Noteworthy changes in version 2.2.2 (2017-11-07) ------------------------------------------------ + * gpg: Avoid duplicate key imports by concurrently running gpg + processes. [#3446] + + * gpg: Fix creating on-disk subkey with on-card primary key. [#3280] + + * gpg: Fix validity retrieval for multiple keyrings. [Debian#878812] + + * gpg: Fix --dry-run and import option show-only for secret keys. + + * gpg: Print "sec" or "sbb" for secret keys with import option + import-show. [#3431] + + * gpg: Make import less verbose. [#3397] + + * gpg: Add alias "Key-Grip" for parameter "Keygrip" and new + parameter "Subkey-Grip" to unattended key generation. [#3478] + + * gpg: Improve "factory-reset" command for OpenPGP cards. [#3286] + + * gpg: Ease switching Gnuk tokens into ECC mode by using the magic + keysize value 25519. + + * gpgsm: Fix --with-colon listing in crt records for fields > 12. + + * gpgsm: Do not expect X.509 keyids to be unique. [#1644] + + * agent: Fix stucked Pinentry when using --max-passphrase-days. [#3190] + + * agent: New option --s2k-count. [#3276 (workaround)] + + * dirmngr: Do not follow https-to-http redirects. [#3436] + + * dirmngr: Reduce default LDAP timeout from 100 to 15 seconds. [#3487] + + * gpgconf: Ignore non-installed components for commands + --apply-profile and --apply-defaults. [#3313] + + * Add configure option --enable-werror. [#2423] + Noteworthy changes in version 2.2.1 (2017-09-19) ------------------------------------------------ @@ -23,6 +62,8 @@ Noteworthy changes in version 2.2.1 (2017-09-19) certificates are configured. If build with GNUTLS, this was already the case. + See-also: gnupg-announce/2017q3/000415.html + Noteworthy changes in version 2.2.0 (2017-08-28) ------------------------------------------------ diff --git a/README b/README index 6cd4ddb7d..dd66dabad 100644 --- a/README +++ b/README @@ -26,8 +26,7 @@ Note that the 2.0 series of GnuPG will reach end-of-life on 2017-12-31. It is not possible to install a 2.2.x version along - with any 2.0.x version. However, it is possible to install GnuPG - 1.4 along with any 2.x version. + with any 2.0.x version. * BUILD INSTRUCTIONS From 6530aff6923b118fad39f9e29c7357370cae650c Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 7 Nov 2017 11:04:44 +0100 Subject: [PATCH 19/26] Post release updates. -- --- NEWS | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 0ffff2fbd..ce6c5d787 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +Noteworthy changes in version 2.2.3 (unreleased) +------------------------------------------------ + + Noteworthy changes in version 2.2.2 (2017-11-07) ------------------------------------------------ diff --git a/configure.ac b/configure.ac index dc1fc1afd..227b57f78 100644 --- a/configure.ac +++ b/configure.ac @@ -28,7 +28,7 @@ min_automake_version="1.14" m4_define([mym4_package],[gnupg]) m4_define([mym4_major], [2]) m4_define([mym4_minor], [2]) -m4_define([mym4_micro], [2]) +m4_define([mym4_micro], [3]) # 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 From 115a04f939de4d7f9322a01aa5500e475e98e61f Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Sat, 11 Nov 2017 18:42:06 +0800 Subject: [PATCH 20/26] po/da: Fix Danish confusion between "compressed" and "compromised" -- In https://bugs.debian.org/881393 , Jonas Smedegaard reports: > In option number 1, the word "komprimeret" means "compressed". > > I am pretty sure it should say "kompromitteret" instead, which means > "compromised". Debian-Bug-Id: 881393 Signed-off-by: Daniel Kahn Gillmor --- po/da.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/po/da.po b/po/da.po index bd6e9c5d4..abc12577e 100644 --- a/po/da.po +++ b/po/da.po @@ -4994,7 +4994,7 @@ msgid "Key is superseded" msgstr "Nøglen er blevet afløst" msgid "Key has been compromised" -msgstr "Nøglen er blevet komprimeret" +msgstr "Nøglen er blevet kompromitteret" msgid "Key is no longer used" msgstr "Nøglen bruges ikke længere" From 5ecef193bc2144e6d51a6bd5727bfd08a0d28b66 Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Tue, 14 Nov 2017 12:24:52 +0100 Subject: [PATCH 21/26] sm, w32: Fix initial keybox creation * sm/keydb.c (maybe_create_keybox): Open new keybox in bin mode. -- As the header contains a timestamp we will have the conversion problems if the keybox is not opened in binary mode. Signed-off-by: Andre Heinecke --- sm/keydb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sm/keydb.c b/sm/keydb.c index 87fc12d0e..d85679a3b 100644 --- a/sm/keydb.c +++ b/sm/keydb.c @@ -205,7 +205,7 @@ maybe_create_keybox (char *filename, int force, int *r_created) /* The file does not yet exist, create it now. */ oldmask = umask (077); - fp = fopen (filename, "w"); + fp = fopen (filename, "wb"); if (!fp) { rc = gpg_error_from_syserror (); From b062ea5bc25157c942047b3fe7f5182a06106340 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 15 Nov 2017 08:47:32 +0100 Subject: [PATCH 22/26] gpg: Print AKL info only in verbose mode. * g10/getkey.c (get_pubkey_byname): Print info only in verbose mode. -- GnuPG-bug-id: 3504 Signed-off-by: Werner Koch --- g10/getkey.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/g10/getkey.c b/g10/getkey.c index c58e8ff2c..f73e44326 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1448,8 +1448,9 @@ get_pubkey_byname (ctrl_t ctrl, GETKEY_CTX * retctx, PKT_public_key * pk, if (!rc) { /* Key found. */ - log_info (_("automatically retrieved '%s' via %s\n"), - name, mechanism); + if (opt.verbose) + log_info (_("automatically retrieved '%s' via %s\n"), + name, mechanism); break; } if (gpg_err_code (rc) != GPG_ERR_NO_PUBKEY From 49635b454b010ec63a30b104af48a49504af7753 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Tue, 14 Nov 2017 15:30:34 +0000 Subject: [PATCH 23/26] doc: expand documentation of PROGRESS message -- This answers two questions that I was only able to answer by examining each site where PROGRESS messages are emitted, and fixes a typo. Signed-off-by: Will Thompson --- doc/DETAILS | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/DETAILS b/doc/DETAILS index 0be55f4d6..e683e90a2 100644 --- a/doc/DETAILS +++ b/doc/DETAILS @@ -1041,15 +1041,16 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: - 4 :: Key is stored on a smartcard. *** PROGRESS [] - Used by the primegen and Public key functions to indicate + Used by the primegen and public key functions to indicate progress. is the character displayed with no --status-fd enabled, with the linefeed replaced by an 'X'. is the current amount done and is amount to be done; a of - 0 indicates that the total amount is not known. The condition + 0 indicates that the total amount is not known. Both are + non-negative integers. The condition : TOTAL && CUR == TOTAL may be used to detect the end of an operation. - Well known values for WHAT are: + Well known values for are: - pk_dsa :: DSA key generation - pk_elg :: Elgamal key generation @@ -1064,7 +1065,9 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: the data of a smartcard. - card_busy :: A smartcard is still working - is sometines used to describe the units for and + When refers to a file path, it may be truncated. + + is sometimes used to describe the units for and . For example "B", "KiB", or "MiB". *** BACKUP_KEY_CREATED From 1faf8187f9f178ca0c7232a473b41757b613d4db Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Tue, 14 Nov 2017 15:34:34 +0000 Subject: [PATCH 24/26] doc: fix NEWSIG documentation -- 08c82b1 introduced one optional argument for this status message. Due to an apparent editing error, the sentence fragment "arguments are currently defined." was left in the documentation. Signed-off-by: Will Thompson --- doc/DETAILS | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/DETAILS b/doc/DETAILS index e683e90a2..e54e8a0f7 100644 --- a/doc/DETAILS +++ b/doc/DETAILS @@ -394,9 +394,8 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: *** NEWSIG [] Is issued right before a signature verification starts. This is useful to define a context for parsing ERROR status messages. - arguments are currently defined. If SIGNERS_UID is given and is - not "-" this is the percent escape value of the OpenPGP Signer's - User ID signature sub-packet. + If SIGNERS_UID is given and is not "-" this is the percent-escaped + value of the OpenPGP Signer's User ID signature sub-packet. *** GOODSIG The signature with the keyid is good. For each signature only one From 878b8bfdcc3a8becfc46b9287a2d14cd3c875f28 Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Wed, 15 Nov 2017 09:54:05 +0100 Subject: [PATCH 25/26] gpgtar: Prefer --set-filename over implicit name * tools/gpgtar-extract.c: Prefer opt.filename over filename for the directory prefix. -- If you would extract from stdin (filename -) and use set-filename to provide a real filename the "-" would be used for the directory name. With this change an explicit filename is prefered. GnuPG-Bug-Id: T3500 Signed-off-by: Andre Heinecke --- tools/gpgtar-extract.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c index b0e17cb10..8613d193f 100644 --- a/tools/gpgtar-extract.c +++ b/tools/gpgtar-extract.c @@ -345,15 +345,7 @@ gpgtar_extract (const char *filename, int decrypt) dirname = xtrystrdup (opt.directory); else { - if (filename) - { - dirprefix = strrchr (filename, '/'); - if (dirprefix) - dirprefix++; - else - dirprefix = filename; - } - else if (opt.filename) + if (opt.filename) { dirprefix = strrchr (opt.filename, '/'); if (dirprefix) @@ -361,6 +353,14 @@ gpgtar_extract (const char *filename, int decrypt) else dirprefix = opt.filename; } + else if (filename) + { + dirprefix = strrchr (filename, '/'); + if (dirprefix) + dirprefix++; + else + dirprefix = filename; + } if (!dirprefix || !*dirprefix) dirprefix = "GPGARCH"; From 1b6d1ac97638ebc5b5ce7d863b166e9b7669bf2f Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 15 Nov 2017 10:17:17 +0100 Subject: [PATCH 26/26] doc: Add man page for gpgtar -- This also removes the documentation for gpg-zip which is not distributed anymore. Signed-off-by: Werner Koch --- doc/Makefile.am | 4 +- doc/tools.texi | 136 +++++++++++++++++++++++++++++++++++------------- 2 files changed, 102 insertions(+), 38 deletions(-) diff --git a/doc/Makefile.am b/doc/Makefile.am index 89079b383..097a56061 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -91,7 +91,7 @@ myman_sources = gnupg7.texi gpg.texi gpgsm.texi gpg-agent.texi \ dirmngr.texi scdaemon.texi tools.texi wks.texi myman_pages = gpgsm.1 gpg-agent.1 dirmngr.8 scdaemon.1 \ watchgnupg.1 gpgconf.1 addgnupghome.8 gpg-preset-passphrase.1 \ - gpg-connect-agent.1 gpgparsemail.1 symcryptrun.1 \ + gpg-connect-agent.1 gpgparsemail.1 symcryptrun.1 gpgtar.1 \ applygnupgdefaults.8 gpg-wks-client.1 gpg-wks-server.1 \ dirmngr-client.1 if USE_GPG2_HACK @@ -110,7 +110,7 @@ CLEANFILES = yat2m mkdefsinc defs.inc DISTCLEANFILES = gnupg.tmp gnupg.ops yat2m-stamp.tmp yat2m-stamp \ gnupg-card-architecture.eps \ gnupg-module-overview.eps \ - $(myman_pages) gpg-zip.1 gnupg.7 + $(myman_pages) gnupg.7 yat2m: yat2m.c $(CC_FOR_BUILD) -o $@ $(srcdir)/yat2m.c diff --git a/doc/tools.texi b/doc/tools.texi index 332fb01b3..5104beaa5 100644 --- a/doc/tools.texi +++ b/doc/tools.texi @@ -20,7 +20,7 @@ GnuPG comes with a couple of smaller tools: * dirmngr-client:: How to use the Dirmngr client tool. * 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. +* gpgtar:: Encrypt or sign files into an archive. @end menu @c @@ -1894,23 +1894,19 @@ The possible exit status codes of @command{symcryptrun} are: @c -@c GPG-ZIP +@c GPGTAR @c -@c The original manpage on which this section is based was written -@c by Colin Tuckley and Daniel Leidert -@c for the Debian distribution (but may be used by -@c others). -@manpage gpg-zip.1 -@node gpg-zip +@manpage gpgtar.1 +@node gpgtar @section Encrypt or sign files into an archive @ifset manverb -.B gpg-zip +.B gpgtar \- Encrypt or sign files into an archive @end ifset @mansect synopsis @ifset manverb -.B gpg-zip +.B gpgtar .RI [ options ] .I filename1 .I [ filename2, ... ] @@ -1919,61 +1915,130 @@ The possible exit status codes of @command{symcryptrun} are: @end ifset @mansect description -@command{gpg-zip} encrypts or signs files into an archive. It is an +@command{gpgtar} encrypts or signs files into an archive. It is an gpg-ized tar using the same format as used by PGP's PGP Zip. @manpause @noindent -@command{gpg-zip} is invoked this way: +@command{gpgtar} is invoked this way: @example -gpg-zip [options] @var{filename1} [@var{filename2}, ...] @var{directory} [@var{directory2}, ...] +gpgtar [options] @var{filename1} [@var{filename2}, ...] @var{directory} [@var{directory2}, ...] @end example @mansect options @noindent -@command{gpg-zip} understands these options: +@command{gpgtar} understands these options: @table @gnupgtabopt +@item --create +@opindex create +Put given files and directories into a vanilla ``ustar'' archive. + +@item --extract +@opindex extract +Extract all files from a vanilla ``ustar'' archive. + @item --encrypt @itemx -e @opindex encrypt -Encrypt data. This option may be combined with @option{--symmetric} (for output that may be decrypted via a secret key or a passphrase). +Encrypt given files and directories into an archive. This option may +be combined with option @option{--symmetric} for an archive that may +be decrypted via a secret key or a passphrase. @item --decrypt @itemx -d @opindex decrypt -Decrypt data. +Extract all files from an encrypted archive. + +@item --sign +@itemx -s +Make a signed archive from the given files and directories. Thsi can +be combined with option @option{--encrypt} to create a signed and then +encrypted archive. + +@item --list-archive +@itemx -t +@opindex list-archive +List the contents of the specified archive. @item --symmetric @itemx -c Encrypt with a symmetric cipher using a passphrase. The default -symmetric cipher used is CAST5, but may be chosen with the +symmetric cipher used is @value{GPGSYMENCALGO}, but may be chosen with the @option{--cipher-algo} option to @command{gpg}. -@item --sign -@itemx -s -Make a signature. See @command{gpg}. - @item --recipient @var{user} @itemx -r @var{user} @opindex recipient -Encrypt for user id @var{user}. See @command{gpg}. +Encrypt for user id @var{user}. For details see @command{gpg}. @item --local-user @var{user} @itemx -u @var{user} @opindex local-user -Use @var{user} as the key to sign with. See @command{gpg}. - -@item --list-archive -@opindex list-archive -List the contents of the specified archive. +Use @var{user} as the key to sign with. For details see @command{gpg}. @item --output @var{file} @itemx -o @var{file} @opindex output -Write output to specified file @var{file}. +Write the archive to the specified file @var{file}. + +@item --verbose +@itemx -v +@opindex verbose +Enable extra informational output. + +@item --quiet +@itemx -q +@opindex quiet +Try to be as quiet as possible. + +@item --skip-crypto +@opindex skip-crypto +Skip all crypto operations and create or extract vanilla ``ustar'' +archives. + +@item --dry-run +@opindex dry-run +Do not actually output the extracted files. + +@item --directory @var{dir} +@itemx -C @var{dir} +@opindex directory +Extract the files into the directory @var{dir}. The +default is to take the directory name from +the input filename. If no input filename is known a directory named +@file{GPGARCH} is used. + +@item --files-from @var{file} +@itemx -T @var{file} +Take the file names to work from the file @var{file}; one file per +line. + +@item --null +@opindex null +Modify option @option{--files-from} to use a binary nul instead of a +linefeed to separate file names. + +@item --openpgp +@opindex openpgp +This option has no effect becuase OpenPGP encryption and signing is +the default. + +@item --cms +@opindex cms +This option is reserved and shall not be used. It will eventually be +used to encrypt or sign using the CMS protocol; but that is not yet +implemented. + + +@item --set-filename @var{file} +@opindex set-filename +Use the last component of @var{file} as the output directory. The +default is to take the directory name from the input filename. If no +input filename is known a directory named @file{GPGARCH} is used. +This option is deprecated in favor of option @option{--directory}. @item --gpg @var{gpgcmd} @opindex gpg @@ -1981,15 +2046,14 @@ Use the specified command @var{gpgcmd} instead of @command{gpg}. @item --gpg-args @var{args} @opindex gpg-args -Pass the specified options to @command{gpg}. - -@item --tar @var{tarcmd} -@opindex tar -Use the specified command @var{tarcmd} instead of @command{tar}. +Pass the specified extra options to @command{gpg}. @item --tar-args @var{args} @opindex tar-args -Pass the specified options to @command{tar}. +Assume @var{args} are standard options of the command @command{tar} +and parse them. The only supported tar options are "--directory", +"--files-from", and "--null" This is an obsolete options because those +supported tar options can also be given directly. @item --version @opindex version @@ -2017,14 +2081,14 @@ Encrypt the contents of directory @file{mydocs} for user Bob to file @file{test1}: @example -gpg-zip --encrypt --output test1 --gpg-args -r Bob mydocs +gpgtar --encrypt --output test1 -r Bob mydocs @end example @noindent List the contents of archive @file{test1}: @example -gpg-zip --list-archive test1 +gpgtar --list-archive test1 @end example