diff --git a/Makefile.am b/Makefile.am index 6a2508b11..0f2075089 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 \ diff --git a/NEWS b/NEWS index 894743db5..af2064199 100644 --- a/NEWS +++ b/NEWS @@ -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) diff --git a/agent/command-ssh.c b/agent/command-ssh.c index b41177be6..51111a60d 100644 --- a/agent/command-ssh.c +++ b/agent/command-ssh.c @@ -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) { diff --git a/agent/command.c b/agent/command.c index 9481f47c3..dd7cb5e57 100644 --- a/agent/command.c +++ b/agent/command.c @@ -3175,9 +3175,10 @@ cmd_delete_key (assuan_context_t ctx, char *line) #endif static const char hlp_keytocard[] = - "KEYTOCARD [--force] []\n" + "KEYTOCARD [--force] [ []]\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); diff --git a/agent/keyformat.txt b/agent/keyformat.txt index bbcaa7e2c..fbe999ca1 100644 --- a/agent/keyformat.txt +++ b/agent/keyformat.txt @@ -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 diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk index f21f43731..db78afa50 100644 --- a/build-aux/speedo.mk +++ b/build-aux/speedo.mk @@ -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) \ diff --git a/build-aux/speedo/w32/exdll.c b/build-aux/speedo/w32/exdll.c new file mode 100644 index 000000000..7815523ae --- /dev/null +++ b/build-aux/speedo/w32/exdll.c @@ -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); +} diff --git a/build-aux/speedo/w32/exdll.h b/build-aux/speedo/w32/exdll.h index bb13ae097..f419dc3fe 100644 --- a/build-aux/speedo/w32/exdll.h +++ b/build-aux/speedo/w32/exdll.h @@ -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 +#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); \ + } diff --git a/build-aux/speedo/w32/g4wihelp.c b/build-aux/speedo/w32/g4wihelp.c index 626f3f12c..bae4b837c 100644 --- a/build-aux/speedo/w32/g4wihelp.c +++ b/build-aux/speedo/w32/g4wihelp.c @@ -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 #include +#include +#include +#include +#include +#include #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 /* 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); } diff --git a/build-aux/speedo/w32/inst.nsi b/build-aux/speedo/w32/inst.nsi index 42fa2fb58..283166835 100644 --- a/build-aux/speedo/w32/inst.nsi +++ b/build-aux/speedo/w32/inst.nsi @@ -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 diff --git a/common/homedir.c b/common/homedir.c index 091964fc1..286685feb 100644 --- a/common/homedir.c +++ b/common/homedir.c @@ -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 (); } diff --git a/common/sexputil.c b/common/sexputil.c index 29fe508b6..c7471be85 100644 --- a/common/sexputil.c +++ b/common/sexputil.c @@ -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; diff --git a/common/util.h b/common/util.h index d80e4fb25..aa24e39e6 100644 --- a/common/util.h +++ b/common/util.h @@ -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); diff --git a/configure.ac b/configure.ac index c31ae026a..24448c157 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/dirmngr/crlcache.h b/dirmngr/crlcache.h index 375943462..9cc063aff 100644 --- a/dirmngr/crlcache.h +++ b/dirmngr/crlcache.h @@ -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); diff --git a/dirmngr/http.c b/dirmngr/http.c index 20f71f61b..b4c501736 100644 --- a/dirmngr/http.c +++ b/dirmngr/http.c @@ -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); diff --git a/doc/gpg-agent.texi b/doc/gpg-agent.texi index c8080c7c2..902de56f4 100644 --- a/doc/gpg-agent.texi +++ b/doc/gpg-agent.texi @@ -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 diff --git a/doc/gpg.texi b/doc/gpg.texi index eb7c35cac..9fdabc743 100644 --- a/doc/gpg.texi +++ b/doc/gpg.texi @@ -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 diff --git a/g10/call-agent.c b/g10/call-agent.c index 66812e998..b0bccc0a5 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -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; diff --git a/g10/call-agent.h b/g10/call-agent.h index a3f234ade..45af95422 100644 --- a/g10/call-agent.h +++ b/g10/call-agent.h @@ -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, diff --git a/g10/card-util.c b/g10/card-util.c index 6451b31e7..d680c4d0a 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -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; diff --git a/g10/import.c b/g10/import.c index 1ed40a63c..5e44942e7 100644 --- a/g10/import.c +++ b/g10/import.c @@ -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 diff --git a/g10/keydb.h b/g10/keydb.h index 9323e3137..1a66d664e 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -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 --*/ diff --git a/g10/keygen.c b/g10/keygen.c index c97783124..7f54f7da0 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -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); diff --git a/g10/keyid.c b/g10/keyid.c index ca6564c5c..9191fec92 100644 --- a/g10/keyid.c +++ b/g10/keyid.c @@ -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); +} diff --git a/po/ca.po b/po/ca.po index 831e84602..3add69bb1 100644 --- a/po/ca.po +++ b/po/ca.po @@ -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 "" diff --git a/po/cs.po b/po/cs.po index df6a29a48..d72bd673f 100644 --- a/po/cs.po +++ b/po/cs.po @@ -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" diff --git a/po/da.po b/po/da.po index e8bb98213..404d79eb4 100644 --- a/po/da.po +++ b/po/da.po @@ -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" diff --git a/po/de.po b/po/de.po index eff9b9634..64e444d01 100644 --- a/po/de.po +++ b/po/de.po @@ -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 \n" -"Language-Team: German \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 " diff --git a/po/el.po b/po/el.po index ce190ea7c..a45232fd8 100644 --- a/po/el.po +++ b/po/el.po @@ -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 "" diff --git a/po/eo.po b/po/eo.po index 8144ae10e..e9b007c41 100644 --- a/po/eo.po +++ b/po/eo.po @@ -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" diff --git a/po/es.po b/po/es.po index 41357a983..03e50d3ca 100644 --- a/po/es.po +++ b/po/es.po @@ -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 " diff --git a/po/et.po b/po/et.po index a06ce408e..6c6f7bfbb 100644 --- a/po/et.po +++ b/po/et.po @@ -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" diff --git a/po/fi.po b/po/fi.po index 33c75a214..15fd0471a 100644 --- a/po/fi.po +++ b/po/fi.po @@ -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 "" diff --git a/po/fr.po b/po/fr.po index 7581ee8b5..239307ec4 100644 --- a/po/fr.po +++ b/po/fr.po @@ -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 " diff --git a/po/gl.po b/po/gl.po index c913afad8..af75e558c 100644 --- a/po/gl.po +++ b/po/gl.po @@ -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" diff --git a/po/hu.po b/po/hu.po index 7918a3785..b506d8a68 100644 --- a/po/hu.po +++ b/po/hu.po @@ -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 "" diff --git a/po/id.po b/po/id.po index 6285ddeb8..5334da392 100644 --- a/po/id.po +++ b/po/id.po @@ -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" diff --git a/po/it.po b/po/it.po index 3014cf11b..85f9b817c 100644 --- a/po/it.po +++ b/po/it.po @@ -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" diff --git a/po/ja.po b/po/ja.po index fb62f7737..9d286148b 100644 --- a/po/ja.po +++ b/po/ja.po @@ -5,13 +5,13 @@ # Yoshihiro Kajiki , 1999. # Takashi P.KATOH, 2002. # NIIBE Yutaka , 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 \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 "キーサーãƒãƒ»ãƒ˜ãƒ«ãƒ‘ーã«ãƒ‡ãƒ¼ã‚¿ã‚’与ãˆã‚‹éš›ã€ä¸€æ™‚ファイルを使ã†" diff --git a/po/nb.po b/po/nb.po index 6498e3651..19c2a4d19 100644 --- a/po/nb.po +++ b/po/nb.po @@ -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" diff --git a/po/pl.po b/po/pl.po index c32665ae4..dd97fdbdc 100644 --- a/po/pl.po +++ b/po/pl.po @@ -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" diff --git a/po/pt.po b/po/pt.po index 2f754d976..d20eb0138 100644 --- a/po/pt.po +++ b/po/pt.po @@ -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" diff --git a/po/ro.po b/po/ro.po index d0d4c32ce..e60784d33 100644 --- a/po/ro.po +++ b/po/ro.po @@ -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" diff --git a/po/ru.po b/po/ru.po index 0c0807ff0..80e4e7aa6 100644 --- a/po/ru.po +++ b/po/ru.po @@ -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" diff --git a/po/sk.po b/po/sk.po index 4b695b888..50e9070b8 100644 --- a/po/sk.po +++ b/po/sk.po @@ -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" diff --git a/po/sv.po b/po/sv.po index d096cc878..c8405d50c 100644 --- a/po/sv.po +++ b/po/sv.po @@ -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" diff --git a/po/tr.po b/po/tr.po index 9effccfe8..3f15ce679 100644 --- a/po/tr.po +++ b/po/tr.po @@ -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" diff --git a/po/uk.po b/po/uk.po index e83cc8ef9..d81fd7d64 100644 --- a/po/uk.po +++ b/po/uk.po @@ -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 "" #~ "викориÑтовувати тимчаÑові файли Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… до допоміжних " diff --git a/po/zh_CN.po b/po/zh_CN.po index 9b69aeb45..1b6a221d9 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -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 "密钥 %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 "[用户标识未找到]" @@ -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" diff --git a/po/zh_TW.po b/po/zh_TW.po index 92470d47e..066dd0521 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -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 "用暫存檔來將資料éžé€çµ¦é‡‘鑰伺æœå™¨å”助程å¼" diff --git a/regexp/UnicodeData.txt b/regexp/UnicodeData.txt index e22f967bb..ea963a716 100644 --- a/regexp/UnicodeData.txt +++ b/regexp/UnicodeData.txt @@ -1525,6 +1525,7 @@ 061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; 061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;; +061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;; 061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;; @@ -2089,6 +2090,47 @@ 0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;; 0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;; 086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;; +0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;; +0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;; +0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; +0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; +0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;; +0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;; +0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;; +0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;; +0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;; +087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING;Lo;0;AL;;;;;N;;;;; +087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING;Lo;0;AL;;;;;N;;;;; +0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING;Lo;0;AL;;;;;N;;;;; +0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;; +0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;; +0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;; +0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;; +0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;; +0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;; +0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;; +0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;; +088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; +0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; +0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; +0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;; +0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;; +089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;; +089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;; +089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;; +089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;; +089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;; +089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;; 08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; @@ -2110,6 +2152,7 @@ 08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;; 08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;; @@ -2128,6 +2171,17 @@ 08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; +08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;; +08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;; +08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;; +08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;; +08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;; +08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;; +08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;; +08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;; +08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; +08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; 08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;; 08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;; 08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;; @@ -2786,6 +2840,7 @@ 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; +0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; @@ -2806,6 +2861,7 @@ 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; +0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; @@ -2901,6 +2957,7 @@ 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; @@ -2918,6 +2975,7 @@ 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; +0CF3;KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT;Mc;0;L;;;;;N;;;;; 0D00;MALAYALAM SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; @@ -3282,6 +3340,7 @@ 0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; 0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; 0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; +0ECE;LAO YAMAKKAN;Mn;0;NSM;;;;;N;;;;; 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -5258,6 +5317,7 @@ 170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; 170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; 170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; +170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;; 170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; 170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; 1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; @@ -5265,6 +5325,8 @@ 1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; +171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;; 1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; 1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; 1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; @@ -5285,7 +5347,7 @@ 1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; 1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; -1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;; +1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; 1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; @@ -5455,6 +5517,7 @@ 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;; +180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;; 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -6059,6 +6122,20 @@ 1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;; 1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;; 1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;; +1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;; +1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;; +1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;; +1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;; +1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; +1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;; +1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;; +1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; @@ -6135,6 +6212,7 @@ 1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; 1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; 1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; +1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;; 1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -6180,6 +6258,8 @@ 1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; 1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; 1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; +1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;; +1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;; 1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; 1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; 1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; @@ -6778,6 +6858,7 @@ 1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;; +1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;; 1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;; 1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;; @@ -7457,6 +7538,7 @@ 20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;; 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;; +20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; @@ -10300,6 +10382,7 @@ 2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; 2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; 2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; +2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F; 2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 @@ -10347,6 +10430,7 @@ 2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C 2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D 2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E +2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F 2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; 2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; @@ -10795,6 +10879,17 @@ 2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;; 2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;; 2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;; +2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;; +2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;; +2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;; +2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;; +2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;; +2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; @@ -12204,7 +12299,7 @@ 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; 4E00;;Lo;0;L;;;;;N;;;;; -9FFC;;Lo;0;L;;;;;N;;;;; +9FFF;;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; @@ -14149,6 +14244,8 @@ A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD; A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF; A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE +A7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1; +A7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0 A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3; A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2 A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794; @@ -14158,6 +14255,17 @@ A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8; A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7 A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA; A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 +A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; +A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 +A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; +A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;; +A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; +A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 +A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; +A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 +A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L; 0043;;;;N;;;;; +A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L; 0046;;;;N;;;;; +A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L; 0051;;;;N;;;;; A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6; A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5 A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;; @@ -15794,6 +15902,7 @@ FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;; FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; +FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; @@ -16159,6 +16268,22 @@ FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;; +FD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;; +FD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;; +FD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;; +FD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;; +FD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;; +FD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;; +FD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;; +FD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;; +FD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;; +FD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;; +FD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +FD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;; +FD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;; +FD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;; +FD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;; +FD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; @@ -16277,6 +16402,7 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; +FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; @@ -16291,6 +16417,8 @@ FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 06 FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FDFC;RIAL SIGN;Sc;0;AL; 0631 06CC 0627 0644;;;;N;;;;; FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; +FDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;; +FDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;; FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; @@ -17798,6 +17926,76 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;; 10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;; 1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;; +10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597; +10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598; +10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599; +10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A; +10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B; +10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C; +10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D; +10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E; +10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F; +10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0; +1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1; +1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3; +1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4; +1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5; +1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6; +10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7; +10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8; +10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9; +10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA; +10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB; +10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC; +10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD; +10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE; +10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF; +10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0; +1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1; +1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3; +1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4; +1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5; +1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6; +10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7; +10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8; +10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9; +10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB; +10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC; +10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570 +10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571 +10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572 +1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573 +1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574 +1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575 +1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576 +1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577 +1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578 +105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579 +105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A +105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C +105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D +105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E +105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F +105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580 +105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581 +105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582 +105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583 +105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584 +105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585 +105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586 +105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587 +105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588 +105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589 +105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A +105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C +105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D +105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E +105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F +105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590 +105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591 +105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592 +105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594 +105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595 10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;; 10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;; 10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;; @@ -18139,6 +18337,63 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;; 10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;; 10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;; +10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;; +10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L; 02D0;;;;N;;;;; +10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L; 02D1;;;;N;;;;; +10783;MODIFIER LETTER SMALL AE;Lm;0;L; 00E6;;;;N;;;;; +10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L; 0299;;;;N;;;;; +10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L; 0253;;;;N;;;;; +10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L; 02A3;;;;N;;;;; +10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB66;;;;N;;;;; +10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L; 02A5;;;;N;;;;; +1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L; 02A4;;;;N;;;;; +1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L; 0256;;;;N;;;;; +1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L; 0257;;;;N;;;;; +1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L; 1D91;;;;N;;;;; +1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L; 0258;;;;N;;;;; +1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L; 025E;;;;N;;;;; +10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L; 02A9;;;;N;;;;; +10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L; 0264;;;;N;;;;; +10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L; 0262;;;;N;;;;; +10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L; 0260;;;;N;;;;; +10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L; 029B;;;;N;;;;; +10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L; 0127;;;;N;;;;; +10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L; 029C;;;;N;;;;; +10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L; 0267;;;;N;;;;; +10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L; 0284;;;;N;;;;; +10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L; 02AA;;;;N;;;;; +1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L; 02AB;;;;N;;;;; +1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L; 026C;;;;N;;;;; +1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L; 1DF04;;;;N;;;;; +1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L; A78E;;;;N;;;;; +1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L; 026E;;;;N;;;;; +1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L; 1DF05;;;;N;;;;; +107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L; 028E;;;;N;;;;; +107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L; 1DF06;;;;N;;;;; +107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L; 00F8;;;;N;;;;; +107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L; 0276;;;;N;;;;; +107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L; 0277;;;;N;;;;; +107A5;MODIFIER LETTER SMALL Q;Lm;0;L; 0071;;;;N;;;;; +107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L; 027A;;;;N;;;;; +107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;Lm;0;L; 1DF08;;;;N;;;;; +107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L; 027D;;;;N;;;;; +107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L; 027E;;;;N;;;;; +107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L; 0280;;;;N;;;;; +107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L; 02A8;;;;N;;;;; +107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L; 02A6;;;;N;;;;; +107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB67;;;;N;;;;; +107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L; 02A7;;;;N;;;;; +107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L; 0288;;;;N;;;;; +107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L; 2C71;;;;N;;;;; +107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L; 028F;;;;N;;;;; +107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L; 02A1;;;;N;;;;; +107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L; 02A2;;;;N;;;;; +107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L; 0298;;;;N;;;;; +107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L; 01C0;;;;N;;;;; +107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L; 01C1;;;;N;;;;; +107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L; 01C2;;;;N;;;;; +107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L; 1DF0A;;;;N;;;;; +107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L; 1DF1E;;;;N;;;;; 10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; 10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; 10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; @@ -19140,6 +19395,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;; 10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;; 10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;; +10EFD;ARABIC SMALL LOW WORD SAKTA;Mn;220;NSM;;;;;N;;;;; +10EFE;ARABIC SMALL LOW WORD QASR;Mn;220;NSM;;;;;N;;;;; +10EFF;ARABIC SMALL LOW WORD MADDA;Mn;220;NSM;;;;;N;;;;; 10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;; 10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;; @@ -19222,6 +19480,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; 10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;; 10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; +10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;; +10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;; +10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;; +10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;; +10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;; +10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;; +10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;; +10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;; +10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;; +10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;; +10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;; +10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;; +10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;; +10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;; +10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;; +10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;; +10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;; +10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;; +10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;; +10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;; +10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;; 10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;; 10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;; @@ -19381,6 +19665,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;; +11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;; +11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;; +11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;; +11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;; +11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;; 1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;; 11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; @@ -19448,6 +19738,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;; 110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;; 110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;; 110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;; @@ -19772,6 +20063,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;; +1123F;KHOJKI LETTER QA;Lo;0;L;;;;;N;;;;; +11240;KHOJKI LETTER SHORT I;Lo;0;L;;;;;N;;;;; +11241;KHOJKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;; 11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;; 11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;; @@ -20385,6 +20679,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;; +116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -20453,6 +20748,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;; 1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;; 1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;; +11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;; +11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;; +11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;; +11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;; +11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;; +11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;; +11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;; 11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;; 11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;; 11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;; @@ -20889,6 +21191,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;; 11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;; 11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;; +11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;; +11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;; +11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;; +11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;; +11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;; +11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;; +11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;; +11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;; +11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;; +11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;; +11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;; +11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;; +11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;; +11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;; +11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;; +11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;; 11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;; 11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;; 11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;; @@ -20946,6 +21264,16 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;; 11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;; +11B00;DEVANAGARI HEAD MARK;Po;0;L;;;;;N;;;;; +11B01;DEVANAGARI HEAD MARK WITH HEADSTROKE;Po;0;L;;;;;N;;;;; +11B02;DEVANAGARI SIGN BHALE;Po;0;L;;;;;N;;;;; +11B03;DEVANAGARI SIGN BHALE WITH HOOK;Po;0;L;;;;;N;;;;; +11B04;DEVANAGARI SIGN EXTENDED BHALE;Po;0;L;;;;;N;;;;; +11B05;DEVANAGARI SIGN EXTENDED BHALE WITH HOOK;Po;0;L;;;;;N;;;;; +11B06;DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE;Po;0;L;;;;;N;;;;; +11B07;DEVANAGARI SIGN WESTERN NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; +11B08;DEVANAGARI SIGN REVERSED NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; +11B09;DEVANAGARI SIGN MINDU;Po;0;L;;;;;N;;;;; 11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;; 11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;; 11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;; @@ -21274,6 +21602,92 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;; 11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;; +11F00;KAWI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +11F01;KAWI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +11F02;KAWI SIGN REPHA;Lo;0;L;;;;;N;;;;; +11F03;KAWI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +11F04;KAWI LETTER A;Lo;0;L;;;;;N;;;;; +11F05;KAWI LETTER AA;Lo;0;L;;;;;N;;;;; +11F06;KAWI LETTER I;Lo;0;L;;;;;N;;;;; +11F07;KAWI LETTER II;Lo;0;L;;;;;N;;;;; +11F08;KAWI LETTER U;Lo;0;L;;;;;N;;;;; +11F09;KAWI LETTER UU;Lo;0;L;;;;;N;;;;; +11F0A;KAWI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +11F0B;KAWI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +11F0C;KAWI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +11F0D;KAWI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +11F0E;KAWI LETTER E;Lo;0;L;;;;;N;;;;; +11F0F;KAWI LETTER AI;Lo;0;L;;;;;N;;;;; +11F10;KAWI LETTER O;Lo;0;L;;;;;N;;;;; +11F12;KAWI LETTER KA;Lo;0;L;;;;;N;;;;; +11F13;KAWI LETTER KHA;Lo;0;L;;;;;N;;;;; +11F14;KAWI LETTER GA;Lo;0;L;;;;;N;;;;; +11F15;KAWI LETTER GHA;Lo;0;L;;;;;N;;;;; +11F16;KAWI LETTER NGA;Lo;0;L;;;;;N;;;;; +11F17;KAWI LETTER CA;Lo;0;L;;;;;N;;;;; +11F18;KAWI LETTER CHA;Lo;0;L;;;;;N;;;;; +11F19;KAWI LETTER JA;Lo;0;L;;;;;N;;;;; +11F1A;KAWI LETTER JHA;Lo;0;L;;;;;N;;;;; +11F1B;KAWI LETTER NYA;Lo;0;L;;;;;N;;;;; +11F1C;KAWI LETTER TTA;Lo;0;L;;;;;N;;;;; +11F1D;KAWI LETTER TTHA;Lo;0;L;;;;;N;;;;; +11F1E;KAWI LETTER DDA;Lo;0;L;;;;;N;;;;; +11F1F;KAWI LETTER DDHA;Lo;0;L;;;;;N;;;;; +11F20;KAWI LETTER NNA;Lo;0;L;;;;;N;;;;; +11F21;KAWI LETTER TA;Lo;0;L;;;;;N;;;;; +11F22;KAWI LETTER THA;Lo;0;L;;;;;N;;;;; +11F23;KAWI LETTER DA;Lo;0;L;;;;;N;;;;; +11F24;KAWI LETTER DHA;Lo;0;L;;;;;N;;;;; +11F25;KAWI LETTER NA;Lo;0;L;;;;;N;;;;; +11F26;KAWI LETTER PA;Lo;0;L;;;;;N;;;;; +11F27;KAWI LETTER PHA;Lo;0;L;;;;;N;;;;; +11F28;KAWI LETTER BA;Lo;0;L;;;;;N;;;;; +11F29;KAWI LETTER BHA;Lo;0;L;;;;;N;;;;; +11F2A;KAWI LETTER MA;Lo;0;L;;;;;N;;;;; +11F2B;KAWI LETTER YA;Lo;0;L;;;;;N;;;;; +11F2C;KAWI LETTER RA;Lo;0;L;;;;;N;;;;; +11F2D;KAWI LETTER LA;Lo;0;L;;;;;N;;;;; +11F2E;KAWI LETTER WA;Lo;0;L;;;;;N;;;;; +11F2F;KAWI LETTER SHA;Lo;0;L;;;;;N;;;;; +11F30;KAWI LETTER SSA;Lo;0;L;;;;;N;;;;; +11F31;KAWI LETTER SA;Lo;0;L;;;;;N;;;;; +11F32;KAWI LETTER HA;Lo;0;L;;;;;N;;;;; +11F33;KAWI LETTER JNYA;Lo;0;L;;;;;N;;;;; +11F34;KAWI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +11F35;KAWI VOWEL SIGN ALTERNATE AA;Mc;0;L;;;;;N;;;;; +11F36;KAWI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +11F37;KAWI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +11F38;KAWI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +11F39;KAWI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +11F3A;KAWI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +11F3E;KAWI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +11F3F;KAWI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +11F40;KAWI VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;; +11F41;KAWI SIGN KILLER;Mc;9;L;;;;;N;;;;; +11F42;KAWI CONJOINER;Mn;9;NSM;;;;;N;;;;; +11F43;KAWI DANDA;Po;0;L;;;;;N;;;;; +11F44;KAWI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +11F45;KAWI PUNCTUATION SECTION MARKER;Po;0;L;;;;;N;;;;; +11F46;KAWI PUNCTUATION ALTERNATE SECTION MARKER;Po;0;L;;;;;N;;;;; +11F47;KAWI PUNCTUATION FLOWER;Po;0;L;;;;;N;;;;; +11F48;KAWI PUNCTUATION SPACE FILLER;Po;0;L;;;;;N;;;;; +11F49;KAWI PUNCTUATION DOT;Po;0;L;;;;;N;;;;; +11F4A;KAWI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;; +11F4B;KAWI PUNCTUATION TRIPLE DOT;Po;0;L;;;;;N;;;;; +11F4C;KAWI PUNCTUATION CIRCLE;Po;0;L;;;;;N;;;;; +11F4D;KAWI PUNCTUATION FILLED CIRCLE;Po;0;L;;;;;N;;;;; +11F4E;KAWI PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;; +11F4F;KAWI PUNCTUATION CLOSING SPIRAL;Po;0;L;;;;;N;;;;; +11F50;KAWI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +11F51;KAWI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +11F52;KAWI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +11F53;KAWI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +11F54;KAWI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +11F55;KAWI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +11F56;KAWI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +11F57;KAWI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +11F58;KAWI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +11F59;KAWI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;; 11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;; 11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; @@ -22560,6 +22974,105 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;; 12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;; 12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;; +12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;; +12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;; +12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;; +12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;; +12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;; +12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;; +12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;; +12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;; +12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;; +12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;; +12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;; +12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;; +12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;; +12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;; +12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;; +12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;; +12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;; +12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;; +12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;; +12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;; +12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;; +12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;; +12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;; +12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;; +12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;; +12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;; +12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;; +12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;; +12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;; +12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;; +12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;; +12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;; +12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;; +12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;; +12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;; +12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;; +12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;; +12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;; +12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;; +12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;; +12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;; +12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;; +12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;; +12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;; +12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;; +12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;; +12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;; +12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;; +12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;; +12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;; +12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;; +12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;; +12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;; +12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;; +12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;; +12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;; +12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;; +12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;; +12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;; +12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;; +12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;; +12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;; +12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;; +12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;; +12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;; +12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;; +12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;; +12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;; +12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;; +12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;; +12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;; +12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;; +12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;; +12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;; +12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;; +12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;; +12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;; +12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;; +12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;; +12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;; +12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;; +12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;; +12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;; +12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;; +12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;; +12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;; +12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;; +12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;; +12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;; +12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;; +12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;; +12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;; +12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;; +12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;; +12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;; +12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;; +12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;; +12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;; +12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;; 13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; @@ -23631,6 +24144,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;; 1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;; 1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;; +1342F;EGYPTIAN HIEROGLYPH V011D;Lo;0;L;;;;;N;;;;; 13430;EGYPTIAN HIEROGLYPH VERTICAL JOINER;Cf;0;L;;;;;N;;;;; 13431;EGYPTIAN HIEROGLYPH HORIZONTAL JOINER;Cf;0;L;;;;;N;;;;; 13432;EGYPTIAN HIEROGLYPH INSERT AT TOP START;Cf;0;L;;;;;N;;;;; @@ -23640,6 +24154,35 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 13436;EGYPTIAN HIEROGLYPH OVERLAY MIDDLE;Cf;0;L;;;;;N;;;;; 13437;EGYPTIAN HIEROGLYPH BEGIN SEGMENT;Cf;0;L;;;;;N;;;;; 13438;EGYPTIAN HIEROGLYPH END SEGMENT;Cf;0;L;;;;;N;;;;; +13439;EGYPTIAN HIEROGLYPH INSERT AT MIDDLE;Cf;0;L;;;;;N;;;;; +1343A;EGYPTIAN HIEROGLYPH INSERT AT TOP;Cf;0;L;;;;;N;;;;; +1343B;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM;Cf;0;L;;;;;N;;;;; +1343C;EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE;Cf;0;L;;;;;N;;;;; +1343D;EGYPTIAN HIEROGLYPH END ENCLOSURE;Cf;0;L;;;;;N;;;;; +1343E;EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE;Cf;0;L;;;;;N;;;;; +1343F;EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE;Cf;0;L;;;;;N;;;;; +13440;EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY;Mn;0;NSM;;;;;N;;;;; +13441;EGYPTIAN HIEROGLYPH FULL BLANK;Lo;0;L;;;;;N;;;;; +13442;EGYPTIAN HIEROGLYPH HALF BLANK;Lo;0;L;;;;;N;;;;; +13443;EGYPTIAN HIEROGLYPH LOST SIGN;Lo;0;L;;;;;N;;;;; +13444;EGYPTIAN HIEROGLYPH HALF LOST SIGN;Lo;0;L;;;;;N;;;;; +13445;EGYPTIAN HIEROGLYPH TALL LOST SIGN;Lo;0;L;;;;;N;;;;; +13446;EGYPTIAN HIEROGLYPH WIDE LOST SIGN;Lo;0;L;;;;;N;;;;; +13447;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START;Mn;0;NSM;;;;;N;;;;; +13448;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START;Mn;0;NSM;;;;;N;;;;; +13449;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START;Mn;0;NSM;;;;;N;;;;; +1344A;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP END;Mn;0;NSM;;;;;N;;;;; +1344B;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP;Mn;0;NSM;;;;;N;;;;; +1344C;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START AND TOP END;Mn;0;NSM;;;;;N;;;;; +1344D;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND TOP;Mn;0;NSM;;;;;N;;;;; +1344E;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM END;Mn;0;NSM;;;;;N;;;;; +1344F;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START AND BOTTOM END;Mn;0;NSM;;;;;N;;;;; +13450;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM;Mn;0;NSM;;;;;N;;;;; +13451;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND BOTTOM;Mn;0;NSM;;;;;N;;;;; +13452;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT END;Mn;0;NSM;;;;;N;;;;; +13453;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END;Mn;0;NSM;;;;;N;;;;; +13454;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END;Mn;0;NSM;;;;;N;;;;; +13455;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED;Mn;0;NSM;;;;;N;;;;; 14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; @@ -24835,6 +25378,95 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16A6E;MRO DANDA;Po;0;L;;;;;N;;;;; 16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;; +16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;; +16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;; +16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;; +16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;; +16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;; +16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;; +16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;; +16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;; +16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;; +16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;; +16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;; +16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;; +16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;; +16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;; +16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;; +16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;; +16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;; +16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;; +16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;; +16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;; +16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;; +16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;; +16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;; +16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;; +16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;; +16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;; +16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;; +16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;; +16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;; +16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;; +16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;; +16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;; +16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;; +16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;; +16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;; +16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;; +16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;; +16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;; +16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;; +16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;; +16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;; +16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;; +16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;; +16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;; +16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;; +16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;; +16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;; +16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;; +16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;; +16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;; +16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;; +16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;; +16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;; +16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;; +16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;; +16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;; +16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;; +16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;; +16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;; +16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;; +16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;; +16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;; +16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;; +16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;; +16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;; +16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;; +16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;; +16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;; +16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;; +16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;; +16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;; +16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;; +16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;; +16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;; +16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;; +16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;; +16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;; +16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;; +16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;; 16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;; 16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;; @@ -26487,6 +27119,19 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; 18D00;;Lo;0;L;;;;;N;;;;; 18D08;;Lo;0;L;;;;;N;;;;; +1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; +1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;; +1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;; +1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;; +1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;; +1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;; +1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;; +1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;; +1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;; +1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;; +1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;; +1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;; +1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;; 1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;; 1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; 1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;; @@ -26774,9 +27419,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;; 1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;; 1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;; +1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; +1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;; +1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; +1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; +1B132;HIRAGANA LETTER SMALL KO;Lo;0;L;;;;;N;;;;; 1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; +1B155;KATAKANA LETTER SMALL KO;Lo;0;L;;;;;N;;;;; 1B164;KATAKANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B165;KATAKANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B166;KATAKANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; @@ -27324,6 +27975,191 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;; 1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;; +1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;; +1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; +1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; +1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;; +1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;; +1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;; +1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;; +1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;; +1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;; +1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;; +1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;; +1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;; +1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;; +1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;; +1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;; +1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;; +1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;; +1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;; +1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;; +1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;; +1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;; +1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;; +1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;; +1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;; +1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;Mn;0;NSM;;;;;N;;;;; +1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;; +1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;; +1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;; +1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;; +1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;; +1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;; +1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;; +1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;; +1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;; +1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;; +1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;; +1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;; +1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;; +1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;; +1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;; +1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;; +1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;; +1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;; +1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;; +1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;; +1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;; +1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;; +1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;; +1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;; +1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;; +1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;; +1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;; +1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;; +1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;; +1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;; +1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;; +1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;; +1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;; +1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;; +1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;; +1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;; +1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;; +1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;; +1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;; +1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;; +1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;; +1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;; +1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;; +1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;; +1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;; +1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;; +1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;; +1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;; +1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;; +1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;; +1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;; +1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;; +1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;; +1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;; +1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;; +1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;; +1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;; +1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;; +1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;; +1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;; +1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;; +1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;; +1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;; +1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;; +1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;; +1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;; +1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;; +1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;; +1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;; +1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;; +1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;; +1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;; +1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;; +1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;; +1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;; +1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;; +1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;; +1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;; +1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;; +1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;; +1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;; +1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;; +1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;; +1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;; +1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;; 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; @@ -27801,6 +28637,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;; +1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;; +1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;; 1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; @@ -27871,6 +28709,26 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; 1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; 1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; +1D2C0;KAKTOVIK NUMERAL ZERO;No;0;L;;;;0;N;;;;; +1D2C1;KAKTOVIK NUMERAL ONE;No;0;L;;;;1;N;;;;; +1D2C2;KAKTOVIK NUMERAL TWO;No;0;L;;;;2;N;;;;; +1D2C3;KAKTOVIK NUMERAL THREE;No;0;L;;;;3;N;;;;; +1D2C4;KAKTOVIK NUMERAL FOUR;No;0;L;;;;4;N;;;;; +1D2C5;KAKTOVIK NUMERAL FIVE;No;0;L;;;;5;N;;;;; +1D2C6;KAKTOVIK NUMERAL SIX;No;0;L;;;;6;N;;;;; +1D2C7;KAKTOVIK NUMERAL SEVEN;No;0;L;;;;7;N;;;;; +1D2C8;KAKTOVIK NUMERAL EIGHT;No;0;L;;;;8;N;;;;; +1D2C9;KAKTOVIK NUMERAL NINE;No;0;L;;;;9;N;;;;; +1D2CA;KAKTOVIK NUMERAL TEN;No;0;L;;;;10;N;;;;; +1D2CB;KAKTOVIK NUMERAL ELEVEN;No;0;L;;;;11;N;;;;; +1D2CC;KAKTOVIK NUMERAL TWELVE;No;0;L;;;;12;N;;;;; +1D2CD;KAKTOVIK NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;; +1D2CE;KAKTOVIK NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;; +1D2CF;KAKTOVIK NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;; +1D2D0;KAKTOVIK NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;; +1D2D1;KAKTOVIK NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;; +1D2D2;KAKTOVIK NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;; +1D2D3;KAKTOVIK NUMERAL NINETEEN;No;0;L;;;;19;N;;;;; 1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;; 1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;; 1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;; @@ -29671,6 +30529,43 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;; 1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;; 1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;; +1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;; +1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;; +1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;; +1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;; +1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;; +1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;; +1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;; +1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;; +1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;; +1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;; +1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;; +1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;; +1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;; +1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;; +1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;; +1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;; +1DF25;LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF26;LATIN SMALL LETTER L WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF27;LATIN SMALL LETTER N WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF28;LATIN SMALL LETTER R WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF29;LATIN SMALL LETTER S WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF2A;LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; 1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;; 1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;; 1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;; @@ -29709,6 +30604,69 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; +1E030;MODIFIER LETTER CYRILLIC SMALL A;Lm;0;L; 0430;;;;N;;;;; +1E031;MODIFIER LETTER CYRILLIC SMALL BE;Lm;0;L; 0431;;;;N;;;;; +1E032;MODIFIER LETTER CYRILLIC SMALL VE;Lm;0;L; 0432;;;;N;;;;; +1E033;MODIFIER LETTER CYRILLIC SMALL GHE;Lm;0;L; 0433;;;;N;;;;; +1E034;MODIFIER LETTER CYRILLIC SMALL DE;Lm;0;L; 0434;;;;N;;;;; +1E035;MODIFIER LETTER CYRILLIC SMALL IE;Lm;0;L; 0435;;;;N;;;;; +1E036;MODIFIER LETTER CYRILLIC SMALL ZHE;Lm;0;L; 0436;;;;N;;;;; +1E037;MODIFIER LETTER CYRILLIC SMALL ZE;Lm;0;L; 0437;;;;N;;;;; +1E038;MODIFIER LETTER CYRILLIC SMALL I;Lm;0;L; 0438;;;;N;;;;; +1E039;MODIFIER LETTER CYRILLIC SMALL KA;Lm;0;L; 043A;;;;N;;;;; +1E03A;MODIFIER LETTER CYRILLIC SMALL EL;Lm;0;L; 043B;;;;N;;;;; +1E03B;MODIFIER LETTER CYRILLIC SMALL EM;Lm;0;L; 043C;;;;N;;;;; +1E03C;MODIFIER LETTER CYRILLIC SMALL O;Lm;0;L; 043E;;;;N;;;;; +1E03D;MODIFIER LETTER CYRILLIC SMALL PE;Lm;0;L; 043F;;;;N;;;;; +1E03E;MODIFIER LETTER CYRILLIC SMALL ER;Lm;0;L; 0440;;;;N;;;;; +1E03F;MODIFIER LETTER CYRILLIC SMALL ES;Lm;0;L; 0441;;;;N;;;;; +1E040;MODIFIER LETTER CYRILLIC SMALL TE;Lm;0;L; 0442;;;;N;;;;; +1E041;MODIFIER LETTER CYRILLIC SMALL U;Lm;0;L; 0443;;;;N;;;;; +1E042;MODIFIER LETTER CYRILLIC SMALL EF;Lm;0;L; 0444;;;;N;;;;; +1E043;MODIFIER LETTER CYRILLIC SMALL HA;Lm;0;L; 0445;;;;N;;;;; +1E044;MODIFIER LETTER CYRILLIC SMALL TSE;Lm;0;L; 0446;;;;N;;;;; +1E045;MODIFIER LETTER CYRILLIC SMALL CHE;Lm;0;L; 0447;;;;N;;;;; +1E046;MODIFIER LETTER CYRILLIC SMALL SHA;Lm;0;L; 0448;;;;N;;;;; +1E047;MODIFIER LETTER CYRILLIC SMALL YERU;Lm;0;L; 044B;;;;N;;;;; +1E048;MODIFIER LETTER CYRILLIC SMALL E;Lm;0;L; 044D;;;;N;;;;; +1E049;MODIFIER LETTER CYRILLIC SMALL YU;Lm;0;L; 044E;;;;N;;;;; +1E04A;MODIFIER LETTER CYRILLIC SMALL DZZE;Lm;0;L; A689;;;;N;;;;; +1E04B;MODIFIER LETTER CYRILLIC SMALL SCHWA;Lm;0;L; 04D9;;;;N;;;;; +1E04C;MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I;Lm;0;L; 0456;;;;N;;;;; +1E04D;MODIFIER LETTER CYRILLIC SMALL JE;Lm;0;L; 0458;;;;N;;;;; +1E04E;MODIFIER LETTER CYRILLIC SMALL BARRED O;Lm;0;L; 04E9;;;;N;;;;; +1E04F;MODIFIER LETTER CYRILLIC SMALL STRAIGHT U;Lm;0;L; 04AF;;;;N;;;;; +1E050;MODIFIER LETTER CYRILLIC SMALL PALOCHKA;Lm;0;L; 04CF;;;;N;;;;; +1E051;CYRILLIC SUBSCRIPT SMALL LETTER A;Lm;0;L; 0430;;;;N;;;;; +1E052;CYRILLIC SUBSCRIPT SMALL LETTER BE;Lm;0;L; 0431;;;;N;;;;; +1E053;CYRILLIC SUBSCRIPT SMALL LETTER VE;Lm;0;L; 0432;;;;N;;;;; +1E054;CYRILLIC SUBSCRIPT SMALL LETTER GHE;Lm;0;L; 0433;;;;N;;;;; +1E055;CYRILLIC SUBSCRIPT SMALL LETTER DE;Lm;0;L; 0434;;;;N;;;;; +1E056;CYRILLIC SUBSCRIPT SMALL LETTER IE;Lm;0;L; 0435;;;;N;;;;; +1E057;CYRILLIC SUBSCRIPT SMALL LETTER ZHE;Lm;0;L; 0436;;;;N;;;;; +1E058;CYRILLIC SUBSCRIPT SMALL LETTER ZE;Lm;0;L; 0437;;;;N;;;;; +1E059;CYRILLIC SUBSCRIPT SMALL LETTER I;Lm;0;L; 0438;;;;N;;;;; +1E05A;CYRILLIC SUBSCRIPT SMALL LETTER KA;Lm;0;L; 043A;;;;N;;;;; +1E05B;CYRILLIC SUBSCRIPT SMALL LETTER EL;Lm;0;L; 043B;;;;N;;;;; +1E05C;CYRILLIC SUBSCRIPT SMALL LETTER O;Lm;0;L; 043E;;;;N;;;;; +1E05D;CYRILLIC SUBSCRIPT SMALL LETTER PE;Lm;0;L; 043F;;;;N;;;;; +1E05E;CYRILLIC SUBSCRIPT SMALL LETTER ES;Lm;0;L; 0441;;;;N;;;;; +1E05F;CYRILLIC SUBSCRIPT SMALL LETTER U;Lm;0;L; 0443;;;;N;;;;; +1E060;CYRILLIC SUBSCRIPT SMALL LETTER EF;Lm;0;L; 0444;;;;N;;;;; +1E061;CYRILLIC SUBSCRIPT SMALL LETTER HA;Lm;0;L; 0445;;;;N;;;;; +1E062;CYRILLIC SUBSCRIPT SMALL LETTER TSE;Lm;0;L; 0446;;;;N;;;;; +1E063;CYRILLIC SUBSCRIPT SMALL LETTER CHE;Lm;0;L; 0447;;;;N;;;;; +1E064;CYRILLIC SUBSCRIPT SMALL LETTER SHA;Lm;0;L; 0448;;;;N;;;;; +1E065;CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN;Lm;0;L; 044A;;;;N;;;;; +1E066;CYRILLIC SUBSCRIPT SMALL LETTER YERU;Lm;0;L; 044B;;;;N;;;;; +1E067;CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN;Lm;0;L; 0491;;;;N;;;;; +1E068;CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Lm;0;L; 0456;;;;N;;;;; +1E069;CYRILLIC SUBSCRIPT SMALL LETTER DZE;Lm;0;L; 0455;;;;N;;;;; +1E06A;CYRILLIC SUBSCRIPT SMALL LETTER DZHE;Lm;0;L; 045F;;;;N;;;;; +1E06B;MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER;Lm;0;L; 04AB;;;;N;;;;; +1E06C;MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER;Lm;0;L; A651;;;;N;;;;; +1E06D;MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE;Lm;0;L; 04B1;;;;N;;;;; +1E08F;COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Mn;230;NSM;;;;;N;;;;; 1E100;NYIAKENG PUACHUE HMONG LETTER MA;Lo;0;L;;;;;N;;;;; 1E101;NYIAKENG PUACHUE HMONG LETTER TSA;Lo;0;L;;;;;N;;;;; 1E102;NYIAKENG PUACHUE HMONG LETTER NTA;Lo;0;L;;;;;N;;;;; @@ -29780,6 +30738,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;; 1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;; +1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;; +1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;; +1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;; +1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;; +1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;; +1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;; +1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;; +1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;; +1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;; +1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;; +1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;; +1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;; +1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;; +1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;; +1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;; +1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;; +1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;; +1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;; +1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;; +1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;; +1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;; +1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;; +1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;; +1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;; +1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;; +1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;; +1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;; +1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;; +1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;; +1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;; +1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;; 1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;; 1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;; 1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;; @@ -29839,6 +30828,76 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;; +1E4D0;NAG MUNDARI LETTER O;Lo;0;L;;;;;N;;;;; +1E4D1;NAG MUNDARI LETTER OP;Lo;0;L;;;;;N;;;;; +1E4D2;NAG MUNDARI LETTER OL;Lo;0;L;;;;;N;;;;; +1E4D3;NAG MUNDARI LETTER OY;Lo;0;L;;;;;N;;;;; +1E4D4;NAG MUNDARI LETTER ONG;Lo;0;L;;;;;N;;;;; +1E4D5;NAG MUNDARI LETTER A;Lo;0;L;;;;;N;;;;; +1E4D6;NAG MUNDARI LETTER AJ;Lo;0;L;;;;;N;;;;; +1E4D7;NAG MUNDARI LETTER AB;Lo;0;L;;;;;N;;;;; +1E4D8;NAG MUNDARI LETTER ANY;Lo;0;L;;;;;N;;;;; +1E4D9;NAG MUNDARI LETTER AH;Lo;0;L;;;;;N;;;;; +1E4DA;NAG MUNDARI LETTER I;Lo;0;L;;;;;N;;;;; +1E4DB;NAG MUNDARI LETTER IS;Lo;0;L;;;;;N;;;;; +1E4DC;NAG MUNDARI LETTER IDD;Lo;0;L;;;;;N;;;;; +1E4DD;NAG MUNDARI LETTER IT;Lo;0;L;;;;;N;;;;; +1E4DE;NAG MUNDARI LETTER IH;Lo;0;L;;;;;N;;;;; +1E4DF;NAG MUNDARI LETTER U;Lo;0;L;;;;;N;;;;; +1E4E0;NAG MUNDARI LETTER UC;Lo;0;L;;;;;N;;;;; +1E4E1;NAG MUNDARI LETTER UD;Lo;0;L;;;;;N;;;;; +1E4E2;NAG MUNDARI LETTER UK;Lo;0;L;;;;;N;;;;; +1E4E3;NAG MUNDARI LETTER UR;Lo;0;L;;;;;N;;;;; +1E4E4;NAG MUNDARI LETTER E;Lo;0;L;;;;;N;;;;; +1E4E5;NAG MUNDARI LETTER ENN;Lo;0;L;;;;;N;;;;; +1E4E6;NAG MUNDARI LETTER EG;Lo;0;L;;;;;N;;;;; +1E4E7;NAG MUNDARI LETTER EM;Lo;0;L;;;;;N;;;;; +1E4E8;NAG MUNDARI LETTER EN;Lo;0;L;;;;;N;;;;; +1E4E9;NAG MUNDARI LETTER ETT;Lo;0;L;;;;;N;;;;; +1E4EA;NAG MUNDARI LETTER ELL;Lo;0;L;;;;;N;;;;; +1E4EB;NAG MUNDARI SIGN OJOD;Lm;0;L;;;;;N;;;;; +1E4EC;NAG MUNDARI SIGN MUHOR;Mn;232;NSM;;;;;N;;;;; +1E4ED;NAG MUNDARI SIGN TOYOR;Mn;232;NSM;;;;;N;;;;; +1E4EE;NAG MUNDARI SIGN IKIR;Mn;220;NSM;;;;;N;;;;; +1E4EF;NAG MUNDARI SIGN SUTUH;Mn;230;NSM;;;;;N;;;;; +1E4F0;NAG MUNDARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1E4F1;NAG MUNDARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1E4F2;NAG MUNDARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1E4F3;NAG MUNDARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1E4F4;NAG MUNDARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1E4F5;NAG MUNDARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1E4F6;NAG MUNDARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1E4F7;NAG MUNDARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1E4F8;NAG MUNDARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1E4F9;NAG MUNDARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;; +1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;; +1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;; +1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;; +1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;; +1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;; +1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;; +1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;; +1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;; +1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;; +1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;; +1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;; +1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;; +1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;; +1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;; +1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;; +1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;; +1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;; +1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;; +1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;; +1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;; +1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;; +1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;; +1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;; +1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;; +1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;; +1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;; +1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;; 1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;; 1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;; 1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;; @@ -31886,6 +32945,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;; 1F6D6;HUT;So;0;ON;;;;;N;;;;; 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;; +1F6DC;WIRELESS;So;0;ON;;;;;N;;;;; +1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;; +1F6DE;WHEEL;So;0;ON;;;;;N;;;;; +1F6DF;RING BUOY;So;0;ON;;;;;N;;;;; 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;; 1F6E1;SHIELD;So;0;ON;;;;;N;;;;; 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;; @@ -32028,6 +33091,14 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;; 1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;; 1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;; +1F774;LOT OF FORTUNE;So;0;ON;;;;;N;;;;; +1F775;OCCULTATION;So;0;ON;;;;;N;;;;; +1F776;LUNAR ECLIPSE;So;0;ON;;;;;N;;;;; +1F77B;HAUMEA;So;0;ON;;;;;N;;;;; +1F77C;MAKEMAKE;So;0;ON;;;;;N;;;;; +1F77D;GONGGONG;So;0;ON;;;;;N;;;;; +1F77E;QUAOAR;So;0;ON;;;;;N;;;;; +1F77F;ORCUS;So;0;ON;;;;;N;;;;; 1F780;BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F781;BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F782;BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; @@ -32117,6 +33188,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;; 1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;; 1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;; +1F7D9;NINE POINTED WHITE STAR;So;0;ON;;;;;N;;;;; 1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;; 1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;; 1F7E2;LARGE GREEN CIRCLE;So;0;ON;;;;;N;;;;; @@ -32129,6 +33201,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;; 1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;; 1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;; +1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;; 1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; @@ -32400,6 +33473,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F976;FREEZING FACE;So;0;ON;;;;;N;;;;; 1F977;NINJA;So;0;ON;;;;;N;;;;; 1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;; +1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;; 1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;; 1F97B;SARI;So;0;ON;;;;;N;;;;; 1F97C;LAB COAT;So;0;ON;;;;;N;;;;; @@ -32482,6 +33556,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;; 1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;; 1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;; +1F9CC;TROLL;So;0;ON;;;;;N;;;;; 1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;; 1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;; 1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;; @@ -32636,9 +33711,14 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA72;BRIEFS;So;0;ON;;;;;N;;;;; 1FA73;SHORTS;So;0;ON;;;;;N;;;;; 1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;; +1FA75;LIGHT BLUE HEART;So;0;ON;;;;;N;;;;; +1FA76;GREY HEART;So;0;ON;;;;;N;;;;; +1FA77;PINK HEART;So;0;ON;;;;;N;;;;; 1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;; 1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;; 1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;; +1FA7B;X-RAY;So;0;ON;;;;;N;;;;; +1FA7C;CRUTCH;So;0;ON;;;;;N;;;;; 1FA80;YO-YO;So;0;ON;;;;;N;;;;; 1FA81;KITE;So;0;ON;;;;;N;;;;; 1FA82;PARACHUTE;So;0;ON;;;;;N;;;;; @@ -32646,6 +33726,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;; 1FA85;PINATA;So;0;ON;;;;;N;;;;; 1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;; +1FA87;MARACAS;So;0;ON;;;;;N;;;;; +1FA88;FLUTE;So;0;ON;;;;;N;;;;; 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; 1FA91;CHAIR;So;0;ON;;;;;N;;;;; 1FA92;RAZOR;So;0;ON;;;;;N;;;;; @@ -32671,6 +33753,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;; 1FAA7;PLACARD;So;0;ON;;;;;N;;;;; 1FAA8;ROCK;So;0;ON;;;;;N;;;;; +1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;; +1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;; +1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;; +1FAAC;HAMSA;So;0;ON;;;;;N;;;;; +1FAAD;FOLDING HAND FAN;So;0;ON;;;;;N;;;;; +1FAAE;HAIR PICK;So;0;ON;;;;;N;;;;; +1FAAF;KHANDA;So;0;ON;;;;;N;;;;; 1FAB0;FLY;So;0;ON;;;;;N;;;;; 1FAB1;WORM;So;0;ON;;;;;N;;;;; 1FAB2;BEETLE;So;0;ON;;;;;N;;;;; @@ -32678,9 +33767,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;; 1FAB5;WOOD;So;0;ON;;;;;N;;;;; 1FAB6;FEATHER;So;0;ON;;;;;N;;;;; +1FAB7;LOTUS;So;0;ON;;;;;N;;;;; +1FAB8;CORAL;So;0;ON;;;;;N;;;;; +1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;; +1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;; +1FABB;HYACINTH;So;0;ON;;;;;N;;;;; +1FABC;JELLYFISH;So;0;ON;;;;;N;;;;; +1FABD;WING;So;0;ON;;;;;N;;;;; +1FABF;GOOSE;So;0;ON;;;;;N;;;;; 1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;; 1FAC1;LUNGS;So;0;ON;;;;;N;;;;; 1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;; +1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;; +1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; +1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; +1FACE;MOOSE;So;0;ON;;;;;N;;;;; +1FACF;DONKEY;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; 1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;; 1FAD2;OLIVE;So;0;ON;;;;;N;;;;; @@ -32688,6 +33790,29 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAD4;TAMALE;So;0;ON;;;;;N;;;;; 1FAD5;FONDUE;So;0;ON;;;;;N;;;;; 1FAD6;TEAPOT;So;0;ON;;;;;N;;;;; +1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;; +1FAD8;BEANS;So;0;ON;;;;;N;;;;; +1FAD9;JAR;So;0;ON;;;;;N;;;;; +1FADA;GINGER ROOT;So;0;ON;;;;;N;;;;; +1FADB;PEA POD;So;0;ON;;;;;N;;;;; +1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;; +1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;; +1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;; +1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;; +1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;; +1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;; +1FAE6;BITING LIP;So;0;ON;;;;;N;;;;; +1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; +1FAE8;SHAKING FACE;So;0;ON;;;;;N;;;;; +1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;; +1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;; +1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;; +1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;; +1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;; +1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;; +1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;; +1FAF7;LEFTWARDS PUSHING HAND;So;0;ON;;;;;N;;;;; +1FAF8;RIGHTWARDS PUSHING HAND;So;0;ON;;;;;N;;;;; 1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;; 1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;; 1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;; @@ -32901,9 +34026,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; -2A6DD;;Lo;0;L;;;;;N;;;;; +2A6DF;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; -2B734;;Lo;0;L;;;;;N;;;;; +2B739;;Lo;0;L;;;;;N;;;;; 2B740;;Lo;0;L;;;;;N;;;;; 2B81D;;Lo;0;L;;;;;N;;;;; 2B820;;Lo;0;L;;;;;N;;;;; @@ -33454,6 +34579,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;; 30000;;Lo;0;L;;;;;N;;;;; 3134A;;Lo;0;L;;;;;N;;;;; +31350;;Lo;0;L;;;;;N;;;;; +323AF;;Lo;0;L;;;;;N;;;;; E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; diff --git a/regexp/jimregexp.c b/regexp/jimregexp.c index 7fd6d473e..d80eabd8e 100644 --- a/regexp/jimregexp.c +++ b/regexp/jimregexp.c @@ -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 == '_') { diff --git a/scd/apdu.c b/scd/apdu.c index ffada1d78..deb1134e6 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -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, diff --git a/scd/app-common.h b/scd/app-common.h index 2eeffbe95..988cddf3f 100644 --- a/scd/app-common.h +++ b/scd/app-common.h @@ -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; }; diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index d3f460106..66ec9f4a9 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -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; diff --git a/scd/app-p15.c b/scd/app-p15.c index 29241af6b..92628b926 100644 --- a/scd/app-p15.c +++ b/scd/app-p15.c @@ -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) diff --git a/scd/app.c b/scd/app.c index 3ca9e3a04..468fed294 100644 --- a/scd/app.c +++ b/scd/app.c @@ -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 - diff --git a/scd/command.c b/scd/command.c index 0f0c6c9df..0cf66d08c 100644 --- a/scd/command.c +++ b/scd/command.c @@ -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); diff --git a/tools/gpgtar.c b/tools/gpgtar.c index 64e5306b2..b2ccc9f8a 100644 --- a/tools/gpgtar.c +++ b/tools/gpgtar.c @@ -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)) {