1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-21 10:09:57 +01:00

Merge branch 'master' into gniibe/t6275

This commit is contained in:
NIIBE Yutaka 2023-05-01 12:04:18 +09:00
commit 7cadbf4e18
No known key found for this signature in database
GPG Key ID: 640114AF89DE6054
60 changed files with 3755 additions and 803 deletions

View File

@ -55,6 +55,7 @@ EXTRA_DIST = build-aux/config.rpath build-aux/potomo autogen.sh autogen.rc \
build-aux/speedo/w32/pango.modules \
build-aux/speedo/w32/gdk-pixbuf-loaders.cache \
build-aux/speedo/w32/exdll.h \
build-aux/speedo/w32/exdll.c \
build-aux/speedo/w32/README.txt \
build-aux/speedo/w32/gnupg-logo-150x57.bmp \
build-aux/speedo/w32/gnupg-logo-164x314.bmp \

35
NEWS
View File

@ -1,12 +1,19 @@
Noteworthy changes in version 2.4.1 (unreleased)
Noteworthy changes in version 2.4.2 (unreleased)
------------------------------------------------
Noteworthy changes in version 2.4.1 (2023-04-28)
------------------------------------------------
* If the ~/.gnupg directory does not exist, the keyboxd is now
automagically enabled.
automagically enabled. [rGd9e7488b17]
* gpg: New option --add-desig-revoker. [rG3d094e2bcf]
* gpg: New option --assert-signer.
* gpg: New option --assert-signer. [rGc9e95b8dee]
* gpg: New command --quick-add-adsk and other ADSK features.
[T6395, https://gnupg.org/blog/20230321-adsk.html]
* gpg: New list-option "show-unusable-sigs". Also show
"[self-signature]" instead of the user-id in key signature
@ -15,6 +22,11 @@ Noteworthy changes in version 2.4.1 (unreleased)
* gpg: For symmetric encryption the default S2K hash is now SHA256.
[T6367]
* gpg: Detect already compressed data also when using a pipe. Also
detect JPEG and PNG file formats. [T6332]
* gpg: New subcommand "openpgp" for --card-edit. [T6462]
* gpgsm: Verification of detached signatures does now strip trailing
zeroes from the input if --assume-binary is used. [rG2a13f7f9dc]
@ -22,12 +34,29 @@ Noteworthy changes in version 2.4.1 (unreleased)
using indefinite form length octets. This improves compatibility
with some PDF signature verification software. [rG8996b0b655]
* gpgtar: Emit progress status lines in create mode. [T6363]
* dirmngr: The LDAP modifyTimestamp is now returned by some
keyserver commands. [rG56d309133f]
* ssh: Allow specification of the order keys are presented to ssh.
See the man page entry for --enable-ssh-support. [T5996, T6212]
* gpg: Make list-options "show-sig-subpackets" work again.
Fixes regression in 2.4.0. [rG5a223303d7]
* gpg: Fix the keytocard command for Yubikeys. [T6378]
* gpg: Do not continue an export after a cancel for the primary key.
[T6093]
* gpg: Replace the --override-compliance-check hack by a real fix.
[T5655]
* gpgtar: Fix decryption with input taken from stdin. [T6355]
See-also: gnupg-announce/2023q2/000478.html
Release-info: https://dev.gnupg.org/T6454
Noteworthy changes in version 2.4.0 (2022-12-16)

View File

@ -2648,7 +2648,8 @@ ssh_send_available_keys (ctrl_t ctrl, estream_t key_blobs, u32 *r_key_counter)
/* Clamp LNR value and set the ordinal.
* Current use of ordinals:
* 1..99999 - inserted cards (right now only 1)
* 1..999 - low value Use-for-ssh.
* 1000..99999 - inserted cards (right now only 1000)
* 100000..199999 - listed in sshcontrol
* 200000..299999 - order taken from Use-for-ssh
*/
@ -2678,18 +2679,25 @@ ssh_send_available_keys (ctrl_t ctrl, estream_t key_blobs, u32 *r_key_counter)
* order of card keys (which are sorted by their s/n), we
* would need to get the use-for-ssh: value from the stub
* file and set an appropriate ordinal. */
order = 1;
order = 1000;
}
else if (is_ssh)
err = agent_public_key_from_file (ctrl, grip, &key_public);
else /* Examine the file if it's suitable for SSH. */
{
err = agent_ssh_key_from_file (ctrl, grip, &key_public, &order);
if (order < 0 || err)
if (err)
order = 0;
else if (order < 0)
{
order = -order;
if (order > 999)
order = 999;
}
else if (order > 99999)
order = 99999;
order += 200000;
order = 299999;
else
order += 200000;
}
if (err)
{

View File

@ -3175,9 +3175,10 @@ cmd_delete_key (assuan_context_t ctx, char *line)
#endif
static const char hlp_keytocard[] =
"KEYTOCARD [--force] <hexgrip> <serialno> <keyref> [<timestamp>]\n"
"KEYTOCARD [--force] <hexgrip> <serialno> <keyref> [<timestamp> [<ecdh>]]\n"
"\n"
"TIMESTAMP is required for OpenPGP and defaults to the Epoch. The\n"
"TIMESTAMP is required for OpenPGP and defaults to the Epoch.\n"
"ECDH are the hexified ECDH parameters for OpenPGP.\n"
"SERIALNO is used for checking; use \"-\" to disable the check.";
static gpg_error_t
cmd_keytocard (assuan_context_t ctx, char *line)
@ -3194,6 +3195,9 @@ cmd_keytocard (assuan_context_t ctx, char *line)
size_t keydatalen;
unsigned char *shadow_info = NULL;
time_t timestamp;
char *ecdh_params = NULL;
unsigned int ecdh_params_len;
unsigned int extralen1, extralen2;
if (ctrl->restricted)
return leave_cmd (ctx, gpg_error (GPG_ERR_FORBIDDEN));
@ -3240,10 +3244,38 @@ cmd_keytocard (assuan_context_t ctx, char *line)
/* Default to the creation time as stored in the private key. The
* parameter is here so that gpg can make sure that the timestamp as
* used for key creation (and thus the openPGP fingerprint) is
* used. */
* used. It is also important for OpenPGP cards to allow computing
* of the fingerprint. Same goes for the ECDH params. */
if (argc > 3)
timestamp = isotime2epoch (argv[3]);
{
timestamp = isotime2epoch (argv[3]);
if (argc > 4)
{
size_t n;
err = parse_hexstring (ctx, argv[4], &n);
if (err)
goto leave; /* Badly formatted ecdh params. */
n /= 2;
if (n < 4)
{
err = set_error (GPG_ERR_ASS_PARAMETER, "ecdh param too short");
goto leave;
}
ecdh_params_len = n;
ecdh_params = xtrymalloc (ecdh_params_len);
if (!ecdh_params)
{
err = gpg_error_from_syserror ();
goto leave;
}
if (hex2bin (argv[4], ecdh_params, ecdh_params_len) < 0)
{
err = set_error (GPG_ERR_BUG, "hex2bin");
goto leave;
}
}
}
else if (timestamp == (time_t)(-1))
timestamp = isotime2epoch ("19700101T000000");
@ -3254,9 +3286,12 @@ cmd_keytocard (assuan_context_t ctx, char *line)
}
/* Note: We can't use make_canon_sexp because we need to allocate a
* few extra bytes for our hack below. */
* few extra bytes for our hack below. The 20 for extralen2
* accounts for the sexp length of ecdh_params. */
keydatalen = gcry_sexp_sprint (s_skey, GCRYSEXP_FMT_CANON, NULL, 0);
keydata = xtrymalloc_secure (keydatalen + 30);
extralen1 = 30;
extralen2 = ecdh_params? (20+20+ecdh_params_len) : 0;
keydata = xtrymalloc_secure (keydatalen + extralen1 + extralen2);
if (keydata == NULL)
{
err = gpg_error_from_syserror ();
@ -3265,15 +3300,31 @@ cmd_keytocard (assuan_context_t ctx, char *line)
gcry_sexp_sprint (s_skey, GCRYSEXP_FMT_CANON, keydata, keydatalen);
gcry_sexp_release (s_skey);
s_skey = NULL;
keydatalen--; /* Decrement for last '\0'. */
/* Hack to insert the timestamp "created-at" into the private key. */
snprintf (keydata+keydatalen-1, 30, KEYTOCARD_TIMESTAMP_FORMAT, timestamp);
snprintf (keydata+keydatalen-1, extralen1, KEYTOCARD_TIMESTAMP_FORMAT,
timestamp);
keydatalen += 10 + 19 - 1;
/* Hack to insert the timestamp "ecdh-params" into the private key. */
if (ecdh_params)
{
snprintf (keydata+keydatalen-1, extralen2, "(11:ecdh-params%u:",
ecdh_params_len);
keydatalen += strlen (keydata+keydatalen-1) -1;
memcpy (keydata+keydatalen, ecdh_params, ecdh_params_len);
keydatalen += ecdh_params_len;
memcpy (keydata+keydatalen, "))", 3);
keydatalen += 2;
}
err = divert_writekey (ctrl, force, serialno, keyref, keydata, keydatalen);
xfree (keydata);
leave:
xfree (ecdh_params);
gcry_sexp_release (s_skey);
xfree (shadow_info);
return leave_cmd (ctx, err);

View File

@ -124,7 +124,13 @@ gpg-agent's ssh-agent implementation. This is thus the same as
putting the keygrip into the 'sshcontrol' file. Only one such item
should exist. If another non-zero value between 1 and 99999 is used,
this is taken to establish the order in which the keys are returned to
ssh; lower numbers are returned first.
ssh; lower numbers are returned first. If a negative value is used
this overrides currently active (inserted) cards and thus allows to
prefer on-disk keys over inserted cards. A value of -1 has the
highest priority; values are capped at -999 and have a lower priority
but still above the positive values, inserted cards or the order in
sshcontrol.
*** Use-for-p11
If given and the value is "yes" or "1" the key is allowed for use by

View File

@ -1340,10 +1340,14 @@ $(bdir)/README.txt: $(bdir)/NEWS.tmp $(topsrc)/README $(w32src)/README.txt \
| sed -e '/^#/d' \
| awk '{printf "%s\r\n", $$0}' >$(bdir)/README.txt
$(bdir)/g4wihelp.dll: $(w32src)/g4wihelp.c $(w32src)/exdll.h
$(bdir)/g4wihelp.dll: $(w32src)/g4wihelp.c $(w32src)/exdll.h $(w32src)/exdll.c
(set -e; cd $(bdir); \
$(W32CC) -I. -shared -O2 -o g4wihelp.dll $(w32src)/g4wihelp.c \
-lwinmm -lgdi32; \
$(W32CC) -DUNICODE -static-libgcc -I . -O2 -c \
-o exdll.o $(w32src)/exdll.c; \
$(W32CC) -DUNICODE -static-libgcc -I. -shared -O2 \
-o g4wihelp.dll $(w32src)/g4wihelp.c exdll.o \
-lwinmm -lgdi32 -luserenv \
-lshell32 -loleaut32 -lshlwapi -lmsimg32; \
$(STRIP) g4wihelp.dll)
w32_insthelpers: $(bdir)/g4wihelp.dll
@ -1372,8 +1376,7 @@ installer: all w32_insthelpers $(w32src)/inst-options.ini $(bdir)/README.txt
done; \
fi \
)
$(MAKENSIS) -V2 $$($(MAKENSIS) -version \
| grep -q ^v3 && echo "-INPUTCHARSET CP1252 ") \
$(MAKENSIS) -V2 \
-DINST_DIR=$(idir) \
-DINST6_DIR=$(idir6) \
-DBUILD_DIR=$(bdir) \

View File

@ -0,0 +1,286 @@
#include "exdll.h"
unsigned int g_stringsize;
stack_t **g_stacktop;
LPTSTR g_variables;
// utility functions (not required but often useful)
int NSISCALL popstring(LPTSTR str)
{
stack_t *th;
if (!g_stacktop || !*g_stacktop) return 1;
th=(*g_stacktop);
if (str) lstrcpy(str,th->text);
*g_stacktop = th->next;
GlobalFree((HGLOBAL)th);
return 0;
}
int NSISCALL popstringn(LPTSTR str, int maxlen)
{
stack_t *th;
if (!g_stacktop || !*g_stacktop) return 1;
th=(*g_stacktop);
if (str) lstrcpyn(str,th->text,maxlen?maxlen:g_stringsize);
*g_stacktop = th->next;
GlobalFree((HGLOBAL)th);
return 0;
}
void NSISCALL pushstring(LPCTSTR str)
{
stack_t *th;
if (!g_stacktop) return;
th=(stack_t*)GlobalAlloc(GPTR,(sizeof(stack_t)+(g_stringsize)*sizeof(*str)));
lstrcpyn(th->text,str,g_stringsize);
th->next=*g_stacktop;
*g_stacktop=th;
}
LPTSTR NSISCALL getuservariable(const int varnum)
{
if (!isvalidnsisvarindex(varnum)) return NULL;
return (LPWSTR)((wchar_t*)g_variables+varnum*g_stringsize);
}
void NSISCALL setuservariable(const int varnum, LPCTSTR var)
{
if (var && isvalidnsisvarindex(varnum))
lstrcpy((LPWSTR)((wchar_t*)g_variables + varnum*g_stringsize), var);
}
#ifdef UNICODE
int NSISCALL PopStringA(LPSTR ansiStr)
{
LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, g_stringsize*sizeof(WCHAR));
int rval = popstring(wideStr);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
GlobalFree((HGLOBAL)wideStr);
return rval;
}
int NSISCALL PopStringNA(LPSTR ansiStr, int maxlen)
{
int realLen = maxlen ? maxlen : g_stringsize;
LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, realLen*sizeof(WCHAR));
int rval = popstringn(wideStr, realLen);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, realLen, NULL, NULL);
GlobalFree((HGLOBAL)wideStr);
return rval;
}
void NSISCALL PushStringA(LPCSTR ansiStr)
{
LPWSTR wideStr = (LPWSTR) GlobalAlloc(GPTR, g_stringsize*sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
pushstring(wideStr);
GlobalFree((HGLOBAL)wideStr);
return;
}
void NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr)
{
lstrcpyW(wideStr, getuservariable(varnum));
}
void NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr)
{
LPWSTR wideStr = getuservariable(varnum);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
}
void NSISCALL SetUserVariableA(const int varnum, LPCSTR ansiStr)
{
if (ansiStr && isvalidnsisvarindex(varnum))
{
LPWSTR wideStr = (LPWSTR)((char*)g_variables + varnum * g_stringsize);
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
}
}
#else
// ANSI defs
int NSISCALL PopStringW(LPWSTR wideStr)
{
LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, g_stringsize);
int rval = popstring(ansiStr);
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
GlobalFree((HGLOBAL)ansiStr);
return rval;
}
int NSISCALL PopStringNW(LPWSTR wideStr, int maxlen)
{
int realLen = maxlen ? maxlen : g_stringsize;
LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, realLen);
int rval = popstringn(ansiStr, realLen);
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, realLen);
GlobalFree((HGLOBAL)ansiStr);
return rval;
}
void NSISCALL PushStringW(LPWSTR wideStr)
{
LPSTR ansiStr = (LPSTR) GlobalAlloc(GPTR, g_stringsize);
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
pushstring(ansiStr);
GlobalFree((HGLOBAL)ansiStr);
}
void NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr)
{
LPSTR ansiStr = getuservariable(varnum);
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
}
void NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr)
{
lstrcpyA(ansiStr, getuservariable(varnum));
}
void NSISCALL SetUserVariableW(const int varnum, LPCWSTR wideStr)
{
if (wideStr && isvalidnsisvarindex(varnum))
{
LPSTR ansiStr = (char*)g_variables + varnum * g_stringsize;
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
}
}
#endif
// playing with integers
INT_PTR NSISCALL nsishelper_str_to_ptr(LPCTSTR s)
{
INT_PTR v=0;
if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X')))
{
s++;
for (;;)
{
int c=*(++s);
if (c >= _T('0') && c <= _T('9')) c-=_T('0');
else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;
else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;
else break;
v<<=4;
v+=c;
}
}
else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0'))
{
for (;;)
{
int c=*(++s);
if (c >= _T('0') && c <= _T('7')) c-=_T('0');
else break;
v<<=3;
v+=c;
}
}
else
{
int sign=0;
if (*s == _T('-')) sign++; else s--;
for (;;)
{
int c=*(++s) - _T('0');
if (c < 0 || c > 9) break;
v*=10;
v+=c;
}
if (sign) v = -v;
}
return v;
}
unsigned int NSISCALL myatou(LPCTSTR s)
{
unsigned int v=0;
for (;;)
{
unsigned int c=*s++;
if (c >= _T('0') && c <= _T('9')) c-=_T('0');
else break;
v*=10;
v+=c;
}
return v;
}
int NSISCALL myatoi_or(LPCTSTR s)
{
int v=0;
if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X')))
{
s++;
for (;;)
{
int c=*(++s);
if (c >= _T('0') && c <= _T('9')) c-=_T('0');
else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;
else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;
else break;
v<<=4;
v+=c;
}
}
else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0'))
{
for (;;)
{
int c=*(++s);
if (c >= _T('0') && c <= _T('7')) c-=_T('0');
else break;
v<<=3;
v+=c;
}
}
else
{
int sign=0;
if (*s == _T('-')) sign++; else s--;
for (;;)
{
int c=*(++s) - _T('0');
if (c < 0 || c > 9) break;
v*=10;
v+=c;
}
if (sign) v = -v;
}
// Support for simple ORed expressions
if (*s == _T('|'))
{
v |= myatoi_or(s+1);
}
return v;
}
INT_PTR NSISCALL popintptr()
{
TCHAR buf[128];
if (popstringn(buf,COUNTOF(buf)))
return 0;
return nsishelper_str_to_ptr(buf);
}
int NSISCALL popint_or()
{
TCHAR buf[128];
if (popstringn(buf,COUNTOF(buf)))
return 0;
return myatoi_or(buf);
}
void NSISCALL pushintptr(INT_PTR value)
{
TCHAR buffer[30];
wsprintf(buffer, sizeof(void*) > 4 ? _T("%Id") : _T("%d"), value);
pushstring(buffer);
}

View File

@ -1,91 +1,47 @@
/* exdll.h for use with gpg4win
* Copyright (C) 1999-2005 Nullsoft, Inc.
*
* This license applies to everything in the NSIS package, except
* where otherwise noted.
*
* 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.
************************************************************
* 2005-11-14 wk Applied license text to original exdll.h file from
* NSIS 2.0.4 and did some formatting changes.
*/
#include <windows.h>
#ifndef ___NSIS_PLUGIN__H___
#define ___NSIS_PLUGIN__H___
#ifndef _EXDLL_H_
#define _EXDLL_H_
#ifdef __cplusplus
extern "C" {
#endif
/* only include this file from one place in your DLL. (it is all
static, if you use it in two places it will fail) */
#ifndef NSISCALL
# define NSISCALL __stdcall
#endif
#if !defined(_WIN32) && !defined(LPTSTR)
# define LPTSTR TCHAR*
#endif
#ifndef NSISCALL
# define NSISCALL WINAPI
#endif
#define EXDLL_INIT() { \
g_stringsize=string_size; \
g_stacktop=stacktop; \
g_variables=variables; }
/* For page showing plug-ins */
#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8)
#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd)
#define NOTIFY_BYE_BYE 'x'
enum NSPIM
{
NSPIM_UNLOAD,
NSPIM_GUIUNLOAD
};
typedef UINT_PTR (*NSISPLUGINCALLBACK)(enum NSPIM);
typedef struct _stack_t {
struct _stack_t *next;
char text[1]; /* This should be the length of string_size. */
#ifdef UNICODE
WCHAR text[1]; // this should be the length of g_stringsize when allocating
#else
char text[1];
#endif
} stack_t;
static unsigned int g_stringsize;
static stack_t **g_stacktop;
static char *g_variables;
static int __stdcall popstring(char *str, size_t maxlen); /* 0 on success, 1 on empty stack */
static void __stdcall pushstring(const char *str);
enum
{
INST_0, // $0
INST_1, // $1
INST_2, // $2
INST_3, // $3
INST_4, // $4
INST_5, // $5
INST_6, // $6
INST_7, // $7
INST_8, // $8
INST_9, // $9
INST_R0, // $R0
INST_R1, // $R1
INST_R2, // $R2
INST_R3, // $R3
INST_R4, // $R4
INST_R5, // $R5
INST_R6, // $R6
INST_R7, // $R7
INST_R8, // $R8
INST_R9, // $R9
INST_CMDLINE, // $CMDLINE
INST_INSTDIR, // $INSTDIR
INST_OUTDIR, // $OUTDIR
INST_EXEDIR, // $EXEDIR
INST_LANG, // $LANGUAGE
__INST_LAST
};
typedef struct {
int autoclose;
int all_user_var;
@ -94,58 +50,127 @@ typedef struct {
int exec_reboot;
int reboot_called;
int XXX_cur_insttype; /* deprecated */
int XXX_insttype_changed; /* deprecated */
int plugin_api_version; /* Used to be insttype_changed */
int silent;
int instdir_error;
int rtl;
int errlvl;
int alter_reg_view;
int status_update;
} exec_flags_t;
typedef struct {
exec_flags_t *exec_flags;
int (__stdcall *ExecuteCodeSegment)(int, HWND);
void (__stdcall *validate_filename)(LPTSTR);
int (__stdcall *RegisterPluginCallback)(HMODULE, NSISPLUGINCALLBACK);
} extra_parameters_t;
/* Utility functions (not required but often useful). */
static int __stdcall
popstring(char *str, size_t maxlen)
enum
{
stack_t *th;
if (!g_stacktop || !*g_stacktop)
return 1;
th=(*g_stacktop);
lstrcpyn (str, th->text, maxlen);
*g_stacktop = th->next;
GlobalFree((HGLOBAL)th);
return 0;
INST_0, // $0
INST_1, // $1
INST_2, // $2
INST_3, // $3
INST_4, // $4
INST_5, // $5
INST_6, // $6
INST_7, // $7
INST_8, // $8
INST_9, // $9
INST_R0, // $R0
INST_R1, // $R1
INST_R2, // $R2
INST_R3, // $R3
INST_R4, // $R4
INST_R5, // $R5
INST_R6, // $R6
INST_R7, // $R7
INST_R8, // $R8
INST_R9, // $R9
INST_CMDLINE, // $CMDLINE
INST_INSTDIR, // $INSTDIR
INST_OUTDIR, // $OUTDIR
INST_EXEDIR, // $EXEDIR
INST_LANG, // $LANGUAGE
__INST_LAST
};
extern unsigned int g_stringsize;
extern stack_t **g_stacktop;
extern LPTSTR g_variables;
void NSISCALL pushstring(LPCTSTR str);
void NSISCALL pushintptr(INT_PTR value);
#define pushint(v) pushintptr((INT_PTR)(v))
int NSISCALL popstring(LPTSTR str); // 0 on success, 1 on empty stack
int NSISCALL popstringn(LPTSTR str, int maxlen); // with length limit, pass 0 for g_stringsize
INT_PTR NSISCALL popintptr();
#define popint() ( (int) popintptr() )
int NSISCALL popint_or(); // with support for or'ing (2|4|8)
INT_PTR NSISCALL nsishelper_str_to_ptr(LPCTSTR s);
#define myatoi(s) ( (int) nsishelper_str_to_ptr(s) ) // converts a string to an integer
unsigned int NSISCALL myatou(LPCTSTR s); // converts a string to an unsigned integer, decimal only
int NSISCALL myatoi_or(LPCTSTR s); // with support for or'ing (2|4|8)
LPTSTR NSISCALL getuservariable(const int varnum);
void NSISCALL setuservariable(const int varnum, LPCTSTR var);
#ifdef UNICODE
#define PopStringW(x) popstring(x)
#define PushStringW(x) pushstring(x)
#define SetUserVariableW(x,y) setuservariable(x,y)
int NSISCALL PopStringA(LPSTR ansiStr);
int NSISCALL PopStringNA(LPSTR ansiStr, int maxlen);
void NSISCALL PushStringA(LPCSTR ansiStr);
void NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr);
void NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr);
void NSISCALL SetUserVariableA(const int varnum, LPCSTR ansiStr);
#else
// ANSI defs
#define PopStringA(x) popstring(x)
#define PushStringA(x) pushstring(x)
#define SetUserVariableA(x,y) setuservariable(x,y)
int NSISCALL PopStringW(LPWSTR wideStr);
void NSISCALL PushStringW(LPWSTR wideStr);
void NSISCALL GetUserVariableW(const int varnum, LPWSTR wideStr);
void NSISCALL GetUserVariableA(const int varnum, LPSTR ansiStr);
void NSISCALL SetUserVariableW(const int varnum, LPCWSTR wideStr);
#endif
#ifdef __cplusplus
}
#endif
static void __stdcall
pushstring(const char *str)
{
stack_t *th;
if (!g_stacktop) return;
th=(stack_t*)GlobalAlloc(GPTR,sizeof(stack_t)+g_stringsize);
lstrcpyn(th->text,str,g_stringsize);
th->next=*g_stacktop;
*g_stacktop=th;
}
#endif//!___NSIS_PLUGIN__H___
static char * __stdcall
getuservariable(const int varnum)
{
if (varnum < 0 || varnum >= __INST_LAST) return NULL;
return g_variables+varnum*g_stringsize;
}
#ifndef COUNTOF
#define COUNTOF(a) (sizeof(a)/sizeof(a[0]))
#endif
static void __stdcall
setuservariable(const int varnum, const char *var)
{
if (var != NULL && varnum >= 0 && varnum < __INST_LAST)
lstrcpy(g_variables + varnum*g_stringsize, var);
}
// minimal tchar.h emulation
#ifndef _T
# define _T TEXT
#endif
#if !defined(TCHAR) && !defined(_TCHAR_DEFINED)
# ifdef UNICODE
# define TCHAR WCHAR
# else
# define TCHAR char
# endif
#endif
#define isvalidnsisvarindex(varnum) ( ((unsigned int)(varnum)) < (__INST_LAST) )
#endif/*_EXDLL_H_*/
#define ERRORPRINTF(fmt, ...) \
{ \
char buf[512]; \
snprintf(buf, 511, "ERROR: " fmt, ##__VA_ARGS__); \
buf[511] = '\0'; \
OutputDebugStringA(buf); \
}

View File

@ -1,6 +1,7 @@
/* g4wihelp.c - NSIS Helper DLL used with gpg4win. -*- coding: latin-1; -*-
* Copyright (C) 2005 g10 Code GmbH
/* g4wihelp.c - NSIS Helper DLL used with gpg4win.
* Copyright (C) 2005, 2023 g10 Code GmbH
* Copyright (C) 2001 Justin Frankel
* Copyright (C) 2016, 2017 Intevation GmbH
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any
@ -23,22 +24,41 @@
************************************************************
* The code for the splash screen has been taken from the Splash
* plugin of the NSIS 2.04 distribution. That code comes without
* explicit copyright notices in the source files or author names, it
* explicit copyright notices in tyhe source files or author names, it
* seems that it has been written by Justin Frankel; not sure about
* the year, though. [wk 2005-11-28]
*
* Fixed some compiler warnings. [wk 2014-02-24].
* Merged code from GnuPG version. [wk 2023-04-24].
*
* Compile time macros:
* ENABLE_SLIDE_SHOW :: Define for Gpg4win.
*/
#include <stdio.h>
#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <stdio.h>
#include <string.h>
#include "exdll.h"
/* We keep some code here for documentation reasons. That code has not
* yet been converted to the Unicode NSIS plugin API. */
/* #define ENABLE_SOUND_GADGET 1 */
/* #define ENABLE_SPLASH_GADGET 1 */
/* #define ENABLE_SERVICE_MANAGEMENT 1 */
static HINSTANCE g_hInstance; /* Our Instance. */
static HWND g_hwndParent; /* Handle of parent window or NULL. */
static HBITMAP g_hbm; /* Handle of the splash image. */
static int sleepint; /* Milliseconds to show the spals image. */
#ifdef ENABLE_SLIDE_SHOW
void
slide_stop(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop);
#endif
/* Standard entry point for DLLs. */
int WINAPI
@ -46,6 +66,12 @@ DllMain (HANDLE hinst, DWORD reason, LPVOID reserved)
{
if (reason == DLL_PROCESS_ATTACH)
g_hInstance = hinst;
else if (reason == DLL_PROCESS_DETACH)
{
#ifdef ENABLE_SLIDE_SHOW
slide_stop (NULL, 0, NULL, NULL);
#endif
}
return TRUE;
}
@ -53,7 +79,7 @@ DllMain (HANDLE hinst, DWORD reason, LPVOID reserved)
/* Dummy function for testing. */
void __declspec(dllexport)
dummy (HWND hwndParent, int string_size, char *variables,
dummy (HWND hwndParent, int string_size, LPTSTR variables,
stack_t **stacktop, extra_parameters_t *extra)
{
g_hwndParent = hwndParent;
@ -67,21 +93,66 @@ dummy (HWND hwndParent, int string_size, char *variables,
// you should empty the stack of your parameters, and ONLY your
// parameters.
// do your stuff here
/* Let's dump the variables. */
{
char buf[1024];
snprintf (buf, sizeof buf, "$R0=%s\r\n$R1=%s\r\n",
getuservariable(INST_R0),
getuservariable(INST_R1));
MessageBox (g_hwndParent,buf,0,MB_OK);
char line[512];
char *p;
const unsigned char *s = (void*)g_variables;
int i,j;
snprintf (buf, sizeof buf,
"autoclose =%d\r\n"
for (i=0; i < string_size* __INST_LAST; i+=32, s += 32)
{
for (j=0; j < 32; j++)
if (s[j])
break;
if (j != 32)
{
p = line;
*p = 0;
snprintf (p, 10, "%05x: ", i);
p += strlen (p);
for (j=0; j < 32; j++)
{
snprintf (p, 10, "%02x", s[j]);
p += strlen (p);
}
strcat (p, " |");
p += strlen (p);
for (j=0; j < 32; j++)
{
if (s[j] >= 32 && s[j] < 127)
*p = s[j];
else
*p = '.';
p++;
}
strcat (p, "|");
OutputDebugStringA (line);
}
}
}
{
wchar_t buf[1024];
swprintf(buf, 1024,
L"stringsize=%d\r\n$0=%s\r\n$1=%s\r\n$R0=%s\r\n$R1=%s\r\n",
string_size,
getuservariable(INST_0),
getuservariable(INST_1),
getuservariable(INST_R0),
getuservariable(INST_R1));
MessageBoxW(g_hwndParent,buf,0,MB_OK);
swprintf (buf, 1024,
L"autoclose =%d\r\n"
"all_user_var =%d\r\n"
"exec_error =%d\r\n"
"abort =%d\r\n"
"exec_reboot =%d\r\n"
"reboot_called=%d\r\n"
"api_version =%d\r\n"
"silent =%d\r\n"
"instdir_error=%d\r\n"
"rtl =%d\r\n"
@ -92,30 +163,34 @@ dummy (HWND hwndParent, int string_size, char *variables,
extra->exec_flags->abort,
extra->exec_flags->exec_reboot,
extra->exec_flags->reboot_called,
extra->exec_flags->plugin_api_version,
extra->exec_flags->silent,
extra->exec_flags->instdir_error,
extra->exec_flags->rtl,
extra->exec_flags->errlvl);
MessageBox(g_hwndParent,buf,0,MB_OK);
MessageBoxW(g_hwndParent,buf,0,MB_OK);
}
}
void __declspec(dllexport)
runonce (HWND hwndParent, int string_size, char *variables,
runonce (HWND hwndParent, int string_size, LPTSTR variables,
stack_t **stacktop, extra_parameters_t *extra)
{
const char *result;
LPCWSTR result;
g_hwndParent = hwndParent;
EXDLL_INIT();
CreateMutexA (NULL, 0, getuservariable(INST_R0));
result = GetLastError ()? "1":"0";
CreateMutexW (NULL, 0, getuservariable(INST_R0));
result = GetLastError ()? L"1" : L"0";
setuservariable (INST_R0, result);
}
#ifdef ENABLE_SOUND_GADGET
void __declspec(dllexport)
playsound (HWND hwndParent, int string_size, char *variables,
stack_t **stacktop, extra_parameters_t *extra)
@ -139,8 +214,10 @@ stopsound (HWND hwndParent, int string_size, char *variables,
EXDLL_INIT();
PlaySound (NULL, NULL, 0);
}
#endif /*ENABLE_SOUND_GADGET*/
#ifdef ENABLE_SPLASH_GADGET
/* Windows procedure to control the splashimage. This one pauses the
execution until the sleep time is over or the user closes this
windows. */
@ -268,10 +345,10 @@ showsplash (HWND hwndParent, int string_size, char *variables,
}
UnregisterClass (classname, g_hInstance);
}
#endif /*ENABLE_SPLASH_GADGET*/
/* Service Management. */
#ifdef ENABLE_SERVICE_MANAGEMENT
/* Use this to report unexpected errors. FIXME: This is really not
very descriptive. */
void
@ -626,9 +703,8 @@ service_delete (HWND hwndParent, int string_size, char *variables,
setuservariable (INST_R0, "0");
return;
}
#endif /*ENABLE_SERVICE_MANAGEMENT*/
#include <stdio.h>
/* Extract config file parameters. FIXME: Not particularly robust.
We expect some reasonable formatting. The parser below is very
@ -644,6 +720,7 @@ void
config_init (char **keys, char **values, int max)
{
/* First, parse the command line. */
LPCWSTR wcmdline;
char *cmdline;
char *begin = NULL;
char *end = NULL;
@ -655,7 +732,15 @@ config_init (char **keys, char **values, int max)
*keys = NULL;
*values = NULL;
cmdline = getuservariable (INST_CMDLINE);
cmdline = malloc (4096);
if (!cmdline)
return;
wcmdline = getuservariable (INST_CMDLINE);
*cmdline = 0;
WideCharToMultiByte(CP_ACP, 0, wcmdline, -1, cmdline, 4095, NULL, NULL);
if (!*cmdline)
return;
mark = (*cmdline == '"') ? (cmdline++, '"') : ' ';
while (*cmdline && *cmdline != mark)
@ -721,6 +806,7 @@ config_init (char **keys, char **values, int max)
conf = fopen (fname, "r");
free (fname);
free (cmdline);
if (!conf)
return;
@ -843,7 +929,7 @@ config_lookup (char *key)
void __declspec(dllexport)
config_fetch (HWND hwndParent, int string_size, char *variables,
config_fetch (HWND hwndParent, int string_size, LPTSTR variables,
stack_t **stacktop, extra_parameters_t *extra)
{
char key[256];
@ -854,23 +940,23 @@ config_fetch (HWND hwndParent, int string_size, char *variables,
EXDLL_INIT();
/* The expected stack layout: key. */
if (popstring (key, sizeof (key)))
if (PopStringNA (key, sizeof (key)))
err = 1;
if (err)
{
setuservariable (INST_R0, "");
setuservariable (INST_R0, L"");
return;
}
value = config_lookup (key);
setuservariable (INST_R0, value == NULL ? "" : value);
SetUserVariableA (INST_R0, value == NULL ? "" : value);
return;
}
void __declspec(dllexport)
config_fetch_bool (HWND hwndParent, int string_size, char *variables,
config_fetch_bool (HWND hwndParent, int string_size, LPTSTR variables,
stack_t **stacktop, extra_parameters_t *extra)
{
char key[256];
@ -882,18 +968,18 @@ config_fetch_bool (HWND hwndParent, int string_size, char *variables,
EXDLL_INIT();
/* The expected stack layout: key. */
if (popstring (key, sizeof (key)))
if (PopStringNA (key, sizeof (key)))
err = 1;
if (err)
{
setuservariable (INST_R0, "");
setuservariable (INST_R0, L"");
return;
}
value = config_lookup (key);
if (value == NULL || *value == '\0')
{
setuservariable (INST_R0, "");
setuservariable (INST_R0, L"");
return;
}
@ -903,7 +989,7 @@ config_fetch_bool (HWND hwndParent, int string_size, char *variables,
|| atoi (value) != 0)
result = 1;
setuservariable (INST_R0, result == 0 ? "0" : "1");
SetUserVariableA (INST_R0, result == 0 ? "0" : "1");
return;
}
@ -911,99 +997,107 @@ config_fetch_bool (HWND hwndParent, int string_size, char *variables,
/* Return a string from the Win32 Registry or NULL in case of error.
Caller must release the return value. A NULL for root is an alias
for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn. */
char *
read_w32_registry_string (HKEY root, const char *dir, const char *name)
static wchar_t *
read_w32_registry_string (HKEY root, const wchar_t *dir, const wchar_t *name)
{
HKEY root_key;
HKEY key_handle;
DWORD n1, nbytes, type;
char *result = NULL;
wchar_t *result = NULL;
root_key = root;
if (! root_key)
if (!root_key)
root_key = HKEY_CURRENT_USER;
if( RegOpenKeyEx( root_key, dir, 0, KEY_READ, &key_handle ) )
if (RegOpenKeyExW (root_key, dir, 0, KEY_READ, &key_handle))
{
if (root)
return NULL; /* no need for a RegClose, so return direct */
/* It seems to be common practise to fall back to HKLM. */
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
if (RegOpenKeyExW (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle))
return NULL; /* still no need for a RegClose, so return direct */
}
nbytes = 1;
if( RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes ) ) {
if (root)
goto leave;
/* Try to fallback to HKLM also vor a missing value. */
RegCloseKey (key_handle);
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
return NULL; /* Nope. */
if (RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes))
goto leave;
if (RegQueryValueExW (key_handle, name, 0, NULL, NULL, &nbytes))
{
if (root)
goto leave;
/* Try to fallback to HKLM also for a missing value. */
RegCloseKey (key_handle);
if (RegOpenKeyExW (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle))
return NULL; /* Nope. */
if (RegQueryValueExW (key_handle, name, 0, NULL, NULL, &nbytes))
goto leave;
}
result = malloc( (n1=nbytes+1) );
result = calloc ((n1=nbytes+1), sizeof *result);
if (!result)
goto leave;
if( !result )
goto leave;
if( RegQueryValueEx( key_handle, name, 0, &type, result, &n1 ) ) {
free(result); result = NULL;
goto leave;
}
result[nbytes] = 0; /* make sure it is really a string */
if (RegQueryValueExW (key_handle, name, 0, &type,
(unsigned char *)result, &n1))
{
free (result);
result = NULL;
goto leave;
}
result[nbytes] = 0; /* Make sure it is really a string */
leave:
RegCloseKey( key_handle );
RegCloseKey (key_handle);
return result;
}
/* Registry keys for PATH for HKLM and HKCU. */
#define ENV_HK HKEY_LOCAL_MACHINE
#define ENV_REG "SYSTEM\\CurrentControlSet\\Control\\" \
"Session Manager\\Environment"
/* The following setting can be used for a per-user setting. */
#define ENV_REG L"SYSTEM\\CurrentControlSet\\Control\\" \
"Session Manager\\Environment"
#define ENV_HK_USER HKEY_CURRENT_USER
#define ENV_REG_USER "Environment"
#define ENV_REG_USER L"Environment"
/* Due to a bug in Windows7 (kb 2685893) we better put a lower limit
than 8191 on the maximum length of the PATH variable. Note, that
depending on the used toolchain we used to had a 259 byte limit in
the past. */
* than 8191 on the maximum length of the PATH variable. Note, that
* depending on the used toolchain we used to had a 259 byte limit in
* the past.
* [wk 2023-04-24]: Can this be lifted now that we use the wchar_t API?
*/
#define PATH_LENGTH_LIMIT 2047
void __declspec(dllexport)
path_add (HWND hwndParent, int string_size, char *variables,
path_add (HWND hwndParent, int string_size, LPTSTR variables,
stack_t **stacktop, extra_parameters_t *extra)
{
char dir[PATH_LENGTH_LIMIT];
char is_user_install[2];
char *path;
char *path_new;
int path_new_size;
char *comp;
const char delims[] = ";";
wchar_t dir[PATH_LENGTH_LIMIT];
wchar_t is_user_install[2];
wchar_t *path;
wchar_t *path_new;
size_t path_new_size;
wchar_t *comp;
const wchar_t delims[] = L";";
int is_user;
HKEY key_handle = 0;
HKEY root_key;
const char *env_reg;
const wchar_t *env_reg;
/* wchar_t *tokctx; Context var for wcstok - not yet needed. */
g_hwndParent = hwndParent;
EXDLL_INIT();
setuservariable (INST_R0, "0");
/* MessageBox (g_hwndParent, "XXX 1", 0, MB_OK); */
setuservariable (INST_R0, L"0"); /* Default return value. */
/* The expected stack layout: path component. */
if (popstring (dir, sizeof (dir)))
if (popstringn (dir, COUNTOF (dir)))
return;
dir[COUNTOF(dir)-1] = 0;
/* The expected stack layout: HKEY component. */
if (popstring (is_user_install, sizeof (is_user_install)))
if (popstringn (is_user_install, COUNTOF (is_user_install)))
return;
is_user_install[COUNTOF(is_user_install)-1] = 0;
if (!strcmp(is_user_install, "1"))
if (!wcscmp (is_user_install, L"1"))
{
root_key = ENV_HK_USER;
env_reg = ENV_REG_USER;
@ -1014,107 +1108,100 @@ path_add (HWND hwndParent, int string_size, char *variables,
env_reg = ENV_REG;
}
path = read_w32_registry_string (root_key, env_reg, "Path");
if (! path)
path = read_w32_registry_string (root_key, env_reg, L"Path");
if (!path)
{
path = strdup ("");
path = wcsdup (L"");
}
/* MessageBox (g_hwndParent, "XXX 3", 0, MB_OK); */
/* Old path plus semicolon plus dir plus terminating nul. */
path_new_size = strlen (path) + 1 + strlen (dir) + 1;
path_new_size = wcslen (path) + 1 + wcslen (dir) + 1;
if (path_new_size > PATH_LENGTH_LIMIT)
{
MessageBox (g_hwndParent, "PATH env variable too big", 0, MB_OK);
MessageBox (g_hwndParent, L"PATH env variable too big", 0, MB_OK);
free (path);
return;
}
/* MessageBox (g_hwndParent, "XXX 4", 0, MB_OK); */
path_new = malloc (path_new_size);
path_new = calloc (path_new_size, sizeof *path_new);
if (!path_new)
{
free (path);
return;
}
/* MessageBox (g_hwndParent, "XXX 5", 0, MB_OK); */
strcpy (path_new, path);
strcat (path_new, ";");
strcat (path_new, dir);
/* MessageBox (g_hwndParent, "XXX 6", 0, MB_OK); */
/* MessageBox (g_hwndParent, dir, 0, MB_OK); */
/* MessageBox (g_hwndParent, "XXX 7", 0, MB_OK); */
wcscpy (path_new, path);
wcscat (path_new, L";");
wcscat (path_new, dir);
/* Check if the directory already exists in the path. */
comp = strtok (path, delims);
comp = wcstok (path, delims/*, &tokctx*/);
do
{
/* MessageBox (g_hwndParent, comp, 0, MB_OK); */
/* MessageBox (g_hwndParent, comp, 0, MB_OK); */
if (!comp)
break;
if (!strcmp (comp, dir))
if (!wcscmp (comp, dir))
{
free (path);
free (path_new);
return;
}
comp = strtok (NULL, delims);
comp = wcstok (NULL, delims/*, &tokctx*/);
}
while (comp);
free (path);
/* Update the path key. */
RegCreateKey (root_key, env_reg, &key_handle);
RegSetValueEx (key_handle, "Path", 0, REG_EXPAND_SZ,
path_new, path_new_size);
RegCreateKeyW (root_key, env_reg, &key_handle);
RegSetValueEx (key_handle, L"Path", 0, REG_EXPAND_SZ,
(unsigned char*)path_new,
wcslen (path_new) * sizeof *path_new);
RegCloseKey (key_handle);
SetEnvironmentVariable("PATH", path_new);
SetEnvironmentVariableW(L"PATH", path_new);
free (path_new);
/* MessageBox (g_hwndParent, "XXX 9", 0, MB_OK); */
setuservariable (INST_R0, "1");
setuservariable (INST_R0, L"1"); /* success. */
}
void __declspec(dllexport)
path_remove (HWND hwndParent, int string_size, char *variables,
path_remove (HWND hwndParent, int string_size, LPTSTR variables,
stack_t **stacktop, extra_parameters_t *extra)
{
char dir[PATH_LENGTH_LIMIT];
char is_user_install[2];
char *path;
char *path_new;
int path_new_size;
char *comp;
const char delims[] = ";";
wchar_t dir[PATH_LENGTH_LIMIT];
wchar_t is_user_install[2];
wchar_t *path;
wchar_t *path_new;
size_t path_new_size;
wchar_t *comp;
const wchar_t delims[] = L";";
HKEY key_handle = 0;
int changed = 0;
int count = 0;
HKEY root_key;
const char *env_reg;
const wchar_t *env_reg;
/* wchar_t *tokctx; Context var for wcstok - not yet needed. */
g_hwndParent = hwndParent;
EXDLL_INIT();
setuservariable (INST_R0, "0");
setuservariable (INST_R0, L"0");
/* The expected stack layout: path component. */
if (popstring (dir, sizeof (dir)))
if (popstringn (dir, COUNTOF (dir)))
return;
dir[COUNTOF(dir)-1] = 0;
/* The expected stack layout: HKEY component. */
if (popstring (is_user_install, sizeof (is_user_install)))
if (popstringn (is_user_install, COUNTOF (is_user_install)))
return;
is_user_install[COUNTOF(is_user_install)-1] = 0;
if (!strcmp(is_user_install, "1"))
if (!wcscmp (is_user_install, L"1"))
{
root_key = ENV_HK_USER;
env_reg = ENV_REG_USER;
@ -1125,51 +1212,112 @@ path_remove (HWND hwndParent, int string_size, char *variables,
env_reg = ENV_REG;
}
path = read_w32_registry_string (root_key, env_reg, "Path");
path = read_w32_registry_string (root_key, env_reg, L"Path");
if (!path)
return;
/* Old path plus semicolon plus dir plus terminating nul. */
path_new_size = strlen (path) + 1;
path_new = malloc (path_new_size);
path_new_size = wcslen (path) + 1;
path_new = calloc (path_new_size, sizeof *path_new);
if (!path_new)
{
free (path);
return;
}
path_new[0] = '\0';
/* Compose the new path. */
comp = strtok (path, delims);
comp = wcstok (path, delims/*, &tokctx*/);
do
{
if (strcmp (comp, dir))
if (wcscmp (comp, dir))
{
if (count != 0)
strcat (path_new, ";");
strcat (path_new, comp);
if (count)
wcscat (path_new, L";");
wcscat (path_new, comp);
count++;
}
else
changed = 1;
comp = strtok (NULL, delims);
}
while (comp);
while ((comp = wcstok (NULL, delims/*, &tokctx*/)));
free (path);
if (! changed)
if (!changed)
{
free (path_new);
return;
}
/* Set a key for our CLSID. */
RegCreateKey (root_key, env_reg, &key_handle);
RegSetValueEx (key_handle, "Path", 0, REG_EXPAND_SZ,
path_new, path_new_size);
RegCreateKeyW (root_key, env_reg, &key_handle);
RegSetValueEx (key_handle, L"Path", 0, REG_EXPAND_SZ,
(unsigned char*)path_new,
wcslen (path_new) * sizeof *path_new);
RegCloseKey (key_handle);
free (path_new);
setuservariable (INST_R0, "1");
setuservariable (INST_R0, L"1"); /* success */
}
/** @brief Kill processes with the name name.
*
* This function tries to kill a process using ExitProcess.
*
* If it does not work it does not work. No return values.
* The intention is to make an effort to kill something during
* installation / uninstallation.
*
* The function signature is explained by NSIS.
*/
void __declspec(dllexport) __cdecl KillProc(HWND hwndParent,
int string_size,
char *variables,
stack_t **stacktop)
{
HANDLE h;
PROCESSENTRY32 pe32;
if (!stacktop || !*stacktop || !(*stacktop)->text)
{
ERRORPRINTF ("Invalid call to KillProc.");
return;
}
h = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
if (h == INVALID_HANDLE_VALUE)
{
ERRORPRINTF ("Failed to create Toolhelp snapshot");
return;
}
pe32.dwSize = sizeof (PROCESSENTRY32);
if (!Process32First (h, &pe32))
{
ERRORPRINTF ("Failed to get first process");
CloseHandle (h);
return;
}
do
{
if (!wcscmp ((*stacktop)->text, pe32.szExeFile))
{
HANDLE hProc = OpenProcess (PROCESS_ALL_ACCESS, FALSE,
pe32.th32ProcessID);
if (!hProc)
{
ERRORPRINTF ("Failed to open process handle.");
continue;
}
if (!TerminateProcess (hProc, 1))
{
ERRORPRINTF ("Failed to terminate process.");
}
CloseHandle (hProc);
}
}
while (Process32Next (h, &pe32));
CloseHandle (h);
}

View File

@ -1,4 +1,4 @@
# inst.nsi - Installer for GnuPG on Windows. -*- coding: latin-1; -*-
# inst.nsi - Installer for GnuPG on Windows.
# Copyright (C) 2005, 2014, 2019-2021 g10 Code GmbH
# 2017 Intevation GmbH
#
@ -31,6 +31,9 @@
#
# WITH_GUI - Include the GPA GUI
# This one must be done before addplugindir.
Unicode true
!cd "${INST_DIR}"
!addincludedir "${W32_SRCDIR}"
!addplugindir "${BUILD_DIR}"
@ -64,7 +67,7 @@
File version: ${PROD_VERSION}\r\n\
Release date: ${BUILD_ISODATE}"
!define ABOUT_GERMAN \
"GnuPG is die häufigst verwendete Software zur Mail- und Datenverschlüsselung.\
"GnuPG is die häufigst verwendete Software zur Mail- und Datenverschlüsselung.\
\r\n\r\n$_CLICK \
\r\n\r\n\r\n\r\n\r\nDies ist GnuPG Version ${VERSION}.\r\n\
Dateiversion: ${PROD_VERSION}\r\n\
@ -256,14 +259,14 @@ LangString T_GPLShort ${LANG_ENGLISH} \
You may distribute it as long as you give the recipients the same \
rights you have received."
LangString T_GPLShort ${LANG_GERMAN} \
"In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \
einzusetzen. Sie können die Software weitergeben, sofern Sie dem \
Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben."
"In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \
einzusetzen. Sie können die Software weitergeben, sofern Sie dem \
Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben."
LangString T_RunKeyManager ${LANG_ENGLISH} \
"Run the key manager"
LangString T_RunKeyManager ${LANG_GERMAN} \
"Die Schlüsselverwaltung aufrufen"
"Die Schlüsselverwaltung aufrufen"
LangString T_MoreInfo ${LANG_ENGLISH} \
"Click here to see how to help the GnuPG Project"
@ -280,8 +283,8 @@ LangString T_ShowReadme ${LANG_GERMAN} \
LangString T_NoKeyManager ${LANG_ENGLISH} \
"No key manager has been installed, thus we can't run one now."
LangString T_NoKeyManager ${LANG_GERMAN} \
"Es wurde keine Schlüsselverwaltung installiert. \
Deswegen kann sie jetzt auch nicht ausgeführt werden."
"Es wurde keine Schlüsselverwaltung installiert. \
Deswegen kann sie jetzt auch nicht ausgeführt werden."
# Functions
@ -289,7 +292,7 @@ LangString T_NoKeyManager ${LANG_GERMAN} \
LangString T_AlreadyRunning ${LANG_ENGLISH} \
"An instance of this installer is already running."
LangString T_AlreadyRunning ${LANG_GERMAN} \
"Ein Exemplar dieses Installers läuft bereits."
"Ein Exemplar dieses Installers läuft bereits."
Function G4wRunOnce
Push $R0
@ -416,23 +419,23 @@ LangString T_InstallOptLinks ${LANG_GERMAN} "Startlinks"
LangString T_InstOptLabelA ${LANG_ENGLISH} \
"Please select where GnuPG shall install links:"
LangString T_InstOptLabelA ${LANG_GERMAN} \
"Bitte wählen Sie, welche Verknüpfungen angelegt werden sollen:"
"Bitte wählen Sie, welche Verknüpfungen angelegt werden sollen:"
LangString T_InstOptLabelB ${LANG_ENGLISH} \
"(Only programs will be linked into the quick launch bar.)"
LangString T_InstOptLabelB ${LANG_GERMAN} \
"(In die Schnellstartleiste werden nur Verknüpfungen für \
"(In die Schnellstartleiste werden nur Verknüpfungen für \
Programme angelegt.) "
LangString T_InstOptFieldA ${LANG_ENGLISH} \
"Start Menu"
LangString T_InstOptFieldA ${LANG_GERMAN} \
"Startmenü"
"Startmenü"
LangString T_InstOptFieldB ${LANG_ENGLISH} \
"Desktop"
LangString T_InstOptFieldB ${LANG_GERMAN} \
"Arbeitsfläche"
"Arbeitsfläche"
LangString T_InstOptFieldC ${LANG_ENGLISH} \
"Quick Launch Bar"
@ -447,9 +450,9 @@ LangString T_FoundExistingVersion ${LANG_ENGLISH} \
Do you want to overwrite it with version ${VERSION}?"
LangString T_FoundExistingVersion ${LANG_GERMAN} \
"Version $R1 ist hier bereits installiert. $\r$\n\
Möchten Sie diese mit Version ${VERSION} überschreiben? $\r$\n\
Möchten Sie diese mit Version ${VERSION} überschreiben? $\r$\n\
$\r$\n\
(Sie können in jedem Fall mit JA antworten, falls es sich um \
(Sie können in jedem Fall mit JA antworten, falls es sich um \
eine neuere oder dieselbe Version handelt.)"
LangString T_FoundExistingVersionB ${LANG_ENGLISH} \
"A version of GnuPG has already been installed on the system. \
@ -460,7 +463,7 @@ LangString T_FoundExistingVersionB ${LANG_GERMAN} \
"Eine Version von GnuPG ist hier bereits installiert. \
$\r$\n\
$\r$\n\
Möchten die die Installation von GnuPG fortführen?"
Möchten die die Installation von GnuPG fortführen?"
@ -476,16 +479,16 @@ LangString T_AdminWanted ${LANG_GERMAN} \
Administratorrechten zu installieren. \
$\r$\n\
$\r$\n\
Möchten die die Installation von GnuPG ohne Administratorrechte fortführen?"
Möchten die die Installation von GnuPG ohne Administratorrechte fortführen?"
# From Function PrintCloseOtherApps
LangString T_CloseOtherApps ${LANG_ENGLISH} \
"Please make sure that other applications are not running. \
GnuPG will try to install anyway but a reboot may be required."
LangString T_CloseOtherApps ${LANG_GERMAN} \
"Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \
"Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \
sind. GnuPG wird auf jeden Fall versuchen, eine Installation \
durchzuführen; es ist dann aber u.U. notwendig, das System neu zu starten."
durchzuführen; es ist dann aber u.U. notwendig, das System neu zu starten."
# TrimNewlines - taken from the NSIS reference
@ -736,7 +739,7 @@ LangString DESC_SEC_gnupg ${LANG_ENGLISH} \
LangString DESC_SEC_gnupg ${LANG_GERMAN} \
"Der GnuPG Core ist, wie der Name schon sagt, der Kernbestandteil \
dieser Software. Der GnuPG Core stellt die eigentliche \
Verschlüsselung sowie die Verwaltung der Schlüssel bereit."
Verschlüsselung sowie die Verwaltung der Schlüssel bereit."
LangString DESC_Menu_gnupg_manual ${LANG_ENGLISH} \
"Show the manual for the GnuPG Core"
@ -989,7 +992,7 @@ SectionEnd
LangString DESC_SEC_gpa ${LANG_ENGLISH} \
"The GnuPG Assistant is the graphical interface of GnuPG"
LangString DESC_SEC_gpa ${LANG_GERMAN} \
"Der GnuPG Assistent ist die graphische Oberfläche von GnuPG."
"Der GnuPG Assistent ist die graphische Oberfläche von GnuPG."
LangString DESC_Menu_gpa ${LANG_ENGLISH} \
"Run the GnuGP Assistant."
@ -1462,8 +1465,7 @@ Function .onInit
;;!define MUI_LANGDLL_ALWAYSSHOW
!insertmacro MUI_LANGDLL_DISPLAY
# Temporay disabled until we have fixed the DLL issue (wk 2023-04-05)
# Call G4wRunOnce
Call G4wRunOnce
SetOutPath $TEMP
#!ifdef SOURCES

View File

@ -154,6 +154,42 @@ w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d)
}
#endif /*HAVE_W32_SYSTEM*/
/* Given the directory name DNAME try to create a common.conf and
* enable the keyboxd. This should only be called for the standard
* home directory and only if that directory has just been created. */
static void
create_common_conf (const char *dname)
{
#ifdef BUILD_WITH_KEYBOXD
estream_t fp;
char *fcommon;
fcommon = make_filename (dname, "common.conf", NULL);
fp = es_fopen (fcommon, "wx,mode=-rw-r");
if (!fp)
{
log_info (_("error creating '%s': %s\n"), fcommon,
gpg_strerror (gpg_error_from_syserror ()));
}
else
{
if (es_fputs ("use-keyboxd\n", fp) == EOF)
{
log_info (_("error writing to '%s': %s\n"), fcommon,
gpg_strerror (es_ferror (fp)
? gpg_error_from_syserror ()
: gpg_error (GPG_ERR_EOF)));
es_fclose (fp);
}
else if (es_fclose (fp))
{
log_info (_("error closing '%s': %s\n"), fcommon,
gpg_strerror (gpg_error_from_syserror ()));
}
}
#endif /* BUILD_WITH_KEYBOXD */
}
/* Check whether DIR is the default homedir. */
static int
@ -259,7 +295,9 @@ standard_homedir (void)
/* Try to create the directory if it does not yet exists. */
if (gnupg_access (dir, F_OK))
gnupg_mkdir (dir, "-rwx");
if (!gnupg_mkdir (dir, "-rwx"))
create_common_conf (dir);
}
else
dir = GNUPG_DEFAULT_HOMEDIR;
@ -791,39 +829,9 @@ gnupg_maybe_make_homedir (const char *fname, int quiet)
fname, strerror(errno) );
else
{
estream_t fp;
char *fcommon;
if (!quiet )
log_info ( _("directory '%s' created\n"), fname );
#ifdef BUILD_WITH_KEYBOXD
/* A new default homedir has been created. Now create a
* common.conf. */
fcommon = make_filename (fname, "common.conf", NULL);
fp = es_fopen (fcommon, "wx,mode=-rw-r");
if (!fp)
{
log_info (_("error creating '%s': %s\n"), fcommon,
gpg_strerror (gpg_error_from_syserror ()));
}
else
{
if (es_fputs ("use-keyboxd\n", fp) == EOF)
{
log_info (_("error writing to '%s': %s\n"), fcommon,
gpg_strerror (es_ferror (fp)
? gpg_error_from_syserror ()
: gpg_error (GPG_ERR_EOF)));
es_fclose (fp);
}
else if (es_fclose (fp))
{
log_info (_("error closing '%s': %s\n"), fcommon,
gpg_strerror (gpg_error_from_syserror ()));
}
}
#endif /* BUILD_WITH_KEYBOXD */
create_common_conf (fname);
}
}
}
@ -1657,6 +1665,9 @@ gnupg_module_name (int which)
case GNUPG_MODULE_NAME_CARD:
X(bindir, "tools", "gpg-card");
case GNUPG_MODULE_NAME_GPGTAR:
X(bindir, "tools", "gpgtar");
default:
BUG ();
}

View File

@ -614,7 +614,7 @@ get_ecc_q_from_canon_sexp (const unsigned char *keydata, size_t keydatalen,
size_t buflen, toklen;
int depth, last_depth1, last_depth2;
const unsigned char *ecc_q = NULL;
size_t ecc_q_len;
size_t ecc_q_len = 0;
*r_q = NULL;
*r_qlen = 0;

View File

@ -298,6 +298,7 @@ char *_gnupg_socketdir_internal (int skip_checks, unsigned *r_info);
#define GNUPG_MODULE_NAME_KEYBOXD 13
#define GNUPG_MODULE_NAME_TPM2DAEMON 14
#define GNUPG_MODULE_NAME_CARD 15
#define GNUPG_MODULE_NAME_GPGTAR 16
const char *gnupg_module_name (int which);
void gnupg_module_name_flush_some (void);
void gnupg_set_builddir (const char *newdir);

View File

@ -29,7 +29,7 @@ min_automake_version="1.16.3"
m4_define([mym4_package],[gnupg])
m4_define([mym4_major], [2])
m4_define([mym4_minor], [4])
m4_define([mym4_micro], [1])
m4_define([mym4_micro], [2])
# 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

View File

@ -70,9 +70,9 @@ gpg_error_t crl_cache_reload_crl (ctrl_t ctrl, ksba_cert_t cert);
/*-- fakecrl.c --*/
crl_cache_result_t fakecrl_isvalid (ctrl_t ctrl,
const char *issuer_hash,
const char *cert_id);
gpg_error_t fakecrl_isvalid (ctrl_t ctrl,
const char *issuer_hash,
const char *cert_id);

View File

@ -2555,7 +2555,7 @@ http_get_header_names (http_t hd)
* Parse the response from a server.
* Returns: Errorcode and sets some files in the handle
*/
static gpg_err_code_t
static gpg_error_t
parse_response (http_t hd)
{
char *line, *p, *p2;
@ -2579,11 +2579,11 @@ parse_response (http_t hd)
len = es_read_line (hd->fp_read, &hd->buffer, &hd->buffer_size, &maxlen);
line = hd->buffer;
if (!line)
return gpg_err_code_from_syserror (); /* Out of core. */
return gpg_error_from_syserror (); /* Out of core. */
if (!maxlen)
return GPG_ERR_TRUNCATED; /* Line has been truncated. */
return gpg_error (GPG_ERR_TRUNCATED); /* Line has been truncated. */
if (!len)
return GPG_ERR_EOF;
return gpg_error (GPG_ERR_EOF);
if (opt_debug || (hd->flags & HTTP_FLAG_LOG_RESP))
log_debug_string (line, "http.c:response:\n");
@ -2623,10 +2623,10 @@ parse_response (http_t hd)
len = es_read_line (hd->fp_read, &hd->buffer, &hd->buffer_size, &maxlen);
line = hd->buffer;
if (!line)
return gpg_err_code_from_syserror (); /* Out of core. */
return gpg_error_from_syserror (); /* Out of core. */
/* Note, that we can silently ignore truncated lines. */
if (!len)
return GPG_ERR_EOF;
return gpg_error (GPG_ERR_EOF);
/* Trim line endings of empty lines. */
if ((*line == '\r' && line[1] == '\n') || *line == '\n')
*line = 0;
@ -2637,7 +2637,7 @@ parse_response (http_t hd)
{
gpg_err_code_t ec = store_header (hd, line);
if (ec)
return ec;
return gpg_error (ec);
}
}
while (len && *line);

View File

@ -675,6 +675,39 @@ and allows the use of gpg-agent with the ssh implementation
@command{putty}. This is similar to the regular ssh-agent support but
makes use of Windows message queue as required by @command{putty}.
The order in which keys are presented to ssh are:
@table @code
@item Negative Use-for-ssh values
If a key file has the attribute "Use-for-ssh" and its value is
negative, these keys are presented first to ssh. The negative
values are capped at -999 with -999 beeing lower ranked than -1.
These values can be used to prefer on-disk keys over keys taken
from active cards.
@item Active cards
Active cards (inserted into a card reader or plugged in tokens)
are always tried; they are ordered by their serial numbers.
@item Keys listed in the sshcontrol file
Non-disabled keys from the sshcontrol file are presented in the
order they appear in this file. Note that the sshcontrol file
is deprecated.
@item Positive Use-for-ssh values
If a key file has the attribute "Use-for-ssh" and its value is
"yes", "true", or any positive number the key is presented in
the order of their values. "yes" and "true" have a value of 1;
other values are capped at 99999.
@end table
Editing the "Use-for-ssh" values can be done with an editor or using
@command{gpg-connect-agent} and "KEYATTR" (Remember to append a colon
to the key; i.e. use "Use-for-ssh:").
@anchor{option --ssh-fingerprint-digest}
@item --ssh-fingerprint-digest
@opindex ssh-fingerprint-digest
@ -827,6 +860,9 @@ This file is used when support for the secure shell agent protocol has
been enabled (@pxref{option --enable-ssh-support}). Only keys present in
this file are used in the SSH protocol. You should backup this file.
This file is deprecated in favor of the "Use-for-ssh" attribute in the
key files.
The @command{ssh-add} tool may be used to add new entries to this file;
you may also add them manually. Comment lines, indicated by a leading
hash mark, as well as empty lines are ignored. An entry starts with
@ -872,7 +908,6 @@ users start up with a working configuration. For existing users the
a small helper script is provided to create these files (@pxref{addgnupghome}).
@c
@c Agent Signals
@c

View File

@ -399,10 +399,13 @@ this command may change with new releases.
@opindex edit-card
@itemx --card-edit
@opindex card-edit
Present a menu to work with a smartcard. The subcommand "help" provides
an overview on available commands. For a detailed description, please
see the Card HOWTO at
https://gnupg.org/documentation/howtos.html#GnuPG-cardHOWTO .
Present a menu to work with a smartcard. The subcommand "help"
provides an overview on available commands. For a detailed
description, please see the Card HOWTO at
https://gnupg.org/documentation/howtos.html#GnuPG-cardHOWTO . Please
note that the command "openpgp" can be used to switch to the OpenPGP
application of cards which by default are presenting another
application (e.g. PIV).
@item --card-status
@opindex card-status

View File

@ -1096,7 +1096,8 @@ agent_keytotpm (ctrl_t ctrl, const char *hexgrip)
*/
int
agent_keytocard (const char *hexgrip, int keyno, int force,
const char *serialno, const char *timestamp)
const char *serialno, const char *timestamp,
const char *ecdh_param_str)
{
int rc;
char line[ASSUAN_LINELENGTH];
@ -1104,8 +1105,9 @@ agent_keytocard (const char *hexgrip, int keyno, int force,
memset (&parm, 0, sizeof parm);
snprintf (line, DIM(line), "KEYTOCARD %s%s %s OPENPGP.%d %s",
force?"--force ": "", hexgrip, serialno, keyno, timestamp);
snprintf (line, DIM(line), "KEYTOCARD %s%s %s OPENPGP.%d %s%s%s",
force?"--force ": "", hexgrip, serialno, keyno, timestamp,
ecdh_param_str? " ":"", ecdh_param_str? ecdh_param_str:"");
rc = start_agent (NULL, 1);
if (rc)
@ -1700,6 +1702,30 @@ agent_scd_cardlist (strlist_t *result)
}
/* Make the app APPNAME the one on the card. This is sometimes
* required to make sure no other process has switched a card to
* another application. The only useful APPNAME is "openpgp". */
gpg_error_t
agent_scd_switchapp (const char *appname)
{
int err;
char line[ASSUAN_LINELENGTH];
if (appname && !*appname)
appname = NULL;
err = start_agent (NULL, (1 | FLAG_FOR_CARD_SUPPRESS_ERRORS));
if (err)
return err;
snprintf (line, DIM(line), "SCD SWITCHAPP --%s%s",
appname? " ":"", appname? appname:"");
return assuan_transact (agent_ctx, line,
NULL, NULL, NULL, NULL,
NULL, NULL);
}
struct card_keyinfo_parm_s {
int error;

View File

@ -108,6 +108,9 @@ gpg_error_t agent_scd_keypairinfo (ctrl_t ctrl, const char *keyref,
/* Return list of cards. */
int agent_scd_cardlist (strlist_t *result);
/* Switch/assure a certain application. */
gpg_error_t agent_scd_switchapp (const char *appname);
/* Free a keypair info list. */
void free_keypair_info (keypair_info_t l);
@ -132,7 +135,8 @@ int agent_keytotpm (ctrl_t ctrl, const char *hexgrip);
/* Send the KEYTOCARD command. */
int agent_keytocard (const char *hexgrip, int keyno, int force,
const char *serialno, const char *timestamp);
const char *serialno, const char *timestamp,
const char *ecdh_param_str);
/* Send a SETATTR command to the SCdaemon. */
gpg_error_t agent_scd_setattr (const char *name,

View File

@ -705,6 +705,14 @@ current_card_status (ctrl_t ctrl, estream_t fp,
}
else
tty_fprintf (fp, "[none]\n");
if (!info.manufacturer_name)
{
tty_fprintf (fp, "\n");
tty_fprintf (fp, _("Please try command \"%s\""
" if the listing does not look correct\n"),
"openpgp");
}
}
release_kbnode (keyblock);
@ -1289,6 +1297,7 @@ get_info_for_key_operation (struct agent_card_info_s *info)
int rc;
memset (info, 0, sizeof *info);
agent_scd_switchapp ("openpgp");
rc = agent_scd_getattr ("SERIALNO", info);
if (rc || !info->serialno || strncmp (info->serialno, "D27600012401", 12)
|| strlen (info->serialno) != 32 )
@ -1796,8 +1805,9 @@ card_store_subkey (KBNODE node, int use, strlist_t *processed_keys)
int keyno;
PKT_public_key *pk;
gpg_error_t err;
char *hexgrip;
char *hexgrip = NULL;
int rc;
char *ecdh_param_str = NULL;
gnupg_isotime_t timebuf;
log_assert (node->pkt->pkttype == PKT_PUBLIC_KEY
@ -1871,8 +1881,19 @@ card_store_subkey (KBNODE node, int use, strlist_t *processed_keys)
goto leave;
epoch2isotime (timebuf, (time_t)pk->timestamp);
rc = agent_keytocard (hexgrip, keyno, rc, info.serialno, timebuf);
if (pk->pubkey_algo == PUBKEY_ALGO_ECDH)
{
ecdh_param_str = ecdh_param_str_from_pk (pk);
if (!ecdh_param_str)
{
err = gpg_error_from_syserror ();
goto leave;
}
}
rc = agent_keytocard (hexgrip, keyno, rc, info.serialno,
timebuf, ecdh_param_str);
if (rc)
log_error (_("KEYTOCARD failed: %s\n"), gpg_strerror (rc));
else
@ -1881,9 +1902,10 @@ card_store_subkey (KBNODE node, int use, strlist_t *processed_keys)
if (processed_keys)
add_to_strlist (processed_keys, hexgrip);
}
xfree (hexgrip);
leave:
xfree (hexgrip);
xfree (ecdh_param_str);
agent_release_card_info (&info);
return okay;
}
@ -2242,7 +2264,7 @@ enum cmdids
cmdNAME, cmdURL, cmdFETCH, cmdLOGIN, cmdLANG, cmdSEX, cmdCAFPR,
cmdFORCESIG, cmdGENERATE, cmdPASSWD, cmdPRIVATEDO, cmdWRITECERT,
cmdREADCERT, cmdUNBLOCK, cmdFACTORYRESET, cmdKDFSETUP,
cmdKEYATTR, cmdUIF,
cmdKEYATTR, cmdUIF, cmdOPENPGP,
cmdINVCMD
};
@ -2280,6 +2302,7 @@ static struct
N_("setup KDF for PIN authentication (on/single/off)")},
{ "key-attr", cmdKEYATTR, 1, N_("change the key attribute")},
{ "uif", cmdUIF, 1, N_("change the User Interaction Flag")},
{ "openpgp", cmdOPENPGP, 0, N_("switch to the OpenPGP app")},
/* Note, that we do not announce these command yet. */
{ "privatedo", cmdPRIVATEDO, 0, NULL },
{ "readcert", cmdREADCERT, 0, NULL },
@ -2579,6 +2602,11 @@ card_edit (ctrl_t ctrl, strlist_t commands)
uif (arg_number, arg_rest);
break;
case cmdOPENPGP:
agent_scd_switchapp ("openpgp");
redisplay = 1;
break;
case cmdQUIT:
goto leave;

View File

@ -2955,9 +2955,19 @@ do_transfer (ctrl_t ctrl, kbnode_t keyblock, PKT_public_key *pk,
{
gpg_error_t err;
struct import_stats_s subkey_stats = {0};
int force = 0;
int already_exist = agent_probe_secret_key (ctrl, pk);
if (already_exist == 2 || already_exist == 4)
{
if (!opt.quiet)
log_info (_("key %s: card reference is overridden by key material\n"),
keystr_from_pk (pk));
force = 1;
}
err = transfer_secret_keys (ctrl, &subkey_stats, keyblock,
batch, 0, only_marked);
batch, force, only_marked);
if (gpg_err_code (err) == GPG_ERR_NOT_PROCESSED)
{
/* TRANSLATORS: For a smartcard, each private key on host has a

View File

@ -576,6 +576,7 @@ char *format_hexfingerprint (const char *fingerprint,
char *buffer, size_t buflen);
gpg_error_t keygrip_from_pk (PKT_public_key *pk, unsigned char *array);
gpg_error_t hexkeygrip_from_pk (PKT_public_key *pk, char **r_grip);
char *ecdh_param_str_from_pk (PKT_public_key *pk);
/*-- kbnode.c --*/

View File

@ -5327,12 +5327,20 @@ card_store_key_with_backup (ctrl_t ctrl, PKT_public_key *sub_psk,
char *cache_nonce = NULL;
void *kek = NULL;
size_t keklen;
char *ecdh_param_str = NULL;
sk = copy_public_key (NULL, sub_psk);
if (!sk)
return gpg_error_from_syserror ();
epoch2isotime (timestamp, (time_t)sk->timestamp);
if (sk->pubkey_algo == PUBKEY_ALGO_ECDH)
{
ecdh_param_str = ecdh_param_str_from_pk (sk);
if (!ecdh_param_str)
return gpg_error_from_syserror ();
}
err = hexkeygrip_from_pk (sk, &hexgrip);
if (err)
goto leave;
@ -5345,7 +5353,8 @@ card_store_key_with_backup (ctrl_t ctrl, PKT_public_key *sub_psk,
goto leave;
}
rc = agent_keytocard (hexgrip, 2, 1, info.serialno, timestamp);
rc = agent_keytocard (hexgrip, 2, 1, info.serialno,
timestamp, ecdh_param_str);
xfree (info.serialno);
if (rc)
{
@ -5388,6 +5397,7 @@ card_store_key_with_backup (ctrl_t ctrl, PKT_public_key *sub_psk,
agent_scd_learn (NULL, 1);
leave:
xfree (ecdh_param_str);
xfree (cache_nonce);
gcry_cipher_close (cipherhd);
xfree (kek);

View File

@ -1141,3 +1141,25 @@ hexkeygrip_from_pk (PKT_public_key *pk, char **r_grip)
}
return err;
}
/* Return a hexfied malloced string of the ECDH parameters for an ECDH
* key from the public key PK. Returns NULL on error. */
char *
ecdh_param_str_from_pk (PKT_public_key *pk)
{
const unsigned char *s;
unsigned int n;
if (!pk
|| pk->pubkey_algo != PUBKEY_ALGO_ECDH
|| !gcry_mpi_get_flag (pk->pkey[2], GCRYMPI_FLAG_OPAQUE)
|| !(s = gcry_mpi_get_opaque (pk->pkey[2], &n)) || !n)
{
gpg_err_set_errno (EINVAL);
return NULL; /* Invalid parameter */
}
n = (n+7)/8;
return bin2hex (s, n, NULL);
}

View File

@ -142,6 +142,10 @@ msgstr "la contrasenya és errònia"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "la contrasenya és errònia"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1299,6 +1303,15 @@ msgstr "s'està escrivint la clau secreta a «%s»\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "error en crear «%s»: %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "error en la lectura de «%s»: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armadura: %s\n"
@ -1523,6 +1536,10 @@ msgstr "no forçat"
msgid "forced"
msgstr "forçat"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1803,6 +1820,9 @@ msgstr "canvia la confiança"
msgid "change the User Interaction Flag"
msgstr "canvia la confiança"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -2057,11 +2077,6 @@ msgstr "clau %08lX: clau d'estil PGP 2.x - es descarta\n"
msgid "WARNING: nothing exported\n"
msgstr "AVÍS: no s'ha exportat res\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "error en crear «%s»: %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[No s'ha trobat l'id d'usuari]"
@ -2526,6 +2541,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "No hi ha cap signatura corresponent en l'anell secret\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "mostra en quin anell de claus està una clau llistada"
@ -3164,6 +3183,10 @@ msgstr "es descarta: la clau secreta ja és present\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "error mentre s'enviava a «%s»: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3728,6 +3751,9 @@ msgstr "esborra una clau secundària"
msgid "add a revocation key"
msgstr "afegeix una clau de revocació"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr ""
@ -3807,6 +3833,10 @@ msgstr "La clau secreta està disponible.\n"
msgid "Secret subkeys are available.\n"
msgstr "La clau secreta està disponible.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Cal la clau secreta per a fer açò.\n"
@ -3929,6 +3959,10 @@ msgstr "Voleu desar els canvis? "
msgid "Quit without saving? (y/N) "
msgstr "Voleu eixir sense desar? "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "no s'ha pogut eliminar el bloc de claus: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "La clau no ha canviat, per tant no cal actualització.\n"
@ -4183,6 +4217,18 @@ msgid ""
msgstr ""
"Esteu segur que voleu nominar aquesta clau com a revocador designat? (s/N): "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(a no ser que especifiqueu la clau per la empremta digital)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "l'ID d'usuari «%s» ja està revocat\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -6041,10 +6087,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "no podeu usar %s mentre esteu en mode %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "AVÍS: conflicte de signatures digest en el missatge\n"
@ -8247,10 +8289,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "no es pot crear el directori «%s»: %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "error en la lectura de «%s»: %s\n"
# No em passe! ;) ivb
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
@ -10155,10 +10193,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "canvia entre el llistat de claus secretes i públiques"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "la contrasenya és errònia"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr ""

View File

@ -153,6 +153,11 @@ msgstr "Heslo:"
msgid "does not match - try again"
msgstr "neshodují se  zkuste to znovu"
#, fuzzy
#| msgid "Passphrase"
msgid "Passphrases match."
msgstr "Heslo"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1217,6 +1222,14 @@ msgstr "čekám na zámek %s…\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s je příliš stará (potřeba %s, přítomna %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "chyba při vytváření „%s“: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "chyba při uzavírání „%s“: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "ASCII kódování: %s\n"
@ -1420,6 +1433,10 @@ msgstr "není vyžadováno"
msgid "forced"
msgstr "vyžadováno"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Chyba: V současné verzi je povolenou pouze plain ASCII.\n"
@ -1683,6 +1700,9 @@ msgstr "změní atribut klíče"
msgid "change the User Interaction Flag"
msgstr "změní příznak interakce uživatele (UIF)"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/karta> "
@ -1916,10 +1936,6 @@ msgstr "klíč %s: PGP 2.x klíč  přeskočeno\n"
msgid "WARNING: nothing exported\n"
msgstr "POZOR: nebylo nic vyexportováno\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "chyba při vytváření „%s“: %s\n"
msgid "[User ID not found]"
msgstr "[ID uživatele nenalezeno]"
@ -2330,6 +2346,11 @@ msgstr "ukazovat odvolané a prošlé ID uživatelů při výpisu klíčů"
msgid "show revoked and expired subkeys in key listings"
msgstr "ukazovat odvolané a prošlé podklíče při výpisu klíčů"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "ukazovat data expirace během výpisu podpisů"
msgid "show the keyring name in key listings"
msgstr "ukazovat název souboru s klíči při výpisu klíčů"
@ -2945,6 +2966,10 @@ msgstr "klíč %s: tajný klíč již existuje\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "klíč %s: chyba při odesílání dat agentovi: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3460,6 +3485,11 @@ msgstr "smazat vybrané podklíče"
msgid "add a revocation key"
msgstr "přidat revokační klíč"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Dešifrování dat uspělo"
msgid "delete signatures from the selected user IDs"
msgstr "smazat podpisy z vybraných uživatelských ID"
@ -3521,6 +3551,12 @@ msgstr "Tajný klíč je dostupný.\n"
msgid "Secret subkeys are available.\n"
msgstr "Tajné podklíče jsou dostupné.\n"
#, fuzzy
#| msgid "Note: Only the secret part of the shown subkey will be deleted.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr "Poznámka: Smazána bude pouze tajná část zobrazeného podklíče.\n"
msgid "Need the secret key to do this.\n"
msgstr "Pro provedení této operace je potřeba tajný klíč.\n"
@ -3629,6 +3665,12 @@ msgstr "Uložit změny? (a/N) "
msgid "Quit without saving? (y/N) "
msgstr "Ukončit bez uložení? (a/N) "
# The first argument is a "key" or "subkey"
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "smazání tajného %s se nezdařilo: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Klíč nebyl změněn, takže není potřeba jej aktualizovat.\n"
@ -3861,6 +3903,19 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Jste si jistí, že tento klíč chcete pověřit odvoláním? (a/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(dokud neurčíte klíč jeho otiskem)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Podklíč %s je již odvolán.\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5622,10 +5677,6 @@ msgstr "%s klíč %s vyžaduje hash o délce %zu nebo více bitů (hash je %s)\
msgid "key %s may not be used for signing in %s mode\n"
msgstr "klíč %s se nesmí používat v režimu %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr "přesto se pokračuje v ověřování kvůli volbě %s\n"
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "POZOR: konflikt hashe podpisu ve zprávě\n"
@ -7780,10 +7831,6 @@ msgstr "prosím, zjistěte příčinu a soubor ručně smažte\n"
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "vytvoření dočasného kešového dir souboru „%s“ selhalo: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "chyba při uzavírání „%s“: %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "nelze vypočítat haš „%s“: %s\n"
@ -8944,6 +8991,9 @@ msgstr "Příkazy pro správu Yubikey"
msgid "manage the command history"
msgstr "spravuje historii příkazů"
#~ msgid "continuing verification anyway due to option %s\n"
#~ msgstr "přesto se pokračuje v ověřování kvůli volbě %s\n"
#~ msgid "selected AEAD algorithm is invalid\n"
#~ msgstr "vybraný algoritmus AEAD je neplatný\n"
@ -9633,9 +9683,6 @@ msgstr "spravuje historii příkazů"
#~ msgid "Key Acquirer"
#~ msgstr "Stahovač klíčů"
#~ msgid "Passphrase"
#~ msgstr "Heslo"
#~ msgid "name of socket too long\n"
#~ msgstr "název socketu je příliš dlouhý\n"

View File

@ -151,6 +151,11 @@ msgstr "Adgangsfrase:"
msgid "does not match - try again"
msgstr "matcher ikke - prøv igen"
#, fuzzy
#| msgid "Passphrase"
msgid "Passphrases match."
msgstr "Adgangsfrase"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1325,6 +1330,16 @@ msgstr "venter på lås %s ...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s er for gammel (kræver %s, har %s)\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "fejl ved oprettelse af »%s«: %s\n"
#, fuzzy, c-format
#| msgid "error closing %s: %s\n"
msgid "error closing '%s': %s\n"
msgstr "fejl ved lukning af %s: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "panser: %s\n"
@ -1545,6 +1560,10 @@ msgstr "ikke tvunget"
msgid "forced"
msgstr "tvunget"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Fejl: Kun ren ASCII er tilladt i øjeblikket.\n"
@ -1841,6 +1860,9 @@ msgstr "ændr ejertroværdigheden"
msgid "change the User Interaction Flag"
msgstr "ændr ejertroværdigheden"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/card> "
@ -2090,11 +2112,6 @@ msgstr "nøgle %s: nøgle i PGP 2.x-stil - udeladt\n"
msgid "WARNING: nothing exported\n"
msgstr "ADVARSEL: intet blev eksporteret\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "fejl ved oprettelse af »%s«: %s\n"
msgid "[User ID not found]"
msgstr "[Bruger-id blev ikke fundet]"
@ -2564,6 +2581,11 @@ msgstr "vis tilbagekaldte og udløbne bruger-id'er i nøglevisninger"
msgid "show revoked and expired subkeys in key listings"
msgstr "vis tilbagekaldte og udløbne undernøgler i nøglevisninger"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "vis udløbsdatoer under underskriftvisninger"
msgid "show the keyring name in key listings"
msgstr "vis nøgleringsnavnet i nøglevisninger"
@ -3210,6 +3232,10 @@ msgstr "udelod: hemmelig nøgle er allerede til stede\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "fejl under afsendelse af %s-kommando: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3750,6 +3776,11 @@ msgstr "slet valgte undernøgler"
msgid "add a revocation key"
msgstr "tilføj en tilbagekaldsnøgle"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Datadekryptering lykkedes"
msgid "delete signatures from the selected user IDs"
msgstr "slet underskrifter fra de valgte bruger-id'er"
@ -3814,6 +3845,10 @@ msgstr "Hemmelig nøgle er tilgængelig.\n"
msgid "Secret subkeys are available.\n"
msgstr "Hemmelig nøgle er tilgængelig.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Har brug for den hemmelige nøgle for dette.\n"
@ -3937,6 +3972,11 @@ msgstr "Gem ændringer? (j/N) "
msgid "Quit without saving? (y/N) "
msgstr "Afslut uden at gemme? (j/N) "
#, fuzzy, c-format
#| msgid "deleting certificate \"%s\" failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "sletning af certifikat »%s« mislykkedes: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Nøgle ikke ændret så ingen opdatering krævet.\n"
@ -4192,6 +4232,19 @@ msgstr ""
"Er du sikker på, at du ønsker at udpege denne nøgle som en dedikeret "
"tilbagekalder? (j/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(med mindre du angiver nøglen med fingeraftryk)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Undernøgle %s er allerede tilbagekaldt.\n"
#, fuzzy
#| msgid ""
#| "Are you sure you want to appoint this key as a designated revoker? (y/N) "
@ -6059,10 +6112,6 @@ msgstr "DSA-nøgle %s kræver en %u bit eller større hash\n"
msgid "key %s may not be used for signing in %s mode\n"
msgstr "du kan ikke bruge %s i tilstanden %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "ADVARSEL: konflikt for underskriftssammendrag i besked\n"
@ -8323,11 +8372,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "kunne ikke oprette midlertidig fil »%s«: %s\n"
#, fuzzy, c-format
#| msgid "error closing %s: %s\n"
msgid "error closing '%s': %s\n"
msgstr "fejl ved lukning af %s: %s\n"
#, fuzzy, c-format
#| msgid "can't access `%s': %s\n"
msgid "can't hash '%s': %s\n"
@ -10484,9 +10528,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "skift mellem hemmelig og offentlig nøglevisning"
#~ msgid "Passphrase"
#~ msgstr "Adgangsfrase"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr "brug midlertidige filer til at sende data til nøgleserverhjælpere"

View File

@ -7,11 +7,11 @@
#
msgid ""
msgstr ""
"Project-Id-Version: gnupg-2.3.0\n"
"Project-Id-Version: gnupg-2.4.1\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
"PO-Revision-Date: 2023-03-21 09:31+0100\n"
"Last-Translator: Werner Koch <wk@gnupg.org>\n"
"Language-Team: German <de@li.org>\n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -127,6 +127,9 @@ msgstr "Passwort:"
msgid "does not match - try again"
msgstr "Keine Übereinstimmung - bitte nochmal versuchen."
msgid "Passphrases match."
msgstr "Passwort stimmt."
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1210,6 +1213,14 @@ msgstr "Warten auf die Freigabe der Dateisperre `%s' ...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "Die Bibliothek %s ist nicht aktuell (benötige %s, habe %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "Fehler beim Erstellen von `%s': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "Fehler beim Schließen von `%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "ASCII-Hülle: %s\n"
@ -1415,6 +1426,11 @@ msgstr "nicht zwingend"
msgid "forced"
msgstr "zwingend"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
"Falls das Listing nicht korrekt erscheint, geben Sie bitte \"%s\" ein\n"
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Fehler: Nur reines ASCII ist derzeit erlaubt.\n"
@ -1682,6 +1698,9 @@ msgstr "Das Schlüsselattribut ändern"
msgid "change the User Interaction Flag"
msgstr "Das User Interaction Flag (UIF) ändern"
msgid "switch to the OpenPGP app"
msgstr "Auf die OpenPGP Anwendung umschalten"
msgid "gpg/card> "
msgstr "gpg/card> "
@ -1919,10 +1938,6 @@ msgstr "Schlüssel %s: PGP 2.x-artiger Schlüssel - übersprungen\n"
msgid "WARNING: nothing exported\n"
msgstr "WARNUNG: Nichts exportiert\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "Fehler beim Erstellen von `%s': %s\n"
msgid "[User ID not found]"
msgstr "[User-ID nicht gefunden]"
@ -2336,6 +2351,9 @@ msgstr "Zeige widerrufene und verfallene User-ID in den Schlüssellisten"
msgid "show revoked and expired subkeys in key listings"
msgstr "Zeige widerrufene und verfallene Unterschlüssel in den Schlüssellisten"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Auch Signaturen mit ungültigen Algorithmen anlisten"
msgid "show the keyring name in key listings"
msgstr "Anzeigen des Schlüsselbundes, in dem ein Schlüssel drin ist"
@ -2957,6 +2975,11 @@ msgstr "Schlüssel %s: geheimer Schlüssel bereits vorhanden\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "Schlüssel %s: Fehler beim Senden zum gpg-agent: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
"Schlüssel %s: Der \"stub\" wurde durch einen realen Schlüssel ersetzt\n"
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3482,6 +3505,9 @@ msgstr "ausgewählte Unterschlüssel entfernen"
msgid "add a revocation key"
msgstr "Einen Widerrufschlüssel hinzufügen"
msgid "add an additional decryption subkey"
msgstr "Einen ADSK hinzufügen"
msgid "delete signatures from the selected user IDs"
msgstr "Beglaubigungen der ausgewählten User-IDs entfernen"
@ -3547,6 +3573,12 @@ msgstr "Geheimer Schlüssel ist vorhanden.\n"
msgid "Secret subkeys are available.\n"
msgstr "Geheimer Unterschlüssel ist vorhanden.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
"Hinweis: Die lokale Kopie des geheimen Schlüssels wird nur nach \"save\" "
"gelöscht.\n"
msgid "Need the secret key to do this.\n"
msgstr "Hierzu wird der geheime Schlüssel benötigt.\n"
@ -3660,6 +3692,10 @@ msgstr "Änderungen speichern? (j/N) "
msgid "Quit without saving? (y/N) "
msgstr "Beenden ohne zu speichern? (j/N) "
#, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "Fehler beim Löschen der Kopie des geheimen Schlüssels: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Schlüssel ist nicht geändert worden, also ist kein Speichern nötig.\n"
@ -3900,6 +3936,17 @@ msgstr ""
"Möchten Sie diesen Schlüssel wirklich als vorgesehenen Widerrufer festlegen? "
"(j/N): "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr "Geben Sie den Fingerprint des ADSK an: "
#, c-format
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "Haben Sie den Fingerprint des Unterschlüssels angegeben?\n"
#, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Den Schlüssel \"%s\" gibt es bereits in diesem Schlüsselblock\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5703,10 +5750,6 @@ msgid "key %s may not be used for signing in %s mode\n"
msgstr ""
"Schlüssel \"%s\" darf zum Signieren im %s Modus nicht verwendet werden.\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr "Die Prüfung wird aufgrund der Option %s weiter durchgeführt\n"
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "WARNUNG: Widersprechende Hashverfahren in der signierten Botschaft\n"
@ -7891,10 +7934,6 @@ msgstr ""
"Die temporäre Zwischenspeicherverzeichnisdatei `%s' konnte nicht erzeugt "
"werden: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "Fehler beim Schließen von `%s': %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "Hashwert von `%s' kann nicht gebildet werden: %s\n"
@ -9068,6 +9107,9 @@ msgstr "Verwaltungskommandos für Yubikeys"
msgid "manage the command history"
msgstr "Verwaltung der Kommandohistorie"
#~ msgid "continuing verification anyway due to option %s\n"
#~ msgstr "Die Prüfung wird aufgrund der Option %s weiter durchgeführt\n"
#~ msgid "selected AEAD algorithm is invalid\n"
#~ msgstr "Das ausgewählte AEAD-Verfahren ist ungültig\n"
@ -10030,9 +10072,6 @@ msgstr "Verwaltung der Kommandohistorie"
#~ msgstr ""
#~ "Umschalten zwischen dem Auflisten geheimer und öffentlicher Schlüssel"
#~ msgid "Passphrase"
#~ msgstr "Passwort"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr ""
#~ "verwende temporäre Dateien, um Daten an die Schlüsselserverhilfsprogramme "

View File

@ -123,6 +123,10 @@ msgstr "κακή φράση κλειδί"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "κακή φράση κλειδί"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1238,6 +1242,15 @@ msgstr "εγγραφή του μυστικού κλειδιού στο `%s'\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "σφάλμα κατά τη δημιουργία του `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "σφάλμα κατά την ανάγνωση του `%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "θωράκιση: %s\n"
@ -1453,6 +1466,10 @@ msgstr "μη επεξεργασμένο"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1732,6 +1749,9 @@ msgstr "αλλαγή της εμπιστοσύνης ιδιοκτήτη"
msgid "change the User Interaction Flag"
msgstr "αλλαγή της εμπιστοσύνης ιδιοκτήτη"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1988,11 +2008,6 @@ msgstr "κλειδί %08lX: κλειδί τύπου PGP 2.x - παραλείφ
msgid "WARNING: nothing exported\n"
msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: δεν έγινε καμμία εξαγωγή\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "σφάλμα κατά τη δημιουργία του `%s': %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[User id δεν βρέθηκε]"
@ -2445,6 +2460,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Δεν βρέθηκε αντίστοιχη υπογραφή στη μυστική κλειδοθήκη\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "απεικόνιση της κλειδοθήκης στην οποία αναφέρετε το κλειδί"
@ -3081,6 +3100,10 @@ msgstr "παραλείφθηκε: μυστικό κλειδί ήδη παρών\
msgid "key %s: error sending to agent: %s\n"
msgstr "σφάλμα στη αποστολή προς το `%s': %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3632,6 +3655,9 @@ msgstr "διαγραφή ενός δευτερεύοντος κλειδιού"
msgid "add a revocation key"
msgstr "προσθήκη ενός κλειδιού ανάκλησης"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr ""
@ -3709,6 +3735,10 @@ msgstr "Το μυστικό κλειδί είναι διαθέσιμο.\n"
msgid "Secret subkeys are available.\n"
msgstr "Το μυστικό κλειδί είναι διαθέσιμο.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Απαιτείται το μυστικό κλειδί για να γίνει αυτό.\n"
@ -3831,6 +3861,10 @@ msgstr "Αποθήκευση των αλλαγών; "
msgid "Quit without saving? (y/N) "
msgstr "Τερματισμός χωρίς αποθήκευση; "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "διαγραφή block κλειδιών απέτυχε: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Το κλειδί δεν άλλαξε οπότε δεν χρειάζεται ενημέρωση.\n"
@ -4083,6 +4117,18 @@ msgstr ""
"Είστε σίγουροι ότι θέλετε να ορίσετε ένα κλειδί σαν διορισμένο ανακλητή; (y/"
"N): "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(εκτός εάν προσδιορίσετε ένα κλειδί από αποτύπωμα)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "το user ID \"%s\" έχει ήδη ανακληθεί\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5921,10 +5967,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "απαγορεύετε η χρήση του %s στην κατάσταση %s.\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: σύγκρουση υπογραφής περίληψης στο μήνυμα\n"
@ -8085,10 +8127,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "αδυναμία δημιουργίας καταλόγου `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "σφάλμα κατά την ανάγνωση του `%s': %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "αδυναμία κλεισίματος του `%s': %s\n"
@ -9961,10 +9999,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "αλλαγή μεταξύ της απεικόνισης μυστικού και δημόσιου κλειδιού"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "κακή φράση κλειδί"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr ""

View File

@ -123,6 +123,10 @@ msgstr "malbona pasfrazo"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "malbona pasfrazo"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1242,6 +1246,15 @@ msgstr "skribas sekretan ŝlosilon al '%s'\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "eraro dum kreado de '%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "eraro dum legado de '%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "kiraso: %s\n"
@ -1452,6 +1465,10 @@ msgstr "ne traktita"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1731,6 +1748,9 @@ msgstr "ŝanĝi la posedantofidon"
msgid "change the User Interaction Flag"
msgstr "ŝanĝi la posedantofidon"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1972,11 +1992,6 @@ msgstr "ŝlosilo %08lX: PGP-2.x-stila ŝlosilo - ignorita\n"
msgid "WARNING: nothing exported\n"
msgstr "AVERTO: nenio estis eksportita\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "eraro dum kreado de '%s': %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[Uzantidentigilo ne trovita]"
@ -2426,6 +2441,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Mankas responda subskribo en sekreta ŝlosilaro\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "montri, en kiu ŝlosilaro estas listigita ŝlosilo"
@ -3055,6 +3074,10 @@ msgstr "ignorita: sekreta ŝlosilo jam ĉeestas\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "eraro dum sendo al '%s': %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3612,6 +3635,9 @@ msgstr "forviŝi flankan ŝlosilon"
msgid "add a revocation key"
msgstr "aldoni flankan ŝlosilon"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr "Ĉu vere aktualigi la preferojn por la elektitaj uzantidentigiloj? "
@ -3686,6 +3712,10 @@ msgstr "Sekreta ŝlosilo estas havebla.\n"
msgid "Secret subkeys are available.\n"
msgstr "Sekreta ŝlosilo estas havebla.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Bezonas la sekretan ŝlosilon por fari tion.\n"
@ -3808,6 +3838,10 @@ msgstr "Ĉu skribi ŝanĝojn? "
msgid "Quit without saving? (y/N) "
msgstr "Ĉu fini sen skribi ŝanĝojn? "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "forviŝo de ŝlosilbloko malsukcesis: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Ŝlosilo ne ŝanĝita, do aktualigo ne necesas.\n"
@ -4050,6 +4084,17 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Ĉu vi estas certa, ke vi ankoraŭ volas subskribi ĝin?\n"
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "malsukcesis doni komencajn valorojn al fido-datenaro: %s\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Uzantidentigilo \"%s\" estas revokita.\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5853,10 +5898,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "Tiu komando ne eblas en la reĝimo %s.\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr ""
@ -7997,10 +8038,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "%s: ne povas krei dosierujon: %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "eraro dum legado de '%s': %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "ne povas fermi '%s': %s\n"
@ -9838,10 +9875,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "de sekreta aŭ publika listo iri al la alia"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "malbona pasfrazo"
#~ msgid "gpg-agent is not available in this session\n"
#~ msgstr "gpg-agent ne estas disponata en ĉi tiu sesio\n"

View File

@ -136,6 +136,20 @@ msgstr "Frase contraseña:"
msgid "does not match - try again"
msgstr "no coincide - reinténtelo"
# ¿Por qué no frase de paso?
# Porque todo el mundo sabe lo que es una contraseña
# y una "frase de paso" no. Soy consciente de que se
# traduce igual password y passphrase pero el contexto
# permite saber de lo que se está hablando.
# No sé, no sé.
# ¿Por qué los ingleses entonces sí que saben lo que es un "passphrase"?
# ¿Es que son más listos? :-)
#
#, fuzzy
#| msgid "Passphrase"
msgid "Passphrases match."
msgstr "Frase contraseña"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1248,6 +1262,14 @@ msgstr "esperando al bloqueo %s...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s es demasiado antiguo (necesita %s, tiene %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "error al crear '%s': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "error al cerrar '%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armadura: %s\n"
@ -1459,6 +1481,10 @@ msgstr "no forzado"
msgid "forced"
msgstr "forzado"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Error: sólo se permite ASCII sin formato actualmente.\n"
@ -1732,6 +1758,9 @@ msgstr "cambia valores de la clave"
msgid "change the User Interaction Flag"
msgstr "cambia valores de confianza"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/tarjeta> "
@ -1967,10 +1996,6 @@ msgstr "clave %s: clave estilo PGP 2.x - omitida\n"
msgid "WARNING: nothing exported\n"
msgstr "ATENCIÓN: no se ha exportado nada\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "error al crear '%s': %s\n"
msgid "[User ID not found]"
msgstr "[ID de usuario no encontrado]"
@ -2392,6 +2417,11 @@ msgstr "mostar IDs de usuario revocados y caducados al listar firmas"
msgid "show revoked and expired subkeys in key listings"
msgstr "mostrar subclaves revocadas y expiradas al listar claves"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "mostrar fechas de caducidad al listar firmas"
msgid "show the keyring name in key listings"
msgstr "mostrar nombre de los anillos de claves al listar claves"
@ -3015,6 +3045,10 @@ msgstr "clave %s: clave secreta ya existe\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "clave %s: error enviando al agente: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3527,6 +3561,11 @@ msgstr "borrar clave secundaria"
msgid "add a revocation key"
msgstr "añadir una clave de revocación"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Datos descifrados correctamente"
msgid "delete signatures from the selected user IDs"
msgstr "borrar firmas de los ID seleccionados"
@ -3587,6 +3626,10 @@ msgstr "Clave secreta disponible.\n"
msgid "Secret subkeys are available.\n"
msgstr "Subclaves secretas disponibles.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Se necesita la clave secreta para hacer esto.\n"
@ -3698,6 +3741,11 @@ msgstr "¿Grabar cambios? (s/N) "
msgid "Quit without saving? (y/N) "
msgstr "¿Salir sin grabar? (s/N) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "ha fallado el borrado del secreto %s: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Clave sin cambios, no se necesita actualización.\n"
@ -3934,6 +3982,19 @@ msgid ""
msgstr ""
"¿Está seguro de querer elegir esta clave como revocador designado? (s/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(excepto si especifica la clave dando su huella digital)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "La subclave %s ya ha sido revocada.\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5743,10 +5804,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "no puede usar la clave %s para firmar en modo %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "AVISO: conflicto con el resumen de la firma del mensaje\n"
@ -7897,10 +7954,6 @@ msgstr "chequea el problema y borra este archivo manualmente\n"
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "no se puede crear el fichero de cache '%s': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "error al cerrar '%s': %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "no se puede hacer el hash de '%s': %s\n"
@ -9937,18 +9990,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "cambiar entre lista de claves secretas y públicas"
# ¿Por qué no frase de paso?
# Porque todo el mundo sabe lo que es una contraseña
# y una "frase de paso" no. Soy consciente de que se
# traduce igual password y passphrase pero el contexto
# permite saber de lo que se está hablando.
# No sé, no sé.
# ¿Por qué los ingleses entonces sí que saben lo que es un "passphrase"?
# ¿Es que son más listos? :-)
#
#~ msgid "Passphrase"
#~ msgstr "Frase contraseña"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr ""
#~ "usar ficheros temporales para pasar datos a los ayudantes delservidor de "

View File

@ -120,6 +120,10 @@ msgstr "halb parool"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "halb parool"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1235,6 +1239,15 @@ msgstr "kirjutan salajase võtme faili `%s'\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "viga `%s' loomisel: %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "viga `%s' lugemisel: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "pakend: %s\n"
@ -1449,6 +1462,10 @@ msgstr "ei töödeldud"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1728,6 +1745,9 @@ msgstr "muuda omaniku usaldust"
msgid "change the User Interaction Flag"
msgstr "muuda omaniku usaldust"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1978,11 +1998,6 @@ msgstr "võti %08lX: PGP 2.x stiilis võti - jätsin vahele\n"
msgid "WARNING: nothing exported\n"
msgstr "HOIATUS: midagi ei eksporditud\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "viga `%s' loomisel: %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[Kasutaja id puudub]"
@ -2433,6 +2448,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Vastavat allkirja salajaste võtmete hoidlas pole\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "näita millisesse võtmehoidlasse näidatud võti kuulub"
@ -3066,6 +3085,10 @@ msgstr "jätsin vahele: avalik võti on juba olemas\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "viga teate saatmisel serverile `%s': %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3608,6 +3631,9 @@ msgstr "kustuta sekundaarne võti"
msgid "add a revocation key"
msgstr "lisa tühistamise võti"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr "Kas uuendan tõesti kõik kasutaja ID-de seaded? "
@ -3682,6 +3708,10 @@ msgstr "Salajane võti on kasutatav.\n"
msgid "Secret subkeys are available.\n"
msgstr "Salajane võti on kasutatav.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Selle tegamiseks on vaja salajast võtit.\n"
@ -3803,6 +3833,10 @@ msgstr "Salvestan muutused? "
msgid "Quit without saving? (y/N) "
msgstr "Väljun salvestamata? "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "võtmebloki kustutamine ebaõnnestus: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Võtit ei muudetud, seega pole uuendamist vaja.\n"
@ -4047,6 +4081,18 @@ msgid ""
msgstr ""
"Olete kindel, et soovite seda võtit seada määratud tühistajaks? (j/E): "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(kui te just ei määra võtit sõrmejäljega)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "kasutaja ID \"%s\" on juba tühistatud\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5862,10 +5908,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "%s ei ole moodis %s lubatud.\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "HOIATUS: allkirja lühend on teatega konfliktne\n"
@ -8002,10 +8044,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "kataloogi `%s' ei õnnestu luua: %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "viga `%s' lugemisel: %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "`%s' ei õnnestu sulgeda: %s\n"
@ -9869,10 +9907,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "lülita salajaste või avalike võtmete loendi vahel"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "halb parool"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr "HOIATUS: seaded failis `%s' pole seekord veel aktiivsed\n"

View File

@ -136,6 +136,10 @@ msgstr "väärä salasana"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "väärä salasana"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1252,6 +1256,15 @@ msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "virhe luotaessa \"%s\": %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "virhe luettaessa tiedostoa \"%s\": %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "ascii-koodaus: %s\n"
@ -1468,6 +1481,10 @@ msgstr "ei käsitelty"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1747,6 +1764,9 @@ msgstr "muuta luottamusastetta"
msgid "change the User Interaction Flag"
msgstr "muuta luottamusastetta"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1995,11 +2015,6 @@ msgstr "avain %08lX: PGP 2.x -muodon avain - ohitetaan\n"
msgid "WARNING: nothing exported\n"
msgstr "VAROITUS: mitään ei viety\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "virhe luotaessa \"%s\": %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[Käyttäjätunnusta ei löytynyt]"
@ -2450,6 +2465,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Salaisesta avainrenkaasta ei löydy vastaavaa allekirjoitusta\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "näytä mihin avainrenkaaseen tulostettu avain kuuluu"
@ -3086,6 +3105,10 @@ msgstr "ohitetaan: salainen avain on jo paikalla\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "virhe lähettäessä kohteeseen \"%s\": %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3632,6 +3655,9 @@ msgstr "poista toissijainen avain"
msgid "add a revocation key"
msgstr "lisää mitätöintiavain"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr "Varmastiko päivitä valinnat näille käyttäjätunnuksille? "
@ -3706,6 +3732,10 @@ msgstr "Salainen avain on saatavilla.\n"
msgid "Secret subkeys are available.\n"
msgstr "Salainen avain on saatavilla.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Tähän tarvitaan salainen avain.\n"
@ -3827,6 +3857,10 @@ msgstr "Tallenna muutokset? "
msgid "Quit without saving? (y/N) "
msgstr "Lopeta tallentamatta muutoksia?"
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "avainlohkojen poisto epäonnistui: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Päivitystä ei tarvita, koska avain ei ole muuttunut.\n"
@ -4072,6 +4106,18 @@ msgid ""
msgstr ""
"Haluatko varmasti nimittää tämän avaimen määrätyksi mitätöijäksi? (k/E): "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(ellet määritä avainta sormenjäljen perusteella)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "käyttäjätunnus \"%s\" on jo mitätöity\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5912,10 +5958,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "valitsinta %s ei voi käyttää %s-tilassa\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "VAROITUS: allekirjoitustiiviste ei täsmää viestin kanssa\n"
@ -8068,10 +8110,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "hakemiston \"%s\" luominen ei onnistu: %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "virhe luettaessa tiedostoa \"%s\": %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "tiedostoa \"%s\" ei voi sulkea: %s\n"
@ -9943,10 +9981,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "vaihda salaisten ja julkisten avainten luettelon välillä"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "väärä salasana"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr ""

View File

@ -140,6 +140,11 @@ msgstr "Phrase secrète :"
msgid "does not match - try again"
msgstr "ne correspond pas — veuillez réessayer"
#, fuzzy
#| msgid "Passphrase"
msgid "Passphrases match."
msgstr "Phrase secrète"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1265,6 +1270,14 @@ msgstr "attente du verrou %s…\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s est trop ancien (nécessaire : %s, utilisé : %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "erreur de création de « %s » : %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "erreur de fermeture de « %s » : %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armure : %s\n"
@ -1485,6 +1498,10 @@ msgstr "non forcé"
msgid "forced"
msgstr "forcé"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Erreur : seul l'ASCII standard est permis pour l'instant.\n"
@ -1781,6 +1798,9 @@ msgstr "modifier la confiance du propriétaire"
msgid "change the User Interaction Flag"
msgstr "modifier la confiance du propriétaire"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/carte> "
@ -2021,10 +2041,6 @@ msgstr "clef %s : clef de type PGP 2.x — ignorée\n"
msgid "WARNING: nothing exported\n"
msgstr "Attention : rien n'a été exporté\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "erreur de création de « %s » : %s\n"
msgid "[User ID not found]"
msgstr "[identité introuvable]"
@ -2488,6 +2504,11 @@ msgstr "montrer les identités révoquées et expirées en affichant les clefs"
msgid "show revoked and expired subkeys in key listings"
msgstr "indiquer les sous-clefs révoquées et expirées en affichant les clefs"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "montrer les dates d'expiration en affichant les signatures"
msgid "show the keyring name in key listings"
msgstr "montrer le nom du porte-clefs en affichant les clefs"
@ -3127,6 +3148,10 @@ msgstr "clef %s : la clef secrète clef existe déjà\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "clef %s : erreur d'envoi à l'agent : %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3649,6 +3674,11 @@ msgstr "supprimer les sous-clefs sélectionnées"
msgid "add a revocation key"
msgstr "ajouter une clef de révocation"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Déchiffrement des données réussi"
msgid "delete signatures from the selected user IDs"
msgstr "supprimer les signatures des identités sélectionnées"
@ -3716,6 +3746,10 @@ msgstr "La clef secrète est disponible.\n"
msgid "Secret subkeys are available.\n"
msgstr "La clef secrète est disponible.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "La clef secrète est nécessaire pour faire cela.\n"
@ -3830,6 +3864,11 @@ msgstr "Faut-il enregistrer les modifications ? (o/N) "
msgid "Quit without saving? (y/N) "
msgstr "Faut-il quitter sans enregistrer ? (o/N) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "échec de suppression de %s secrète : %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "La clef n'a pas été modifiée donc la mise à jour est inutile.\n"
@ -4080,6 +4119,19 @@ msgid ""
msgstr ""
"Voulez-vous vraiment rendre cette clef comme révocateur désigné ? (o/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(à moins d'indiquer la clef par son empreinte)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "La sous-clef %s est déjà révoquée.\n"
#, fuzzy
#| msgid ""
#| "Are you sure you want to appoint this key as a designated revoker? (y/N) "
@ -5976,10 +6028,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "impossible d'utiliser %s en mode %s.\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "Attention : conflit de hachage de signature dans le message\n"
@ -8210,10 +8258,6 @@ msgstr "veuillez vérifier la raison et effacer vous-même ce fichier\n"
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "impossible de créer le répertoire de cache temporaire « %s » : %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "erreur de fermeture de « %s » : %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "impossible de hacher « %s » : %s\n"
@ -10314,9 +10358,6 @@ msgstr ""
#~ "passer de la liste de clefs secrètes à celle de clefs privées ou vice "
#~ "versa"
#~ msgid "Passphrase"
#~ msgstr "Phrase secrète"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr ""
#~ "utiliser des fichiers temporaires pour passer les données aux assistants "

View File

@ -121,6 +121,10 @@ msgstr "contrasinal erróneo"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "contrasinal erróneo"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1244,6 +1248,15 @@ msgstr "gravando a chave secreta en `%s'\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "erro ao crear `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "erro lendo `%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armadura: %s\n"
@ -1459,6 +1472,10 @@ msgstr "non procesado"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1738,6 +1755,9 @@ msgstr "cambia-la confianza sobre o dono"
msgid "change the User Interaction Flag"
msgstr "cambia-la confianza sobre o dono"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1987,11 +2007,6 @@ msgstr "chave %08lX: chave estilo PGP 2.x - omitida\n"
msgid "WARNING: nothing exported\n"
msgstr "AVISO: non se exportou nada\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "erro ao crear `%s': %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[Non se atopou o id de usuario]"
@ -2441,6 +2456,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Non hai unha sinatura correspondiente no chaveiro secreto\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "amosar en que chaveiro está unha chave listada"
@ -3073,6 +3092,10 @@ msgstr "omítese: a chave secreta xa está presente\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "erro ao enviar a `%s': %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3624,6 +3647,9 @@ msgstr "borrar unha chave secundaria"
msgid "add a revocation key"
msgstr "engadir unha chave de revocación"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr ""
@ -3704,6 +3730,10 @@ msgstr "A chave secreta está disponible.\n"
msgid "Secret subkeys are available.\n"
msgstr "A chave secreta está disponible.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Cómpre a chave secreta para facer isto.\n"
@ -3827,6 +3857,10 @@ msgstr "¿Garda-los cambios? "
msgid "Quit without saving? (y/N) "
msgstr "¿Saír sin gardar? "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "fallou o borrado do bloque de chaves: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "A chave non cambiou, polo que non fai falla actualizar.\n"
@ -4078,6 +4112,18 @@ msgid ""
msgstr ""
"¿Está seguro de que quere nomear esta chave coma revocador designado? (s/N): "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(a menos que especifique a chave por pegada dactilar)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "o ID de usuario \"%s\" xa está revocado\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5912,10 +5958,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "non se pode empregar %s no modo %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "AVISO: conflicto de resumo de sinatura na mensaxe\n"
@ -8076,10 +8118,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "non se pode crea-lo directorio `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "erro lendo `%s': %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "non se pode pechar `%s': %s\n"
@ -9961,10 +9999,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "cambiar entre o listado de chaves públicas e secretas"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "contrasinal erróneo"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr "AVISO: as opcións de `%s' aínda non están activas nesta execución\n"

View File

@ -120,6 +120,10 @@ msgstr "rossz jelszó"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "rossz jelszó"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1235,6 +1239,15 @@ msgstr "Írom a titkos kulcsot a %s állományba.\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "Hiba \"%s\" létrehozásakor: %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "Hiba \"%s\" olvasásakor: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "Páncél: %s\n"
@ -1449,6 +1462,10 @@ msgstr "nem feldolgozott"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1728,6 +1745,9 @@ msgstr "kulcstulajdonos megbízhatóságának beállítása"
msgid "change the User Interaction Flag"
msgstr "kulcstulajdonos megbízhatóságának beállítása"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1978,11 +1998,6 @@ msgstr "%08lX kulcs: PGP 2.x stílusú kulcs - kihagytam.\n"
msgid "WARNING: nothing exported\n"
msgstr "FIGYELEM: Semmit sem exportáltam.\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "Hiba \"%s\" létrehozásakor: %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[ismeretlen kulcs]"
@ -2433,6 +2448,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Nincs megfelelő aláírás a titkoskulcs-karikán.\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "mutatja a kilistázott kulcs kulcskarikáját is"
@ -3065,6 +3084,10 @@ msgstr "Kihagytam: titkos kulcs már jelen van.\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "Hiba %s-ra/-re küldéskor: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3609,6 +3632,9 @@ msgstr "másodlagos kulcs törlése"
msgid "add a revocation key"
msgstr "visszavonó kulcs hozzáadása"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr "Valóban frissíti a kijelölt felhasználóazonosítók preferenciáit? "
@ -3683,6 +3709,10 @@ msgstr "Titkos kulcs rendelkezésre áll.\n"
msgid "Secret subkeys are available.\n"
msgstr "Titkos kulcs rendelkezésre áll.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Ehhez szükség van a titkos kulcsra.\n"
@ -3804,6 +3834,10 @@ msgstr "Mentsem a változtatásokat? "
msgid "Quit without saving? (y/N) "
msgstr "Kilépjek mentés nélkül? "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "A kulcsblokk törlése sikertelen: %s.\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "A kulcs nem változott, nincs szükség frissítésre.\n"
@ -4051,6 +4085,18 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Biztosan ez a kulcs legyen a kijelölt visszavonó? (i/N): "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(Kivéve, ha megad egy kulcsot az ujjlenyomatával.)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "\"%s\" felhasználói azonosítót már visszavonták.\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5877,10 +5923,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "Lehet, hogy nem használhatja %s-t %s módban!\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "FIGYELEM: Aláíráskivonat-konfliktus az üzenetben.\n"
@ -8029,10 +8071,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "Nem tudom a \"%s\" könyvtárat létrehozni: %s.\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "Hiba \"%s\" olvasásakor: %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "Nem tudom bezárni a(z) \"%s\" állományt: %s.\n"
@ -9901,10 +9939,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "váltás a titkos és a nyilvános kulcs listázása között"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "rossz jelszó"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr ""

View File

@ -125,6 +125,10 @@ msgstr "passphrase yang buruk"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "passphrase yang buruk"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1240,6 +1244,15 @@ msgstr "menulis kunci rahasia ke `%s'\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "kesalahan penciptaan : `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "kesalahan membaca `%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armor: %s\n"
@ -1455,6 +1468,10 @@ msgstr "tidak diproses"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1734,6 +1751,9 @@ msgstr "ubah ownertrust"
msgid "change the User Interaction Flag"
msgstr "ubah ownertrust"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1984,11 +2004,6 @@ msgstr "kunci %08lX: kunci gaya PGP 2.x - dilewati\n"
msgid "WARNING: nothing exported\n"
msgstr "PERINGATAN: tidak ada yang diekspor\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "kesalahan penciptaan : `%s': %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[User id tidak ditemukan]"
@ -2437,6 +2452,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Tidak ada signature koresponden di ring rahasia\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "tampilkan keyring tempat kunci yang dipilih berada"
@ -3071,6 +3090,10 @@ msgstr "dilewati: kunci pribadi telah ada\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "kesalahan mengirim ke `%s': %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3615,6 +3638,9 @@ msgstr "hapus kunci sekunder"
msgid "add a revocation key"
msgstr "tambah kunci pembatalan"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr "Perbarui preferensi untuk user ID terpilih?"
@ -3689,6 +3715,10 @@ msgstr "Kunci rahasia tersedia.\n"
msgid "Secret subkeys are available.\n"
msgstr "Kunci rahasia tersedia.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Perlu kunci rahasia untuk melakukan hal ini.\n"
@ -3810,6 +3840,10 @@ msgstr "Simpan perubahan? "
msgid "Quit without saving? (y/N) "
msgstr "Berhenti tanpa menyimpan? "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "gagal menghapus keyblok: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Kunci tidak berubah sehingga tidak perlu pembaharuan.\n"
@ -4061,6 +4095,18 @@ msgid ""
msgstr ""
"Anda yakin ingin menunjuk kunci inin sebagai pihak yang dibatalkan? (y/N):"
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(kecuali anda menspesifikasikan kunci dengan fingerprint)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "User ID \"%s\" telah dibatalkan\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5879,10 +5925,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "anda tidak boleh menggunakan %s saat dalam mode %s.\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "Peringatan: konflik digest signature dalam pesan\n"
@ -8028,10 +8070,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "tidak dapat membuat direktori `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "kesalahan membaca `%s': %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "tidak dapat menutup `%s': %s\n"
@ -9898,10 +9936,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "ubah tampilan kunci rahasia dan publik"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "passphrase yang buruk"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr "PERINGATAN: opsi dalam `%s' belum aktif selama pelaksanaan ini\n"

View File

@ -121,6 +121,11 @@ msgstr "Passphrase:"
msgid "does not match - try again"
msgstr "non corrisponde - riprova"
#, fuzzy
#| msgid "Passphrase Entry"
msgid "Passphrases match."
msgstr "Voce passphrase"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1204,6 +1209,14 @@ msgstr "attesa del blocco %s...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s è troppo vecchio (è necessario %s, con %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "errore durante la creazione di '%s': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "errore durante la chiusura di '%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armatura: %s\n"
@ -1408,6 +1421,10 @@ msgstr "non forzato"
msgid "forced"
msgstr "costretto"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Errore: al momento è consentito solo ASCII semplice.\n"
@ -1676,6 +1693,9 @@ msgstr "modificare l'attributo chiave"
msgid "change the User Interaction Flag"
msgstr "modificare il contrassegno interazione utente"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/card> "
@ -1915,10 +1935,6 @@ msgstr "chiave %s: chiave di stile PGP 2.x - ignorata\n"
msgid "WARNING: nothing exported\n"
msgstr "ATTENZIONE: non è stato esportato nulla\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "errore durante la creazione di '%s': %s\n"
msgid "[User ID not found]"
msgstr "[ID utente non trovato]"
@ -2330,6 +2346,11 @@ msgstr "mostra ID utente revocati e scaduti negli elenchi di chiavi"
msgid "show revoked and expired subkeys in key listings"
msgstr "mostra sottochiavi revocate e scadute negli elenchi di chiavi"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "mostra date di scadenza durante le inserzioni delle firme"
msgid "show the keyring name in key listings"
msgstr "mostrare il nome del keyring negli elenchi delle chiavi"
@ -2951,6 +2972,10 @@ msgstr "chiave %s: chiave segreta già esistente\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "chiave %s: errore durante l'invio all'agente: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3468,6 +3493,11 @@ msgstr "eliminare le sottochiavi selezionate"
msgid "add a revocation key"
msgstr "aggiungi una chiave di revoca"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Decrittografia dei dati riuscita"
msgid "delete signatures from the selected user IDs"
msgstr "eliminare le firme dagli ID utente selezionati"
@ -3535,6 +3565,13 @@ msgstr "È disponibile una chiave segreta.\n"
msgid "Secret subkeys are available.\n"
msgstr "Sono disponibili sottochiavi segrete.\n"
#, fuzzy
#| msgid "Note: Only the secret part of the shown subkey will be deleted.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
"Nota: verrà eliminata solo la parte segreta della sottochiave visualizzata.\n"
msgid "Need the secret key to do this.\n"
msgstr "Per fare questo serve la chiave segreta.\n"
@ -3645,6 +3682,11 @@ msgstr "Salvare le modifiche? (y/N) "
msgid "Quit without saving? (y/N) "
msgstr "Uscire senza salvare? (y/N) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "eliminazione del segreto %s non riuscita: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "La chiave non è cambiata quindi non sono necessari aggiornamenti.\n"
@ -3887,6 +3929,19 @@ msgid ""
msgstr ""
"Sei sicuro di voler nominare questa chiave come revocatore designato? (y/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(a meno che la chiave sia specificata con il fingerprint)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "La sottochiave %s è già stata revocata.\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5676,10 +5731,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "impossibile utilizzare la chiave %s per l'accesso in modalità %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "ATTENZIONE: conflitto del digest delle firme nel messaggio\n"
@ -7832,10 +7883,6 @@ msgstr "si prega di controllare il motivo ed eliminare manualmente quel file\n"
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "impossibile creare il file dir della cache temporanea '%s': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "errore durante la chiusura di '%s': %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "impossibile eseguire l'hashing '%s': %s\n"

View File

@ -5,13 +5,13 @@
# Yoshihiro Kajiki <kajiki@ylug.org>, 1999.
# Takashi P.KATOH, 2002.
# NIIBE Yutaka <gniibe@fsij.org>, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
# 2020, 2021, 2022.
# 2020, 2021, 2022, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: gnupg 2.4.0\n"
"Project-Id-Version: gnupg 2.4.1\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
"PO-Revision-Date: 2023-01-26 15:24+0900\n"
"PO-Revision-Date: 2023-04-26 13:35+0900\n"
"Last-Translator: NIIBE Yutaka <gniibe@fsij.org>\n"
"Language-Team: none\n"
"Language: ja\n"
@ -124,6 +124,9 @@ msgstr "パスフレーズ:"
msgid "does not match - try again"
msgstr "一致しません - もう一度"
msgid "Passphrases match."
msgstr "パスフレーズが一致。"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1186,6 +1189,14 @@ msgstr "lock %s を待ちます...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s が古すぎます (%s が必要、現在 %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "'%s'の作成エラー: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "'%s'でクローズのエラー: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "外装: %s\n"
@ -1388,6 +1399,10 @@ msgstr "強制なし"
msgid "forced"
msgstr "強制"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr "一覧が正しくないように見える場合、コマンド \"%s\" を試してください\n"
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "エラー: 普通のASCIIだけが今、許可されています。\n"
@ -1648,6 +1663,9 @@ msgstr "鍵の属性の変更"
msgid "change the User Interaction Flag"
msgstr "ユーザインタラクションフラグの変更"
msgid "switch to the OpenPGP app"
msgstr "OpenPGP app にスイッチします"
msgid "gpg/card> "
msgstr "gpg/card> "
@ -1855,7 +1873,7 @@ msgstr "'%s'への書き込み\n"
#, c-format
msgid "key %s: key material on-card - skipped\n"
msgstr "鍵%s: 鍵はカード上にあります - スキップします\n"
msgstr "鍵%s: 鍵マテリアルはカード上にあります - スキップします\n"
#, c-format
msgid "exporting secret keys not allowed\n"
@ -1869,10 +1887,6 @@ msgstr "鍵%s: PGP 2.x形式の鍵です - スキップします\n"
msgid "WARNING: nothing exported\n"
msgstr "*警告*: 何もエクスポートされていません\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "'%s'の作成エラー: %s\n"
msgid "[User ID not found]"
msgstr "[ユーザIDが見つかりません]"
@ -2270,6 +2284,9 @@ msgstr "鍵の一覧に失効したユーザID、期限切れとなったユー
msgid "show revoked and expired subkeys in key listings"
msgstr "鍵の一覧に失効した副鍵、期限切れとなった副鍵を表示する"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "署名の一覧時に無効なアルゴリズムの署名を表示する"
msgid "show the keyring name in key listings"
msgstr "鍵の一覧に鍵リングの名前を表示する"
@ -2878,6 +2895,10 @@ msgstr "鍵 %s: 秘密鍵はもうあります\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "鍵 %s: エージェントへの送信エラー: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr "鍵 %s: カード参照が鍵マテリアルで上書きされます\n"
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3374,6 +3395,9 @@ msgstr "選択した副鍵の削除"
msgid "add a revocation key"
msgstr "失効鍵の追加"
msgid "add an additional decryption subkey"
msgstr "追加の復号用の副鍵を足す"
msgid "delete signatures from the selected user IDs"
msgstr "選択したユーザIDから署名を削除する"
@ -3434,6 +3458,10 @@ msgstr "秘密鍵が利用できます。\n"
msgid "Secret subkeys are available.\n"
msgstr "秘密副鍵が利用できます。\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr "注意: 秘密鍵のローカルなコピーは\"save\"だけで削除されます。\n"
msgid "Need the secret key to do this.\n"
msgstr "この実行には秘密鍵がいります。\n"
@ -3541,6 +3569,10 @@ msgstr "変更を保存しますか? (y/N) "
msgid "Quit without saving? (y/N) "
msgstr "保存せずに終了しますか? (y/N) "
#, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "秘密鍵のコピーの削除に失敗しました: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "鍵は無変更なので更新は不要です。\n"
@ -3770,6 +3802,17 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "本当にこの鍵を指名失効者に任命しますか? (y/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr "追加の復号用の副鍵のフィンガー・プリントを入力してください:"
#, c-format
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "副鍵のフィンガー・プリントを指定しましたか?\n"
#, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "鍵 \"%s\" は、もうこの鍵ブロックにあります。\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5495,10 +5538,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "鍵%sを署名のために%sモードで使うことはできません\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr "オプション %sのため、検証を続けます\n"
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "*警告*: 署名のダイジェストが、メッセージと衝突します\n"
@ -7545,10 +7584,6 @@ msgstr "理由を確認し、手動でそのファイルを削除してくださ
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "一時キャッシュ・ディレクトリ・ファイル'%s'が作成できません: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "'%s'でクローズのエラー: %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "'%s'をハッシュできません: %s\n"
@ -8696,6 +8731,9 @@ msgstr "Yubikey管理コマンド"
msgid "manage the command history"
msgstr "コマンド履歴を管理する"
#~ msgid "continuing verification anyway due to option %s\n"
#~ msgstr "オプション %sのため、検証を続けます\n"
#~ msgid "selected AEAD algorithm is invalid\n"
#~ msgstr "選択されたAEADアルゴリズムは無効です\n"
@ -9499,9 +9537,6 @@ msgstr "コマンド履歴を管理する"
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "秘密鍵と公開鍵の一覧の反転"
#~ msgid "Passphrase"
#~ msgstr "パスフレーズ"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr "キーサーバ・ヘルパーにデータを与える際、一時ファイルを使う"

View File

@ -133,6 +133,11 @@ msgstr "Passordfrase:"
msgid "does not match - try again"
msgstr "feil. Prøv igjen"
#, fuzzy
#| msgid "Passphrase Entry"
msgid "Passphrases match."
msgstr "Skriving av passordfrase"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1217,6 +1222,14 @@ msgstr "venter på lås %s …\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s er for gammel (krever %s, har %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "feil under oppretting av «%s»: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "feil under lukking av «%s»: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armor: %s\n"
@ -1427,6 +1440,10 @@ msgstr "ikke tvunget"
msgid "forced"
msgstr "tvunget"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Feil: Bare ren ASCII er foreløpig tillatt.\n"
@ -1711,6 +1728,9 @@ msgstr "endre eiertillit"
msgid "change the User Interaction Flag"
msgstr "endre eiertillit"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/kort> "
@ -1946,10 +1966,6 @@ msgstr "nøkkel %s: PGP 2.x-aktig nøkkel - hoppet over\n"
msgid "WARNING: nothing exported\n"
msgstr "ADVARSEL: ingenting eksportert\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "feil under oppretting av «%s»: %s\n"
msgid "[User ID not found]"
msgstr "[Fant ikke bruker-ID]"
@ -2361,6 +2377,11 @@ msgstr "vis opphevede og utgåtte bruker-id-er i nøkkelvisning"
msgid "show revoked and expired subkeys in key listings"
msgstr "vis opphevede og utgåtte undernøkler i nøkkelvisning"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "vis utløpsdatoer i nøkkelvisning"
msgid "show the keyring name in key listings"
msgstr "vis nøkkelknippe-navn i nøkkelvisning"
@ -2982,6 +3003,10 @@ msgstr "nøkkel %s: hemmelig nøkkel finnes allerede\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "nøkkel %s: feil under sending til agent: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3496,6 +3521,11 @@ msgstr "slett valgte undernøkler"
msgid "add a revocation key"
msgstr "legg til opphevingsnøkkel"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Datadekryptering fullført"
msgid "delete signatures from the selected user IDs"
msgstr "slett signaturer fra valgte bruker-id-er"
@ -3561,6 +3591,10 @@ msgstr "Hemmelig nøkkel er tilgjengelig.\n"
msgid "Secret subkeys are available.\n"
msgstr "Hemmelig nøkkel er tilgjengelig.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Du trenger tilhørende hemmelig nøkkel for å gjøre dette.\n"
@ -3672,6 +3706,11 @@ msgstr "Vil du lagre endringer? (j/N) "
msgid "Quit without saving? (y/N) "
msgstr "Vil du avslutte uten å lagre? (j/N) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "sletting av hemmelig nøkkel %s mislyktes: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Nøkkelen ble ikke endret, så ingen oppdatering er nødvendig.\n"
@ -3907,6 +3946,19 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Er du sikker på at du vil gjøre denne nøkkelen til en opphever? (j/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(med mindre du oppgir nøkkel ved hjelp av fingeravtrykk)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Undernøkkel %s er allerede opphevet.\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5703,10 +5755,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "du kan ikke bruke nøkkel %s til signering i %s-modus\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "ADVARSEL: konflikt med signatur-kontrollsum i melding\n"
@ -7825,10 +7873,6 @@ msgstr "kontroller årsaken og slett fila manuelt\n"
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "klarte ikke å lage midlertidig hurtiglagermappe-fil «%s»: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "feil under lukking av «%s»: %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "klarte ikke å summere «%s»: %s\n"

View File

@ -127,6 +127,11 @@ msgstr "Hasło:"
msgid "does not match - try again"
msgstr "nie pasują - proszę spróbować jeszcze raz"
#, fuzzy
#| msgid "Passphrase Entry"
msgid "Passphrases match."
msgstr "Wpisywanie hasła"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1210,6 +1215,14 @@ msgstr "oczekiwanie na blokadę %s...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "biblioteka %s jest zbyt stara (wymagana %s, zainstalowana %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "błąd tworzenia ,,%s'': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "błąd zamykania ,,%s'': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "opakowanie: %s\n"
@ -1413,6 +1426,10 @@ msgstr "nie wymuszono"
msgid "forced"
msgstr "wymuszono"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Błąd: aktualnie dopuszczalne jest tylko czyste ASCII.\n"
@ -1682,6 +1699,9 @@ msgstr "zmiana atrybutu klucza"
msgid "change the User Interaction Flag"
msgstr "zmiana zaufania właściciela"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/karta> "
@ -1918,10 +1938,6 @@ msgstr "klucz %s: klucz PGP 2.x - pominięty\n"
msgid "WARNING: nothing exported\n"
msgstr "OSTRZEŻENIE: nic nie zostało wyeksportowane!\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "błąd tworzenia ,,%s'': %s\n"
msgid "[User ID not found]"
msgstr "[brak identyfikatora użytkownika]"
@ -2352,6 +2368,11 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr "pokazywanie unieważnionych i wygasłych podkluczy na listach kluczy"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "pokazywanie dat wygaśnięcia przy wypisywaniu podpisów"
msgid "show the keyring name in key listings"
msgstr "pokazywanie nazwy zbioru kluczy na listach kluczy"
@ -2973,6 +2994,10 @@ msgstr "klucz %s: klucz prywatny już istnieje\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "klucz %s: błąd wysyłania do agenta: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3503,6 +3528,11 @@ msgstr "usunięcie wybranych podkluczy"
msgid "add a revocation key"
msgstr "dodanie klucza unieważniającego"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Odszyfrowywanie danych zakończone"
msgid "delete signatures from the selected user IDs"
msgstr "usunięcie podpisów z wybranych identyfikatorów użytkownika"
@ -3569,6 +3599,12 @@ msgstr "Dostępny jest klucz tajny.\n"
msgid "Secret subkeys are available.\n"
msgstr "Dostępne są podklucze tajne.\n"
#, fuzzy
#| msgid "Note: Only the secret part of the shown subkey will be deleted.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr "Uwaga: usunięta zostanie tylko tajna część pokazanego podklucza.\n"
msgid "Need the secret key to do this.\n"
msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n"
@ -3683,6 +3719,11 @@ msgstr "Zapisać zmiany? (t/N) "
msgid "Quit without saving? (y/N) "
msgstr "Wyjść bez zapisania zmian? (t/N) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "usunięcie %s tajnego nie powiodło się: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Klucz nie został zmieniony więc zapis zmian nie jest konieczny.\n"
@ -3919,6 +3960,19 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Czy na pewno chcesz wyznaczyć ten klucz jako unieważniający? (t/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(chyba, że klucz zostaje wybrany przez podanie odcisku)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Podklucz %s jest już unieważniony.\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5739,10 +5793,6 @@ msgstr "klucz %s %s wymaga skrótu %zu-bitowego lub większego (skrót to %s)\n"
msgid "key %s may not be used for signing in %s mode\n"
msgstr "klucz %s nie może być używany do podpisów w trybie %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "OSTRZEŻENIE: konflikt skrótów podpisów w wiadomości\n"
@ -7932,10 +7982,6 @@ msgstr ""
"nie udało się utworzyć pliku tymczasowego katalogu pamięci podręcznej ,,"
"%s'': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "błąd zamykania ,,%s'': %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "nie można policzyć skrótu ,,%s'': %s\n"

View File

@ -123,6 +123,10 @@ msgstr "frase secreta incorrecta"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "frase secreta incorrecta"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1240,6 +1244,15 @@ msgstr "a escrever chave privada para `%s'\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "erro ao criar `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "erro na leitura de `%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armadura: %s\n"
@ -1454,6 +1467,10 @@ msgstr "não processado"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1733,6 +1750,9 @@ msgstr "muda os valores de confiança"
msgid "change the User Interaction Flag"
msgstr "muda os valores de confiança"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1981,11 +2001,6 @@ msgstr "chave %08lX: tipo PGP 2.x - ignorada\n"
msgid "WARNING: nothing exported\n"
msgstr "AVISO: nada exportado\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "erro ao criar `%s': %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[Utilizador não encontrado]"
@ -2438,6 +2453,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Nenhuma assinatura correspondente no porta-chaves secreto\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "mostrar em que porta-chave a chave está"
@ -3070,6 +3089,10 @@ msgstr "ignorado: a chave secreta já está presente\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "erro ao enviar para `%s': %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3617,6 +3640,9 @@ msgstr "remove uma chave secundária"
msgid "add a revocation key"
msgstr "adiciona uma chave de revocação"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr ""
@ -3694,6 +3720,10 @@ msgstr "Chave secreta disponível.\n"
msgid "Secret subkeys are available.\n"
msgstr "Chave secreta disponível.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "A chave secreta é necessária para fazer isto.\n"
@ -3816,6 +3846,10 @@ msgstr "Gravar alterações? "
msgid "Quit without saving? (y/N) "
msgstr "Sair sem gravar? "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "remoção do bloco de chave falhou: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Chave não alterada, nenhuma actualização é necessária.\n"
@ -4059,6 +4093,18 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "não pode escolher uma chave como revogadora de si mesmo\n"
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(a não ser que escolha a chave pela sua impressão digital)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "o utilizador com o id \"%s\" já está revocado\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5871,10 +5917,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "não pode utilizar %s enquanto estiver no modo %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "AVISO: conflito no 'digest' de assinatura da mensagem\n"
@ -8025,10 +8067,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "%s: impossível criar directoria: %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "erro na leitura de `%s': %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "impossível fechar `%s': %s\n"
@ -9887,10 +9925,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "alterna entre listagem de chave secreta e pública"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "frase secreta incorrecta"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr "AVISO: opções em `%s' ainda não estão activas nesta execução\n"

View File

@ -127,6 +127,10 @@ msgstr "frază-parolă incorectă"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "frază-parolă incorectă"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1259,6 +1263,15 @@ msgstr "scriu cheia secretă în `%s'\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "eroare la creearea `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "eroare în `%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "armură: %s\n"
@ -1477,6 +1490,10 @@ msgstr "neforţat(ă)"
msgid "forced"
msgstr "forţat(ă)"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Eroare: Deocamdată sunt permise numai caractere ASCII.\n"
@ -1756,6 +1773,9 @@ msgstr "schimbă încrederea pentru proprietar"
msgid "change the User Interaction Flag"
msgstr "schimbă încrederea pentru proprietar"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -2007,11 +2027,6 @@ msgstr "cheia %s: cheie stil PGP 2.x - sărită\n"
msgid "WARNING: nothing exported\n"
msgstr "AVERTISMENT: nimic exportat\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "eroare la creearea `%s': %s\n"
msgid "[User ID not found]"
msgstr "[ID utilizator nu a fost găsit]"
@ -2492,6 +2507,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "Nici o semnătură corespunzătoare în inelul secret\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "arată căruia dintre inelele de chei îi aparţine o cheie enumerată"
@ -3142,6 +3161,10 @@ msgstr "sărită: cheia secretă deja prezentă\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "eroare trimitere la `%s': %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3668,6 +3691,9 @@ msgstr "şterge subcheile selectate"
msgid "add a revocation key"
msgstr "adaugă o cheie de revocare"
msgid "add an additional decryption subkey"
msgstr ""
msgid "delete signatures from the selected user IDs"
msgstr "şterge semnăturile de pe ID-urile utilizator selectate"
@ -3734,6 +3760,10 @@ msgstr "Cheia secretă este disponibilă.\n"
msgid "Secret subkeys are available.\n"
msgstr "Cheia secretă este disponibilă.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Aveţi nevoie de cheia secretă pentru a face aceasta.\n"
@ -3858,6 +3888,10 @@ msgstr "Salvaţi schimbările? (d/N) "
msgid "Quit without saving? (y/N) "
msgstr "Terminaţi fără a salva? (d/N) "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "stergere keyblock a eşuat: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Cheia nu a fost schimbată aşa că nici o actualizare a fost necesară.\n"
@ -4108,6 +4142,19 @@ msgstr ""
"Sunteţi sigur(ă) că doriţi să desemnaţi această cheie ca şi un revocator "
"desemnat? (d/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(dacă nu specificaţi cheia prin amprentă)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Subcheia %s este deja revocată.\n"
#, fuzzy
#| msgid ""
#| "Are you sure you want to appoint this key as a designated revoker? (y/N) "
@ -5965,10 +6012,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "nu puteţi folosi %s câtă vreme în modul %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "AVERTISMENT: conflict pentru rezumat semnătură în mesaj\n"
@ -8150,10 +8193,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "nu pot crea directorul `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "eroare în `%s': %s\n"
#, fuzzy, c-format
#| msgid "can't access `%s': %s\n"
msgid "can't hash '%s': %s\n"
@ -10074,10 +10113,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "comută între listele de chei secrete şi publice"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "frază-parolă incorectă"
#, fuzzy
#~| msgid "WARNING: keyserver option `%s' is not used on this platform\n"
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"

View File

@ -130,6 +130,11 @@ msgstr "Фраза-пароль:"
msgid "does not match - try again"
msgstr "не подходит - попробуйте еще раз"
#, fuzzy
#| msgid "Passphrase Entry"
msgid "Passphrases match."
msgstr "Ввод фраз-паролей"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1222,6 +1227,14 @@ msgstr "ожидаю снятия блокировки %s...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "слишком старая версия %s (нужно %s, есть %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "ошибка создания '%s': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "ошибка закрытия '%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "текстовый формат: %s\n"
@ -1425,6 +1438,10 @@ msgstr "не требуется"
msgid "forced"
msgstr "требуется"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Ошибка: Допустим только простой текст ASCII.\n"
@ -1694,6 +1711,9 @@ msgstr "изменить атрибут ключа"
msgid "change the User Interaction Flag"
msgstr "изменить уровень доверия владельцу"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/card> "
@ -1930,10 +1950,6 @@ msgstr "ключ %s: ключ типа PGP 2.x - пропущен\n"
msgid "WARNING: nothing exported\n"
msgstr "Внимание: нечего экспортировать\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "ошибка создания '%s': %s\n"
msgid "[User ID not found]"
msgstr "[Идентификатор пользователя не найден]"
@ -2359,6 +2375,11 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr "показывать в списке ключей отозванные и просроченные подключи"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "показывать в списке подписей сроки действия"
msgid "show the keyring name in key listings"
msgstr "показывать в списке ключей название таблицы ключей"
@ -2983,6 +3004,10 @@ msgstr "ключ %s: секретный ключ уже имеется\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "ключ %s: ошибка отправки в агент: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3500,6 +3525,11 @@ msgstr "удалить выбранные подключи"
msgid "add a revocation key"
msgstr "добавить ключ отзыва"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Данные успешно расшифрованы"
msgid "delete signatures from the selected user IDs"
msgstr "удалить подписи с выбранных идентификаторов пользователя"
@ -3566,6 +3596,13 @@ msgstr "Секретный ключ доступен.\n"
msgid "Secret subkeys are available.\n"
msgstr "Секретные подключи доступны.\n"
#, fuzzy
#| msgid "Note: Only the secret part of the shown subkey will be deleted.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
"Замечание: Будет удалена только секретная часть показанного подключа.\n"
msgid "Need the secret key to do this.\n"
msgstr "Для данного действия нужен секретный ключ.\n"
@ -3680,6 +3717,11 @@ msgstr "Сохранить изменения? (y/N) "
msgid "Quit without saving? (y/N) "
msgstr "Выйти без сохранения? (y/N) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "сбой при удалении секретного %s: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Ключ не изменялся - обновление не нужно.\n"
@ -3920,6 +3962,19 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Вы уверены, что хотите назначить данный ключ отзывающим? (y/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(если только ключ не задан отпечатком)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Подключ %s уже отозван.\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5710,10 +5765,6 @@ msgstr "Ключ %s %s требует %zu-битного или более дл
msgid "key %s may not be used for signing in %s mode\n"
msgstr "ключ %s нельзя использовать для подписи в режиме %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "Внимание: конфликт хешей подписей в сообщении\n"
@ -7891,10 +7942,6 @@ msgstr "выясните причину и удалите этот файл вр
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "невозможно создание временного файла '%s': %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "ошибка закрытия '%s': %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "невозможно получить хеш '%s': %s\n"

View File

@ -123,6 +123,10 @@ msgstr "nesprávne heslo"
msgid "does not match - try again"
msgstr ""
#, fuzzy
msgid "Passphrases match."
msgstr "nesprávne heslo"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1240,6 +1244,15 @@ msgstr "zapisujem tajný kľúč do `%s'\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "chyba pri vytváraní `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "chyba pri čítaní `%s': %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "ASCII kódovanie: %s\n"
@ -1457,6 +1470,10 @@ msgstr "nespracované"
msgid "forced"
msgstr ""
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
@ -1736,6 +1753,9 @@ msgstr "zmeniť dôveryhodnosť vlastníka kľúča"
msgid "change the User Interaction Flag"
msgstr "zmeniť dôveryhodnosť vlastníka kľúča"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr ""
@ -1986,11 +2006,6 @@ msgstr "kľúč %08lX: PGP 2.x kľúč - preskočené\n"
msgid "WARNING: nothing exported\n"
msgstr "VAROVANIE: nič nebolo vyexportované\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "chyba pri vytváraní `%s': %s\n"
#, fuzzy
msgid "[User ID not found]"
msgstr "[User id not found]"
@ -2449,6 +2464,10 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr ""
#, fuzzy
msgid "show signatures with invalid algorithms during signature listings"
msgstr "V súbore tajných kľúčov chýba zodpovedajúci podpis\n"
#, fuzzy
msgid "show the keyring name in key listings"
msgstr "ukáž v ktorom súbore kľúčov je vypísaný kľúč"
@ -3087,6 +3106,10 @@ msgstr "preskočené: tajný kľúč je už v databáze\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "chyba pri posielaní na `%s': %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3635,6 +3658,9 @@ msgstr "zmazať sekundárny kľúč"
msgid "add a revocation key"
msgstr "pridať revokačný kľúč"
msgid "add an additional decryption subkey"
msgstr ""
#, fuzzy
msgid "delete signatures from the selected user IDs"
msgstr "Skutočne aktualizovať predvoľby pre vybrané id užívateľa? "
@ -3709,6 +3735,10 @@ msgstr "Tajný kľúč je dostupný.\n"
msgid "Secret subkeys are available.\n"
msgstr "Tajný kľúč je dostupný.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Na vykonanie tejto operácie je potrebný tajný kľúč.\n"
@ -3830,6 +3860,10 @@ msgstr "Uložiť zmeny? "
msgid "Quit without saving? (y/N) "
msgstr "Ukončiť bez uloženia? "
#, fuzzy, c-format
msgid "deleting copy of secret key failed: %s\n"
msgstr "zmazanie bloku kľúča sa nepodarilo: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "kľúč nebol zmenený, takže nie je potrebné ho aktualizovať.\n"
@ -4073,6 +4107,18 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "Ste si istý, že chcete označiť tento kľúč ako revokovací? (a/N): "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(pokiaľ neurčíte kľúč jeho fingerprintom)\n"
#, fuzzy, c-format
msgid "key \"%s\" is already on this keyblock\n"
msgstr "užívateľské ID \"%s\" je už revokované\n"
#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
@ -5899,10 +5945,6 @@ msgstr ""
"použitie %s nie je v móde %s dovolené\n"
"\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "VAROVANIE: konflikt hashu podpisu v správe\n"
@ -8059,10 +8101,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "nemôžem vytvoriť adresár `%s': %s\n"
#, fuzzy, c-format
msgid "error closing '%s': %s\n"
msgstr "chyba pri čítaní `%s': %s\n"
#, fuzzy, c-format
msgid "can't hash '%s': %s\n"
msgstr "nemôžem zavrieť `%s': %s\n"
@ -9935,10 +9973,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "prepnúť medzi vypísaním zoznamu tajných a verejných kľúčov"
#, fuzzy
#~ msgid "Passphrase"
#~ msgstr "nesprávne heslo"
#, fuzzy
#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
#~ msgstr "VAROVANIE: nastavenie v `%s' ešte nie je aktívne\n"

View File

@ -160,6 +160,11 @@ msgstr "Lösenfras:"
msgid "does not match - try again"
msgstr "stämmer inte överens - försök igen"
#, fuzzy
#| msgid "Passphrase"
msgid "Passphrases match."
msgstr "Lösenfras"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1340,6 +1345,16 @@ msgstr "väntar på låset %s...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s är för gammal (behöver %s, har %s)\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "Fel när \"%s\" skapades: %s\n"
#, fuzzy, c-format
#| msgid "error closing %s: %s\n"
msgid "error closing '%s': %s\n"
msgstr "fel vid stängning av %s: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "ASCII-skal: %s\n"
@ -1566,6 +1581,10 @@ msgstr "inte tvingad"
msgid "forced"
msgstr "tvingad"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Fel: Endast ren ASCII tillåts för närvarande.\n"
@ -1871,6 +1890,9 @@ msgstr "ändra ägartillitsvärdet"
msgid "change the User Interaction Flag"
msgstr "ändra ägartillitsvärdet"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/kort> "
@ -2123,11 +2145,6 @@ msgstr "nyckeln %s: nyckel av PGP 2.x-typ - hoppade över\n"
msgid "WARNING: nothing exported\n"
msgstr "VARNING: ingenting exporterat\n"
#, fuzzy, c-format
#| msgid "error creating `%s': %s\n"
msgid "error creating '%s': %s\n"
msgstr "Fel när \"%s\" skapades: %s\n"
msgid "[User ID not found]"
msgstr "[Användaridentiteten hittades inte]"
@ -2609,6 +2626,11 @@ msgstr "visa spärrade och utgångna användaridentiteter i nyckellistningar"
msgid "show revoked and expired subkeys in key listings"
msgstr "visa spärrade och utgångna undernycklar i nyckellistningar"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "visa utgångsdatum under signaturlistningar"
msgid "show the keyring name in key listings"
msgstr "visa nyckelringens namn i nyckellistningar"
@ -3273,6 +3295,10 @@ msgstr "hoppade över: hemlig nyckel finns redan\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "fel vid sändning av %s-kommando: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3807,6 +3833,11 @@ msgstr "ta bort valda undernycklar"
msgid "add a revocation key"
msgstr "lägg till en spärrnyckel"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Datadekryptering lyckades"
msgid "delete signatures from the selected user IDs"
msgstr "ta bort signaturer från valda användaridentiteter"
@ -3875,6 +3906,10 @@ msgstr "Den hemliga nyckeln finns tillgänglig.\n"
msgid "Secret subkeys are available.\n"
msgstr "Den hemliga nyckeln finns tillgänglig.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Den hemliga nyckeln behövs för att göra detta.\n"
@ -3999,6 +4034,11 @@ msgstr "Spara ändringar? (j/N) "
msgid "Quit without saving? (y/N) "
msgstr "Avsluta utan att spara? (j/N) "
#, fuzzy, c-format
#| msgid "deleting certificate \"%s\" failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "borttagning av certifikatet \"%s\" misslyckades: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Nyckeln är oförändrad så det behövs ingen uppdatering.\n"
@ -4254,6 +4294,19 @@ msgid ""
msgstr ""
"Är du säker på att du vill använda den här nyckeln för spärrning? (j/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(om du inte anger nyckeln med hjälp av fingeravtrycket)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Undernyckeln %s är redan spärrad.\n"
# designated = angiven (utnämnd, utpekad, bestämd, utsedd, avsedd, angiven, designerad)
#, fuzzy
#| msgid ""
@ -6151,10 +6204,6 @@ msgstr "DSA-nyckeln %s kräver en hash med %u bitar eller större\n"
msgid "key %s may not be used for signing in %s mode\n"
msgstr "du kan inte använda %s när du är i %s-läget\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "VARNING: konflikt mellan signatursammandrag i meddelandet\n"
@ -8457,11 +8506,6 @@ msgstr ""
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "misslyckades med att skapa temporärfilen \"%s\": %s\n"
#, fuzzy, c-format
#| msgid "error closing %s: %s\n"
msgid "error closing '%s': %s\n"
msgstr "fel vid stängning av %s: %s\n"
#, fuzzy, c-format
#| msgid "can't access `%s': %s\n"
msgid "can't hash '%s': %s\n"
@ -10630,9 +10674,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "växla mellan att lista hemliga och publika nycklar"
#~ msgid "Passphrase"
#~ msgstr "Lösenfras"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr ""
#~ "använd temporärfiler för att skicka data till nyckelserverns hjälpprogram"

View File

@ -124,6 +124,11 @@ msgstr "Anahtar Parolası:"
msgid "does not match - try again"
msgstr "eşleşmiyor - yeniden deneyin"
#, fuzzy
#| msgid "Passphrase Entry"
msgid "Passphrases match."
msgstr "Anahtar Parolası Girişi"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1199,6 +1204,14 @@ msgstr "%s kilidi için bekleniyor...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s çok eski (gereken %s, sizinki %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "'%s' oluşturulurken hata: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "'%s' kapatılırken hata: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "zırh: %s\n"
@ -1404,6 +1417,10 @@ msgstr "zorlanmadı"
msgid "forced"
msgstr "zorlandı"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "Hata: Şimdilik yalnızca US-ASCII mümkün.\n"
@ -1666,6 +1683,9 @@ msgstr "anahtar özniteliğini değiştir"
msgid "change the User Interaction Flag"
msgstr "Kullanıcı etkileşim bayrağını değiştir"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/card> "
@ -1893,10 +1913,6 @@ msgstr "%s anahtarı: PGP 2.x tarzı bir anahtar - atlandı\n"
msgid "WARNING: nothing exported\n"
msgstr "UYARI: Hiçbir şey dışa aktarılmadı\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "'%s' oluşturulurken hata: %s\n"
msgid "[User ID not found]"
msgstr "[Kullanıcı kimliği bulunamadı]"
@ -2303,6 +2319,11 @@ msgstr ""
"anahtar listelerinde yürürlükten kaldırılmış ve zaman aşımına uğramış "
"yardımcı anahtarlar göster"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "imza listelemesi sırasında zaman aşımı tarihleri göster"
msgid "show the keyring name in key listings"
msgstr "anahtar zinciri adını anahtar listelerinde göster"
@ -2920,6 +2941,10 @@ msgstr "%s anahtarı: Gizli anahtar halihazırda var\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "%s anahtarı: Aracıya gönderirken hata: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3441,6 +3466,11 @@ msgstr "seçili yardımcı anahtarları sil"
msgid "add a revocation key"
msgstr "bir yürürlükten kaldırma anahtarı ekle"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Veri şifresi çözülmesi başarılı"
msgid "delete signatures from the selected user IDs"
msgstr "seçili kullanıcı kimliklerinden imzaları sile"
@ -3506,6 +3536,12 @@ msgstr "Gizli anahtar mevcut.\n"
msgid "Secret subkeys are available.\n"
msgstr "Gizli yardımcı anahtarlar mevcut.\n"
#, fuzzy
#| msgid "Note: Only the secret part of the shown subkey will be deleted.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr "Not: Yalnızca gösterilen yardımcı anahtarın gizli kısmı silinecek.\n"
msgid "Need the secret key to do this.\n"
msgstr "Bunu yapmak için gizli anahtar gerekli.\n"
@ -3620,6 +3656,11 @@ msgstr "Değişiklikler kaydedilsin mi? (e/H) "
msgid "Quit without saving? (y/N) "
msgstr "Kaydetmeden çıkılsın mı? (e/H) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "gizli %s silinmesi başarısız: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Anahtar değişmediğinden güncellemeye gerek yok.\n"
@ -3864,6 +3905,19 @@ msgstr ""
"Bu anahtarın, yürürlükten kaldıran anahtar olmasını istediğinize emin "
"misiniz? (e/H) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(anahtar parmak izi ile belirtilmedikçe)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "%s yardımcı anahtarı zaten yürürlükten kaldırılmış.\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5625,10 +5679,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "%s anahtarı %s kipinde imzalama için kullanılamaz\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr "%s seçeneğinden dolayı doğrulama yine de sürdürülüyor\n"
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "UYARI: İletideki imza özeti çelişkili\n"
@ -7732,10 +7782,6 @@ msgstr "lütfen nedenini denetleyin ve o dosyayı el ile silin\n"
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "geçici önbellek dizin dosyası '%s' oluşturulamadı: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "'%s' kapatılırken hata: %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "'%s' sağlaması yapılamıyor: %s\n"
@ -8888,6 +8934,9 @@ msgstr "Yubikey yönetim konsolu"
msgid "manage the command history"
msgstr "komut geçmişini yönet"
#~ msgid "continuing verification anyway due to option %s\n"
#~ msgstr "%s seçeneğinden dolayı doğrulama yine de sürdürülüyor\n"
#~ msgid "selected AEAD algorithm is invalid\n"
#~ msgstr "seçili AEAD algoritması geçersiz\n"

View File

@ -130,6 +130,11 @@ msgstr "Пароль:"
msgid "does not match - try again"
msgstr "паролі не збігаються, повторіть спробу"
#, fuzzy
#| msgid "Passphrase"
msgid "Passphrases match."
msgstr "Пароль"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1226,6 +1231,14 @@ msgstr "очікування на блокування %s…\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s є занадто застарілою (потрібно %s, маємо %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "помилка створення «%s»: %s.\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "помилка під час спроби закрити «%s»: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "формат ASCII: %s\n"
@ -1436,6 +1449,10 @@ msgstr "не увімкнено"
msgid "forced"
msgstr "увімкнено"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr ""
"Помилка: у поточній версії можна використовувати лише звичайний ASCII.\n"
@ -1713,6 +1730,9 @@ msgstr "змінити атрибут ключа"
msgid "change the User Interaction Flag"
msgstr "змінити рівень довіри до власника"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/картка> "
@ -1952,10 +1972,6 @@ msgstr "ключ %s: ключ у стилі PGP 2.x — пропущено\n"
msgid "WARNING: nothing exported\n"
msgstr "УВАГА: нічого не експортовано\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "помилка створення «%s»: %s.\n"
msgid "[User ID not found]"
msgstr "[Ідентифікатор не знайдено]"
@ -2390,6 +2406,11 @@ msgstr ""
msgid "show revoked and expired subkeys in key listings"
msgstr "показувати відкликані та застарілі підключі у списках ключів"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "показувати дати завершення строків дії у списку підписів"
msgid "show the keyring name in key listings"
msgstr "показувати назву сховища ключів у списках ключів"
@ -3023,6 +3044,10 @@ msgstr "ключ %s: закритий ключ вже існує\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "ключ %s: помилка під час спроби надсилання агенту: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3547,6 +3572,11 @@ msgstr "вилучити вибрані підключі"
msgid "add a revocation key"
msgstr "додати ключ відкликання"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "Дані розшифровано"
msgid "delete signatures from the selected user IDs"
msgstr "вилучити підписи з вибраних ідентифікаторів користувача"
@ -3613,6 +3643,10 @@ msgstr "Доступний закритий ключ.\n"
msgid "Secret subkeys are available.\n"
msgstr "Доступні закриті підключі.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "Для цього потрібен закритий ключ.\n"
@ -3722,6 +3756,11 @@ msgstr "Зберегти зміни? (y/N або т/Н) "
msgid "Quit without saving? (y/N) "
msgstr "Вийти без збереження? (y/N або т/Н) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "помилка під час спроби вилучення закритого %s: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "Ключ не змінено, отже оновлення непотрібне.\n"
@ -3967,6 +4006,19 @@ msgstr ""
"Ви справді бажаєте призначити цей ключ як підписане відкликання? (y/N або т/"
"Н) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(якщо ключ не задано відбитком)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "Підключ %s вже відкликано.\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5787,10 +5839,6 @@ msgstr ""
msgid "key %s may not be used for signing in %s mode\n"
msgstr "ключ %s не можна використовувати для підписування у режимі %s\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "УВАГА: конфлікт контрольних сум підписів у повідомленні\n"
@ -8004,10 +8052,6 @@ msgstr "будь ласка, перевірте причину і вилучіт
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "не вдалося створити тимчасовий файл каталогу кешу «%s»: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "помилка під час спроби закрити «%s»: %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "не вдалося хешувати «%s»: %s\n"
@ -10068,9 +10112,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "перемкнутися між списками закритих і відкритих ключів"
#~ msgid "Passphrase"
#~ msgstr "Пароль"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr ""
#~ "використовувати тимчасові файли для передавання даних до допоміжних "

View File

@ -123,6 +123,11 @@ msgstr "密码:"
msgid "does not match - try again"
msgstr "不匹配 - 请重试"
#, fuzzy
#| msgid "Passphrase Entry"
msgid "Passphrases match."
msgstr "密码条目"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1172,6 +1177,14 @@ msgstr "等待锁 %s...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s 太旧 (需要 %s拥有 %s\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "创建‘%s时出现错误%s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "关闭‘%s时出现错误%s\n"
#, c-format
msgid "armor: %s\n"
msgstr "字符封装:%s\n"
@ -1372,6 +1385,10 @@ msgstr "非强制"
msgid "forced"
msgstr "强制"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "错误:目前只允许使用纯 ASCII 字符。\n"
@ -1632,6 +1649,9 @@ msgstr "更改密钥属性"
msgid "change the User Interaction Flag"
msgstr "变更用户交互选项"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/card> "
@ -1856,10 +1876,6 @@ msgstr "密钥 %sPGP 2.x 样式的密钥 - 已跳过\n"
msgid "WARNING: nothing exported\n"
msgstr "警告:没有导出任何东西\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "创建‘%s时出现错误%s\n"
msgid "[User ID not found]"
msgstr "[用户标识未找到]"
@ -2255,6 +2271,11 @@ msgstr "列出密钥时显示已吊销或已过期的用户标识"
msgid "show revoked and expired subkeys in key listings"
msgstr "列出密钥时显示已吊销或已过期的子密钥"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "列出签名时显示过期日期"
msgid "show the keyring name in key listings"
msgstr "列出密钥时显示钥匙环的名称"
@ -2863,6 +2884,10 @@ msgstr "密钥 %s私钥已存在\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "密钥 %s发送至代理人程序时出现错误%s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3350,6 +3375,11 @@ msgstr "删除选定的子密钥"
msgid "add a revocation key"
msgstr "增加一个吊销用密钥"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "数据解密成功"
msgid "delete signatures from the selected user IDs"
msgstr "从所选用户标识上删除签名"
@ -3410,6 +3440,12 @@ msgstr "私钥可用。\n"
msgid "Secret subkeys are available.\n"
msgstr "私密子密钥可用。\n"
#, fuzzy
#| msgid "Note: Only the secret part of the shown subkey will be deleted.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr "主要:只有显示的子钥的秘密部分会被删除。\n"
msgid "Need the secret key to do this.\n"
msgstr "要有私钥才能这么做。\n"
@ -3516,6 +3552,11 @@ msgstr "要保存变更吗?(y/N) "
msgid "Quit without saving? (y/N) "
msgstr "要不保存而退出吗?(y/N) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "删除私钥 %s 时失败: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "密钥没有变更所以不需要更新。\n"
@ -3741,6 +3782,19 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "您确定要将这个密钥设置为指定吊销者吗?(y/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(除非您用指纹指定密钥)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "子密钥 %s 已被吊销。\n"
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
@ -5447,10 +5501,6 @@ msgstr "%s 密钥 %s 要求一个 %zu 位或更长的散列(散列是 %s\n"
msgid "key %s may not be used for signing in %s mode\n"
msgstr "密钥 %s 在 %s 模式中不适用于签名\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr "由于 %s 选项,验证仍在继续中\n"
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "警告:签名散列值与报文不一致\n"
@ -7478,10 +7528,6 @@ msgstr "请检查理由并手动删除那个文件\n"
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "创建临时缓存目录文件‘%s时失败%s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "关闭‘%s时出现错误%s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "无法取‘%s的散列%s\n"
@ -8621,6 +8667,9 @@ msgstr "Yubikey 管理命令"
msgid "manage the command history"
msgstr "管理命令历史记录"
#~ msgid "continuing verification anyway due to option %s\n"
#~ msgstr "由于 %s 选项,验证仍在继续中\n"
#~ msgid "selected AEAD algorithm is invalid\n"
#~ msgstr "所选择的 AEAD 算法无效\n"

View File

@ -138,6 +138,11 @@ msgstr "密語:"
msgid "does not match - try again"
msgstr "前後不一致 - 請再試一次"
#, fuzzy
#| msgid "Passphrase"
msgid "Passphrases match."
msgstr "密語"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
#. two %d give the current and maximum number of tries.
@ -1220,6 +1225,14 @@ msgstr "正在等候 `%s' 鎖定...\n"
msgid "%s is too old (need %s, have %s)\n"
msgstr "%s 太舊了 (需要 %s, 但是祇有 %s)\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "建立 '%s' 時出錯: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "關閉 '%s' 時出錯: %s\n"
#, c-format
msgid "armor: %s\n"
msgstr "封裝: %s\n"
@ -1433,6 +1446,10 @@ msgstr "不強迫使用"
msgid "forced"
msgstr "強迫使用"
#, c-format
msgid "Please try command \"%s\" if the listing does not look correct\n"
msgstr ""
msgid "Error: Only plain ASCII is currently allowed.\n"
msgstr "錯誤: 目前祇允許使用單純的 ASCII 字符.\n"
@ -1721,6 +1738,9 @@ msgstr "更改主觀信任"
msgid "change the User Interaction Flag"
msgstr "更改主觀信任"
msgid "switch to the OpenPGP app"
msgstr ""
msgid "gpg/card> "
msgstr "gpg/卡片> "
@ -1954,10 +1974,6 @@ msgstr "金鑰 %s: PGP 2.x 型態的金鑰 - 已跳過\n"
msgid "WARNING: nothing exported\n"
msgstr "警告: 沒有匯出任何東西\n"
#, c-format
msgid "error creating '%s': %s\n"
msgstr "建立 '%s' 時出錯: %s\n"
msgid "[User ID not found]"
msgstr "[找不到使用者 ID]"
@ -2389,6 +2405,11 @@ msgstr "列出金鑰時顯示已撤銷或過期的使用者 ID"
msgid "show revoked and expired subkeys in key listings"
msgstr "列出金鑰時顯示已撤銷或過期的子鑰"
#, fuzzy
#| msgid "show expiration dates during signature listings"
msgid "show signatures with invalid algorithms during signature listings"
msgstr "列出簽章時顯示有效期限"
msgid "show the keyring name in key listings"
msgstr "在金鑰清單中顯示鑰匙圈名稱"
@ -3019,6 +3040,10 @@ msgstr "金鑰 %s: 私鑰已存在\n"
msgid "key %s: error sending to agent: %s\n"
msgstr "金鑰 %s: 送至代理程式時出錯: %s\n"
#, c-format
msgid "key %s: card reference is overridden by key material\n"
msgstr ""
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
#. * is stored on the card. A single smartcard can have up to
@ -3526,6 +3551,11 @@ msgstr "刪除所選的子鑰"
msgid "add a revocation key"
msgstr "增加撤銷金鑰"
#, fuzzy
#| msgid "Data decryption succeeded"
msgid "add an additional decryption subkey"
msgstr "資料已解密成功"
msgid "delete signatures from the selected user IDs"
msgstr "從所選的使用者 ID 中刪除簽章"
@ -3588,6 +3618,10 @@ msgstr "私鑰可用.\n"
msgid "Secret subkeys are available.\n"
msgstr "私鑰可用.\n"
msgid ""
"Note: the local copy of the secret key will only be deleted with \"save\".\n"
msgstr ""
msgid "Need the secret key to do this.\n"
msgstr "要有私鑰纔能這麼做.\n"
@ -3696,6 +3730,11 @@ msgstr "要儲存變更嗎? (y/N) "
msgid "Quit without saving? (y/N) "
msgstr "要不儲存就離開嗎? (y/N) "
#, fuzzy, c-format
#| msgid "deleting secret %s failed: %s\n"
msgid "deleting copy of secret key failed: %s\n"
msgstr "刪除私鑰 %s 時失敗: %s\n"
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "金鑰沒有變更所以不需要更新.\n"
@ -3940,6 +3979,19 @@ msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr "你確定要指派這把金鑰為指定撤銷者嗎? (y/N) "
msgid "Enter the fingerprint of the additional decryption subkey: "
msgstr ""
#, fuzzy, c-format
#| msgid "(unless you specify the key by fingerprint)\n"
msgid "Did you specify the fingerprint of a subkey?\n"
msgstr "(除非你用指紋指定了金鑰)\n"
#, fuzzy, c-format
#| msgid "Subkey %s is already revoked.\n"
msgid "key \"%s\" is already on this keyblock\n"
msgstr "子鑰 %s 已撤銷.\n"
#, fuzzy
#| msgid ""
#| "Are you sure you want to appoint this key as a designated revoker? (y/N) "
@ -5729,10 +5781,6 @@ msgstr "%s 金鑰 %s 需要 %zu 位元以上的雜湊 (雜湊為 %s)\n"
msgid "key %s may not be used for signing in %s mode\n"
msgstr "你不能夠將 %s 用於 %s 模式中\n"
#, c-format
msgid "continuing verification anyway due to option %s\n"
msgstr ""
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "警告: 簽章摘要與訊息不一致\n"
@ -7823,10 +7871,6 @@ msgstr "請檢查其原因並手動刪除該檔案\n"
msgid "failed to create temporary cache dir file '%s': %s\n"
msgstr "建立暫存快取目錄檔案 '%s' 失敗: %s\n"
#, c-format
msgid "error closing '%s': %s\n"
msgstr "關閉 '%s' 時出錯: %s\n"
#, c-format
msgid "can't hash '%s': %s\n"
msgstr "無法計算 '%s' 的雜湊: %s\n"
@ -9807,9 +9851,6 @@ msgstr ""
#~ msgid "toggle between the secret and public key listings"
#~ msgstr "在私鑰清單和公鑰清單間切換"
#~ msgid "Passphrase"
#~ msgstr "密語"
#~ msgid "use temporary files to pass data to keyserver helpers"
#~ msgstr "用暫存檔來將資料遞送給金鑰伺服器協助程式"

File diff suppressed because it is too large Load Diff

View File

@ -778,7 +778,7 @@ static int regatom(regex_t *preg, int *flagp)
preg->err = REG_ERR_NULL_CHAR;
return 0;
}
if (start == '\\' && *pattern == 0) {
if (end == '\\' && *pattern == 0) {
preg->err = REG_ERR_INVALID_ESCAPE;
return 0;
}
@ -796,6 +796,10 @@ static int regatom(regex_t *preg, int *flagp)
for (cc = 0; cc < CC_NUM; cc++) {
n = strlen(character_class[cc]);
if (strncmp(pattern, character_class[cc], n) == 0) {
if (pattern[n] != ']') {
preg->err = REG_ERR_UNMATCHED_BRACKET;
return 0;
}
/* Found a character class */
pattern += n + 1;
break;
@ -1507,7 +1511,7 @@ static int regmatch(regex_t *preg, int prog)
/* Can't match at BOL */
if (preg->reginput > preg->regbol) {
/* Current must be EOL or nonword */
if (reg_iseol(preg, c) || !isalnum(UCHAR(c)) || c != '_') {
if (reg_iseol(preg, c) || !(isalnum(UCHAR(c)) || c == '_')) {
c = preg->reginput[-1];
/* Previous must be word */
if (isalnum(UCHAR(c)) || c == '_') {

View File

@ -3260,7 +3260,7 @@ apdu_send_simple (int slot, int extended_mode,
* Out of historical reasons the function returns 0 on success and
* outs the status word at the end of the result to be able to get the
* status word in the case of a not provided RETBUF, R_SW can be used
* to store the SW. But note that R_SW qill only be set if the
* to store the SW. But note that R_SW will only be set if the
* function returns 0. */
int
apdu_send_direct (int slot, size_t extended_length,

View File

@ -119,6 +119,7 @@ struct card_ctx_s {
/* Various flags. */
unsigned int reset_requested:1;
unsigned int periodical_check_needed:1;
unsigned int maybe_check_aid:1;
};

View File

@ -869,10 +869,12 @@ parse_login_data (app_t app)
#define MAX_ARGS_STORE_FPR 3
/* Note, that FPR must be at least 20 bytes. */
/* Note, that FPR must be at least 20 bytes. If UPDATE is not set,
* the fingerprint and the creation date is not actually stored but
* the fingerprint is only returned in FPR. */
static gpg_error_t
store_fpr (app_t app, int keynumber, u32 timestamp, unsigned char *fpr,
int algo, ...)
store_fpr (app_t app, int update, int keynumber, u32 timestamp,
unsigned char *fpr, int algo, ...)
{
unsigned int n, nbits;
unsigned char *buffer, *p;
@ -937,6 +939,9 @@ store_fpr (app_t app, int keynumber, u32 timestamp, unsigned char *fpr,
xfree (buffer);
if (!update)
return 0;
tag = (app->appversion > 0x0007? 0xC7 : 0xC6) + keynumber;
flush_cache_item (app, 0xC5);
tag2 = 0xCE + keynumber;
@ -1605,7 +1610,8 @@ retrieve_key_material (FILE *fp, const char *hexkeyid,
static gpg_error_t
rsa_read_pubkey (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
rsa_read_pubkey (app_t app, ctrl_t ctrl, int meta_update,
u32 created_at, int keyno,
const unsigned char *data, size_t datalen, gcry_sexp_t *r_sexp)
{
gpg_error_t err;
@ -1642,7 +1648,11 @@ rsa_read_pubkey (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
{
unsigned char fprbuf[20];
err = store_fpr (app, keyno, created_at, fprbuf, PUBKEY_ALGO_RSA,
/* If META_UPDATE is not set we only compute but not store the
* fingerprint. This might return a wrong fingerprint if
* CREATED_AT is not set. */
err = store_fpr (app, meta_update, keyno,
created_at, fprbuf, PUBKEY_ALGO_RSA,
m, mlen, e, elen);
if (err)
return err;
@ -1714,7 +1724,8 @@ ecdh_params (const char *curve)
}
static gpg_error_t
ecc_read_pubkey (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
ecc_read_pubkey (app_t app, ctrl_t ctrl, int meta_update,
u32 created_at, int keyno,
const unsigned char *data, size_t datalen, gcry_sexp_t *r_sexp)
{
gpg_error_t err;
@ -1783,7 +1794,12 @@ ecc_read_pubkey (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
{
unsigned char fprbuf[20];
err = store_fpr (app, keyno, created_at, fprbuf, algo, oidbuf, oid_len,
/* If META_UPDATE is not set we only compute but not store the
* fingerprint. This might return a wrong fingerprint if
* CREATED_AT is not set or the ECDH params do not match the
* current defaults. */
err = store_fpr (app, meta_update, keyno,
created_at, fprbuf, algo, oidbuf, oid_len,
qbuf, ecc_q_len, ecdh_params (curve), (size_t)4);
if (err)
goto leave;
@ -1826,13 +1842,15 @@ store_keygrip (app_t app, int keyno)
/* Parse tag-length-value data for public key in BUFFER of BUFLEN
length. Key of KEYNO in APP is updated with an S-expression of
public key. When CTRL is not NULL, fingerprint is computed with
CREATED_AT, and fingerprint is written to the card, and key data
and fingerprint are send back to the client side.
* length. Key of KEYNO in APP is updated with an S-expression of
* public key. If CTRL is not NULL, the fingerprint is computed with
* CREATED_AT and key data and fingerprint are send back to the client
* side. If also META_UPDATE is true the fingerprint and the creation
* date are also written to the card.
*/
static gpg_error_t
read_public_key (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
read_public_key (app_t app, ctrl_t ctrl, int meta_update,
u32 created_at, int keyno,
const unsigned char *buffer, size_t buflen)
{
gpg_error_t err;
@ -1848,10 +1866,10 @@ read_public_key (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
}
if (app->app_local->keyattr[keyno].key_type == KEY_TYPE_RSA)
err = rsa_read_pubkey (app, ctrl, created_at, keyno,
err = rsa_read_pubkey (app, ctrl, meta_update, created_at, keyno,
data, datalen, &s_pkey);
else if (app->app_local->keyattr[keyno].key_type == KEY_TYPE_ECC)
err = ecc_read_pubkey (app, ctrl, created_at, keyno,
err = ecc_read_pubkey (app, ctrl, meta_update, created_at, keyno,
data, datalen, &s_pkey);
else
err = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
@ -1947,14 +1965,19 @@ get_public_key (app_t app, int keyno)
/* Yubikey returns wrong code. Fix it up. */
if (APP_CARD(app)->cardtype == CARDTYPE_YUBIKEY)
err = gpg_error (GPG_ERR_NO_OBJ);
/* Yubikey NEO (!CARDTYPE_YUBIKEY) also returns wrong code. Fix it up. */
/* Yubikey NEO (!CARDTYPE_YUBIKEY) also returns wrong code.
* Fix it up. */
else if (gpg_err_code (err) == GPG_ERR_CARD)
err = gpg_error (GPG_ERR_NO_OBJ);
log_error (_("reading public key failed: %s\n"), gpg_strerror (err));
goto leave;
}
err = read_public_key (app, NULL, 0U, keyno, buffer, buflen);
/* Note that we use 0 for the creation date and thus the - via
* status lines - returned fingerprint will only be valid if the
* key has also been created with that date. A similar problem
* occurs with the ECDH params which are fixed in the code. */
err = read_public_key (app, NULL, 0, 0U, keyno, buffer, buflen);
}
else
{
@ -4520,7 +4543,7 @@ rsa_writekey (app_t app, ctrl_t ctrl,
goto leave;
}
err = store_fpr (app, keyno, created_at, fprbuf, PUBKEY_ALGO_RSA,
err = store_fpr (app, 1, keyno, created_at, fprbuf, PUBKEY_ALGO_RSA,
rsa_n, rsa_n_len, rsa_e, rsa_e_len);
if (err)
goto leave;
@ -4545,6 +4568,8 @@ ecc_writekey (app_t app, ctrl_t ctrl,
const unsigned char *ecc_q = NULL;
const unsigned char *ecc_d = NULL;
size_t ecc_q_len, ecc_d_len;
const unsigned char *ecdh_param = NULL;
size_t ecdh_param_len = 0;
const char *curve = NULL;
u32 created_at = 0;
const char *oidstr;
@ -4557,7 +4582,7 @@ ecc_writekey (app_t app, ctrl_t ctrl,
unsigned char fprbuf[20];
size_t ecc_d_fixed_len;
/* (private-key(ecc(curve%s)(q%m)(d%m))(created-at%d)):
/* (private-key(ecc(curve%s)(q%m)(d%m))(created-at%d)(ecdh-params%s)):
curve = "NIST P-256" */
/* (private-key(ecc(curve%s)(q%m)(d%m))(created-at%d)):
curve = "secp256k1" */
@ -4652,6 +4677,7 @@ ecc_writekey (app_t app, ctrl_t ctrl,
}
if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen)))
goto leave;
if (tok && toklen == 10 && !memcmp ("created-at", tok, toklen))
{
if ((err = parse_sexp (&buf,&buflen,&depth,&tok,&toklen)))
@ -4663,6 +4689,17 @@ ecc_writekey (app_t app, ctrl_t ctrl,
created_at = created_at*10 + (*tok - '0');
}
}
else if (tok && toklen == 11 && !memcmp ("ecdh-params", tok, toklen))
{
if ((err = parse_sexp (&buf,&buflen,&depth,&tok,&toklen)))
goto leave;
if (tok)
{
ecdh_param = tok;
ecdh_param_len = toklen;
}
}
/* Skip until end of list. */
last_depth2 = depth;
while (!(err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))
@ -4694,6 +4731,13 @@ ecc_writekey (app_t app, ctrl_t ctrl,
else
algo = PUBKEY_ALGO_ECDSA;
if (algo == PUBKEY_ALGO_ECDH && !ecdh_param)
{
log_error ("opgp: ecdh parameters missing\n");
err = gpg_error (GPG_ERR_INV_VALUE);
goto leave;
}
oidstr = openpgp_curve_to_oid (curve, &n, NULL);
ecc_d_fixed_len = (n+7)/8;
err = openpgp_oid_from_str (oidstr, &oid);
@ -4795,8 +4839,8 @@ ecc_writekey (app_t app, ctrl_t ctrl,
goto leave;
}
err = store_fpr (app, keyno, created_at, fprbuf, algo, oidbuf, oid_len,
ecc_q, ecc_q_len, ecdh_params (curve), (size_t)4);
err = store_fpr (app, 1, keyno, created_at, fprbuf, algo, oidbuf, oid_len,
ecc_q, ecc_q_len, ecdh_param, ecdh_param_len);
leave:
gcry_mpi_release (oid);
@ -5024,7 +5068,7 @@ do_genkey (app_t app, ctrl_t ctrl, const char *keyref, const char *keyalgo,
send_status_info (ctrl, "KEY-CREATED-AT",
numbuf, (size_t)strlen(numbuf), NULL, 0);
err = read_public_key (app, ctrl, created_at, keyno, buffer, buflen);
err = read_public_key (app, ctrl, 1, created_at, keyno, buffer, buflen);
leave:
xfree (buffer);
return err;

View File

@ -5211,6 +5211,7 @@ verify_pin (app_t app,
const char *errstr;
const char *s;
int remaining;
unsigned int min_length;
int pin_reference;
int verified = 0;
int i;
@ -5277,12 +5278,16 @@ verify_pin (app_t app,
}
/* We might need to cope with UTF8 things here. Not sure how
min_length etc. are exactly defined, for now we take them as
a plain octet count. */
if (strlen (pinvalue) < aodf->min_length)
min_length etc. are exactly defined, for now we take them as a
plain octet count. For RSCS we enforce 6 despite that some cards
give 4 has min. length. */
min_length = aodf->min_length;
if (app->app_local->card_product == CARD_PRODUCT_RSCS && min_length < 6)
min_length = 6;
if (strlen (pinvalue) < min_length)
{
log_error ("p15: PIN is too short; minimum length is %lu\n",
aodf->min_length);
log_error ("p15: PIN is too short; minimum length is %u\n", min_length);
err = gpg_error (GPG_ERR_BAD_PIN);
}
else if (aodf->stored_length && strlen (pinvalue) > aodf->stored_length)

View File

@ -1606,9 +1606,13 @@ check_external_interference (app_t app, ctrl_t ctrl)
/*
* Only when a user is using Yubikey with pcsc-shared configuration,
* we need this detection. Otherwise, the card/token is under full
* control of scdaemon, there's no problem at all.
* control of scdaemon, there's no problem at all. However, if the
* APDU command has been used we better also check whether the AID
* is still valid.
*/
if (!opt.pcsc_shared || app->card->cardtype != CARDTYPE_YUBIKEY)
if (app && app->card && app->card->maybe_check_aid)
app->card->maybe_check_aid = 0;
else if (!opt.pcsc_shared || app->card->cardtype != CARDTYPE_YUBIKEY)
return 0;
if (app->fnc.check_aid)
@ -1646,6 +1650,20 @@ maybe_switch_app (ctrl_t ctrl, card_t card, const char *keyref)
if (!card->app)
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
if (card->maybe_check_aid && card->app->fnc.reselect
&& check_external_interference (card->app, ctrl))
{
if (DBG_APP)
log_debug ("slot %d, app %s: forced re-select due to direct APDU use\n",
card->slot, xstrapptype (card->app));
err = card->app->fnc.reselect (card->app, ctrl);
if (err)
log_error ("slot %d, app %s: forced re-select failed: %s - ignored\n",
card->slot, xstrapptype (card->app), gpg_strerror (err));
err = 0;
}
if (!ctrl->current_apptype)
{
/* For whatever reasons the current apptype has not been set -

View File

@ -2195,11 +2195,15 @@ cmd_apdu (assuan_context_t ctx, char *line)
unsigned char *result = NULL;
size_t resultlen;
card->maybe_check_aid = 1;
rc = apdu_send_direct (card->slot, exlen,
apdu, apdulen, handle_more,
NULL, &result, &resultlen);
if (rc)
log_error ("apdu_send_direct failed: %s\n", gpg_strerror (rc));
{
log_error ("apdu_send_direct failed: %s\n", apdu_strerror (rc));
rc = iso7816_map_sw (rc);
}
else
{
rc = assuan_send_data (ctx, result, resultlen);

View File

@ -42,6 +42,7 @@
#include "../common/openpgpdefs.h"
#include "../common/init.h"
#include "../common/strlist.h"
#include "../common/comopt.h"
#include "gpgtar.h"
@ -89,6 +90,7 @@ enum cmd_and_opt_values
oTarProgram,
/* Debugging. */
oDebug,
oDryRun
};
@ -145,6 +147,8 @@ static gpgrt_opt_t opts[] = {
ARGPARSE_s_s (oTarArgs, "tar-args", "@"),
ARGPARSE_s_s (oTarProgram, "tar", "@"),
ARGPARSE_s_s (oDebug, "debug", "@"),
ARGPARSE_end ()
};
@ -166,7 +170,7 @@ static enum cmd_and_opt_values cmd = 0;
static int skip_crypto = 0;
static const char *files_from = NULL;
static int null_names = 0;
static int any_debug;
@ -438,6 +442,10 @@ parse_arguments (gpgrt_argparse_t *pargs, gpgrt_opt_t *popts)
}
break;
case oDebug:
any_debug = 1;
break;
case oDryRun:
opt.dry_run = 1;
break;
@ -471,6 +479,10 @@ main (int argc, char **argv)
/* Set default options */
opt.status_fd = -1;
/* The configuraton directories for use by gpgrt_argparser. */
gpgrt_set_confdir (GPGRT_CONFDIR_SYS, gnupg_sysconfdir ());
gpgrt_set_confdir (GPGRT_CONFDIR_USER, gnupg_homedir ());
/* Parse the command line. */
pargs.argc = &argc;
pargs.argv = &argv;
@ -481,6 +493,10 @@ main (int argc, char **argv)
if (log_get_errorcount (0))
exit (2);
/* Get a log file from common.conf. */
if (!parse_comopt (GNUPG_MODULE_NAME_GPGTAR, any_debug) && comopt.logfile)
log_set_file (comopt.logfile);
/* Print a warning if an argument looks like an option. */
if (!opt.quiet && !(pargs.flags & ARGPARSE_FLAG_STOP_SEEN))
{