From 3f51f7db3de85574dc5d6efd8b54ef78c1cd3f37 Mon Sep 17 00:00:00 2001 From: David Shaw Date: Sat, 29 Jun 2002 13:46:34 +0000 Subject: [PATCH] Update head to match stable 1.0 --- g10/ChangeLog | 3765 ++++++++++++++++-- g10/Makefile.am | 139 +- g10/armor.c | 378 +- g10/build-packet.c | 445 ++- g10/cipher.c | 109 +- g10/comment.c | 40 +- g10/compress.c | 75 +- g10/dearmor.c | 8 +- g10/decrypt.c | 62 +- g10/delkey.c | 104 +- g10/encode.c | 519 ++- g10/encr-data.c | 96 +- g10/exec.c | 579 +++ g10/exec.h | 22 + g10/export.c | 168 +- g10/filter.h | 47 +- g10/free-packet.c | 225 +- g10/{gpg.c => g10.c} | 1487 +++++-- g10/getkey.c | 1871 +++++---- g10/{basicdefs.h => global.h} | 27 +- g10/gpgd.c | 24 +- g10/gpgv.c | 372 ++ g10/helptext.c | 49 +- g10/hkp.c | 503 ++- g10/hkp.h | 15 +- g10/import.c | 801 ++-- g10/kbnode.c | 56 +- g10/kbx.h | 51 - g10/kbxblob.c | 895 ----- g10/kbxfile.c | 332 -- g10/kbxio.c | 75 - g10/kbxutil.c | 442 --- g10/keydb.c | 698 ++++ g10/keydb.h | 156 +- g10/keyedit.c | 1720 +++++++-- g10/keygen.c | 1299 +++++-- g10/keyid.c | 436 +-- g10/keylist.c | 1050 +++-- g10/keyring.c | 1550 ++++++++ g10/keyring.h | 45 + g10/keyserver-internal.h | 22 + g10/keyserver.c | 1033 +++++ g10/ks-proto.c | 2 +- g10/ks-proto.h | 8 +- g10/main.h | 108 +- g10/mainproc.c | 833 ++-- g10/mdfilter.c | 12 +- g10/misc.c | 734 ++-- g10/mkdtemp.c | 98 + g10/openfile.c | 102 +- g10/options.h | 103 +- g10/options.skel | 176 +- g10/packet.h | 239 +- g10/parse-packet.c | 746 +++- g10/passphrase.c | 1002 +++-- g10/photoid.c | 320 ++ g10/photoid.h | 14 + g10/pipemode.c | 317 ++ g10/pkclist.c | 1094 +++--- g10/plaintext.c | 135 +- g10/pubkey-enc.c | 225 +- g10/revoke.c | 374 +- g10/ringedit.c | 1360 ------- g10/seckey-cert.c | 369 +- g10/seskey.c | 104 +- g10/sig-check.c | 370 +- g10/sign.c | 1274 +++--- g10/signal.c | 124 +- g10/skclist.c | 133 +- g10/status.c | 350 +- g10/status.h | 31 +- g10/tdbdump.c | 411 +- g10/tdbio.c | 941 ++--- g10/tdbio.h | 141 +- g10/textfilter.c | 18 +- g10/trustdb.c | 3972 +++++++------------ g10/trustdb.h | 58 +- g10/verify.c | 43 +- po/ChangeLog | 304 ++ po/Makefile.in.in | 199 +- po/POTFILES.in | 17 +- po/cs.po | 4382 +++++++++++++++++++++ po/da.po | 3009 +++++++++------ po/de.glo | 201 +- po/de.po | 3541 ++++++++++------- po/el.po | 4383 +++++++++++++++++++++ po/eo.po | 3355 ++++++++++------ po/{es_ES.po => es.po} | 3986 +++++++++++-------- po/et.po | 4317 +++++++++++++++++++++ po/fr.po | 3198 +++++++++------- po/gl.po | 4681 +++++++++++++++++++++++ po/id.po | 3355 +++++++++------- po/it.po | 3540 ++++++++++------- po/ja.po | 4586 +++++++++++++--------- po/nl.po | 3312 ++++++++++------ po/pl.po | 3945 +++++++++++-------- po/{pt_PT.po => pt.po} | 3372 +++++++++------- po/pt_BR.po | 3368 ++++++++++------ po/ru.po | 4097 -------------------- po/sv.po | 3345 ++++++++++------ po/tr.po | 4380 +++++++++++++++++++++ scripts/ChangeLog | 151 +- scripts/autogen.sh | 100 +- scripts/build-riscos | 11 + scripts/build-w32 | 6 + scripts/conf-riscos/Makefile | 465 +++ scripts/conf-riscos/cipher/construct.c | 38 + scripts/conf-riscos/cipher/constructv.c | 32 + scripts/conf-riscos/include/config.h | 384 ++ scripts/conf-riscos/include/g10defs.h | 41 + scripts/config.guess | 948 +++-- scripts/config.sub | 417 +- scripts/db2html.in | 151 - scripts/distfiles | 10 +- scripts/gnupg.spec.in | 124 +- scripts/gnupgbug | 185 + scripts/install-sh | 37 +- scripts/mail-to-translators | 64 + scripts/missing | 234 +- scripts/mk-w32-dist | 53 + scripts/mkdiff | 29 +- scripts/mkinstalldirs | 53 +- scripts/mksnapshot | 2 +- scripts/mkwebpage | 117 +- tools/ChangeLog | 76 +- tools/Makefile.am | 40 +- tools/bftest.c | 70 +- tools/clean-sat.c | 9 + tools/crlf.c | 9 + tools/gpgsplit.c | 553 +++ tools/lspgpot | 8 + tools/mail-signed-keys | 105 +- tools/mk-tdata.c | 10 +- tools/mpicalc.c | 37 +- tools/ring-a-party | 21 +- tools/shmtest.c | 25 +- util/ChangeLog | 531 ++- util/Makefile.am | 31 +- util/README | 7 - util/argparse.c | 1000 +++++ util/dotlock.c | 420 ++ util/errors.c | 20 +- util/fileutil.c | 103 +- util/g10u.c | 40 + util/http.c | 231 +- util/iobuf.c | 945 ++++- util/logger.c | 103 +- util/memory.c | 634 +++ util/miscutil.c | 132 +- util/riscos.c | 327 ++ util/secmem.c | 468 +++ util/simple-gettext.c | 10 +- util/strgutil.c | 634 ++- util/ttyio.c | 128 +- util/w32reg.c | 74 +- 155 files changed, 83872 insertions(+), 37585 deletions(-) create mode 100644 g10/exec.c create mode 100644 g10/exec.h rename g10/{gpg.c => g10.c} (52%) rename g10/{basicdefs.h => global.h} (63%) create mode 100644 g10/gpgv.c delete mode 100644 g10/kbx.h delete mode 100644 g10/kbxblob.c delete mode 100644 g10/kbxfile.c delete mode 100644 g10/kbxio.c delete mode 100644 g10/kbxutil.c create mode 100644 g10/keydb.c create mode 100644 g10/keyring.c create mode 100644 g10/keyring.h create mode 100644 g10/keyserver-internal.h create mode 100644 g10/keyserver.c create mode 100644 g10/mkdtemp.c create mode 100644 g10/photoid.c create mode 100644 g10/photoid.h create mode 100644 g10/pipemode.c delete mode 100644 g10/ringedit.c create mode 100644 po/cs.po create mode 100644 po/el.po rename po/{es_ES.po => es.po} (53%) create mode 100644 po/et.po create mode 100644 po/gl.po rename po/{pt_PT.po => pt.po} (56%) delete mode 100644 po/ru.po create mode 100644 po/tr.po create mode 100644 scripts/build-riscos create mode 100755 scripts/build-w32 create mode 100644 scripts/conf-riscos/Makefile create mode 100644 scripts/conf-riscos/cipher/construct.c create mode 100644 scripts/conf-riscos/cipher/constructv.c create mode 100644 scripts/conf-riscos/include/config.h create mode 100644 scripts/conf-riscos/include/g10defs.h delete mode 100755 scripts/db2html.in create mode 100644 scripts/gnupgbug create mode 100755 scripts/mail-to-translators create mode 100755 scripts/mk-w32-dist create mode 100644 tools/gpgsplit.c delete mode 100644 util/README create mode 100644 util/argparse.c create mode 100644 util/dotlock.c create mode 100644 util/g10u.c create mode 100644 util/memory.c create mode 100644 util/riscos.c create mode 100644 util/secmem.c diff --git a/g10/ChangeLog b/g10/ChangeLog index 9c5acd8a1..21c44df4e 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,92 +1,3375 @@ +2002-06-21 Stefan Bellon + + * g10.c [__riscos__]: Moved RISC OS specific stuff to util/riscos.c + and include/util.h. + + * gpgv.c [__riscos__]: Likewise. + +2002-06-20 David Shaw + + * keydb.h, pkclist.c (select_algo_from_prefs): Allow passing a + suggested algorithm which will be used if available. + + * encode.c (encode_crypt, encrypt_filter), sign.c (sign_file): Use + new select_algo_from_prefs feature to check if forcing an + algorithm would violate the recipient preferences. + + * photoid.c (get_default_photo_command, show_photos): Use + different default viewers on different platforms. Currently we + have Win 9x, Win NT (2k, xp), Mac OSX, RISC OS, and "everybody + else". These are #ifdefs as much as possible to avoid clutter. + + * g10.c (strusage, build_list), keyedit.c (show_prefs), main.h, + misc.c (compress_algo_to_string, check_compress_algo), pkclist.c + (algo_available), keygen.c (keygen_set_std_prefs): New + algo_to_string and check functions for compress algorithms. + +2002-06-20 Werner Koch + + * misc.c (setsysinfo): Removed a #warning for Alpha's uniligedn + trap disabling - it is quite possible that this is a debug relict. + +2002-06-20 Stefan Bellon + + * g10.c [__riscos__]: Added image file system feature. + + * gpgv.c [__riscos__]: Added image file system feature. + + * photoid.c (show_photos) [__riscos__]: Set RISC OS filetype of + photo id according to MIME type. + +2002-06-19 David Shaw + + * hkp.c (parse_hkp_index): Don't leak memory when failing out of a + bad HKP keyserver. + + * g10.c (add_notation_data): Relax slightly the rules as to what + can go into a notation name - 2440 allows "@", for example. + +2002-06-17 David Shaw + + * import.c (clean_subkeys, import_one): Only allow at most 1 + binding sig and at most 1 revocation sig on a subkey, as per + 2440:11.1. + + * hkp.c (parse_hkp_index, hkp_search): Error if the keyserver + returns an unparseable HKP response. + +2002-06-15 David Shaw + + * keyedit.c (show_key_with_all_names), keylist.c + (list_keyblock_print): Show "[expired]" before expired uids. + + * keyedit.c (show_key_with_all_names_colon), mainproc.c + (list_node), keylist.c (list_keyblock_colon): Show flag 'e' for + expired user ids. Use "uat" for user attribute packets instead of + "uid". Also use ' ' rather than the fake user id + string on attributes. + + * keygen.c (keygen_add_revkey): Remove unused code. + + * misc.c (check_permissions): Check directory permissions + properly - they are not special files. + + * pkclist.c (expand_id, expand_group, build_pk_list): When + expanding groups before building a pk list, inherit flags from the + original pre-expanded string. + + * pubkey-enc.c (is_algo_in_prefs): Don't use prefs from expired + uids. + +2002-06-14 David Shaw + + * free-packet.c (copy_signature): Properly copy a signature that + carries a revocation key on it. + + * pkclist.c (expand_id, expand_group, build_pk_list): Groups now + work properly when used in the "Enter the user ID" prompt. + +2002-06-14 David Shaw + + * keyedit.c (show_key_with_all_names): Display warning if a user + tries to show prefs on a v3 key with a v3 selfsig. + + * kbnode.c (dump_kbnode): Show if a uid is expired. + + * import.c (merge_blocks, import_revoke_cert): Show user ID + receiving a revocation certificate. + + * free-packet.c (cmp_user_ids): Properly compare attribute ids. + + * pkclist.c (expand_groups): Maintain the strlist flags while + expanding. Members of an expansion inherit their flags from the + expansion key. + + * options.h, cipher.c (write_header), g10.c (main), keygen.c + (keygen_set_std_prefs): remove the personal_mdc flag. It no + longer serves a purpose now that the personal preference lists are + split into cipher/digest/zip. + +2002-06-14 Timo Schulz + + * skclist.c (is_insecure): Implemented. + +2002-06-12 David Shaw + + * keyserver.c (keyserver_spawn): Properly handle PROGRAM responses + when they have a CRLF ending. Noted by Keith Ray. + + * keyserver.c (keyserver_spawn): Handle CRLF endings from + keyserver helpers. Also don't leak the last line worth of memory + from the keyserver response. + + * main.h, misc.c (deprecated_warning): New function to warn about + deprecated options and commands. + + * g10.c (main), keyserver-internal.h, keyserver.c + (parse_keyserver_uri): Use new deprecated function to warn about + honor-http-proxy, auto-key-retrieve, and x-broken-hkp. + +2002-06-11 David Shaw + + * Makefile.am: link gpg with NETLIBS for the built-in HKP access. + +2002-06-10 David Shaw + + * options.h, keyserver.c (keyserver_opts), g10.c (main): New + keyserver option "include-subkeys". This feature already existed, + but now can be turned off. It defaults to on. + + * options.h, keyserver.c (parse_keyserver_options, + keyserver_spawn): There are now enough options to justify making a + structure for the keyserver options rather than a page of + if-then-else-if-then-etc. + + * getkey.c (merge_keys_and_selfsig, merge_selfsigs_main): Fix bug + in calculating key expiration dates. + +2002-06-09 David Shaw + + * keydb.h, getkey.c (get_user_id_native), import.c (import_one): + Display user ID while importing a key. Note this applies to both + --import and keyserver --recv-keys. + + * exec.c (exec_finish): Log unnatural exit (core dump, killed + manually, etc) for fork/exec/pipe child processes. + +2002-06-08 Timo Schulz + + * encode.c (encode_symmetric): Disable the compat flag + when the expert mode is enabled. + +2002-06-07 David Shaw + + * options.skel, options.h, main.h, keydb.h, pkclist.c + (build_pk_list, expand_groups), g10.c (main, add_group): Add new + "group" command to allow one name to expand into multiple keys. + For simplicity, and to avoid potential loops, we only expand once + - you can't make an alias that points to an alias. + + * main.h, g10.c (main), keygen.c (build_personal_digest_list): + Simplify the default digest list - there is really no need for the + other hashes since they will never be used after SHA-1 in the + list. + + * options.skel, options.h, g10.c (main), hkp.c (hkp_ask_import, + hkp_export, hkp_search), keyserver.c (parse_keyserver_options, + parse_keyserver_uri, keyserver_work, keyserver_refresh): Make the + "x-broken-hkp" keyserver scheme into keyserver-option + "broken-http-proxy". Move honor_http_proxy into + keyserver_options. Canonicalize the three variations of "hkp", + "x-hkp", and "x-broken-hkp" into "hkp". + +2002-06-07 Stefan Bellon + + * g10.c [__riscos__]: Added --attribute-file to do the same as + --attribute-fd, but with a filename not a fd as argument. + Added magic symbol for RISC OS to use different memory management. + + * gpgv.c [__riscos__]: Added magic symbol for RISC OS to use + different memory management. + +2002-06-06 David Shaw + + * main.h, g10.c (main), keygen.c (build_personal_digest_list): Put + in a default digest preference list consisting of SHA-1, followed + by every other installed digest except MD5. Note this is the same + as having no digest preference at all except for SHA-1 being + favored. + + * options.h, g10.c (main), keygen.c (keygen_set_std_prefs), + pkclist.c (select_algo_from_prefs): Split + --personal-preference-list into three: + --personal-{cipher|digest|compress}-preferences. This allows a + user to set one without affecting another (i.e. setting only a + digest pref doesn't imply an empty cipher pref). + + * exec.c (exec_read): This is a safer way of guessing the return + value of system(). Noted by Stefan Bellon. + +2002-06-05 David Shaw + + * hkp.c (parse_hkp_index): Be more robust with keyservers + returning very unparseable responses. + + * exec.c (exec_read): Catch and display an error when the remote + process exits unnaturally (i.e. segfault) so the user knows what + happened. Also fix exec_write stub which has a different number + of arguments now. + +2002-06-05 Timo Schulz + + * encode.c (encode_simple): Ignore the new mode for RFC1991. + * mainproc.c (symkey_decrypt_sesskey): Better check for weird + keysizes. + +2002-06-05 Timo Schulz + + * encode.c (encode_sesskey): New. + (encode_simple): Use it here. But by default we use the compat + mode which supress to generate encrypted session keys. + +2002-06-05 Timo Schulz + + * mainproc.c (symkey_decrypt_sesskey): New. + (proc_symkey_enc): Support for encrypted session keys. + +2002-06-04 David Shaw + + * sign.c (hash_for, sign_file): When encrypting and signing at the + same time, consult the various hash prefs to pick a hash algorithm + to use. Pass in a 160-bit hint if any of the signing keys are + DSA. + + * keydb.h, pkclist.c (select_algo_from_prefs, algo_available): + Pass a "hints" opaque pointer in to let the caller give hints as + to what algorithms would be acceptable. The only current hint is + for PREFTYPE_HASH to require a 160-bit hash for DSA. Change all + callers in encode.c (encode_crypt, encrypt_filter) and sign.c + (sign_file). If we settle on MD5 as the best algorithm based + solely on recepient keys and SHA1 is also a possibility, use SHA1 + unless the user intentionally chose MD5. This is as per 2440:13. + + * exec.c (make_tempdir): Fix duplicated filename problem. + +2002-06-03 David Shaw + + * packet.h, parse-packet.c (enum_sig_subpkt): Report back from + enum_sig_subpkt when a subpacket is critical and change all + callers in keylist.c (show_policy_url, show_notation), mainproc.c + (print_notation_data), and pkclist.c (do_show_revocation_reason). + + * keylist.c (show_policy_url, show_notation): Display if the + policy or notation is critical. + +2002-06-03 David Shaw + + * main.h, g10.c (main), keylist.c (dump_attribs, set_attrib_fd, + list_keyblock_print, list_keyblock_colon), status.h, status.c + (get_status_string): New --attribute-fd feature to dump the + contents of attribute subpackets for frontends. If --status-fd is + also used, then a new status tag ATTRIBUTE is provided for each + subpacket. + + * packet.h, getkey.c (fixup_uidnode, merge_selfsigs_main, + merge_selfsigs_subkey), parse-packet.c (setup_user_id): Keep track + of the expiration time of a user ID, and while we're at it, use + the expired flag from the selfsig rather than reparsing the + SIG_EXPIRE subpacket. + + * photoid.c (generate_photo_id): When adding a new photo ID, + showing the photo for confirmation is not safe when noninteractive + since the "user" may not be able to dismiss a viewer window. + Noted by Timo Schulz. + +2002-06-03 David Shaw + + * options.skel: Sample photo viewers for Win32. + + * misc.c (pct_expando): Use the seckey for %k/%K if the pubkey is + not available. + + * photoid.h, photoid.c (show_photos): Include the seckey in case a + user tries to view a photo on a secret key, and change all callers + in keyedit.c (menu_showphoto), keylist.c (list_keyblock_print), + and photoid.c (generate_photo_id). + +2002-06-02 David Shaw + + * photoid.c (show_photos): Work properly when not called with a + public key. + +2002-05-31 David Shaw + + * sign.c (mk_notation_and_policy): Free unneeded buffer. + + * hkp.c (parse_hkp_index): Properly handle the '&' character + (i.e. "&") in HKP responses. + + * getkey.c (merge_selfsigs_main): Fix reversed expiration time + check with self-sigs. + + * keyedit.c (sign_uids): When making a new self-sig on a v3 key, + make a v3 self-sig unless it is currently a v3 self-sig being + promoted to v4. + +2002-05-31 Timo Schulz + + * pkclist.c (do_show_revocation_reason): Don't use capital + letters for non-interactive output. + (show_revocation_reason): Now it is global. + * pubkey-enc.c (get_it): Show if the key has been revoked. + +2002-05-30 David Shaw + + * sign.c (write_signature_packets, sign_file, clearsign_file, + sign_symencrypt_file): Make a v4 signature if a policy URL or + notation is set, unless v3 sigs are forced via rfc1991 or + force-v3-sigs. Also remove some doubled code and clarify an error + message (we don't sign in PGP2 mode - just detach-sign). + + * parse-packet.c (parse_one_sig_subpkt): Add KS_FLAGS to the "any + size" section. + +2002-05-29 David Shaw + + * keygen.c (keygen_set_std_prefs, add_feature_mdc): Use "mdc" and + "no-mdc" in the prefs string to allow switching on and off the MDC + feature. This is needed to properly export a key from GnuPG for + use on PGP which does not support MDC - without this, MDC-capable + implementations will still try and generate MDCs which will break + PGP. + + * keygen.c (keygen_get_std_prefs): Show "[mdc]" in prefs string if + it is enabled. + + * options.h, g10.c (main), cipher.c (write_header), keygen.c + (keygen_set_std_prefs): For consistency, allow the user to specify + mdc/no-mdc in the --personal-preference-list. If disabled, it + acts just like --disable-mdc. + +2002-05-29 David Shaw + + * options.h, exec.c: Add some debugging info, using the 1024 debug + flag. + + * exec.c (win_system): New system()-like function for win32 that + does not return until the child process terminates. Of course, + this doesn't help if the process itself exits before it is + finished. + +2002-05-29 Werner Koch + + * encode.c (encode_simple): Intialize PKT when --no-literal is used. + + * keyedit.c (show_key_with_all_names_colon): Renamed the record + for revocation keys to "rvk". + +2002-05-27 Werner Koch + + * keyedit.c (show_key_with_all_names_colon): New. + (show_key_with_all_names): Divert to new function when required. + Sanitize printing of revoker name. + +2002-05-27 David Shaw + + * build-packet.c (build_sig_subpkt): Handle setting sig flags for + certain subpacket types (notation, policy url, exportable, + revocable). keyedit.c (sign_mk_attrib): Flags no longer need to + be set here. + + * packet.h, parse-packet.c (parse_one_sig_subpkt), build-packet.c + (build_sig_subpkt): Call parse_one_sig_subpkt to sanity check + buffer lengths before building a sig subpacket. + +2002-05-26 David Shaw + + * sign.c (mk_notation_and_policy): Include secret key to enable %s + expandos, and pass notations through pct_expando as well. + + * main.h, misc.c (pct_expando): Add %s and %S expandos for + signer's keyid. + +2002-05-25 David Shaw + + * g10.c (strusage, build_list): Add compress algorithms to + --version list. Show algorithm numbers when --verbose --version + is done. + +2002-05-22 David Shaw + + * options.h, main.h, keygen.c (keygen_set_set_prefs, + keygen_get_std_prefs, keygen_upd_std_prefs), keyedit.c + (keyedit_menu), g10.c (main), pkclist.c (select_algo_from_prefs): + Add --personal-preference-list which allows the user to factor in + their own preferred algorithms when the preference lists are + consulted. Obviously, this does not let the user violate a + recepient's preferences (and the RFC) - this only influences the + ranking of the agreed-on (and available) algorithms from the + recepients. Suggested by David Hollenberg. + + * options.h, keygen.c (keygen_set_std_prefs), g10.c (main): Rename + --preference-list to --default-preference-list (as that is what it + really is), and make it a true default in that if the user selects + "default" they get this list and not the compiled-in list. + +2002-05-22 Werner Koch + + * g10.c (main): Add missing LF in a info printout and made it + translatable. Noted by Michael Tokarev. + +2002-05-21 Werner Koch + + * g10.c (main): Removed the undef of USE_SHM_COPROCESSING which + was erroneously introduced on 2002-01-09. + + * signal.c (got_fatal_signal): Don't write the Nul to stderr. + Reported by David Hollenberg. + +2002-05-18 David Shaw + + * main.h, g10.c (main), revoke.c (gen_desig_revoke): Generate a + designated revocation via --desig-revoke + + * keyedit.c (keyedit_menu, menu_addrevoker): New "addrevoker" + command to add a designated revoker to a key. + +2002-05-17 David Shaw + + * gpgv.c: Add stub for get_ownertrust(). + + * g10.c (main): --allow-freeform-uid should be implied by + OpenPGP. Add --no-allow-freeform-uid. + + * keyedit.c (sign_uids): Issue a warning when signing a + non-selfsigned uid. + + * getkey.c (merge_selfsigs_main): If a key has no selfsigs, and + allow-non-selfsigned-uid is not set, still try and make the key + valid by checking all uids for a signature from an ultimately + trusted key. + +2002-05-16 David Shaw + + * main.h, keygen.c (keygen_add_revkey): Add revocation key + subpackets to a signature (callable by + make_keysig_packet). (write_direct_sig): Write a 1F direct key + signature. (parse_revocation_key): Parse a string in + algo:fpr:sensitive format into a revocation + key. (get_parameter_revkey, do_generate_keypair): Call above + functions when prompted from a batch key generation file. + + * build-packet.c (build_sig_subpkt): Allow multiple revocation key + subpackets in a single sig. + + * keydb.h, getkey.c (get_seckey_byfprint): Same as + get_pubkey_byfprint, except for secret keys. We only know the + fingerprint of a revocation key, so this is needed to retrieve the + secret key needed to issue a revokation. + + * packet.h, parse-packet.c (parse_signature, parse_revkeys): Split + revkey parsing off into a new function that can be used to reparse + after manipulating the revkey list. + + * sign.c (make_keysig_packet): Ability to make 1F direct key + signatures. + +2002-05-15 David Shaw + + * options.skel: keyserver.pgp.com is gone, so list pgp.surfnet.nl + as a sample LDAP server instead. + + * getkey.c (merge_selfsigs_main): Properly handle multiple + revocation keys in a single packet. Properly handle revocation + keys that are in out-of-order packets. Remove duplicates in + revocation key list. + +2002-05-14 Timo Schulz + + * exec.c (make_tempdir) [MINGW32]: Added missing '\'. + +2002-05-14 Stefan Bellon + + * exec.c (make_tempdir): Make use of EXTSEP_S instead of hardcoded + dot as extension separator. + +2002-05-13 David Shaw + + * photoid.c (show_photos): Use the long keyid as the filename for + the photo. Use the short keyid as the filename on 8.3 systems. + + * exec.h, exec.c (make_tempdir, exec_write, exec_finish): Allow + caller to specify filename. This should make things easier on + windows and macs where the file extension is required, but a whole + filename is even better. + + * keyedit.c (show_key_with_all_names, show_prefs): Show proper + prefs for a v4 key uid with no selfsig at all. + + * misc.c (check_permissions): Don't check permissions on + non-normal files (pipes, character devices, etc.) + +2002-05-11 Werner Koch + + * mainproc.c (proc_symkey_enc): Avoid segv in case the parser + encountered an invalid packet. + + * keyserver.c (keyserver_export): Get confirmation before sending + all keys. + +2002-05-10 Stefan Bellon + + * g10.c, hkp.c, keyedit.c, keyserver.c: Replaced all occurrances + of strcasecmp with ascii_strcasecmp and all occurrances of + strncasecmp with ascii_memcasecmp. + +2002-05-10 David Shaw + + * packet.h, getkey.c (fixup_uidnode), keyedit.c (show_prefs): Show + assumed prefs for hash and compression as well as the cipher pref. + Show assumed prefs if there are no prefs at all on a v4 + self-signed key. + + * options.h, g10.c (main), sign.c (make_keysig_packet): New + --cert-digest-algo function to override the default key signing + hash algorithm. + +2002-05-09 David Shaw + + * getkey.c (merge_selfsigs_main): Make sure the revocation key + list starts clean as this function may be called more than once + (e.g. from functions in --edit). + + * g10.c, encode.c (encode_crypt), sign.c (sign_file, + sign_symencrypt_file): Make --compress-algo work like the + documentation says. It should be like --cipher-algo and + --digest-algo in that it can override the preferences calculation + and impose the setting the user wants. No --compress-algo setting + allows the usual preferences calculation to take place. + + * main.h, compress.c (compress_filter): use new + DEFAULT_COMPRESS_ALGO define, and add a sanity check for compress + algo value. + +2002-05-08 David Shaw + + * pkclist.c (select_algo_from_prefs): There is an assumed + compression preference for uncompressed data. + +2002-05-07 David Shaw + + * options.h, g10.c (main), getkey.c (finish_lookup), pkclist.c + (algo_available): --pgp7, identical to --pgp6 except that it + permits a few algorithms that PGP 7 added: AES128, AES192, AES256, + and TWOFISH. Any more of these --pgpX flags, and it'll be time to + start looking at a generic --emulate-pgp X option. + + * export.c (do_export_stream): Warn the user when exporting a + secret key if it or any of its secret subkeys are protected with + SHA1 while simple_sk_checksum is set. + + * parse-packet.c (parse_key): Show when the SHA1 protection is + used in --list-packets. + + * options.h, build-packet.c (do_comment), g10.c (main): Rename + --no-comment as --sk-comments/--no-sk-comments (--no-comment still + works) and make the default be --no-sk-comments. + +2002-05-07 Werner Koch + + * keygen.c (get_parameter_algo): Never allow generation of the + deprecated RSA-E or RSA-S flavors of PGP RSA. + (ask_algo): Allow generation of RSA sign and encrypt in expert + mode. Don't allow ElGamal S+E unless in expert mode. + * helptext.c: Added entry keygen.algo.rsa_se. + +2002-05-07 David Shaw + + * keyedit.c (sign_uids): If --expert is set, allow re-signing a + uid to promote a v3 self-sig to a v4 one. This essentially + deletes the old v3 self-sig and replaces it with a v4 one. + + * packet.h, parse-packet.c (parse_key), getkey.c + (merge_keys_and_selfsig, merge_selfsigs_main): a v3 key with a v4 + self-sig must never let the v4 self-sig express a key expiration + time that extends beyond the original v3 expiration time. + +2002-05-06 David Shaw + + * keyedit.c (sign_uids): When making a self-signature via "sign" + don't ask about sig level or expiration, and include the usual + preferences and such for v4 self-sigs. (menu_set_preferences): + Convert uids from UTF8 to native before printing. + + * keyedit.c (sign_uids): Convert uids from UTF8 to native before + printing. (menu_set_primary_uid): Show error if the user tries to + make a uid with a v3 self-sig primary. + +2002-05-05 David Shaw + + * import.c (import_one): When merging with a key we already have, + don't let a key conflict (same keyid but different key) stop the + import: just skip the bad key and continue. + + * exec.c (make_tempdir): Under Win32, don't try environment + variables for temp directories - GetTempDir tries environment + variables internally, and it's better not to second-guess it in + case MS adds some sort of temp dir handling to Windows at some + point. + +2002-05-05 Timo Schulz + + * mainproc.c (proc_symkey_enc): Don't ask for a passphrase + in the list only mode. + +2002-05-05 David Shaw + + * keyserver.c (keyserver_refresh): --refresh-keys implies + --merge-only so as not to import keys with keyids that match the + ones being refreshed. Noted by Florian Weimer. + +2002-05-04 Stefan Bellon + + * free-packet.c (copy_public_key): Don't call m_alloc(0), therefore + added consistency check for revkey and numrefkeys. + + * getkey.c (check_revocation_keys): Added consistency check for + revkey and numrefkeys. + + * keyedit.c (show_key_with_all_names): Likewise. + +2002-05-03 David Shaw + + * photoid.c: Provide default image viewer for Win32. + + * misc.c (pct_expando): %t means extension, not name ("jpg", not + "jpeg"). + + * keyserver.c (keyserver_spawn), photoid.c (show_photos), exec.h, + exec.c: Allow the caller to determine the temp file extension when + starting an exec_write and change all callers. + + * keyedit.c (sign_uids): Nonrevocable key signatures cause an + automatic promotion to v4. + + * exec.c: Provide stubs for exec_ functions when NO_EXEC is + defined. + +2002-05-02 David Shaw + + * photoid.h, photoid.c (parse_image_header, image_type_to_string): + Useful functions to return data about an image. + + * packet.h, parse-packet.c (make_attribute_uidname, + parse_attribute_subpkts, parse_attribute), photoid.h, photoid.c + (show_photos): Handle multiple images in a single attribute + packet. + + * main.h, misc.c (pct_expando), sign.c (mk_notation_and_policy), + photoid.c (show_photos): Simpler expando code that does not + require using compile-time string sizes. Call + image_type_to_string to get image strings (i.e. "jpg", + "image/jpeg"). Change all callers. + + * keyedit.c (menu_showphoto), keylist.c (list_keyblock_print): + Allow viewing multiple images within a single attribute packet. + + * gpgv.c: Various stubs for link happiness. + +2002-05-02 David Shaw + + * build-packet.c (build_sig_subpkt), keyedit.c (sign_uids), + options.h, sign.c (mk_notation_and_policy), g10.c (main, + add_notation_data, add_policy_url (new), check_policy_url + (removed)): Allow multiple policy URLs on a given signature. + Split "--notation-data" into "--cert-notation" and + "--sig-notation" so the user can set different policies for key + and data signing. For backwards compatibility, "--notation-data" + sets both, as before. + +2002-05-02 Werner Koch + + * options.skel: Removed the comment on trusted-keys because this + option is now deprecated. + +2002-05-01 David Shaw + + * keyedit.c (menu_adduid): 2440bis04 says that multiple attribute + packets on a given key are legal. + + * keyserver.c (keyserver_refresh): the fake v3 keyid hack applies + to "mailto" URLs as well since they are also served by pksd. + +2002-04-29 Werner Koch + + Added a copyright year for files changed this year. + +2002-04-25 Werner Koch + + * g10.c, options.h: New options --display, --ttyname, --ttytype, + --lc-ctype, --lc-messages to be used with future versions of the + gpg-agent. + * passphrase.c (agent_send_option,agent_send_all_options): New. + (agent_open): Send options to the agent. + + * trustdb.c (update_ownertrust, clear_ownertrust): Do an explicit + do_sync because revalidation_mark does it only if when the + timestamp actually changes. + +2002-04-23 David Shaw + + * main.h, keygen.c (do_generate_keypair), keylist.c + (print_signature_stats, list_all, list_one, list_keyblock, + list_keyblock_print, list_keyblock_colon): After generating a new + key, show the key information (name, keyid, fingerprint, etc.) + Also do not print uncheckable signatures (missing key..) in + --check-sigs. Print statistics (N missing keys, etc.) after + --check-sigs. + + * keyedit.c (sign_uids): When signing a key with an expiration + date on it, the "Do you want your signature to expire at the same + time?" question should default to YES. + +2002-04-22 David Shaw + + * parse-packet.c (parse_plaintext), packet.h, plaintext.c + (handle_plaintext): Fix bug in handling literal packets with + zero-length data (no data was being confused with partial body + length). + + * misc.c (pct_expando), options.skel: %t means extension ("jpg"). + %T means MIME type ("image/jpeg"). + + * import.c (import_one): Only trigger trust update if the keyring + is actually changed. + + * export.c (do_export_stream): Missing a m_free. + +2002-04-22 Stefan Bellon + + * keyid.c (expirestr_from_sk, expirestr_from_sig): Added _() to + string constant. + + * exec.c (make_tempdir) [__riscos__]: Better placement of + temporary file. + +2002-04-20 David Shaw + + * keygen.c (generate_subkeypair): 2440bis04 adds that creating + subkeys on v3 keys is a MUST NOT. + + * getkey.c (finish_lookup): The --pgp6 "use the primary key" + behavior should only apply while data signing and not encryption. + Noted by Roger Sondermann. + +2002-04-19 Werner Koch + + * keygen.c (keygen_set_std_prefs): Put back 3DES because the RFC + says it is good form to do so. + +2002-04-19 David Shaw + + * keyedit.c (menu_deluid): Only cause a trust update if we delete + a non-revoked user id. + + * hkp.c (hkp_ask_import), keyserver.c (parse_keyserver_options, + keyserver_spawn), options.h: Remove fast-import keyserver option + (no longer meaningful). + + * g10.c (main), keyedit.c (sign_uids), options.h: Change + --default-check-level to --default-cert-check-level as it makes + clear what it operates on. + + * g10.c (main): --pgp6 also implies --no-ask-sig-expire. + + * delkey.c (do_delete_key): Comment. + + * keyedit.c (sign_uids, keyedit_menu, menu_deluid, menu_delsig, + menu_expire, menu_revsig, menu_revkey): Only force a trustdb check + if we did something that changes it. + + * g10.c: add "--auto-check-trustdb" to override a + "--no-auto-check-trustdb" + +2002-04-19 Werner Koch + + * tdbio.c (tdbio_write_nextcheck): Return a status whether the + stamp was actually changed. + * trustdb.c (revalidation_mark): Sync the changes. Removed the + sync operation done by its callers. + (get_validity): Add logic for maintaining a pending_check flag. + (clear_ownertrust): New. + + * keyedit.c (sign_uids): Don't call revalidation_mark depending on + primary_pk. + (keyedit_menu): Call revalidation_mark after "trust". + (show_key_with_all_names): Print a warning on the wrong listed key + validity. + + * delkey.c (do_delete_key): Clear the owenertrust information when + deleting a public key. + +2002-04-18 Werner Koch + + * seskey.c (encode_md_value): Print an error message if a wrong + digest algorithm is used with DSA. Changed all callers to cope + with a NULL return. Problem noted by Imad R. Faiad. + +2002-04-18 David Shaw + + * trustdb.c (mark_usable_uid_certs): Properly handle nonrevocable + signatures that can expire. In short, the only thing that can + override an unexpired nonrevocable signature is another unexpired + nonrevocable signature. + + * getkey.c (finish_lookup): Always use primary signing key for + signatures when --pgp6 is on since pgp6 and 7 do not understand + signatures made by signing subkeys. + +2002-04-18 Werner Koch + + * trustdb.c (validate_keys): Never schedule a nextcheck into the + past. + (validate_key_list): New arg curtime use it to set next_expire. + (validate_one_keyblock): Take the current time from the caller. + (clear_validity, reset_unconnected_keys): New. + (validate_keys): Reset all unconnected keys. + + * getkey.c (premerge_public_with_secret): Fixed 0x12345678! syntax + for use with secret keys. + (lookup): Advance the searchmode after a search FIRST. + + * seckey-cert.c (do_check): Always calculate the old checksum for + use after unprotection. + + * g10.c, options.skel: New option --no-escape-from. Made + --escape-from and --force-v3-sigs the default and removed them + from the options skeleton. + +2002-04-16 Werner Koch + + * parse-packet.c (parse_key): Support a SHA1 checksum as per + draft-rfc2440-bis04. + * packet.h (PKT_secret_key): Add field sha1chk. + * seckey-cert.c (do_check): Check the SHA1 checksum + (protect_secret_key): And create it. + * build-packet.c (do_secret_key): Mark it as sha-1 protected. + * g10.c, options.h: New option --simple-sk-checksum. + +2002-04-13 David Shaw + + * parse-packet.c (parse_signature): Minor fix - signatures should + expire at their expiration time and not one second later. + + * keygen.c (proc_parameter_file): Allow specifying preferences + string (i.e. "s5 s2 z1 z2", etc) in a batchmode key generation + file. + + * keyedit.c (keyedit_menu): Print standard error message when + signing a revoked key (no new translation). + + * getkey.c (merge_selfsigs): Get the default set of key prefs from + the real (not attribute) primary uid. + +2002-04-12 David Shaw + + * pkclist.c (build_pk_list): Fix bug that allowed a key to be + selected twice in batch mode if one instance was the default + recipient and the other was an encrypt-to. Noted by Stefan + Bellon. + + * parse-packet.c (dump_sig_subpkt): Show data in trust and regexp + sig subpackets. + + * keyedit.c (keyedit_menu): Use new function real_uids_left to + prevent deleting the last real (i.e. non-attribute) uid. Again, + according to the attribute draft. (menu_showphoto): Make another + string translatable. + +2002-04-11 David Shaw + + * build-packet.c (build_sig_subpkt): Delete subpackets from both + hashed and unhashed area on update. (find_subpkt): No longer + needed. + + * keyedit.c (sign_uids): With --pgp2 on, refuse to sign a v3 key + with a v4 signature. As usual, --expert overrides. Try to tweak + some strings to a closer match so they can all be translated in + one place. Use different helptext keys to allow different help + text for different questions. + + * keygen.c (keygen_upd_std_prefs): Remove preferences from both + hashed and unhashed areas if they are not going to be used. + +2002-04-10 David Shaw + + * misc.c (pct_expando), options.skel: Use %t to indicate type of a + photo ID (in this version, it's always "jpeg"). Also tweak string + expansion loop to minimize reallocs. + + * mainproc.c (do_check_sig): Variable type fix. + + * keyedit.c (menu_set_primary_uid): Differentiate between true + user IDs and attribute user IDs when making one of them primary. + That is, if we are making a user ID primary, we alter user IDs. + If we are making an attribute packet primary, we alter attribute + packets. This matches the language in the latest attribute packet + draft. + + * keyedit.c (sign_uids): No need for the empty string hack. + + * getkey.c (fixup_uidnode): Only accept preferences from the + hashed segment of the self-sig. + +2002-04-10 Werner Koch + + * tdbio.c (migrate_from_v2): Fixed the offset to read the old + ownertrust value and only add entries to the table if we really + have a value. + +2002-04-08 David Shaw + + * status.h, status.c (get_status_string): Add KEYEXPIRED, EXPSIG, + and EXPKEYSIG. Add "deprecated-use-keyexpired-instead" to + SIGEXPIRED. + + * sig-check.c (do_check): Start transition from SIGEXPIRED to + KEYEXPIRED, since the actual event is signature verification by an + expired key and not an expired signature. (do_signature_check, + packet.h): Rename as signature_check2, make public, and change all + callers. + + * mainproc.c (check_sig_and_print, do_check_sig): Use status + EXPSIG for an expired, but good, signature. Add the expiration + time (or 0) to the VALIDSIG status line. Use status KEYEXPSIG for + a good signature from an expired key. + + * g10.c (main): remove checks for no arguments now that argparse + does it. + +2002-04-06 Werner Koch + + * keyring.c (keyring_get_keyblock): Disable the keylist mode here. + + * encode.c (encode_simple, encode_crypt): Only test on compressed + files if a compress level was not explicity set. + + * keygen.c (keygen_set_std_prefs): Removed Blowfish and Twofish + from the list of default preferences, swapped the preferences of + RMD160 and SHA1. Don't include a preference to 3DES unless the + IDEA kludge gets used. + + * free-packet.c (free_packet): call free_encrypted also for + PKT_ENCRYPTED_MDC. + + * compress.c (release_context): New. + (handle_compressed): Allocate the context and setup a closure to + release the context. This is required because there is no + guarabntee that the filter gets popped from the chain at the end + of the function. Problem noted by Timo and probably also the + cause for a couple of other reports. + (compress_filter): Use the release function if set. + + * tdbio.c [__CYGWIN32__]: Don't rename ftruncate. Noted by + Disastry. + + * parse-packet.c (parse_signature): Put parens around a bit test. + + * exec.c (make_tempdir): Double backslash for TMP directory + creation under Windows. Better strlen the DIRSEP_S constants for + allocation measurements. + + * decrypt.c (decrypt_messages): Release the passphrase aquired + by get_last_passphrase. + +2002-04-02 Werner Koch + + * Makefile.am (EXTRA_DIST): Removed OPTIONS an pubring.asc - they + are no longer of any use. + +2002-04-03 David Shaw + + * keyserver.c (parse_keyserver_options): fix auto-key-retrieve to + actually work as a keyserver-option (noted by Roger Sondermann). + + * keylist.c (reorder_keyblock): do not reorder the primary + attribute packet - the first user ID must be a genuine one. + +2002-03-31 David Shaw + + * keylist.c (list_keyblock_colon): Fix ownertrust display with + --with-colons. + + * keygen.c (generate_user_id), photoid.c (generate_photo_id): + Properly initialize the user ID refcount. A few more "y/n" -> + "y/N" in photoid.c. + + * keyedit.c (ask_revoke_sig): Warn the user if they are about to + revoke an expired sig (not a problem, but they should know). Also + tweak a few prompts to change "y/n" to "y/N", which is how most + other prompts are written. + + * keyserver.c (keyserver_search_prompt): Control-d escapes the + keyserver search prompt. + + * pkclist.c (show_revocation_reason & callers): If a subkey is + considered revoked solely because the parent key is revoked, print + the revocation reason from the parent key. + + * trustdb.c (get_validity): Allow revocation/expiration to apply + to a uid/key with no entry in the trustdb. + +2002-03-29 David Shaw + + * keyserver.c (printunquoted): unquote backslashes from keyserver + searches + + * hkp.c (write_quoted): quote backslashes from keyserver searches + +2002-03-26 Werner Koch + + * keygen.c (ask_keysize): Removed the warning for key sizes > 1536. + +2002-03-25 Werner Koch + + * keyedit.c (sign_uids): Use 2 strings and not a %s so that + translations can be done the right way. + * helptext.c: Fixed small typo. + +2002-03-23 David Shaw + + * import.c (append_uid, merge_sigs): it is okay to import + completely non-signed uids now (with --allow-non-selfsigned-uid). + + * getkey.c (get_primary_uid, merge_selfsigs_main): do not choose + an attribute packet (i.e. photo) as primary uid. This prevents + oddities like "Good signature from [image of size 2671]". This is + still not perfect (one can still select an attribute packet as + primary in --edit), but is closer to the way the draft is going. + + * g10.c (build_list): algorithms should include 110. + + * g10.c (main): --pgp2 implies --no-ask-sig-expire and + --no-ask-cert-expire as those would cause a v4 sig/cert. + + * armor.c (is_armor_header): be more lenient in what constitutes a + valid armor header (i.e. -----BEGIN blah blah-----) as some + Windows programs seem to add spaces at the end. --openpgp makes + it strict again. + +2002-03-18 David Shaw + + * keyserver.c (keyserver_search_prompt): Properly handle a "no + keys found" case from the internal HKP code (external HKP is ok). + Also, make a COUNT -1 (i.e. streamed) keyserver response a little + more efficient. + + * g10.c (main): Add --no-allow-non-selfsigned-uid + +2002-03-17 David Shaw + + * g10.c (main): --openpgp implies --allow-non-selfsigned-uid. + + * getkey.c (merge_selfsigs_main): If none of the uids are primary + (because none are valid) then pick the first to be primary (but + still invalid). This is for cosmetics in case some display needs + to print a user ID from a non-selfsigned key. Also use + --allow-non-selfsigned-uid to make such a key valid and not + --always-trust. The key is *not* automatically trusted via + --allow-non-selfsigned-uid. + + * mainproc.c (check_sig_and_print): Make sure non-selfsigned uids + print [uncertain] on verification even though one is primary now. + + * getkey.c (merge_selfsigs): If the main key is not valid, then + neither are the subkeys. + + * import.c (import_one): Allow --allow-non-selfsigned-uid to work + on completely unsigned keys. Print the uids in UTF8. Remove + mark_non_selfsigned_uids_valid(). + + * keyedit.c (show_key_with_all_names): Show revocation key as + UTF8. + + * sign.c (clearsign_file): Allow --not-dash-escaped to work with + v3 keys. + +2002-03-14 Werner Koch + + * main.h: Changed the default algorithms to CAST5 and SHA1. + +2002-03-13 David Shaw + + * import.c (chk_self_sigs): Show which user ID a bad self-sig + (invald sig or unsupported public key algorithm) resides on. + + * import.c (chk_self_sigs): any valid self-sig should mark a user + ID or subkey as valid - otherwise, an attacker could DoS the user + by inventing a bogus invalid self-signature. + +2002-03-07 David Shaw + + * g10.c (main): make a few more strings translatable. + + * options.h, options.skel, g10.c (main), gpgv.c, mainproc.c + (check_sig_and_print), keyserver.c (parse_keyserver_options): + --auto-key-retrieve should really be a keyserver-option variable. + + * import.c (revocation_present): new function to print a warning + if a key is imported that has been revoked by designated revoker, + but the designated revoker is not present to verify the + revocation. If keyserver-options auto-key-retrieve is set, try + and fetch the designated revoker from the keyserver. + + * import.c (import_one): call revocation_present after importing a + new key. Note that this applies to --import, --recv-keys, and + --search-keys. + + * keyserver-internal.h, keyserver.c (keyserver_import_fprint): + import via fingerprint (for revocation keys). + + * keyserver.c (keyserver_import_keyid): much simpler + implementation now that we're using KEYDB_SEARCH_DESC internally. + +2002-03-04 David Shaw + + * revoke.c (gen_revoke): do not prompt for revocation reason for + v3 revocations (unless force-v4-certs is on) since they wouldn't + be used anyway. + + * keyedit.c (menu_revsig): show the status of the sigs + (exportable? revocable?) to the user before prompting for which + sig to revoke. Also, make sure that local signatures get local + revocations. + + * keyedit.c (ask_revoke_sig): remind the user which sigs are + local. + + * g10.c (main): Add "exec-path" variable to override PATH for + execing programs. + + * export.c (do_export_stream): properly check return code from + classify_user_id to catch unclassifiable keys. + +2002-03-03 David Shaw + + * parse-packet.c (parse_signature): variable type tweak for RISC + OS (from Stefan) + +2002-02-28 David Shaw + + * getkey.c (check_revocation_keys): New function to check a + revocation against a list of potential revocation keys. Note the + loop-breaking code here. This is to prevent blowing up if A is + B's revocation key, while B is also A's. Note also that this is + written so that a revoked revoker can still issue revocations: + i.e. If A revokes B, but A is revoked, B is still revoked. I'm + not completely convinced this is the proper behavior, but it + matches how PGP does it. It does at least have the advantage of + much simpler code - my first version of this had lots of loop + maintaining code so you could chain revokers many levels deep and + if D was revoked, C was not, which meant that B was, and so on. + It was sort of scary, actually. + + * getkey.c (merge_selfsigs_main): Add any revocation keys onto the + pk. This is particularly interesting since we normally only get + data from the most recent 1F signature, but you need multiple 1F + sigs to properly handle revocation keys (PGP does it this way, and + a revocation key could be marked "sensitive" and hence in a + different signature). Also, if a pk has a revocation key set, + check for revocation sigs that were not made by us - if made by a + valid revocation key, mark the pk revoked. + + * packet.h, getkey.c (cache_public_key): do not cache key if + "dont_cache" is set. This allows the revocation key code to look + up a key and return information that may be inaccurate to prevent + loops without caching the fake data. + + * packet.h, sig-check.c (do_signature_check): Record if a + signature was made by a revoked pk. + + * packet.h, parse-packet.c (parse_one_sig_subpkt, + can_handle_critical, parse_signature): Get revocation key + information out of direct sigs. + + * keylist.c (list_keyblock_print): don't assume that the presence + of a 0x20 signature means the key is revoked. With revocation + keys, this may not be true if the revocation key is not around to + verify it or if verification failed. Also, 0x1F should get listed + as "sig", and not "unexpected signature class". + + * keyedit.c (show_key_with_all_names): Add a flag for printing + revoker information and change all callers. + + * import.c (merge_blocks): merge in any new direct key (0x1F) + sigs. + + * import.c (import_revoke_cert): don't keep processing after a + revocation is rejected. + + * import.c (delete_inv_parts): Allow importing a revocation + signature even if it was not issued by the key. This allows a + revocation key to issue it. Of course, the sig still needs to be + checked before we trust it. + + * free-packet.c (copy_public_key): Include a new copy of the + revocation keys when duping a pk. + + * free-packet.c (free_seckey_enc, release_public_key_parts): Free + any revocation keys that are attached to a sig or pk. + + * export.c (do_export_stream): Do not export signatures with + "sensitive" revocation keys in them. + +2002-02-27 David Shaw + + * export.c (do_export_stream): Do not include v3 keys in a + --export-secret-subkeys export. + + * getkey.c (merge_selfsigs_main): If a key isn't valid (say, + because of no self-signature), allow --always-trust to force it + valid so it can be trusted. + +2002-02-25 David Shaw + + * hkp.c (hkp_ask_import), hkp.h, keyserver.c (all): treat key + lists internally as fingerprints when possible. All this is via + KEYDB_SEARCH_DESC - no point in reinventing the wheel. This allows + the helper program to search the keyserver by fingerprint if + desired (and the keyserver supports it). Note that automatic + fingerprint promotion during refresh only applies to v4 keys as a + v4 fingerprint can be easily changed into a long or short key id, + and a v3 cannot. + + * pubkey-enc.c, getkey.c, misc.c, main.h: Take two copies of + hextobyte() from pubkey-enc.c and getkey.c and make them into one + copy in misc.c. + +2002-02-22 David Shaw + + * keyserver.c (keyserver_search_prompt): Detect a "no keys found" + case even if the helper program does not explicitly say how many + keys were found. + + * hkp.c (parse_hkp_index): Bug fix - don't report non-revoked keys + as revoked in HKP key searches. + +2002-02-19 Werner Koch + + * parse-packet.c (parse_trust): Made parsing more robust. + +2002-02-19 David Shaw + + * hkp.c (parse_hkp_index): Catch corruption in HKP index lines + (can be caused by broken or malicious keyservers). + + * keyserver.c (keyserver_work): Add KEYSERVER_NOT_SUPPORTED for + unsupported actions (say, a keyserver that has no way to search, + or a readonly keyserver that has no way to add). Also add a + USE_EXTERNAL_HKP define to disable the internal HKP keyserver + code. + +2002-02-14 Werner Koch + + * g10.c: New option --no-use-agent. + + * pkclist.c (check_signatures_trust): Always print the warning for + unknown and undefined trust. Removed the did_add cruft. Reported + by Janusz A. Urbanowicz. + +2002-02-11 David Shaw + + * hkp.c (parse_hkp_index): Bug fix - properly handle user IDs with + colons (":") in them while HKP searching. + +2002-02-09 David Shaw + + * misc.c (pct_expando): More comments. + + * keydb.h, sign.c (mk_notation_and_policy): Clarify what is a sig + and what is a cert. A sig has sigclass 0x00, 0x01, 0x02, or 0x40, + and everything else is a cert. + + * g10.c (main), keyedit.c (keyedit_menu): Add a "nrlsign" for + nonrevocable and local key signatures. + + * g10.c (main): Add a --no-force-mdc to undo --force-mdc. + + * options.h, g10.c (main), cipher.c (write_header): Add a knob to + --disable-mdc/--no-disable-mdc. Off by default, of course, but is + used in --pgp2 and --pgp6 modes. + + * pkclist.c (build_pk_list): Allow specifying multiple users in + the "Enter the user ID" loop. Enter a blank line to stop. Show + each key+id as it is added. + + * keylist.c (show_policy_url), mainproc.c (print_notation_data): + It is not illegal (though possibly silly) to have multiple policy + URLs in a given signature, so print all that are present. + + * hkp.c (hkp_search): More efficient implementation of URL-ifying + code. + +2002-02-04 David Shaw + + * main.h, misc.c (pct_expando): New function to generalize + %-expando processing in any arbitrary string. + + * photoid.c (show_photo): Call the new pct_expando function rather + than expand strings internally. + + * sign.c (mk_notation_and_policy): Show policy URLs and notations + when making a signature if show-policy/show-notation is on. + %-expand policy URLs during generation. This lets the user have + policy URLs of the form "http://notary.jabberwocky.com/keysign/%K" + which will generate a per-signature policy URL. + + * main.h, keylist.c (show_policy_url, show_notation): Add amount + to indent so the same function can be used in key listings as well + as during sig generation. Change all callers. + +2002-02-04 David Shaw + + * keyserver.c, options.h (parse_keyserver_options, keyidlist): + Workaround for the pksd and OKS keyserver bug that calculates v4 + RSA keyids as if they were v3. The workaround/hack is to fetch + both the v4 (e.g. 99242560) and v3 (e.g. 68FDDBC7) keyids. This + only happens for key refresh while using the HKP scheme and the + refresh-add-fake-v3-keyids keyserver option must be set. This + should stay off by default. + +2002-02-03 David Shaw + + * keyserver.c (keyserver_spawn): Bug fix - do not append keys to + each other when --sending more than one. + +2002-02-02 David Shaw + + * options.h, g10.c (main), keyedit.c (sign_uids), sign.c + (mk_notation_and_policy): Split "--set-policy-url" into + "--cert-policy-url" and "--sig-policy-url" so the user can set + different policies for key and data signing. For backwards + compatibility, "--set-policy-url" sets both, as before. + +2002-01-30 Werner Koch + + * g10.c (main): --gen-random --armor does now output a base64 + encoded string. + +2002-01-28 David Shaw + + * g10.c (main), options.h, pkclist.c (algo_available): --pgp6 + flag. This is not nearly as involved as --pgp2. In short, it + turns off force_mdc, turns on no_comment, escape_from, and + force_v3_sigs, and sets compression to 1. It also restricts the + user to IDEA (if present), 3DES, CAST5, MD5, SHA1, and RIPEMD160. + See the comments above algo_available() for lots of discussion on + why you would want to do this. + +2002-01-27 David Shaw + + * keygen.c (keygen_set_std_prefs): Comment + + * keyedit.c (sign_uids): Bug fix - when signing with multiple + secret keys at the same time, make sure each key gets the sigclass + prompt. + + * exec.c (exec_finish): Close the iobuf and FILE before trying to + waitpid, so the remote process will get a SIGPIPE and exit. This + is only a factor when using a pipe to communicate. + + * exec.c (exec_write): Disable cache-on-close of the fd iobuf (is + this right? Why is a fd iobuf cached at all?) + +2002-01-26 Werner Koch + + * g10.c, options.h: New option --gpg-agent-info + * passphrase.c (agent_open): Let it override the environment info. + * seckey-cert.c (check_secret_key): Always try 3 times when the + agent is enabled. + * options.skel: Describe --use-agent. + +2002-01-24 David Shaw + + * pubkey-enc.c (is_algo_in_prefs, get_it): Only check preferences + against keys with v4 self sigs - there is really little point in + warning for every single non-IDEA message encrypted to an old key. + + * pkclist.c (select_algo_from_prefs): Only put in the fake IDEA + preference if --pgp2 is on. + + * mainproc.c (check_sig_and_print): Print "Expired" for expired + but good signatures (this still prints "BAD" for expired but bad + signatures). + +2002-01-23 David Shaw + + * keygen.c (ask_keysize): Cosmetic: don't present a RSA signing + key as a "keypair" which can be 768 bits long (as RSA minimum is + 1024). + + * pubkey-enc.c (is_algo_in_prefs): Allow IDEA as a fake preference + for v3 keys with v3 selfsigs. + +2002-01-22 David Shaw + + * packet.h, getkey.c (merge_selfsigs_main), pkclist.c + (select_algo_from_prefs): Implement the fake IDEA preference as + per RFC2440:12.1. This doesn't mean that IDEA will be used (the + plugin may not be present), but it does mean that a v3 key with a + v3 selfsig has an implicit IDEA preference instead of 3DES. v3 + keys with v4 selfsigs use preferences as normal. + + * encode.c (encode_crypt): if select_algo_from_prefs fails, this + means that we could not find a cipher that both keys like. Since + all v4 keys have an implicit 3DES preference, this means there is + a v3 key with a v3 selfsig in the list. Use 3DES in this case as + it is the safest option (we know the v4 key can handle it, and + we'll just hope the v3 key is being used in an implementation that + can handle it). If --pgp2 is on, warn the user what we're doing + since it'll probably break PGP2 compatibility. + + * g10.c (main): Do not force using IDEA for encrypted files in + --pgp2 mode - let the fake IDEA preference choose this for us for + better compatibility when encrypting to multiple keys, only some + of which are v3. + + * keygen.c (keygen_set_std_prefs): Put 3DES on the end of the + default cipher pref list (RFC2440: "...it is good form to place it + there explicitly."). If the user has the IDEA plugin installed, + put a preference for IDEA *after* 3DES to effectively disable its + use for everything except encrypting along with v3 keys. + + * encode.c, g10.c, sign.c: Change the PGP2 warning line from + "... will not be usable ..." to "... may not be usable ..." as the + user could be using one of the enhanced PGP2 variations. + + * helptext.c: Revise the sign_uid.class help text as suggested by + Stefan. + +2002-01-20 Werner Koch + + * passphrase.c (passphrase_to_dek): Add tryagain_text arg to be + used with the agent. Changed all callers. + (agent_get_passphrase): Likewise and send it to the agent + * seckey-cert.c (do_check): New arg tryagain_text. + (check_secret_key): Pass the string to do_check. + * keygen.c (ask_passphrase): Set the error text is required. + * keyedit.c (change_passphrase): Ditto. + + * passphrase.c (agent_open): Disable opt.use_agent in case of a + problem with the agent. + (agent_get_passphrase): Ditto. + (passphrase_clear_cache): Ditto. + +2002-01-19 Werner Koch + + * passphrase.c (agent_open): Add support for the new Assuan based + gpg-agent. New arg to return the used protocol version. + (agent_get_passphrase): Implemented new protocol here. + (passphrase_clear_cache): Ditto. + (readline): New. + +2002-01-15 Timo Schulz + + * encode.c (encode_crypt_files): Fail if --output is used. + + * g10.c: New command --decrypt-files. + + * decrypt.c (decrypt_messages): New. + +2002-01-09 David Shaw + + * g10.c, misc.c, gpgv.c: move idea_cipher_warn to misc.c so gpgv.c + doesn't need a stub for it any longer. + + * g10.c (get_temp_dir), main.h: no longer used (it's in exec.c now) + + * g10.c (main), delkey.c (delete_keys), main.h : Allow + --delete-key (now --delete-keys, though --delete-key still works, + of course) to delete multiple keys in one go. This applies to + --delete-secret-key(s) and --delete-secret-and-public-key(s) as + well. + +2002-01-09 Timo Schulz + + * encode.c (encode_crypt_files): Now it behaves like verify_files. + + * g10.c (main): We don't need to check argc for encode_crypt_files + any longer. + +2002-01-09 Timo Schulz + + * exec.c: Include windows.h for dosish systems. + +2002-01-08 Timo Schulz + + * g10.c (main): New description for --encrypt-files. + +2002-01-08 Werner Koch + + * g10.c (main): Must register the secring for encryption because + it is needed to figure out the default recipient. Reported by + Roger Sondermann. + +2002-01-05 David Shaw + + * keyedit.c (menu_adduid): Require --expert before adding a photo + ID to a v3 key, and before adding a second photo ID to any key. + + * keyedit.c (keyedit_menu): Don't allow adding photo IDs in + rfc1991 or pgp2 mode. + + * getkey.c (merge_selfsigs_subkey): Permit v3 subkeys. Believe it + or not, this is allowed by rfc 2440, and both PGP 6 and PGP 7 work + fine with them. + + * g10.c, options.h, keyedit.c, sign.c: Move the "ask for + expiration" switch off of --expert, which was getting quite + overloaded, and onto ask-sig-expire and ask-cert-expire. Both + default to off. + + * g10.c (main): Change the default compression algo to 1, to be + more OpenPGP compliant (PGP also uses this, so it'll help with + interoperability problems as well). + + * encode.c (encode_crypt): Handle compression algo 2, since the + default is now 1. + + * build-packet.c (build_attribute_subpkt): Fix off-by-one error. + +2002-01-05 Werner Koch + + * g10.c (main): Do not register the secret keyrings for certain + commands. + + * keydb.c (keydb_add_resource): Use access to test for keyring + existence. This avoids cached opened files which are bad under + RISC OS. + +2002-01-04 David Shaw + + * sign.c (sign_file, sign_symencrypt_file): always use one-pass + packets unless rfc1991 is enabled. This allows a signature made + with a v3 key to work in PGP 6 and 7. Signatures made with v4 + keys are unchanged. + + * g10.c (main): Disallow non-detached signatures in PGP2 mode. + Move the "you must use files and not pipes" PGP2 warning up so all + the PGP2 stuff is together. + + * encode.c (encode_simple): Use the actual filesize instead of + partial length packets in the internal literal packet from a + symmetric message. This breaks PGP5(?), but fixes PGP2, 6, and 7. + It's a decent tradeoff. Note there was only an issue with + old-style RFC1991 symmetric messages. 2440-style messages in 6 + and 7 work with or without partial length packets. + +2002-01-03 David Shaw + + * g10.c (main): Removed --no-default-check-level option, as it is + not consistent with other "default" options. Plus, it is the same + as saying --default-check-level 0. + + * exec.c (exec_read): Disallow caching tempfile from child + process, as this keeps the file handle open and can cause unlink + problems on some platforms. + + * keyserver.c (keyserver_search_prompt): Minor tweak - don't + bother to transform keyids into textual form if they're just going + to be transformed back to numbers. + +2002-01-03 Timo Schulz + + * g10.c: New command --encrypt-files. + + * verify.c (print_file_status): Removed the static because + encode_crypt_files also uses this function. + + * main.h (print_files_status): New. + (encode_crypt_files): New. + + * encode.c (encode_crypt_files): New. + +2002-01-02 Stefan Bellon + + * keyserver.c: Moved util.h include down in order to avoid + redefinition problems on RISC OS. + + * keyring.c (keyring_lock): Only lock keyrings that are writable. + + * keyring.c (keyring_update_keyblock): Close unused iobuf. + + * hkp.c (parse_hkp_index, hkp_search) [__riscos__]: Changed + unsigned char* to char* because of compiler issues. + + * exec.c (exec_finish) [__riscos__]: Invalidate close cache so + that file can be unlinked. + +2001-12-28 David Shaw + + * g10.c (main): Use a different strlist to check extensions since + they need to be handled seperately now. + + * misc.c,main.h (check_permissions): Properly handle permission + and ownership checks on files in the lib directory + (e.g. /usr/local/lib/gnupg), which are owned by root and are + world-readable, and change all callers to specify extension or + per-user file. + + * photoid.c (show_photo), keyserver.c (keyserver_spawn): Bug fix - + don't call exec_finish if exec_write fails. + + * keyserver.c (keyserver_spawn): Look for OPTIONS from the + keyserver helper - specifically, a "OUTOFBAND" option for the + email keyserver. + + * mainproc.c (list_node), keylist.c (list_keyblock_colon), + import.c (delete_inv_parts), export.c (do_export_stream): Use + signature flags for exportability check rather than re-parsing the + subpacket. + + * keyid.c, keydb.h (get_lsign_letter): No longer needed. + +2001-12-27 David Shaw + + * exec.c (exec_finish): Show errors when temp files cannot be + deleted for whatever reason. + + * exec.c (exec_read): Don't rely on WEXITSTATUS being present. + + * exec.c (make_tempdir): Add temp file creator for win32. Don't + create an incoming temp file if the exec is write-only. + + * keyserver.c (keyserver_spawn): Clean up error handling, for when + the spawn fails. + + * photoid.c (show_photo): Clean up error handling. + + * misc.c (check_permissions): Neaten. + +2001-12-25 David Shaw + + * mkdtemp.c (mkdtemp): Add copyleft info and tweak the 'X' counter + to be a bit simpler. + + * keyserver.c, photoid.c: Remove unused headers left over from + when the exec functions lived there. + +2001-12-23 Timo Schulz + + * misc.c (check_permissions): Do not use it for W32 systems. + + * tdbio.c (migrate_from_v2): Define ftruncate as chsize() for W32. + + * mkdtemp.c: W32 support. + + * photoid.c: Ditto. + + * exec.c: Ditto. + +2001-12-22 David Shaw + + * exec.c (make_tempdir): avoid compiler warning with const + + * mkdtemp.c (mkdtemp): catch the empty ("") string case in case + someone repurposes mkdtemp at some point. + + * photoid.c (generate_photo_id, show_photo): some type changes + from Stefan Bellon. + + * exec.c (make_tempdir): handle Win32 systems, suggested by Timo + Schulz. + +2001-12-22 Werner Koch + + * encode.c (encode_simple, encode_crypt): i18n 2 strings. + +2001-12-22 Timo Schulz + + * encode.c (encode_simple, encode_crypt): Use is_file_compressed + to avoid to compress compressed files. + +2001-12-22 Werner Koch + + * keyserver.c (keyserver_spawn): Removed some variables + declaration due to shadowing warnings. + + * build-packet.c (build_attribute_subpkt): s/index/idx/ to avoid + compiler warnig due to index(3). + + * getkey.c (get_ctx_handle): Use KEYDB_HANDLE as return value. + * keylist.c (list_one): Made resname const. + + * keyedit.c (keyedit_menu): Allow "addphoto" only when --openpgp is + not used. + + * options.skel: Changed one example photo viewer to qiv. + +2001-12-21 David Shaw + + * Makefile.am: add exec.c, exec.h, photoid.c, and photoid.h + + * build-packet.c (build_attribute_subpkt): new function to build + the raw attribute subpacket. Note that attribute subpackets have + the same format as signature subpackets. + + * exec.c: new file with generic exec-a-program functionality. + Used by both photo IDs and keyserver helpers. This is pretty much + the same code that used to be keyserver specific, with some + changes to be usable generically. + + * free-packet.c (free_attributes (new)): function to free an + attribute packet. + + * gpgv.c: added stub show_photo + + * keyedit.c (keyedit_menu, menu_adduid, menu_showphoto): can add a + photo (calls generate_photo_id), or display a photo (calls + show_photo) from the --edit menu. New commands are "addphoto", + and "delphoto" (same as "deluid"). + + * keylist.c (list_keyblock_print): show photos during key list if + --show-photos enabled. + + * keyserver.c (keyserver_spawn): use the generic exec_xxx + functions to call keyserver helper. + + * g10.c, options.h: three new options - --{no-}show-photos, and + --photo-viewer to give the command line to display a picture. + + * options.skel: instructions for the photo viewer + + * parse-packet.c (parse_user_id, setup_user_id (new)): common code + for both user IDs and attribute IDs moved to setup_user_id. + + * parse-packet.c (make_attribute_uidname (new)): constructs a fake + "name" for attribute packets (e.g. "[image of size ...]") + + * parse-packet.c (parse_attribute (replaces parse_photo_id), + parse_attribute_subpkts): Builds an array of individual + attributes. Currently only handles attribute image / type jpeg + subpackets. + + * sign.c (hash_uid): Fix bug in signing attribute (formerly + photo_id) packets. + + * packet.h, and callers: globally change "photo_id" to "attribute" + and add structures for attributes. The packet format is generic + attributes, even though the only attribute type thus far defined + is jpeg. + +2001-12-21 David Shaw + + * parse-packet.c (can_handle_critical): Can handle critical + revocation subpackets now. + + * trustdb.c (mark_usable_uid_certs): Disregard revocations for + nonrevocable sigs. Note that this allows a newer revocable + signature to override an older nonrevocable signature. + + * sign.c (make_keysig_packet): add a duration field and change all + callers. This makes make_keysig_packet closer to + write_signature_packets and removes some duplicated expiration + code. + + * keyedit.c (keyedit_menu, menu_revsig, sign_uids, + sign_mk_attrib): Add nrsign command, don't allow revoking a + nonrevocable signature, + + * g10.c (main): Add --nrsign option to nonrevocably sign a key + from the command line. + + * build-packet.c (build_sig_subpkt_from_sig): Comment to explain + the use of CRITICAL. + +2001-12-21 Werner Koch + + * g10.c. options.h : New option --show-keyring + * getkey.c (get_ctx_handle): New. + * keylist.c (list_one): Implement option here. By David Champion. + +2001-12-20 David Shaw + + * keyserver.c (keyserver_spawn): Use mkdtemp() to make temp + directory. + + * mkdtemp.c: replacement function for those platforms that don't + have mkdtemp (make a temp directory securely). + +2001-12-19 David Shaw + + * misc.c (check_permissions): New function to stat() and ensure + the permissions of GNUPGHOME and the files have safe permissions. + + * keydb.c (keydb_add_resource): Check keyring permissions. + + * tdbio.c (tdbio_set_dbname): Check permissions of trustdb.gpg + + * keyserver.c (keyserver_spawn): Disable keyserver schemes that + involve running external programs if the options file has unsafe + permissions or ownership. + + * g10.c, options.h: New option --no-permission-warning to disable + the permission warning message(s). This also permits use of the + keyserver if it had been disabled (see above). Also check the + permissions/ownership of random_seed. + + * keyserver.c (keyserver_spawn): The new glibc prints a warning + when using mktemp() (the code was already secure, but the warning + was bound to cause confusion). Use a different implementation + based on get_random_bits() instead. Also try a few times to get + the temp dir before giving up. + +2001-12-19 Werner Koch + + * g10.c, passphrase.c [CYGWIN32]: Allow this as an alias for MINGW32. + +2001-12-18 David Shaw + + * g10.c (idea_cipher_warn): Add a flag to show the warning always + or once per session and change all callers (show always except for + the secret key protection and unknown cipher from an encrypted + message errors). Also make the strings translatable. + + * pubkey-enc.c (get_it): Add the IDEA cipher warning if the user + tries to decrypt an IDEA encrypted message without the IDEA + plugin. + + * keyserver.c (parse_keyserver_uri): More strict checking of the + keyserver URI. Specifically, fail if the ":port" section is + anything except a number between 1 and 65535. + +2001-12-17 David Shaw + + * keyserver.c (print_keyinfo): No need to check for + control/illegal characters, as utf8_to_native does this for us. + + * mainproc.c (proc_encrypted): Use generic IDEA warning. + + * gpgv.c: add stub for idea_cipher_warn + + * g10.c, hkp.c, keyserver.c: Fix capitalization and plural issues. + + * encode.c (encode_crypt), sign.c (sign_file, clearsign_file): + disable pgp2 mode after the message is no longer pgp2 compatible. + + * g10.c (main): Tweak the PGP2.x IDEA warning to use the generic + warning, and not merely fail if the IDEA plugin isn't there. + + * g10.c (main, idea_cipher_warn), keygen.c (set_one_pref), + seckey-cert.c (do_check): Add a generic IDEA warning for when the + IDEA plugin is not present. This pops up when the user uses + "--cipher-algo idea", when setpref is used to set a "S1" + preference, and when a secret key protected with IDEA is used. + +2001-12-15 Werner Koch + + * keyserver.c (keyserver_spawn): Assert that we have dropped privs. + +2001-12-13 Werner Koch + + * pubkey-enc.c (get_session_key): Check that the public key + algorithm is indeed usable for en/decryption. This avoid a + strange error message from pubkey_decrypt if for some reasons a + bad algorithm indentifier is passed. + +2001-12-12 David Shaw + + * Fixed some types for portability. Noted by Stefan Bellon. + +2001-12-11 Werner Koch + + * hkp.c (hkp_export): Do not print possible control characters + from a keyserver response. + (parse_hkp_index): Made uid an unsigned char* because it is passed to + isspace(). + (hkp_search): Ditto for the char* vars. + + * g10.c (main): Print the IDEA warning also for -c and -se. + + * g10.c (get_temp_dir): Assert that we have dropped privs + + * encode.c (encode_crypt): Include the first key into the --pgp2 + check. + +2001-12-07 David Shaw + + * g10.c, options.h: New option --pgp2. This is identical to + "--rfc1991 --cipher-algo idea --compress-algo 1 --digest-algo md5 + --force_v3_sigs" with the addition of an warning to advise the + user not to use a pipe (which would break pgp2 compatibility). + + * encode.c (encode_crypt): warn if the user tries to encrypt to + any key that is not RSA and <= 2048 bits when the --pgp2 option is + used. + + * sign.c (sign_file, clearsign_file): When using --pgp2, make a v3 + sig, and warn if the signature is made with a non-v3 key. + +2001-12-05 David Shaw + + * sign.c (sign_file, clearsign_file, sign_symencrypt_file): Prompt + for sig expiration if --expert is set and --force-v3-sigs is not + set (v3 sigs cannot expire). + + * mainproc.c (check_sig_and_print): After checking a sig, print + expiration status. This causes a error return if the sig is + expired. + + * build-packet.c (build_sig_subpkt_from_sig): Include a critical + sig expiration subpacket if the sig is to expire. + + * keyedit.c (sign_uids): Do not sign an expired key unless + --expert is set, in which case prompt. Also, offer to expire a + signature when the key the user is signing expires. + + * keygen.c (ask_expire_interval): Add a value to determine whether + to prompt for a key or sig expiration and change all callers. + + * keyid.c: New functions: expirestr_from_sig and + colon_expirestr_from_sig. + + * keylist.c (list_keyblock_colon): Show sig expiration date in the + --with-colons listing. + + * sign.c (make_keysig_packet, write_signature_packets): Pass in an + optional timestamp for the signature packet, and change all + callers. + + * keyedit.c (sign_mk_attrib): Include a critical expiration + subpacket in the signature if an expiration date is given. + +2001-12-04 David Shaw + + * keyedit.c (sign_uids): If the user tries to sign a + locally-signed key, allow the cert to be promoted to a full + exportable signature. This essentially deletes the old + non-exportable sig, and replaces it with a new exportable one. + +2001-12-04 David Shaw + + * keyedit.c (keyedit_menu): Do not allow signing a revoked key + unless --expert is set, and ask even then. + + * keyedit.c (sign_uids): Do not allow signing a revoked UID unless + --expert is set, and ask even then. + + * g10.c, options.h : New option --expert + +2001-11-16 David Shaw + + * Allow the user to select no compression via "--compress-algo 0" + on the command line. + + * keyedit.c (show_prefs): Show compression preferences in the + long-form "showpref" style. + + * keygen.c (set_one_pref): Permit setting a no-compression ("Z0") + preference. + + * getkey.c (fixup_uidnode): Fix compression preference corruption + bug. + +2001-12-02 David Shaw + + * g10.c: Add advisory --for-your-eyes-only option as per section + 5.9 of 2440. + +2001-12-05 David Shaw + + * Force a V4 sig if the user has a notation or policy URL set. + +2001-12-04 David Shaw + + * g10.c: Add options --keyserver-options, --temp-directory, and + auto-key-retrieve (the opposite of no-auto-key-retrieve). + + * hkp.c (hkp_search): New function to handle searching a HKP + keyserver for a key + + * hkp.c (hkp_ask_import, hkp_export): Pretty large changes to make + them communicate via the generic functions in keyserver.c + + * keyserver.c: new file with generic keyserver routines for + getting keys from a keyserver, sending keys to a keyserver, and + searching for keys on a keyserver. Calls the internal HKP stuff + in hkp.c for HKP keyserver functions. Other calls are handled by + an external program which is spawned and written to and read from + via pipes. Platforms that don't have pipes use temp files. + +2001-11-20 David Shaw + + * options.h, g10.c: New options show-notation, no-show-notation, + default-check-level, no-default-check-level, show-policy-url, + no-show-policy-url. + + * packet.h, sign.c (make_keysig_packet), parse-packet.c + (parse_signature), free-packet.c (free_seckey_enc): Fill in + structures for notation, policy, sig class, exportability, etc. + + * keyedit.c, keylist.c (print_and_check_one_sig, + list_keyblock_print): Show flags in signature display for cert + details (class, local, notation, policy, revocable). If selected, + show the notation and policy url. + + * keyedit.c (sign_uids): Prompt for and use different key sig + classes. + + * helptext.c (helptexts): Add help text to explain different + key signature classes + +2001-11-26 David Shaw + + * trustdb.c (mark_usable_uid_certs): Fix segfault from bad + initialization and fix reversed key signature expiration check. + +2001-11-09 Werner Koch + + * export.c (do_export_stream): Put all given names into a search + description and change the loop so that all matching names are + returned. + +2001-11-08 Werner Koch + + * pubkey-enc.c (get_it): To reduce the number of questions on the + MLs print the the name of cipher algorithm 1 with the error message. + + * mainproc.c: Changed the way old rfc1991 encryption cipher is + selected. Based on a patch by W Lewis. + + * pkclist.c (do_edit_ownertrust): Allow to skip over keys, the non + working "show info" is now assigned to "i" + * trustdb.c (ask_ownertrust, validate_keys): Implement a real quit + here. Both are by David Shaw. + + * trustdb.c (validate_keys): Make sure next_exipire is initialized. + + * sign.c (make_keysig_packet): Use SHA-1 with v4 RSA keys. + + * g10.c, options.h : New option --[no-]froce-v4-certs. + * sign.c (make_keysig_packet): Create v4 sigs on v4 keys even with + a v3 key. Use that new option. By David Shaw + + * revoke.c (ask_revocation_reason): Allow to select "no reason". + By David Shaw. + + * keyid.c (fingerprint_from_sk): Calculation of an v3 fpr was + plain wrong - nearly the same code in fingerprint_from_pk is correct. + + * build-packet.c (do_secret_key): Added a few comments to the code. + +2001-11-07 Werner Koch + + * g10.c (main): Print a warning when -r is used w/o encryption. + Suggested by Pascal Scheffers. + +2001-10-23 Werner Koch + + * keyedit.c (keyedit_menu): Changed helptext for showpref + command. Suggested by Reinhard Wobst. + + * keyring.c (keyring_search): When marking the offtbl ready, take + into account that we may have more than one keyring. + +2001-10-22 Werner Koch + + * Makefile.am: Do not use OMIT_DEPENDENCIES + + * build-packet.c (build_sig_subpkt): Default is now to put all + types of subpackets into the hashed area and only list those which + should go into the unhashed area. + +2001-10-18 Werner Koch + + * keydb.c (keydb_add_resource): Rearranged the way we keep track + of the resource. There will now be an entry for each keyring here + and not in keyring.c itself. Store a token to allow creation of a + keyring handle. Changed all functions to utilize this new design. + (keydb_locate_writable): Make a real implementation. + * keyring.c (next_kr): Removed and changed all callers to set the + resource directly from the one given with the handle. + (keyring_is_writable): New. + (keyring_rebuild_cache): Add an arg to pass the token from keydb. + +2001-10-17 Werner Koch + + * keyring.c (keyring_search): Enabled word search mode but print a + warning that it is buggy. + +2001-10-11 Werner Koch + + * hkp.c (hkp_ask_import): No more need to set the port number for + the x-hkp scheme. + (hkp_export): Ditto. + +2001-10-06 Stefan Bellon + + * passphrase.c [__riscos__]: Disabled agent specific stuff. + * g10.c: New option --no-force-v3-sigs. + +2001-10-04 Werner Koch + + * export.c (do_export_stream): Do not push the compress filter + here because the context would run out of scope due to the + iobuf_close done by the caller. + (do_export): Do it here instead. + +2001-09-28 Werner Koch + + * keyedit.c (sign_uids): Always use the primary key to sign keys. + * getkey.c (finish_lookup): Hack to return only the primary key if + a certification key has been requested. + + * trustdb.c (cmp_kid_for_make_key_array): Renamed to + (validate_one_keyblock): this and changed arg for direct calling. + (make_key_array): Renamed to + (validate_one_keyblock): this and changed args for direct calling. + (mark_usable_uid_certs, validate_one_keyblock) + (validate_key_list): Add next_expire arg to keep track of + expiration times. + (validate_keys): Ditto for UTKs and write the stamp. + + * tdbio.c (migrate_from_v2): Check return code of tbdio_sync. + + * tdbdump.c (import_ownertrust): Do a tdbio_sync(). + + * keyring.c: Made the offtbl an global object. + +2001-09-27 Werner Koch + + * pkclist.c (do_edit_ownertrust): Allow settin of ultimate trust. + + * trustdb.c (mark_keyblock_seen): New. + (make_key_array): Use it to mark the subkeys too. + (validate_keys): Store validity for ultimatly trusted keys. + +2001-09-26 Werner Koch + + * pkclist.c (check_signatures_trust, do_we_trust): Removed the + invocation of add_ownertrust. Minor changes to the wording. + (add_ownertrust, add_ownertrust_cb): Removed. + + * trustdb.c (get_validity): Allow to lookup the validity using a + subkey. + + * trustdb.c (new_key_hash_table): Increased the table size to 1024 + and changed the masks accordingly. + (validate): Changed stats printing. + (mark_usable_uid_certs): New. + (cmp_kid_for_make_key_array): Does now check the signatures and + figures out a usable one. + +2001-09-25 Werner Koch + + * keyring.c (new_offset_item,release_offset_items) + (new_offset_hash_table, lookup_offset_hash_table) + (update_offset_hash_table, update_offset_hash_table_from_kb): New. + (keyring_search): Use a offset table to optimize search for + unknown keys. + (keyring_update_keyblock, keyring_insert_keyblock): Insert new + offsets. + * getkey.c (MAX_UNK_CACHE_ENTRIES): Removed the unknown keys + caching code. + + * g10.c, options.h, import.c: Removed the entire + allow-secret-key-import stuff because the validity is now + controlled by other means. + + * g10.c: New command --rebuild-keydb-caches. + * keydb.c (keydb_rebuild_caches): New. + * keyring.c (do_copy): Moved some code to + (create_tmp_file, rename_tmp_file, write_keyblock): new functions. + (keyring_rebuild_cache): New. + + * packet.h (PKT_ring_trust): Add sigcache field. + * parse-packet.c (parse_trust): Parse sigcache. + * keyring.c (do_copy): Always insert a sigcache packet. + (keyring_get_keyblock): Copy the sigcache packet to the signature. + * sig-check.c (cache_sig_result): Renamed from + cache_selfsig_result. Changed implementation to use the flag bits + and changed all callers. + (mdc_kludge_check): Removed this unused code. + (do_check): Do not set the sig flags here. + + * import.c (read_block): Make sure that ring_trust packets are + never imported. + * export.c (do_export_stream): and never export them. + + * trustdb.c (make_key_array): Skip revoked and expired keys. + +2001-09-24 Werner Koch + + * g10.c, options.h: New option --no-auto-check-trustdb. + + * keygen.c (do_generate_keypair): Set newly created keys to + ultimately trusted. + + * tdbio.h, tdbio.c: Removed all support for records DIR, KEY, UID, + PREF, SIG, SDIR and CACH. Changed migration function to work + direct on the file. + (tdbio_read_nextcheck): New. + (tdbio_write_nextcheck): New. + +2001-09-21 Werner Koch + + Revamped the entire key validation system. + * trustdb.c: Complete rewrite. No more validation on demand, + removed some functions, adjusted to all callers to use the new + and much simpler interface. Does not use the LID anymore. + * tdbio.c, tdbio.h: Add new record types trust and valid. Wrote a + migration function to convert to the new trustdb layout. + * getkey.c (classify_user_id2): Do not allow the use of the "#" + prefix. + * keydb.h: Removed the TDBIDX mode add a skipfnc to the + descriptor. + * keyring.c (keyring_search): Implemented skipfnc. + + * passphrase.c (agent_open): Add missing bracket. Include windows.h. + +2001-09-19 Werner Koch + + * keylist.c (print_fingerprint): Renamed from fingerprint, made + global available. Added new arg to control the print style. + * mainproc.c (print_fingerprint): Removed. + * pkclist.c (print_fpr, fpr_info): Removed and changed callers to + use print_fingerprint. + * keyedit.c (show_fingerprint): Ditto. + + * passphrase.c (writen, readn) + (agent_open, agent_close) + (agent_get_passphrase) + (passphrase_clear_cache): Support for W32. Contributed by Timo. + + * import.c (import_one): Release keydb handles at 2 more places. + + * keyring.c (keyring_release): Close the iobuf. + (keyring_get_keyblock): Init ret_kb to NULL and store error contidion. + + * import.c (import_new_stats_handle): New. + (import_release_stats_handle): New. + (import_print_stats): Renamed from static fnc print_stats. + (import_keys, import_keys_stream): Add an optional status handle + arg and changed all callers. + * hkp.c (hkp_ask_import): Add an stats_handle arg and changed all + callers. + + * mainproc.c (print_pkenc_list): Use print_utf8_string2(). + +2001-09-18 Werner Koch + + * g10.c: New command --refresh-keys. + * hkp.c (hkp_refresh_keys): New. Contributed by Timo Schulz. + + * parse-packet.c (parse): Stop on impossible packet lengths. + +2001-09-17 Werner Koch + + * mainproc.c (print_notation_data): Wrap notation data status lines + after 50 chars. + + * mainproc.c (proc_pubkey_enc): Make option try-all-secrets work. + By disastry@saiknes.lv. + +2001-09-14 Werner Koch + + * parse-packet.c (dump_sig_subpkt): List key server preferences + and show the revocable flag correctly. Contributed by David Shaw. + +2001-09-09 Werner Koch + + * keyedit.c (keyedit_menu): No need to define another p. + + * keylist.c (print_capabilities): s/used/use/ so that it + does not shadow a global. + * sign.c (sign_file): Renamed arg encrypt to encryptflag + * keygen.c: Replaced all "usage" by "use". + * misc.c (openpgp_pk_algo_usage): Ditto. + + * pubkey-enc.c (get_it): Renamed arg k to enc so that the later + defined k does not shadow it. + + * parse-packet.c (parse_gpg_control): No need to define another i. + + * getkey.c (get_pubkey_byfprint): Must use the enum values and not + the fprint_len. + * keyring.c (keyring_search): Removed a non-sense break. Both + bugs pointed out by Stefan. + +2001-09-07 Werner Koch + + * status.c, status.h: Added NO_RECP and ALREADY_SIGNED. + * pkclist.c (build_pk_list): Issue NO_RECP. + * keyedit.c (sign_uids): Added experimental ALREADY_SIGNED + + * hkp.c (hkp_import): Use log_error. Bug reported by Neal H + Walfield. + + * getkey.c (classify_user_id2): Change args to take the desc union + direct. It was a stupid idea to pass the individual fields of an + union to this function. Changed all callers. + (classify_user_id): Ditto and allow to pass NULL as the description. + +2001-09-06 Werner Koch + + * getkey.c (fixup_uidnode): Features flag is now a bit vector. + * keygen.c (add_feature_mdc): Ditto. + + Revamped the entire key I/O code to be prepared for other ways of + key storages and to get rid of the existing shit. GDBM support has + gone. + * keydb.c: New + * keyring.c, keyring.h: New. + * ringedit.c: Removed. Moved some stuff to keyring.c + * getkey.c: Changed everything related to the key retrieving + functions which are now using the keydb_ functions. + (prepare_search, word_match_chars, word_match) + (prepare_word_match, compare_name): Moved to keyring.c + (get_pubkey_byname): Removed ctx arg and add ret_kdbhd + arg. Changed all callers. + (key_byname): Use get_pubkey_end to release the context and take + new ret_kbdhd arg. Changed all callers. + (classify_user_id2): Fill the 16 byte fingerprint up with 4 null + bytes not with zero bytes of value 4, tsss. + * import.c (import_one): Updated to use the new keydb interface. + (import_secret_one): Ditto. + (import_revoke_cert): Ditto. + * delkey.c (do_delete_key): Ditto. + * keyedit.c (keyedit_menu): Ditto. + (get_keyblock_byname): Removed. + * revoke.c (gen_revoke): Ditto. + * export.c (do_export_stream): Ditto. + * trustdb.c (update_trustdb): Ditto. + * g10.c, gpgv.c (main): Renamed add_keyblock_resource to + keydb_add_resource. + * Makefile.am: Added and removed files. + + * keydb.h: Moved KBNODE typedef and MAX_FINGERPRINT_LEN to + * global.h: this new header. + +2001-09-03 Werner Koch + + * passphrase.c (agent_get_passphrase): Changed nread to size_t. + (passphrase_clear_cache): Ditto. + + * keyid.c (mk_datestr): Avoid trigraphs. + (fingerprint_from_pk): Cache the keyid in the pk. + + * options.h: Add opt.with_fingerprint so that we know whether the + corresponding options was used. + * g10.c (main): Set it here. + * pkclist.c (check_signatures_trust): Always print fingerprint + when this option is used. Mixed a minor memory leak. + + * status.c, status.h: New status INV_RECP. + * pkclist.c (build_pk_list): Issue this status. + +2001-08-31 Werner Koch + + * parse-packet.c (parse_key,parse_pubkeyenc) + (parse_signature): Return error on reading bad MPIs. + + * mainproc.c (check_sig_and_print): Always print the user ID even + if it is not bound by a signature. Use the primary UID in the + status messages and encode them in UTF-8 + * status.c (write_status_text_and_buffer): New. + +2001-08-30 Werner Koch + + * packet.h (sigsubpkttype_t): Add SIGSUBPKT_FEATURES. + (PKT_public_key, PKT_user_id): Add a flag for it. + * parse-packet.c, build-packet.c: Add support for them. + * getkey.c (fixup_uidnode, merge_selfsigs): Set the MDC flags. + * keygen.c (add_feature_mdc): New. + (keygen_upd_std_prefs): Always set the MDC feature. + * keyedit.c (show_prefs): List the MDC flag + * pkclist.c (select_mdc_from_pklist): New. + * encode.c (encode_crypt, encrypt_filter): Test whether MDC + should be used. + * cipher.c (write_header): Set MDC use depending on the above test. + Print more status info. + + * delkey.c (do_delete_key): Kludge to delete a secret key with no + public key available. + + * ringedit.c (find_secret_keyblock_direct): New. + * getkey.c (seckey_available): Simplified. + + * ringedit.c (cmp_seckey): Now compares the secret key against the + public key while ignoring all secret parts. + (keyring_search): Use a public key packet as arg. Allow to search + for subnkeys + (search): Likewise. Changed all callers. + (find_secret_keyblock_bypk): New. + (find_secret_keyblock_byname): First locate the pubkey and then + find the correponding secret key. + * parse-packet.c (parse): Renamed pkttype arg to onlykeypkts and + changed code accordingly. Changed all callers. + (search_packet): Removed pkttype arg. + * keyedit.c (keyedit_menu): First locate the public key and then + try to locate a secret key. + + * ringedit.c (locate_keyblock_by_fpr): Removed. + (locate_keyblock_by_keyid): Removed. + (find_keyblock_bysk): Removed. + + * sig-check.c (check_key_signature2): Print the keyid along with + the wrong sig class errors. + +2001-08-24 Werner Koch + + * sign.c (sign_file): Stripped the disabled comment packet code. + (sign_file, sign_symencrypt_file): Moved common code to .. + (write_onepass_sig_packets): .. this new function. + (sign_file, clearsign_file, sign_symencrypt_file): Moved common + code to + (write_signature_packets): this new function. + (write_signature_packets, make_keysig_packet) + (update_keysig_packet): Moved common code to + (hash_uid, hash_sigclass_to_magic): these new functions + (sign_file, sign_symencrypt_file): Moved common code to + (write_plaintext_packet): this new function. + +2001-08-21 Stefan Bellon + + * trustdb.c (query_trust_info): Changed trustlevel to signed int. + * g10.c [__riscos__]: Fixed handling of --use-agent --lock-multiple. + +2001-08-20 Werner Koch + + * encr-data.c (decrypt_data): Keep track on whether we already + printed information about the used algorithm. + * mainproc.c (proc_encrypted): Removed the non-working IDEA hack + and print a message about the assumed algorithm. + * passphrase.c (passphrase_to_dek): Use the same algorithm as above. + (proc_symkey_enc): Print the algorithm, so that the user knows it + before entering the passphrase. + (proc_pubkey_enc, proc_pubkey_enc): Zero the DEK out. + * encode.c (encode_crypt, encrypt_filter): Ditto. + + * g10.c: Allow for --sign --symmetric. + * sign.c (sign_and_symencrypt): New. + + Applied patches from Stefan Bellon to support + RISC OS. Nearly all of these patches are identified by the + __riscos__ macro. + * compress.c: Added a couple of casts. + * g10.c [__riscos__]: Some patches and new options foo-file similar + to all foo-fd options. + * gpgv.c, openfile.c, ringedit.c, tdbio.c: Minor fixes. Mainly + replaced hardcoded path separators with EXTSEP_S like macros. + * passprase.c [__riscos__]: Disabled agent stuff + * trustdb.c (check_trust): Changed r_trustlevel to signed int to + avoid mismatch problems in pkclist.c + * pkclist.c (add_ownertrust): Ditto. + * plaintext.c (handle_plaintext) [__riscos__]: Print a note when + file can't be created. + * options.h [__riscos__]: Use an extern unless included from the + main module. + * signal.c (got_fatal_signal) [__riscos__]: Close all files. + +2001-08-14 Werner Koch + + * keygen.c (ask_algo): New arg r_usage. Allow for RSA keys. + (gen_rsa): Enabled the code. + (do_create): Enabled RSA branch. + (parse_parameter_usage): New. + (proc_parameter_file): Handle usage parameter. + (read_parameter_file): Ditto. + (generate_keypair): Ditto. + (generate_subkeypair): Ditto. + (do_generate_keypair): Ditto. + (do_add_key_flags): New. + (keygen_add_std_prefs): Use the new function. + (keygen_add_key_flags_and_expire): New. + (write_selfsig, write_keybinding): Handle new usage arg. + * build-packet.c (build_sig_subpkt): Make sure that key flags go + into the hashed area. + + * keygen.c (write_uid): Initialize the reference cunter. + + * keyedit.c (keyedit_menu): No more need to update the trustdb for + preferences. Added calls to merge keblock. + + * kbnode.c (dump_kbnode): Print some more flags. + +2001-08-10 Werner Koch + + Revamped the preference handling. + + * packet.h (prefitem_t, preftype_t): New. + (PKT_public_key): Added a uid field. + (PKT_user_id): Added field to store preferences and a reference + counter. + * parse-packet.c (parse_user_id,parse_photo_id): Initialize them + * free-packet.c (free_user_id): Free them. + (copy_user_id): Removed. + (scopy_user_id): New. + (cmp_user_ids): Optimized for identical pointers. + (release_public_key_parts): Release the uid. + (copy_public_key_with_new_namehash): Removed. + (copy_prefs): New. + * keyedit.c (menu_adduid): Use the new shallow copy user id. + (show_prefs): Adjusted implementation. + (keyedit_menu): No more need to update the trustdb after changing + preferences. + * getkey.c (fixup_uidnode): Store preferences. + (find_by_name): Return a user id packet and remove namehash stuff. + (lookup): Removed the unused namehash stuff. + (finish_lookup): Added foundu arg. + (pk_from_block): Removed the namehash arg and changed all callers. + (merge_selfsigs): Copy prefs to all keys. + * trustdb.c (get_pref_data): Removed. + (is_algo_in_prefs): Removed. + (make_pref_record): Deleted and removed all class. + * pkclist.c (select_algo_from_prefs): Adjusted for the new + preference implementation. + * pubkey-enc.c (is_algo_in_prefs): New. + (get_it): Use that new function. + +2001-08-09 Werner Koch + + * build-packet.c (build_sig_subpkt): Fixed calculation of + newarea->size. + + * g10.c (main): New option "--preference-list" + * keyedit.c (keyedit_menu): New commands "setpref" and "updpref". + (menu_set_preferences): New. + * keygen.c (keygen_set_std_prefs): New. + (set_one_pref): New. + (check_zip_algo): New. + (keygen_get_std_prefs): New. + (keygen_upd_std_prefs): New + (keygen_add_std_prefs): Move the pref setting code into the above fnc. + * build-packet.c (build_sig_subpkt): Updated the list of allowed + to update subpackets. + +2001-08-08 Werner Koch + + * packet.h (subpktarea_t): New. + (PKT_signature): Use that type for hashed_data and unhashed_data and + removed the _data prefix from those fields. Changed all users. + * parse-packet.c (parse_signature): Changed allocation for that. + (parse_sig_subpkt): Changed declaration + (enum_sig_subpkt): Ditto and changed implementation accordingly. + * free-packet.c (cp_subpktarea): Renamed from cp_data_block and + adjusted implementation. Changed caller. + * sig-check.c (mdc_kludge_check): Adjusted the hashing. + (do_check): Ditto. + * sign.c (sign_file, clearsign_file, make_keysig_packet, + update_keysig_packet): Ditto. + * build-packet.c (build_sig_subpkt): Partial rewrite. + (find_subpkt): Adjusted and made static. + (delete_sig_subpkt): Adjusted. + (do_signature): Ditto. + + * keygen.c (ask_keysize): Do not print the notes about suggested + key sizes if just a DSA key is generated. + + * trustdb.c (add_ultimate_key): s/log_error/log_info/ for + duplicated inserted trusted keys. + +2001-08-07 Werner Koch + + * sign.c (sleep): Redefine for W32. + + * g10.c, options.h: Set new flag opt.no_homedir_creation when + --no-options is given. + * openfile.c (try_make_homedir): Don't create the homedir in that case. + +2001-08-03 Werner Koch + + * armor.c (armor_filter): Removed the default comment string + because it could get us in trouble due to translations using non + ascii characters. + +2001-08-01 Werner Koch + + * keylist.c (list_keyblock_print): Do not list revoked UIDs unless + in verbose mode and we do no signature listing. + + * getkey.c (finish_lookup): Skip subkeys which are not yet valid. + * g10.c, options.h: New option --ignore-valid-from. + + * sign.c (make_keysig_packet): Added new sigversion argument to + allow the caller to force generation of required signature + version. Changed all callers. Suggested by Thomas Roessler. + + * keyedit.c (sign_uids): Force v4 signature generation for local + sigs. Removed the check for local signature and pre-v4 keys. + +2001-07-27 Werner Koch + + * keyedit.c (sign_uids): Check that we are not trying to to a + lsign with a pre-v4 key. Bug noticed by Thomas Roessler. + +2001-07-26 Werner Koch + + * parse-packet.c (parse_photo_id): Reset all variables. + * getkey.c (merge_selfsigs_main): Removed checks on PHOTO_ID + because this is handled identically to a user ID. + +2001-07-06 Werner Koch + + * cipher.c (write_header): Don't use MDC with --rfc1991. Suggested + by disastry@saiknes.lv. + +2001-07-05 Werner Koch + + * g10.c, options.h: New option --preserve-permissions. + * ringedit.c (add_keyblock_resource): Use it here + (keyring_copy): and here. + + * trustdb.c (verify_own_keys): Be more silent on --quiet. + Suggested by Thomas Roessler. + * sig-check.c (check_key_signature2): Ditto. + * mainproc.c (proc_encrypted, proc_tree): Ditto + * getkey.c (lookup): Ditto. + +2001-07-04 Werner Koch + + * ringedit.c (add_keyblock_resource): Restore filename in case of error. + +2001-06-25 Werner Koch + + * kbnode.c (dump_kbnode): Print the signature timestamp. + + * keyedit.c (keyedit_menu): New menu point "primary". + (change_primary_uid_cb): New. + (menu_set_primary_uid): New. + * sign.c (update_keysig_packet): New. + * build-packet.c (build_sig_subpkt): Put the primary UID flag into + the hashed area. Allow update of some more packets. + +2001-06-15 Werner Koch + + * getkey.c (merge_selfsigs): Exit gracefully when a secret key is + encountered. May happen if a secret key is in public keyring. + Reported by Francesco Potorti. + +2001-06-12 Werner Koch + + * getkey.c (compare_name): Use ascii_memistr(), ascii_memcasecmp() + * keyedit.c (keyedit_menu): Use ascii_strcasecmp(). + * armor.c (radix64_read): Use ascii_toupper(). + * ringedit.c (do_bm_search): Ditto. + * keygen.c (read_parameter_file): Ditto. + * openfile.c (CMP_FILENAME): Ditto. + * g10.c (i18n_init): We can now use just LC_ALL. + +2001-05-29 Werner Koch + + * keygen.c (generate_subkeypair): Print a warning if a subkey is + created on a v3 key. Suggested by Brian M. Carlson. + +2001-05-27 Werner Koch + + * keyid.c (get_lsign_letter): New. + * keylist.c (list_keyblock_colon): Use it here. + * mainproc.c (list_node): and here. + + * getkey.c, packet.h, free-packet.c: Removed that useless key + created field; I dunno why I introducded this at all - the + creation time is always bound to the key packet and subject to + fingerprint calculation etc. + + * getkey.c (fixup_uidnode): Add keycreated arg and use this + instead of the signature timestamp to calculate the + help_key_expire. Bug reported by David R. Bergstein. + (merge_selfsigs_main): Correct key expiration time calculation. + (merge_selfsigs_subkey): Ditto. + +2001-05-25 Werner Koch + + * revoke.c (gen_revoke): Add a cast to a tty_printf arg. + * delkey.c (do_delete_key): Ditto. + * keyedit.c (print_and_check_one_sig): Ditto. + (ask_revoke_sig): Ditto. + (menu_revsig): Ditto. + (check_all_keysigs): Removed unused arg. + +2001-05-23 Werner Koch + + * g10.c (opts): Typo fix by Robert C. Ames. + +2001-05-06 Werner Koch + + * revoke.c: Small typo fix + +2001-05-04 Werner Koch + + * passphrase.c (passphrase_clear_cache): Shortcut if agent usage + is not enabled. + +2001-05-01 Werner Koch + + * passphrase.c (writen): Replaced ssize_t by int. Thanks to + to Robert Joop for reporting that SunOS 4.1.4 does not have it. + +2001-04-28 Werner Koch + + * getkey.c (merge_public_with_secret): pkttype was not set to subkey. + +2001-04-27 Werner Koch + + * skclist.c (build_sk_list): Changed one log_debug to log_info. + +2001-04-25 Werner Koch + + * keyedit.c (show_prefs): Add a verbose mode. + (show_key_with_all_names): Pass verbose flag for special value of + with_pref. + (keyedit_menu): New command "showpref" + (show_key_with_all_names): Mark revoked uids and the primary key. + +2001-04-24 Werner Koch + + * getkey.c (get_primary_uid): Return a different string in case of + error and made it translatable. + + * build-packet.c (do_secret_key): Ugly, we wrote a zero + instead of the computed ndays. Thanks to M Taylor for complaining + about a secret key import problem. + +2001-04-23 Werner Koch + + * hkp.c (hkp_ask_import): Allow to specify a port number for the + keyserver. Add a kudge to set the no_shutdown flag. + (hkp_export): Ditto. + * options.skel: Document the changes + +2001-04-20 Werner Koch + + * options.skel: Add some more comments. + +2001-04-19 Werner Koch + + * keyid.c (mk_datestr): New. Handles negative times. We must do + this because Windoze segvs on negative times passed to gmtime(). + Changed all datestr_from function to use this one. + + * keyid.c, keyid.h (colon_strtime): New. To implement the + fixed-list-mode. + (colon_datestr_from_pk): New. + (colon_datestr_from_sk): New. + (colon_datestr_from_sig): New. + * keylist.c (list_keyblock_colon): Use these functions here. + * mainproc.c (list_node): Ditto. + +2001-04-18 Werner Koch + + * openfile.c (open_sigfile): Fixed the handling of ".sign". + * mainproc.c (proc_tree): Use iobuf_get_real_fname. + Both are by Vincent Broman. + +2001-04-14 Werner Koch + + * getkey.c (fixup_uidnode): Removed check for !sig which is + pointless here. Thanks to Jan Niehusmann. + +2001-04-10 Werner Koch + + * sig-check.c (check_key_signature2): Use log_info instead of + log_error so that messed up keys do not let gpg return an error. + Suggested by Christian Kurz. + + * getkey.c (merge_selfsigs_main): Do a fixup_uidnode only if we + have both, uid and sig. Thanks to M Taylor. + +2001-04-05 Werner Koch + + * armor.c (unarmor_pump_new,unarmor_pump_release): New. + (unarmor_pump): New. + * pipemode.c (pipemode_filter): Use the unarmor_pump to handle + armored or non-armored detached signatures. We can't use the + regular armor_filter becuase this does only chack for armored + signatures the very first time. In pipemode we may have a mix of + armored and binary detached signatures. + * mainproc.c (proc_tree): Do not print the "old style" notice when + this is a pipemode processes detached signature. + (proc_plaintext): Special handling of pipemode detached sigs. + + * packet.h (CTRLPKT_PLAINTEXT_MARK): New. + * parse-packet.c (create_gpg_control): New. + * kbnode.c (dump_kbnode): Support it here. + * mainproc.c (check_sig_and_print): Fixed the check for bad + sequences of multiple signatures. + (proc_plaintext): Add the marker packet. + (proc_tree): We can now check multiple detached signatures. + +2001-04-02 Werner Koch + + The length of encrypted packets for blocksizes != 8 was not + correct encoded. I think this is a minor problem, because we + usually use partial length packets. Kudos to Kahil D. Jallad for + pointing this out. + * packet.h: Add extralen to PKT_encrypted. + * cipher.c (write_header): Set extralen. + * build-packet.c (do_encrypted): Use extralen instead of const 10. + (do_encrypted_mdc): Ditto. + * parse-packet.c (parse_encrypted): Set extralen to 0 because we + don't know it here. + +2001-03-30 Werner Koch + + * getkey.c (premerge_public_with_secret): Changed wording an add + the keyID to the info message. + +2001-03-29 Werner Koch + + * getkey.c (premerge_public_with_secret): Use log_info instead of + log_error when no secret key was found for a public one. + Fix the usage if the secret parts of a key are not available. + + * openfile.c (ask_outfile_name): Trim spaces. + (open_outfile): Allow to enter an alternate filename. Thanks to + Stefan Bellon. + * plaintext.c (handle_plaintext): Ditto. + +2001-03-28 Werner Koch + + * mainproc.c (do_check_sig): Allow direct key and subkey + revocation signature. + * sig-check.c (check_key_signature2): Check direct key signatures. + Print the signature class along with an error. + +2001-03-27 Werner Koch + + * packet.h: Add a missing typedef to an enum. Thanks to Stefan Bellon. + + * g10.c: New option --no-sig-create-check. + * sign.c (do_sign): Implement it here. + * g10.c: New option --no-sig-cache. + * sig-check.c (check_key_signature2): Implement it here. + (cache_selfsig_result): and here. + + * keylist.c (list_keyblock): Removed debugging stuff. + + * getkey.c (cache_public_key): Made global. + * keygen.c (write_selfsig, write_keybinding): Cache the new key. + + * getkey.c (key_byname): Add new arg secmode and changed all + callers to request explicitly the mode. Deriving this information + from the other supplied parameters does not work if neither pk nor + sk are supplied. + +2001-03-25 Werner Koch + + * packet.h (ctrlpkttype_t): New. + * mainproc.c (add_gpg_control,proc_plaintext,proc_tree): Use the + new enum values. + * pipemode.c (make_control): Ditto. + * armor.c (armor_filter): Ditto. + +2001-03-24 Werner Koch + + * sign.c (do_sign): Verify the signature right after creation. + +2001-03-23 Werner Koch + + * status.c, status.h (STATUS_UNEXPECTED): New. + * mainproc.c (do_proc_packets): And emit it here. + +2001-03-21 Werner Koch + + * status.c: Add sys/types.h so that it runs on Ultrix. Reported + by Georg Schwarz.x + + * build-packet.c (build_sig_subpkt): Fixed generaton of packet + length header in case where 2 bytes headers are needed. Thanks to + Piotr Krukowiecki. + +2001-03-19 Werner Koch + + * g10.c (main): the default keyring is no always used unless + --no-default-keyring is given. + + * ringedit.c (add_keyblock_resource): invalidate cache after file + creation. + +2001-03-15 Werner Koch + + * keygen.c (ask_algo): Changed the warning of the ElGamal S+E Algo. + + * keylist.c (print_capabilities): New. + (list_keyblock_colon): and use it here. + +2001-03-13 Werner Koch + + * main.c, options.h: New option --fixed_list_mode. + * keylist.c (list_keyblock_colon): use it here. + + * getkey.c (merge_keys_and_selfsig): Divert merging of public keys + to the function used in key selection.. + * keylist.c (is_uid_valid): Removed. + (list_keyblock): Splitted into .. + (list_keyblock_print, list_keyblock_colon): .. these. + functions. Changed them to use the flags set in the key lookup code. + (reorder_keyblock): New, so that primary user IDs are listed first. + + * ringedit.c (keyring_copy): flush the new iobuf chaces before + rename or remove operations. This is mainly needed for W32. + + * hkp.c [HAVE_DOSISH_SYSTEM]: Removed the disabled code because we + have now W32 socket support in ../util/http.c + + * skclist.c (key_present_in_sk_list): New. + (is_duplicated_entry): New. + (build_sk_list): Check for duplicates and do that before unlocking. + +2001-03-12 Werner Koch + + * armor.c (parse_header_line): Removed double empty line check. + (parse_header_line): Replaced trim_trailing_ws with a counting + function so that we can adjust for the next read. + + * options.skel: Fixed 3 typos. By Thomas Klausner. Replaced the + keyserver example by a better working server. + + * parse-packet.c (parse_symkeyenc): Return Invalid_Packet on error. + (parse_pubkeyenc): Ditto. + (parse_onepass_sig): Ditto. + (parse_plaintext): Ditto. + (parse_encrypted): Ditto. + (parse_signature): Return error at other places too. + (parse_key): Ditto. + * g10.c (main): Set opt.list_packets to another value when invoked + with the --list-packets command. + * mainproc.c (do_proc_packets): Don's stop processing when running + under --list-packets command. + + * signal.c (do_sigaction): Removed. + (init_one_signal): New to replace the above. Needed to support + systems without sigactions. Suggested by Dave Dykstra. + (got_fatal_signal,init_signals): Use the above here. + (do_block): Use sigset() if sigprocmask() is not available. + + * armor.c (parse_hash_header): Test on TIGER192, which is the + correct value as per rfc2440. By Edwin Woudt. + +2001-03-08 Werner Koch + + * misc.c: Include time.h. By James Troup. + + * getkey.c: Re-enabled the unknown user Id and PK caches and + increased their sizes. + + * getkey.c (merge_selfsigs_main): Set expire date and continue + processing even if we found a revoked key. + (merge_selfsigs_subkeys): Ditto. + + * packet.h: Add an is_revoked flag to the user_id packet. + * getkey.c (fixup_uidnode): Set that flag here. + (merge_selfsigs_main): Fix so that the latest signature is used to + find the self-signature for an UID. + * parse-packet.c (parse_user_id): Zero out all fields. + * mainproc.c (check_sig_and_print): Print the primary user ID + according the the node flag and then all other non-revoked user IDs. + (is_uid_revoked): Removed; it is now handled by the key selection code. + + Changed the year list of all copyright notices. + +2001-03-07 Werner Koch + + * getkey.c (finish_lookup): Print an info message only in verbose mode. + +2001-03-05 Werner Koch + + * packet.h: Replaced sigsubpkt_t value 101 by PRIV_VERIFY_CACHE. + We have never used the old value, so we can do this without any harm. + * parse-packet.c (dump_sig_subpkt): Ditto. + (parse_one_sig_subpkt): Parse that new sub packet. + * build-packet.c (build_sig_subpkt): Removed the old one from the + hashed area. + (delete_sig_subpkt): New. + (build_sig_subpkt): Allow an update of that new subpkt. + * sig-check.c (check_key_signature2): Add verification caching + (cache_selfsig_result): New. + * export.c (do_export_stream): Delete that sig subpkt before exporting. + * import.c (remove_bad_stuff): New. + (import): Apply that function to all imported data + +2001-03-03 Werner Koch + + * getkey.c: Introduced a new lookup context flag "exact" and used + it in all place where we once used primary. + (classify_user_id2): Replaced the old function and add an extra + argument to return whether an exact keyID has been requested. + (key_byname): Removed the unused ctx.primary flag + (get_seckey_byname2): Ditto. + (finish_lookup): Changed debugging output. + +2001-03-02 Werner Koch + + * keylist.c (list_one): Remove the merge key calls. + +2001-03-01 Werner Koch + + * getkey.c (finish_lookup): Don't use it if we no specific usage + has been requested. + (merge_selfsigs_main): fix UID only if we have an signature. + (lookup): Return UNU_PUBKEY etc. instead of NO_PUBKEY if we found + a key but the requested usage does not allow this key. + * import.c (import_one): Take UNU_PUBKEY into account. + * mainproc.c (list_node): Ditto. + * keylist.c (list_keyblock): Ditto. + * keyedit.c (print_and_check_one_sig): Ditto. + +2001-02-09 Werner Koch + + * delkey.c (delete_key): Removed that silly assert which rendered + the whole new stuff meaningless. + +2001-02-08 Werner Koch + + * getkey.c (key_byname): It can happen that we have both, sk and pk + NULL, fix for that. + + * parse-packet.c (parse_one_sig_subpkt): Add support for + primary_uid and key_flags. + (can_handle_critical): Ditto + + * parse-packet.c (parse_encrypted): Fixed listing of pktlen for + MDC packets. + + * getkey.c: Backported the version of this file from gpg 1.1. this + involved some changes in other files too. + * parse-packet.c (parse_key): Clear req_usage. + * skclist.c (build_sk_list): Use req_usage to pass the usage + information to the lookup function. + * pkclist.c (build_pk_list): Ditto. + * free-packet.c (copy_public_parts_to_secret_key): New. + * keydb.h: Add IS_* macros to check the sig_class. + * misc.c (openpgp_cipher_test_algo): New. + (openpgp_pk_test_algo): New. + (openpgp_pk_algo_usage): New. + (openpgp_md_test_algo): New. + * packet.h: Add a few fields to PKT_{public,secret}_key and + PKT_user_id. + * seckey-cert.c (do_check): Use the new main_keyid field. + +2001-02-04 Werner Koch + + * encr-data.c (decrypt_data): Catch error when we had problems to + parse the encrypted packet. By Timo. + +2001-01-29 Werner Koch + + * g10.c (main): --batch does now set nogreeting. + + * delkey.c (do_delete_key): Fixed delete-both functionality. + +2001-01-22 Werner Koch + + * g10.c: New command --delete-secret-and-public-key. + * delkey.c (delete_key): Add new arg allow_both. + (do_delete_key): Move most stuff from above to this new function. + +2001-01-12 Werner Koch + + * passphrase.c (passphrase_to_dek): Use MD5 when IDEA is installed + and we have no S2K. + * mainproc.c (proc_encrypted): Likewise + +2001-01-11 Werner Koch + + * sig-check.c (do_check): Print the signature key expire message + only in verbose mode and added the keyID. + +2001-01-09 Werner Koch + + * status.c, status.h: New status USERID_HINT. + (write_status_text): Replace LF and CR int text by C-escape sequence. + + * passphrase.c (passphrase_to_dek): Fixed the NEED_PASSPHRASE + output. It does now always print 2 keyIDs. Emit the new + USERID_HINT. + +2001-01-08 Werner Koch + + * g10.c, options.h: New option --no-expensive-trust-checks. + * keylist.c (list_keyblock): Act on this option. + +2001-01-04 Werner Koch + + * g10.c (main): Set homedir only in the pre-parsing phase and + replace backslashes in the W32 version. + +2001-01-03 Werner Koch + + * status.c, status.h : New status KEY_CREATED + * keygen.c (do_generate_keypair,generate_subkeypair): Emit it. + +2000-12-28 Werner Koch + + * signal.c (got_fatal_signal): Remove lockfiles here because the + atexit stuff does not work due to the use of raise. Suggested by + Peter Fales. + * gpgv.c (remove_lockfiles): New stub. + +2000-12-19 Werner Koch + + * status.c, status.h (cpr_get_no_help): New. + * keyedit.c (keyedit_menu): Use it here because we have our own + help list here. + +2000-12-18 Werner Koch + + * mainproc.c (print_failed_pkenc): Don't print the sometimes + confusing message about unavailabe secret key. Renamed ... + (print_pkenc_list): ... to this and introduced failed arg. + (proc_encrypted): Print the failed encryption keys and then + the one to be used. + (proc_pubkey_enc): Store also the key we are going to use. + + * mainproc.c (check_sig_and_print): Don't list revoked user IDs. + (is_uid_revoked): New. + +2000-12-08 Werner Koch + + * pipemode.c: Made the command work. Currently only for + non-armored detached signatures. + * mainproc.c (release_list): Reset the new pipemode vars. + (add_gpg_control): Handle the control packets for pipemode + * status.c, status.h: New stati {BEGIN,END}_STREAM. + +2000-12-07 Werner Koch + + * g10.c: New option --allow-secret-key-import. + * import.c (import_keys,import_keys_stream): Honor this option. + (import): New arg allow_secret and pass that arg down to ... + (import_secret_one): to this and print a warning if secret key + importing is not allowed. + +2000-12-05 Werner Koch + + * cipher.c (cipher_filter): Moved the end_encryption status ... + * encode.c (encode_simple,encode_crypt): to here + * sign.c (sign_file): and here. + + * status.c (mywrite): Removed. + (get_status_string): Removed the LFs from the strings. + (set_status_fd,is_status_enabed,write_status_text, + write_status_buffer): Replaced all mywrite by stdio calls and use + fdopen to create a strem. This is needed to make things smoother + in the W32 version. + +2000-12-04 Werner Koch + + * import.c (merge_blocks): Increment n_sigs for revocations. + +2000-11-30 Werner Koch + + * g10.c (main): Use iobuf_translate_file_handle for all options + with filehandles as arguments. This is function does some magic + for the W32 API. + + * verify.c (verify_signatures): Add a comment rant about the + detached signature problem. + * mainproc.c (proc_tree): Issue an error if a detached signature + is assumed but a standard one was found. + * plaintext.c (hash_datafiles): Don't fall back to read signature + from stdin. + * openfile.c (open_sigfile): Print verbose message only if the + file could be accessed. + +2000-11-24 Werner Koch + + * passphrase.c [HAVE_DOSISH_SYSTEM]: Disabled all the agent stuff. + +2000-11-16 Werner Koch + + * g10.c: New option --use-agent + * passphrase.c (agent_open,agent_close): New. + (agent_get_passphrase,agent_clear_passphrase): New. + (passphrase_clear_cache): New. + (passphrase_to_dek): Use the agent here. + * seckey-cert.c (do_check): Clear cached passphrases. + +2000-11-15 Werner Koch + + * status.c (write_status_text): Moved the big switch to ... + (get_status_string): ... new function. + (write_status_buffer): New. + + * status.c (mywrite): New and replaced all write() by this. + + * status.c, status.h: Add 3 status lcodes for notaions and policy. + * mainproc.c (print_notation_data): Do status output of notations. + 2000-11-13 Werner Koch - * Makefile.am: Do not install any program + * sign.c (clearsign_file): Use LF macro to print linefeed. + +2000-11-11 Paul Eggert + + Clean up the places in the code that incorrectly use "long" or + "unsigned long" for file offsets. The correct type to use is + "off_t". The difference is important on large-file hosts, + where "off_t" is longer than "long". + + * keydb.h (struct keyblock_pos_struct.offset): + Use off_t, not ulong, for file offsets. + * packet.h (dbg_search_packet, dbg_copy_some_packets, + search_packet, copy_some_packets): Likewise. + * parse-packet.c (parse, dbg_search_packet, search_packet, + dbg_copy_some_packets, copy_some_packets): Likewise. + * ringedit.c (keyring_search): Likewise. + + * parse-packet.c (parse): Do not use %lu to report file + offsets in error diagnostics; it's not portable. + * ringedit.c (keyring_search): Likewise. + +2000-11-09 Werner Koch + + * g10.c (main): New option --enable-special-filenames. + +2000-11-07 Werner Koch + + * g10.c (main): New command --pipemode. + * pipemode.c: New. + +2000-10-23 Werner Koch + + * armor.c (armor_filter): Changed output of hdrlines, so that a CR + is emitted for DOS systems. + + * keygen.c (read_parameter_file): Add a cast for isspace(). + + * status.c (myread): Use SIGINT instead of SIGHUP for DOS. + +2000-10-19 Werner Koch + + * g10.c: New option --ignore-crc-error + * armor.c (invalid_crc): New. + (radix64_read): Act on new option. + + * openfile.c (try_make_homedir): Klaus Singvogel fixed a stupid + error introduced on Sep 6th. + +2000-10-18 Werner Koch + + * misc.c (print_cipher_algo_note): Don't print the note for AES. + Changed wording. + +2000-10-16 Werner Koch + + * mainproc.c (do_proc_packets): Hack to fix the problem that + signatures are not detected when there is a MDC packet but no + compression packet. + + * g10.c (print_hashline): New. + (print_mds): Use above func with --with-colons. + + * mainproc.c (check_sig_and_print): Detect multiple signatures + and don't verify them. + +2000-10-14 Werner Koch + + * mainproc.c (add_onepass_sig): There is an easier solution to the + error fixed yesterday; just check that we only have onepass + packets. However, the other solution provides an cleaner + interface and opens the path to get access to other information + from the armore headers. + (release_list): Reset some more variables. + +2000-10-13 Werner Koch + + * mainproc.c (add_gpg_control): New. + (do_proc_packets): use it. + (proc_plaintext): Changed logic to detect clearsigns. + (proc_tree): Check the cleartext sig with some new code. + + * packet.h: New packet PKT_GPG_CONTROL. + * parse-packet.c (parse_gpg_control): New. + * misc.c (get_session_marker): New. + * armor.c (armor_filter): Replaced the faked 1-pass packet by the + new control packet. + + * keyedit.c (keyedit_menu): Allow batchmode with a command_fd. + * status.c (my_read): New. + (do_get_from_fd): use it. 2000-10-12 Werner Koch * keygen.c (keygen_add_std_prefs): Add Rijndael to the prefs. -2000-10-11 Werner Koch +2000-10-07 Werner Koch - * packet.h: Add features sig subpacket definition. - * parse-packet.c (dump_sig_subpkt,parse_one_sig_subpkt, - can_handle_critical): Implemented it here. - * build-packet.c (build_sig_subpkt): and here. - * keygen.c (keygen_add_std_prefs): Generate a features packet. - -2000-10-09 Werner Koch + * gpgv.c: Add more stubs for ununsed code to make the binary smaller. - * keygen.c (do_generate_keypair): Removed the keyblock locking. +Wed Oct 4 15:50:18 CEST 2000 Werner Koch - * ringedit.c (enum_keyblocks): Replaced by ... - (enum_keyblocks_begin): New. - (enum_keyblocks_next): New. - (enum_keyblocks_end): New. And changed all callers. - - * import.c (import_one): Removed keyblock locking becuase this is - now done inside of insert_keyblock(). Removed get_keyblock_handle - because insert_keyblock() now decides what is the default keyring. - (import_secret_one): Ditto. - (import_revoke_cert): Ditto. - (import_one): Ditto. + * sign.c (hash_for): New arg to take packet version in account, changed + call callers. -Fri Oct 6 14:29:16 CEST 2000 Werner Koch + * gpgv.c: New. + * Makefile.am: Rearranged source files so that gpgv can be build with + at least files as possible. - Started to rework the whole getkey/ringedit stuff to make - it simpler, correcter and faster. +Mon Sep 18 12:13:52 CEST 2000 Werner Koch - * parse-packet.c (parse_packet): Add a 3rd arg to return the filepos. - Changed all callers. - * getkey.c (classify_user_id): Add new mode 21. - (find_by_fpr): Find using this new mode. - (get_seckey_byname): New arg to return the context. Changed all - callers. - * keyid.c (unified_fingerprint_from_pk): New. - (unified_fingerprint_from_sk): New. - * ringedit.c (find_keyblock_bypk): Changed to use the unified - fingerprint for lookup. I can't see a reason why we did compare - the entire public key. - (find_keyblock_bysk): Ditto. - (search,cmp_pubkey,cmp_seckey): Removed. - (keyring_search, do_kbxf_search): Removed. - (locate_keyblock_by_fpr,locate_keyblock_by_keyid): Removed. - (find_keyblock_byname): Removed use o search function. - (find_secret_keyblock_byname): Ditto. - (merge_public_with_secret): Fixed removing subkeys. - (premerge_public_with_secret): New. + * hkp.c (not_implemented): Print a notice for W32 - * ringedit.c: Removed all GDBM support +Fri Sep 15 18:40:36 CEST 2000 Werner Koch - * ringedit.c (read_keyblock): Removed. - * ringedit.c (find_keyblock_byname,find_secret_keyblock_byname, - find_keyblock_bypk,find_keyblock_bysk): Moved from here to .... - * getkey.c: ... here. Changed first arg to return a keyblock and - changed all callers to merge the old read_keyblock() with these - functions. + * keygen.c (keygen_add_std_prefs): Changed order of preferences to + twofish, cast5, blowfish. -Wed Oct 4 13:16:18 CEST 2000 Werner Koch + * pkclist.c (algo_available): Removed hack to disable Twofish. - * getkey.c (merge_selfsigs_main): Fixed for v3 keys. +Thu Sep 14 17:45:11 CEST 2000 Werner Koch - * sign.c (hash_for): New arg to take packet version in account. Changed - all callers. - (write_one_sig): New. Moved the shared code from sign_file and - clearsign_file to here. - * skclist.c (build_sk_list): Fixed usage check. - * pkclist.c (build_pk_list): Ditto. + * parse-packet.c (dump_sig_subpkt): Dump key flags. Print special + warning in case of faked ARRs. - * encode.c (encode_crypt): Removed duplicated stuff by using - encrypt_filter as sign.c already did. Removed already disabled - comment-packet code. + * getkey.c (finsih_lookup): Hack so that for v4 RSA keys the subkey + is used for encryption. -Mon Sep 18 16:35:45 CEST 2000 Werner Koch +Thu Sep 14 14:20:38 CEST 2000 Werner Koch - * parse-packet.c (dump_sig_subpkt): Dump key flags. - (parse_one_sig_subpkt,can_handle_critical): Add KeyFlags support. - * build-packet.c (build_sig_subpkt): Ditto. + * g10.c (main): Default S2K algorithms are now SHA1 and CAST5 - this + should solve a lot of compatibility problems with other OpenPGP + apps because those algorithms are SHOULD and not optional. The old + way to force it was by using the --openpgp option whith the drawback + that this would disable a couple of workarounds for PGP. - * g10.c: New option --allow-freeform-uid. By Jeroen C. van Gelderen. - * keygen.c (ask_user_id): Implemented here. + * g10.c (main): Don't set --quite along with --no-tty. By Frank Tobin. + + * misc.c (disable_core_dump): Don't display a warning here but a return + a status value and ... + * g10.c (main): ...print warnining here. Suggested by Sam Roberts. + +Wed Sep 13 18:12:34 CEST 2000 Werner Koch + + * keyedit.c (keyedit_menu): Allow to use "debug" on the secret key. + + * ringedit.c (cmp_seckey): Fix for v4 RSA keys. + * seckey-cert.c (do_check): Workaround for PGP 7 bug. + +Wed Sep 6 17:55:47 CEST 2000 Werner Koch + + * misc.c (print_pubkey_algo_note): Do not print the RSA notice. + * sig-check.c (do_signature_check): Do not emit the RSA status message. + * pubkey-enc.c (get_session_key): Ditto. + + * encode.c (encode_simple, encode_crypt): Fix for large files. + * sign.c (sign_file): Ditto. + +Wed Sep 6 14:59:09 CEST 2000 Werner Koch + + * passphrase.c (hash_passphrase): Removed funny assert. Reported by + David Mathog. + + * openfile.c (try_make_homedir): Changes for non-Posix systems. + * g10.c (main): Take the default homedir from macro. + + * g10.c: The --trusted-key option is back. + * trustdb.c (verify_own_key): Handle this option. + (add_ultimate_key): Moved stuff from verify_own_key to this new func. + (register_trusted_key): New. + +Fri Aug 25 16:05:38 CEST 2000 Werner Koch * parse-packet.c (dump_sig_subpkt): Print info about the ARR. @@ -95,335 +3378,69 @@ Mon Sep 18 16:35:45 CEST 2000 Werner Koch (make_outfile_name): Add ".sign" to the list of know extensions. (open_sigfile): Ditto. - * getkey.c: Large parts rewritten to have a better sub key selection - and handle some meta information from signatures more correctly. - (get_primary_seckey): Removed. - * seckey_cert.c (do_check): Set main keyid from the data in the sk. - * free-packet.c (copy_public_parts_to_secret_key): New. - * sig-check.c (check_key_signature2): Enabled shortcut for already - checked signatures. - * keydb.h: New macros IS_xxx_SIG, IS_xxx_REV. - * misc.c (openpgp_pk_algo_usage): New. - * packet.h: New field req_uage and do not use pubkey_usage anymore - to request a specific usage. Changed at all places. - * keyid.c (keyid_from_sk): Cache the keyid in the sk +Wed Aug 23 19:52:51 CEST 2000 Werner Koch - * passphrase.c (hash_passphrase): Removed funny assert. Reported by - David Mathog. + * g10.c: New option --allow-freeform-uid. By Jeroen C. van Gelderen. + * keygen.c (ask_user_id): Implemented here. - * keyedit.c (keyedit_menu): Allow "debug" on secret keys. - - * keygen.c (keygen_add_std_prefs): Changed order of preferences to - twofish, cast5, blowfish. - - * gpg.c: The --trusted-key option is back. - * trustdb.c (verify_own_key): Handle this option. - (add_ultimate_key): Moved stuff from verify_own_key to this new func. - (register_trusted_key): New. - - * openfile.c (try_make_homedir): Changes for non-Posix systems. - * gpg.c (main): Take the default homedir from macro. - - * encode.c (encode_simple, encode_crypt): Fix for large files. - * sign.c (sign_file): Ditto. - - * gpg.c (main): Don't set --quite along with --no-tty. By Frank Tobin. - - * misc.c (disable_core_dump): Don't display a warning here but a return - a status value and ... - * gpg.c (main): ...print warning here. Suggested by Sam Roberts. - - * misc.c (print_pubkey_algo_note): Do not print the RSA notice. - * sig-check.c (do_signature_check): Do not emit the RSA status message. - * pubkey-enc.c (get_session_key): Ditto. - - * ringedit.c (cmp_seckey): Fix for v4 RSA keys. - * seckey-cert.c (do_check): Workaround for PGP 7 bug. - - * pkclist.c (algo_available): Removed hack to disable Twofish. - - * gpg.c (main): Default S2K algorithms are now SHA1 and CAST5 - this - should solve a lot of compatibility problems with other OpenPGP - apps because those algorithms are SHOULD and not optional. The old - way to force it was by using the --openpgp option whith the drawback - that this would disable a couple of workarounds for PGP. - - * gpg.c: New option --merge-only. Suggested by Brendan O'Dea. - * import.c (import_one): Implemented it here. - (import_secret_one): Ditto. - (print_stats): and give some stats. - - * gpg.c: New option --try-all-secrets on suggestion from - Matthias Urlichs. - * pubkey-enc.c (get_session_key): Quite easy to implement here. - -Mon Aug 21 17:59:17 CEST 2000 Werner Koch - - * gpg.c: New option --use-agent - * passphrase.c (agent_open,agent_close): New. - (agent_get_passphrase,agent_clear_passphrase): New. - (passphrase_to_dek): Use the agent here. - * seckey-cert.c (do_check): Clear wrong cached passphrases. - -Fri Aug 18 14:27:14 CEST 2000 Werner Koch +Fri Aug 4 14:23:05 CEST 2000 Werner Koch * status.c (do_get_from_fd): Ooops, we used fd instead of opt.command_fd. Thanks to Michael Tokarev. -Mon Jul 31 10:04:47 CEST 2000 Werner Koch +Tue Aug 1 20:06:23 CEST 2000 Werner Koch - * encode.c, sign.c, keygen.c, pubkey-enc.c: Replaced all - gcry_sexp_{car,cdr}_{data,mpi} by the new gcry_sexp_nth_{data,mpi} functions. + * g10.c: New opttion --try-all-secrets on suggestion from Matthias Urlichs. + * pubkey-enc.c (get_session_key): Quite easy to implement here. - * keygen.c (gen_dsa,gen_elg): Changed the way the factors are stored. - (factors_from_sexp): Removed. - * comment.c (make_mpi_comment_node): Removed. - (make_comment_node_from_buffer): New. +Thu Jul 27 17:33:04 CEST 2000 Werner Koch -Fri Jul 28 18:19:11 CEST 2000 Werner Koch + * g10.c: New option --merge-only. Suggested by Brendan O'Dea. + * import.c (import_one): Implemented it here + (import_secret_one): Ditto. + (print_stats): and give some stats. - * sig-check.c (pk_verify): Fixed the S-Exp withe the pkey. +Thu Jul 27 12:01:00 CEST 2000 Werner Koch - * gpg.c (main): Use setmode(O_BINARY) for MSDOS while generating random bytes + * g10.c: New options --show-session-key and --override-session-key + * pubkey-enc.c (hextobyte): New. + (get_override_session_key): New. + * mainproc.c (proc_pubkey_enc): Add session-key stuff. + * status.h, status.c (STATUS_SESSION_KEY): New. + +Thu Jul 27 10:02:38 CEST 2000 Werner Koch + + * g10.c (main): Use setmode(O_BINARY) for MSDOS while generating random bytes (print_mds): Likewise for stdin. * plaintext.c (handle_plaintext): Likewise for stdout. -Tue Jul 25 17:44:15 CEST 2000 Werner Koch +Mon Jul 24 10:30:17 CEST 2000 Werner Koch * keyedit.c (menu_expire): expire date for primary key can be set again. +Wed Jul 19 11:26:43 CEST 2000 Werner Koch + * keylist.c (is_uid_valid): New. (list_keyblock): Print validity information for all user IDs. Note, this has to be done at other places too; for now we have only minimal support. - * sign.c (pk_sign): Changed to use the new S-Exp interface. - * encode.c (pk_encrypt): Ditto. - * sig-check.c (pk_verify): Ditto. - * seckey-cert.c (pk_check_secret_key): Ditto. - * pubkey-enc.c (pk_decrypt): Ditto. - * misc.c (pubkey_nbits): Ditto. - * keygen.c (key_from_sexp,factors_from_sexp,gen_elg,gen_dsa): Ditto. +Wed Jul 12 13:32:06 CEST 2000 Werner Koch -Fri Jul 14 19:38:23 CEST 2000 Werner Koch + * helptext.c, pkclist.c: s/superseeded/superseded/ - Replaced everything with the code from the STABLE-BRANCH-1-0 and - started to backport the changes from the 1.1 development branch - which are dated according to the ChangeLog of the 1.1 from - Sat Sep 18 12:16:08 CEST 1999 to Thu May 25 18:39:11 CEST 2000. - Here are those changes, some of them are duplicates because they - have been done on both branch simultaneously. +Mon Jul 10 16:08:57 CEST 2000 Werner Koch - * gpg.c (print_mds): Add arg keys as a kludge to print hmacs - (main): New option --print-hmac. + * parse-packet.c (enum_sig_subpkt): Fixed testing on crtitical bit in case + of a NULL buffer. Reported by Peter Marschall. - * trustdb.c (verify_own_keys): Do not print warning about unprotected - key when in quiet mode. +Wed Jul 5 13:28:45 CEST 2000 Werner Koch - * build-paket.c (do_user_id): Save offset where name has been stored. + * keyedit.c, keyid.c: Add some _() - * ringedit.c : Add new access method KBXF + * argparse.c: Changed the flag to suppress --version handling to also + suppress --help. - * kbxfile.c: New. - - * kbx.h: New. - * kbxblob.c: Started to work on the keybox stuff. - - * keygen.c (gen_dsa): Modified to work with gcry_pk_genkey. - - * Removed dummy-cipher.h from all files. - - * keygen.c (gen_elg): Modified to work with gcry_pk_genkey. - (key_from_sexp): New. - (factors_from_sexp): New. - - * g10.c : Renamed to ... - * gpg.c : ... this - * Makefile.am: And fixed it here. - - * Changed all "g10_"/"GPG_" prefixes to "gpg_"/"GPG_". - - * misc.c (mpi_read_opaque): Fixed double counting. - - * seckey-cert.c (do_check): Removed buffer and the unmotivated free - on it. - - * pubkey-enc.c (pk_decrypt): New wrapper for the gcry_ function. - * seckey-cert.c (pk_check_secret_key): Likewise. - * encode.c (pk_encrypt): Likewise. - - * parse-packet.c (parse_key): Fixed case of unencrypted secret keys. - - * misc.c (mpi_print): Use gcry_mpi_aprint. - (pubkey_nbits): Kludge to use the gcry_pk_ API. - - * seskey.c (encode_session_key): Replaced mpi_set_buffer by *_scan. - (do_encode_md): Ditto. - (encode_md_value): Ditto. - * seckey-cert.c (protect_secret_key): Ditto. - * comment.c (make_mpi_comment_node): Replaced mpi_get_buffer by _print. - * pubkey-enc.c (get_it): Ditto. - * sig-check.c (do_signature_check): Ditto. - - * keyid.c (do_fingerprint_md): Replaced mpi_get_buffer by gcry_mpi_print. - (v3_keyid): New. - (keyid_from_sk): And use it here. - (keyid_from_pk): Ditto. - (fingerprint_from_sk): Ditto. - (fingerprint_from_pk): Ditto. - - * misc.c (mpi_print): New. - - * misc.c (checksum_mpi): Now uses gcry_mpi_print to get the data. - - * seckey-cert.c (do_check): Replaced mpi_read_from_buffer. - - * armor.c (armor_filter): Made the "Comment:" header translatable. - - * seckey-cert.c: Removed obsolete mpi_*_protect_flag. - * parse-packet.c: Ditto. - - * misc.c (mpi_read): Removed the secure argumet becuase it is - never used. Changed all Callers. - (mpi_read_opaque): New. - (mpi_write_opaque): New. - * parse-packet.c (parse_key): Use the opaque method also for - v3 keys. - * build-packet.c (do_secret_key): Likewise. - - * g10.c (main): Check libgcrypt version. - - * packet.h: replaced inclusion of mpi.h by a plain typeedef of the - gcry_mpi structure and removed all inclusions of "mpi.h" in all - sources. - - * g10.c: Add --delete-secret-key to the help page. - - * g10.c (main): Changed the default homedir to "~/.gnupg-test" so - that we don't mess up with the stable version. - - * misc.c (mpi_write): New. - (mpi_write): New. - - * misc.c (checksum_u16_nobug): Removed. - (checksum_mpi_counted_nbits): Renamed to ... - (checksum_mpi): ... this to superseed the old one. Changed all - callers. This is because we do not emulate the old gpg bug anymore. - * g10.c (oEmuChecksumBug): Removed. - - * g10.c (register_extension): New... - (main): Use it here instead of register_cipher_extesnion. - (strusage): s/strusage/my_strusage/ . Made static. - (main): Use set_strusage(). - - * tdbdump.c (HEXTOBIN): Changed the name of the argument, so that - traditional cpp don't mess up the macros. Suggested by Jos Backus. - - * armor.c (parse_header_line): Stop parsing on a only WS line too. - Suggested by Aric Cyr. - - * misc.c (pull_in_libs): Removed. - - * mainproc.c (list_node): Print the PK algo in the --with-colon mode. - * keylist.c (list_keyblock): Ditto. - - * misc.c (pull_in_libs): Removed pull in of g10c. - - * misc.c (map_gcry_rc): Removed here and chnaged all users. - - * getkey.c: Replaced check_pubkey_algo by openpgp_pk_test_algo. - * import.c (delete_inv_parts): Ditto. - * pkclist.c: Ditto. - * skclist.c: Ditto. - * pubkey-enc.c: Ditto. - - * g10.c (main): Replaced the function to diable PK algos. - - * g10.c (main): Replaced get_random_bits by gcry_random_bytes. - * seskey.c (encode_session_key): Likewise. - (make_session_key): Renamed randomize_buffer to gcry_randomize - and use the GCRY_xxx_RANDOM constants. - * cipher.c (write_header): Ditto. - * passphrase.c (hash_passphrase): Ditto. - * seckey-cert.c (protect_secret_key): Ditto. - - * getkey.c (find_by_name): Replaced rmd160_hash_buffer - by gcry_md_hash_buffer. - * keyedit.c (show_prefs): Ditto. - * keylist.c (list_keyblock): Ditto. - * trustdb.c (print_uid_from_keyblock): Ditto. - (make_uid_records): Ditto. - - * skclist.c (build_sk_list): Removed the test on faked RNGs. - (is_insecure): Removed. - * g10.c (--quick-random): Removed this option. - - * Replaced all PUBKEY_ALGO_xxx by GCRY_PK_xxxx. - - * misc.c (pubkey_algo_npkey): New as a wrapper around the gcry fucntion. - (pubkey_algo_nskey): Ditto. - (pubkey_algo_nsig): Ditto. - (pubkey_algo_nenc): Ditto. - - * Makefile.am (basicdefs.h): Added. - (install-data-local): Removed the handling for historic gpgm. - - * misc.c (openpgp_cipher_test_algo): New. - (openpgp_pk_test_algo): New. - (openpgp_md_test_algo): New. - - * g10.c (build_list): Changed to use the new functions from libgcrypt. - - * ringedit.c (enum_keyblocks): Set .rt to 0 on open. - - * encode.c (encode_simple): Use new CTB when we don't have the - length of the file. This is somewhat strange as the comment above - indicates that this part is actually fixed for PGP 5 - maybe I simply - lost the source line, tsss. - - * sign.c (clearsign_file): Avoid duplicated Entries in the "Hash:" - line. Those headers are now only _not_ printed when there are - only old-style keys _and_ all hashs are MD5. - - (clearsign_file): Use gcry_md_test_algo() and gcry_md_algo_name(). - - * openfile.c (make_outfile_name): Use case-insenstive compare for - DOS systems. Add ".pgp" to the list of know extensions. - (open_outfile): For DOS systems try to replace the suffix instead of - appending it. - - * encr-data.c (decrypt_data): Reset error on a weak key. - - * cipher.c: Replaced the cipher and digest functions by the gcry_ ones. - * seckey-cert.c: Ditto. - * seskey.c: Ditto. - * g10.c (print_mds): Replaced digst functions with the new gcry_ ones. - * keyid.c: Ditto. - * mainproc.c: Ditto. - * passphrase.c: Ditto. - * sig-check.c: Ditto. - * sign.c: Ditto. - - * pkclist.c (do_edit_ownertrust): Made the answer string const. - - * basicdefs.h: New. Move some defs and decl to this header. - - * openfile.c (open_outfile): Fixed the 8dot3 handling. - - * passphrase.c (passphrase_to_dek): Print uid using utf8 func. - * delkey.c (delete_key): Ditto. - * pkclist.c (show_paths,do_edit_ownertrust,do_we_trust): Ditto - (do_we_trust_pre): Ditto. - * trustdb.c (print_user_id,check_uidsigs): Ditto. - * revoke.c (gen_revoke,ask_revoke_sig): Ditto. - - * filter.h: Changed cipher handle types to the the GCRY_xxx ones. - replaces include cipher by system header include gcrypt.h. - * cipher.c: replaced the cipher functions by the gcry_ ones. - Ditto for the md functions. - - * misc.c (map_gcry_rc): New. - -Wed Jun 28 11:54:44 CEST 2000 Werner Koch +Wed Jun 28 11:54:44 CEST 2000 Werner Koch * armor.c (armor_filter): Set sigclass to 0 in case of non-dash-escaped clearsig. This makes this mode work again. @@ -461,7 +3478,7 @@ Fri Jun 9 10:09:52 CEST 2000 Werner Koch Wed Jun 7 19:19:09 CEST 2000 Werner Koch - * sig-check.c (do_check): Use EMULATE_MDENCODE also on v4 paclets. + * sig-check.c (do_check): Use EMULATE_MDENCODE also on v4 packets. Wed Jun 7 17:25:38 CEST 2000 Werner Koch @@ -3280,3 +6297,13 @@ Thu Feb 12 22:24:42 1998 Werner Koch (wk@frodo) * pubkey-enc.c (get_session_key): rewritten + + Copyright 1998,1999,2000,2001,2002 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. diff --git a/g10/Makefile.am b/g10/Makefile.am index 3e724512b..f59cd8b2d 100644 --- a/g10/Makefile.am +++ b/g10/Makefile.am @@ -1,84 +1,104 @@ +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# +# This file is part of GnuPG. +# +# GnuPG is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GnuPG is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + ## Process this file with automake to produce Makefile.in -INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl -EXTRA_DIST = OPTIONS pubring.asc options.skel -OMIT_DEPENDENCIES = zlib.h zconf.h -LDFLAGS = @LDFLAGS@ $(LIBGCRYPT_LIBS) -# we need to add libutil.la a second time because we have to resolve -# gpg_log_ in some libjnlib modules. - very ugly - should be removed soon. -needed_libs = ../util/libutil.a \ - ../jnlib/libjnlib.a ../util/libutil.a +INCLUDES = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl +EXTRA_DIST = options.skel +# it seems that we can't use this with automake 1.5 +#OMIT_DEPENDENCIES = zlib.h zconf.h +LDFLAGS = @LDFLAGS@ @DYNLINK_LDFLAGS@ +needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a #noinst_PROGRAMS = gpgd -#bin_PROGRAMS = gpg kbxutil -noinst_PROGRAMS = gpg kbxutil +bin_PROGRAMS = gpg gpgv common_source = \ + global.h \ build-packet.c \ compress.c \ - basicdefs.h \ filter.h \ free-packet.c \ getkey.c \ - keydb.h \ - delkey.c \ - pkclist.c \ - skclist.c \ - ringedit.c \ + keydb.c keydb.h \ + keyring.c keyring.h \ + seskey.c \ kbnode.c \ - kbx.h \ - kbxblob.c \ - kbxio.c \ - kbxfile.c \ main.h \ mainproc.c \ armor.c \ mdfilter.c \ textfilter.c \ - cipher.c \ misc.c \ options.h \ openfile.c \ keyid.c \ + packet.h \ + parse-packet.c \ + comment.c \ + status.c \ + status.h \ + plaintext.c \ + sig-check.c \ + keylist.c \ + signal.c + +gpg_SOURCES = g10.c \ + $(common_source) \ + pkclist.c \ + skclist.c \ + pubkey-enc.c \ + passphrase.c \ + seckey-cert.c \ + encr-data.c \ + cipher.c \ + encode.c \ + sign.c \ + verify.c \ + revoke.c \ + decrypt.c \ + keyedit.c \ + dearmor.c \ + import.c \ + export.c \ + hkp.h \ + hkp.c \ trustdb.c \ trustdb.h \ tdbdump.c \ tdbio.c \ tdbio.h \ - hkp.h \ - hkp.c \ - packet.h \ - parse-packet.c \ - passphrase.c \ - pubkey-enc.c \ - seckey-cert.c \ - seskey.c \ - import.c \ - export.c \ - comment.c \ - status.c \ - status.h \ - sign.c \ - plaintext.c \ - encr-data.c \ - encode.c \ - revoke.c \ - keylist.c \ - sig-check.c \ - signal.c \ - helptext.c + delkey.c \ + keygen.c \ + pipemode.c \ + helptext.c \ + keyserver.c \ + keyserver-internal.h \ + photoid.c photoid.h \ + exec.c exec.h + + + +gpgv_SOURCES = gpgv.c \ + $(common_source) \ + verify.c -gpg_SOURCES = gpg.c \ - $(common_source) \ - verify.c \ - decrypt.c \ - keyedit.c \ - dearmor.c \ - keygen.c -# fixme: remove unused sources from kbxutil -kbxutil_SOURCES = kbxutil.c \ - $(common_source) #gpgd_SOURCES = gpgd.c \ @@ -88,15 +108,18 @@ kbxutil_SOURCES = kbxutil.c \ # ks-db.h \ # $(common_source) - -LDADD = $(needed_libs) @ZLIBS@ @INTLLIBS@ - +LDADD = $(needed_libs) @ZLIBS@ @INTLLIBS@ +# gpg gets LIBOBJS to add in mkdtemp if the platform doesn't have it +gpg_LDADD = @LIBOBJS@ $(LDADD) @NETLIBS@ $(PROGRAMS): $(needed_libs) - install-data-local: $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) $(INSTALL_DATA) $(srcdir)/options.skel \ $(DESTDIR)$(pkgdatadir)/options.skel - + @set -e;\ + if test -f $(DESTDIR)$(bindir)/gpgm ; then \ + echo "removing obsolete gpgm binary" ; \ + rm $(DESTDIR)$(bindir)/gpgm ; \ + fi diff --git a/g10/armor.c b/g10/armor.c index 819c951dc..9c7858fe6 100644 --- a/g10/armor.c +++ b/g10/armor.c @@ -1,5 +1,5 @@ /* armor.c - Armor flter - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -28,7 +28,7 @@ #include "errors.h" #include "iobuf.h" -#include +#include "memory.h" #include "util.h" #include "filter.h" #include "packet.h" @@ -151,8 +151,9 @@ initialize(void) } /**************** - * Check whether this is an armored file or not - * See also parse-packet.c for details on this code + * Check whether this is an armored file or not See also + * parse-packet.c for details on this code For unknown historic + * reasons we use a string here but only the first byte will be used. * Returns: True if it seems to be armored */ static int @@ -195,6 +196,7 @@ use_armor_filter( IOBUF a ) byte buf[1]; int n; + /* fixme: there might be a problem with iobuf_peek */ n = iobuf_peek(a, buf, 1 ); if( n == -1 ) return 0; /* EOF, doesn't matter whether armored or not */ @@ -210,7 +212,7 @@ static void invalid_armor(void) { write_status(STATUS_BADARMOR); - gpg_exit(1); /* stop here */ + g10_exit(1); /* stop here */ } @@ -245,7 +247,9 @@ parse_hash_header( const char *line ) found |= 2; else if( !strncmp( s, "MD5", s2-s ) ) found |= 4; - else if( !strncmp( s, "TIGER", s2-s ) ) + else if( !strncmp( s, "TIGER192", s2-s ) ) + found |= 8; + else if( !strncmp( s, "TIGER", s2-s ) ) /* used by old versions */ found |= 8; else return 0; @@ -283,6 +287,14 @@ is_armor_header( byte *line, unsigned len ) return -1; save_p = p; p += 5; + + /* Some mail programs on Windows seem to add spaces to the end of + the line. This becomes strict if --openpgp is set. */ + + if(!opt.rfc2440) + while(*p==' ') + p++; + if( *p == '\r' ) p++; if( *p == '\n' ) @@ -312,19 +324,19 @@ is_armor_header( byte *line, unsigned len ) * >0: Good header line */ static int -parse_header_line( armor_filter_context_t *afx, byte *line, unsigned len ) +parse_header_line( armor_filter_context_t *afx, byte *line, unsigned int len ) { byte *p; int hashes=0; + unsigned int len2; - /* fixme: why this double check? I think the original code w/o the - * second check for an empty line was done from an early draft of - * of OpenPGP - or simply very stupid code */ - if( *line == '\n' || ( len && (*line == '\r' && line[1]=='\n') ) ) - return 0; /* empty line */ - len = trim_trailing_ws( line, len ); - if( !len ) - return 0; /* WS only same as empty line */ + len2 = check_trailing_ws( line, len ); + if( !len2 ) { + afx->buffer_pos = len2; /* (it is not the fine way to do it here) */ + return 0; /* WS only: same as empty line */ + } + len = len2; + line[len2] = 0; p = strchr( line, ':'); if( !p || !p[1] ) { @@ -399,7 +411,7 @@ check_input( armor_filter_context_t *afx, IOBUF a ) if( hdr_line == BEGIN_SIGNED_MSG_IDX ) { if( afx->in_cleartext ) { log_error(_("nested clear text signatures\n")); - rc = GPGERR_INVALID_ARMOR; + rc = G10ERR_INVALID_ARMOR; } afx->in_cleartext = 1; } @@ -429,7 +441,7 @@ check_input( armor_filter_context_t *afx, IOBUF a ) i = parse_header_line( afx, line, len ); if( i <= 0 ) { if( i ) - rc = GPGERR_INVALID_ARMOR; + rc = G10ERR_INVALID_ARMOR; break; } } @@ -502,7 +514,7 @@ fake_packet( armor_filter_context_t *afx, IOBUF a, /* the buffer is always allocated with enough space to append * the removed [CR], LF and a Nul * The reason for this complicated procedure is to keep at least - * the original tupe of lineending - handling of the removed + * the original type of lineending - handling of the removed * trailing spaces seems to be impossible in our method * of faking a packet; either we have to use a temporary file * or calculate the hash here in this module and somehow find @@ -590,6 +602,15 @@ fake_packet( armor_filter_context_t *afx, IOBUF a, } +static int +invalid_crc(void) +{ + if ( opt.ignore_crc_error ) + return 0; + log_inc_errorcount(); + return G10ERR_INVALID_ARMOR; +} + static int radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn, @@ -636,9 +657,9 @@ radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn, if( isxdigit(cc1) && isxdigit(cc2) && strchr( "=\n\r\t ", cc3 )) { /* well it seems to be the case - adjust */ - c = isdigit(cc1)? (cc1 - '0'): (toupper(cc1)-'A'+10); + c = isdigit(cc1)? (cc1 - '0'): (ascii_toupper(cc1)-'A'+10); c <<= 4; - c |= isdigit(cc2)? (cc2 - '0'): (toupper(cc2)-'A'+10); + c |= isdigit(cc2)? (cc2 - '0'): (ascii_toupper(cc2)-'A'+10); afx->buffer_pos += 2; afx->qp_detected = 1; goto again; @@ -728,20 +749,23 @@ radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn, break; /* eof */ } while( ++idx < 4 ); if( c == -1 ) { - log_error(_("premature eof (in CRC)\n")); - rc = GPGERR_INVALID_ARMOR; - } + log_info(_("premature eof (in CRC)\n")); + rc = invalid_crc(); + } else if( idx != 4 ) { - log_error(_("malformed CRC\n")); - rc = GPGERR_INVALID_ARMOR; + log_info(_("malformed CRC\n")); + rc = invalid_crc(); } else if( mycrc != afx->crc ) { - log_error(_("CRC error; %06lx - %06lx\n"), + log_info (_("CRC error; %06lx - %06lx\n"), (ulong)afx->crc, (ulong)mycrc); - rc = GPGERR_INVALID_ARMOR; + rc = invalid_crc(); } else { rc = 0; + /* FIXME: Here we should emit another control packet, + * so that we know in mainproc that we are processing + * a clearsign message */ #if 0 for(rc=0;!rc;) { rc = 0 /*check_trailer( &fhdr, c )*/; @@ -754,11 +778,11 @@ radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn, rc = 0; else if( rc == 2 ) { log_error(_("premature eof (in Trailer)\n")); - rc = GPGERR_INVALID_ARMOR; + rc = G10ERR_INVALID_ARMOR; } else { log_error(_("error in trailer line\n")); - rc = GPGERR_INVALID_ARMOR; + rc = G10ERR_INVALID_ARMOR; } #endif } @@ -815,7 +839,9 @@ armor_filter( void *opaque, int control, *ret_len = n; } else if( control == IOBUFCTRL_UNDERFLOW ) { - if( size < 15+(4*15) ) /* need space for up to 4 onepass_sigs */ + /* We need some space for the faked packet. The minmum required + * size is ~18 + length of the session marker */ + if( size < 50 ) BUG(); /* supplied buffer too short */ if( afx->faked ) @@ -831,7 +857,14 @@ armor_filter( void *opaque, int control, rc = -1; } else if( afx->faked ) { - unsigned hashes = afx->hashes; + unsigned int hashes = afx->hashes; + const byte *sesmark; + size_t sesmarklen; + + sesmark = get_session_marker( &sesmarklen ); + if ( sesmarklen > 20 ) + BUG(); + /* the buffer is at least 15+n*15 bytes long, so it * is easy to construct the packets */ @@ -842,36 +875,21 @@ armor_filter( void *opaque, int control, afx->pgp2mode = 1; } n=0; - do { - /* first some onepass signature packets */ - buf[n++] = 0x90; /* old format, type 4, 1 length byte */ - buf[n++] = 13; /* length */ - buf[n++] = 3; /* version */ - buf[n++] = afx->not_dash_escaped? 0:1; /* sigclass */ - if( hashes & 1 ) { - hashes &= ~1; - buf[n++] = GCRY_MD_RMD160; - } - else if( hashes & 2 ) { - hashes &= ~2; - buf[n++] = GCRY_MD_SHA1; - } - else if( hashes & 4 ) { - hashes &= ~4; - buf[n++] = GCRY_MD_MD5; - } - else if( hashes & 8 ) { - hashes &= ~8; - buf[n++] = GCRY_MD_TIGER; - } - else - buf[n++] = 0; /* (don't know) */ - - buf[n++] = 0; /* public key algo (don't know) */ - memset(buf+n, 0, 8); /* don't know the keyid */ - n += 8; - buf[n++] = !hashes; /* last one */ - } while( hashes ); + /* first a gpg control packet */ + buf[n++] = 0xff; /* new format, type 63, 1 length byte */ + n++; /* see below */ + memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen; + buf[n++] = CTRLPKT_CLEARSIGN_START; + buf[n++] = afx->not_dash_escaped? 0:1; /* sigclass */ + if( hashes & 1 ) + buf[n++] = DIGEST_ALGO_RMD160; + if( hashes & 2 ) + buf[n++] = DIGEST_ALGO_SHA1; + if( hashes & 4 ) + buf[n++] = DIGEST_ALGO_MD5; + if( hashes & 8 ) + buf[n++] = DIGEST_ALGO_TIGER; + buf[1] = n - 2; /* followed by a plaintext packet */ buf[n++] = 0xaf; /* old packet format, type 11, var length */ @@ -908,9 +926,8 @@ armor_filter( void *opaque, int control, PRINTABLE_OS_NAME ")" LF ); /* write the comment string or a default one */ - s = opt.comment_string ? opt.comment_string - : _("For info see http://www.gnupg.org"); - if( *s ) { + s = opt.comment_string; + if( s && *s ) { iobuf_writestr(a, "Comment: " ); for( ; *s; s++ ) { if( *s == '\n' ) @@ -925,8 +942,15 @@ armor_filter( void *opaque, int control, iobuf_writestr(a, LF ); } - if( afx->hdrlines ) - iobuf_writestr(a, afx->hdrlines); + if ( afx->hdrlines ) { + for ( s = afx->hdrlines; *s; s++ ) { + #ifdef HAVE_DOSISH_SYSTEM + if ( *s == '\n' ) + iobuf_put( a, '\r'); + #endif + iobuf_put(a, *s ); + } + } iobuf_writestr(a, LF ); afx->status++; afx->idx = 0; @@ -1041,7 +1065,7 @@ armor_filter( void *opaque, int control, if( afx->qp_detected ) log_error(_("quoted printable character in armor - " "probably a buggy MTA has been used\n") ); - gcry_free( afx->buffer ); + m_free( afx->buffer ); afx->buffer = NULL; } else if( control == IOBUFCTRL_DESC ) @@ -1058,7 +1082,7 @@ make_radix64_string( const byte *data, size_t len ) { char *buffer, *p; - buffer = p = gcry_xmalloc( (len+2)/3*4 + 1 ); + buffer = p = m_alloc( (len+2)/3*4 + 1 ); for( ; len >= 3 ; len -= 3, data += 3 ) { *p++ = bintoasc[(data[0] >> 2) & 077]; *p++ = bintoasc[(((data[0] <<4)&060)|((data[1] >> 4)&017))&077]; @@ -1078,3 +1102,221 @@ make_radix64_string( const byte *data, size_t len ) return buffer; } + +/*********************************************** + * For the pipemode command we can't use the armor filter for various + * reasons, so we use this new unarmor_pump stuff to remove the armor + */ + +enum unarmor_state_e { + STA_init = 0, + STA_bypass, + STA_wait_newline, + STA_wait_dash, + STA_first_dash, + STA_compare_header, + STA_found_header_wait_newline, + STA_skip_header_lines, + STA_skip_header_lines_non_ws, + STA_read_data, + STA_wait_crc, + STA_read_crc, + STA_ready +}; + +struct unarmor_pump_s { + enum unarmor_state_e state; + byte val; + int checkcrc; + int pos; /* counts from 0..3 */ + u32 crc; + u32 mycrc; /* the one store in the data */ +}; + + + +UnarmorPump +unarmor_pump_new (void) +{ + UnarmorPump x; + + if( !is_initialized ) + initialize(); + x = m_alloc_clear (sizeof *x); + return x; +} + +void +unarmor_pump_release (UnarmorPump x) +{ + m_free (x); +} + +/* + * Get the next character from the ascii armor taken from the IOBUF + * created earlier by unarmor_pump_new(). + * Return: c = Character + * 256 = ignore this value + * -1 = End of current armor + * -2 = Premature EOF (not used) + * -3 = Invalid armor + */ +int +unarmor_pump (UnarmorPump x, int c) +{ + int rval = 256; /* default is to ignore the return value */ + + switch (x->state) { + case STA_init: + { + byte tmp[1]; + tmp[0] = c; + if ( is_armored (tmp) ) + x->state = c == '-'? STA_first_dash : STA_wait_newline; + else { + x->state = STA_bypass; + return c; + } + } + break; + case STA_bypass: + return c; /* return here to avoid crc calculation */ + case STA_wait_newline: + if (c == '\n') + x->state = STA_wait_dash; + break; + case STA_wait_dash: + x->state = c == '-'? STA_first_dash : STA_wait_newline; + break; + case STA_first_dash: /* just need for initalization */ + x->pos = 0; + x->state = STA_compare_header; + case STA_compare_header: + if ( "-----BEGIN PGP SIGNATURE-----"[++x->pos] == c ) { + if ( x->pos == 28 ) + x->state = STA_found_header_wait_newline; + } + else + x->state = c == '\n'? STA_wait_dash : STA_wait_newline; + break; + case STA_found_header_wait_newline: + /* to make CR,LF issues easier we simply allow for white space + behind the 5 dashes */ + if ( c == '\n' ) + x->state = STA_skip_header_lines; + else if ( c != '\r' && c != ' ' && c != '\t' ) + x->state = STA_wait_dash; /* garbage after the header line */ + break; + case STA_skip_header_lines: + /* i.e. wait for one empty line */ + if ( c == '\n' ) { + x->state = STA_read_data; + x->crc = CRCINIT; + x->val = 0; + x->pos = 0; + } + else if ( c != '\r' && c != ' ' && c != '\t' ) + x->state = STA_skip_header_lines_non_ws; + break; + case STA_skip_header_lines_non_ws: + /* like above but we already encountered non white space */ + if ( c == '\n' ) + x->state = STA_skip_header_lines; + break; + case STA_read_data: + /* fixme: we don't check for the trailing dash lines but rely + * on the armor stop characters */ + if( c == '\n' || c == ' ' || c == '\r' || c == '\t' ) + break; /* skip all kind of white space */ + + if( c == '=' ) { /* pad character: stop */ + if( x->pos == 1 ) /* in this case val has some value */ + rval = x->val; + x->state = STA_wait_crc; + break; + } + + { + int c2; + if( (c = asctobin[(c2=c)]) == 255 ) { + log_error(_("invalid radix64 character %02x skipped\n"), c2); + break; + } + } + + switch(x->pos) { + case 0: + x->val = c << 2; + break; + case 1: + x->val |= (c>>4)&3; + rval = x->val; + x->val = (c<<4)&0xf0; + break; + case 2: + x->val |= (c>>2)&15; + rval = x->val; + x->val = (c<<6)&0xc0; + break; + case 3: + x->val |= c&0x3f; + rval = x->val; + break; + } + x->pos = (x->pos+1) % 4; + break; + case STA_wait_crc: + if( c == '\n' || c == ' ' || c == '\r' || c == '\t' || c == '=' ) + break; /* skip ws and pad characters */ + /* assume that we are at the next line */ + x->state = STA_read_crc; + x->pos = 0; + x->mycrc = 0; + case STA_read_crc: + if( (c = asctobin[c]) == 255 ) { + rval = -1; /* ready */ + if( x->crc != x->mycrc ) { + log_info (_("CRC error; %06lx - %06lx\n"), + (ulong)x->crc, (ulong)x->mycrc); + if ( invalid_crc() ) + rval = -3; + } + x->state = STA_ready; /* not sure whether this is correct */ + break; + } + + switch(x->pos) { + case 0: + x->val = c << 2; + break; + case 1: + x->val |= (c>>4)&3; + x->mycrc |= x->val << 16; + x->val = (c<<4)&0xf0; + break; + case 2: + x->val |= (c>>2)&15; + x->mycrc |= x->val << 8; + x->val = (c<<6)&0xc0; + break; + case 3: + x->val |= c&0x3f; + x->mycrc |= x->val; + break; + } + x->pos = (x->pos+1) % 4; + break; + case STA_ready: + rval = -1; + break; + } + + if ( !(rval & ~255) ) { /* compute the CRC */ + x->crc = (x->crc << 8) ^ crc_table[((x->crc >> 16)&0xff) ^ rval]; + x->crc &= 0x00ffffff; + } + + return rval; +} + + diff --git a/g10/build-packet.c b/g10/build-packet.c index 93381879c..e24ac3b2a 100644 --- a/g10/build-packet.c +++ b/g10/build-packet.c @@ -1,5 +1,5 @@ /* build-packet.c - assemble packets and write them - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,13 +24,14 @@ #include #include -#include #include "packet.h" #include "errors.h" #include "iobuf.h" +#include "mpi.h" #include "util.h" +#include "cipher.h" +#include "memory.h" #include "options.h" -#include "main.h" static int do_comment( IOBUF out, int ctb, PKT_comment *rem ); @@ -80,8 +81,8 @@ build_packet( IOBUF out, PACKET *pkt ) case PKT_ENCRYPTED_MDC: new_ctb = pkt->pkt.encrypted->new_ctb; break; case PKT_COMPRESSED:new_ctb = pkt->pkt.compressed->new_ctb; break; case PKT_USER_ID: - if( pkt->pkt.user_id->photo ) - pkttype = PKT_PHOTO_ID; + if( pkt->pkt.user_id->attrib_data ) + pkttype = PKT_ATTRIBUTE; break; default: break; } @@ -91,7 +92,7 @@ build_packet( IOBUF out, PACKET *pkt ) else ctb = 0x80 | ((pkttype & 15)<<2); switch( pkttype ) { - case PKT_PHOTO_ID: + case PKT_ATTRIBUTE: case PKT_USER_ID: rc = do_user_id( out, ctb, pkt->pkt.user_id ); break; @@ -134,7 +135,7 @@ build_packet( IOBUF out, PACKET *pkt ) rc = do_onepass_sig( out, ctb, pkt->pkt.onepass_sig ); break; case PKT_RING_TRUST: - break; /* ignore it */ + break; /* ignore it (keyring.c does write it directly)*/ default: log_bug("invalid packet type in build_packet()\n"); break; @@ -158,7 +159,7 @@ calc_packet_length( PACKET *pkt ) n = calc_plaintext( pkt->pkt.plaintext ); new_ctb = pkt->pkt.plaintext->new_ctb; break; - case PKT_PHOTO_ID: + case PKT_ATTRIBUTE: case PKT_USER_ID: case PKT_COMMENT: case PKT_PUBLIC_KEY: @@ -195,10 +196,10 @@ write_fake_data( IOBUF out, MPI a ) static int do_comment( IOBUF out, int ctb, PKT_comment *rem ) { - if( !opt.no_comment ) { + if( opt.sk_comments ) { write_header(out, ctb, rem->len); if( iobuf_write( out, rem->data, rem->len ) ) - return GPGERR_WRITE_FILE; + return G10ERR_WRITE_FILE; } return 0; } @@ -206,19 +207,15 @@ do_comment( IOBUF out, int ctb, PKT_comment *rem ) static int do_user_id( IOBUF out, int ctb, PKT_user_id *uid ) { - if( uid->photo ) { - write_header(out, ctb, uid->photolen); - uid->stored_at = iobuf_get_temp_length ( out ); /* what a hack ... */ - /* ... and it does only work when used with a temp iobuf */ - if( iobuf_write( out, uid->photo, uid->photolen ) ) - return GPGERR_WRITE_FILE; + if( uid->attrib_data ) { + write_header(out, ctb, uid->attrib_len); + if( iobuf_write( out, uid->attrib_data, uid->attrib_len ) ) + return G10ERR_WRITE_FILE; } else { write_header(out, ctb, uid->len); - uid->stored_at = iobuf_get_temp_length ( out ); /* what a hack ... */ - /* ... and it does only work when used with a temp iobuf */ if( iobuf_write( out, uid->name, uid->len ) ) - return GPGERR_WRITE_FILE; + return G10ERR_WRITE_FILE; } return 0; } @@ -252,7 +249,7 @@ do_public_key( IOBUF out, int ctb, PKT_public_key *pk ) write_header2(out, ctb, iobuf_get_temp_length(a), pk->hdrbytes, 1 ); if( iobuf_write_temp( out, a ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; @@ -263,7 +260,7 @@ do_public_key( IOBUF out, int ctb, PKT_public_key *pk ) * Make a hash value from the public key certificate */ void -hash_public_key( GCRY_MD_HD md, PKT_public_key *pk ) +hash_public_key( MD_HANDLE md, PKT_public_key *pk ) { PACKET pkt; int rc = 0; @@ -283,7 +280,7 @@ hash_public_key( GCRY_MD_HD md, PKT_public_key *pk ) pkt.pkttype = PKT_PUBLIC_KEY; pkt.pkt.public_key = pk; if( (rc = build_packet( a, &pkt )) ) - log_fatal("build public_key for hashing failed: %s\n", gpg_errstr(rc)); + log_fatal("build public_key for hashing failed: %s\n", g10_errstr(rc)); if( !(pk->version == 3 && pk->pubkey_algo == 16) ) { /* skip the constructed header but don't do this for our very old @@ -314,10 +311,10 @@ hash_public_key( GCRY_MD_HD md, PKT_public_key *pk ) } } /* hash a header */ - gcry_md_putc( md, 0x99 ); + md_putc( md, 0x99 ); pktlen &= 0xffff; /* can't handle longer packets */ - gcry_md_putc( md, pktlen >> 8 ); - gcry_md_putc( md, pktlen & 0xff ); + md_putc( md, pktlen >> 8 ); + md_putc( md, pktlen & 0xff ); } /* hash the packet body */ while( (c=iobuf_get(a)) != -1 ) { @@ -328,7 +325,7 @@ hash_public_key( GCRY_MD_HD md, PKT_public_key *pk ) i=0; } #endif - gcry_md_putc( md, c ); + md_putc( md, c ); } #if 0 putc('\n', fp); @@ -343,43 +340,64 @@ do_secret_key( IOBUF out, int ctb, PKT_secret_key *sk ) { int rc = 0; int i, nskey, npkey; - IOBUF a = iobuf_temp(); + IOBUF a = iobuf_temp(); /* build in a self-enlarging buffer */ + /* Write the version number - if none is specified, use 3 */ if( !sk->version ) iobuf_put( a, 3 ); else iobuf_put( a, sk->version ); write_32(a, sk->timestamp ); + + /* v3 needs the expiration time */ if( sk->version < 4 ) { u16 ndays; if( sk->expiredate ) ndays = (u16)((sk->expiredate - sk->timestamp) / 86400L); else ndays = 0; - write_16(a, 0 ); + write_16(a, ndays); } + iobuf_put(a, sk->pubkey_algo ); + + /* get number of secret and public parameters. They are held in + one array first the public ones, then the secret ones */ nskey = pubkey_get_nskey( sk->pubkey_algo ); npkey = pubkey_get_npkey( sk->pubkey_algo ); + + /* If we don't have any public parameters - which is the case if + we don't know the algorithm used - the parameters are stored as + one blob in a faked (opaque) MPI */ if( !npkey ) { write_fake_data( a, sk->skey[0] ); goto leave; } assert( npkey < nskey ); + /* Writing the public parameters is easy */ for(i=0; i < npkey; i++ ) mpi_write(a, sk->skey[i] ); + + /* build the header for protected (encrypted) secret parameters */ if( sk->is_protected ) { if( is_RSA(sk->pubkey_algo) && sk->version < 4 && !sk->protect.s2k.mode ) { + /* the simple rfc1991 (v3) way */ iobuf_put(a, sk->protect.algo ); iobuf_write(a, sk->protect.iv, sk->protect.ivlen ); } else { - iobuf_put(a, 0xff ); + /* OpenPGP protection according to rfc2440 */ + iobuf_put(a, sk->protect.sha1chk? 0xfe : 0xff ); iobuf_put(a, sk->protect.algo ); if( sk->protect.s2k.mode >= 1000 ) { - iobuf_put(a, 101 ); + /* These modes are not possible in OpenPGP, we use them + to implement our extesnsions, 101 can ve views as a + private/experimental extension (this is not + specified in rfc2440 but the same scheme is used + for all other algorithm identifiers) */ + iobuf_put(a, 101 ); iobuf_put(a, sk->protect.s2k.hash_algo ); iobuf_write(a, "GNU", 3 ); iobuf_put(a, sk->protect.s2k.mode - 1000 ); @@ -392,34 +410,41 @@ do_secret_key( IOBUF out, int ctb, PKT_secret_key *sk ) || sk->protect.s2k.mode == 3 ) iobuf_write(a, sk->protect.s2k.salt, 8 ); if( sk->protect.s2k.mode == 3 ) - iobuf_put(a, sk->protect.s2k.count ); + iobuf_put(a, sk->protect.s2k.count ); + + /* For out special mode 1001 we do not need an IV */ if( sk->protect.s2k.mode != 1001 ) iobuf_write(a, sk->protect.iv, sk->protect.ivlen ); } } else iobuf_put(a, 0 ); + if( sk->protect.s2k.mode == 1001 ) - ; + ; /* GnuPG extension - don't write a secret key at all */ else if( sk->is_protected && sk->version >= 4 ) { + /* The secret key is protected - write it out as it is */ byte *p; - size_t n; - assert( gcry_mpi_get_flag( sk->skey[i], GCRYMPI_FLAG_OPAQUE ) ); - p = gcry_mpi_get_opaque( sk->skey[i], &n ); - iobuf_write(a, p, (n+7)/8 ); + assert( mpi_is_opaque( sk->skey[npkey] ) ); + p = mpi_get_opaque( sk->skey[npkey], &i ); + iobuf_write(a, p, i ); } else { + /* v3 way - same code for protected and non- protected key */ for( ; i < nskey; i++ ) mpi_write(a, sk->skey[i] ); write_16(a, sk->csum ); } leave: + /* Build the header of the packet - which we must do after writing all + the other stuff, so that we know the length of the packet */ write_header2(out, ctb, iobuf_get_temp_length(a), sk->hdrbytes, 1 ); + /* And finally write it out the real stream */ if( iobuf_write_temp( out, a ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; - iobuf_close(a); + iobuf_close(a); /* close the remporary buffer */ return rc; } @@ -448,7 +473,7 @@ do_symkey_enc( IOBUF out, int ctb, PKT_symkey_enc *enc ) write_header(out, ctb, iobuf_get_temp_length(a) ); if( iobuf_write_temp( out, a ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; @@ -482,7 +507,7 @@ do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc ) write_header(out, ctb, iobuf_get_temp_length(a) ); if( iobuf_write_temp( out, a ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; @@ -511,12 +536,12 @@ do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt ) for(i=0; i < pt->namelen; i++ ) iobuf_put(out, pt->name[i] ); if( write_32(out, pt->timestamp ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; n = 0; while( (nbytes=iobuf_read(pt->buf, buf, 1000)) != -1 ) { if( iobuf_write(out, buf, nbytes) == -1 ) { - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; break; } n += nbytes; @@ -539,7 +564,7 @@ do_encrypted( IOBUF out, int ctb, PKT_encrypted *ed ) int rc = 0; u32 n; - n = ed->len ? (ed->len + 10) : 0; + n = ed->len ? (ed->len + ed->extralen) : 0; write_header(out, ctb, n ); /* This is all. The caller has to write the real data */ @@ -555,7 +580,7 @@ do_encrypted_mdc( IOBUF out, int ctb, PKT_encrypted *ed ) assert( ed->mdc_method ); - n = ed->len ? (ed->len + 10) : 0; + n = ed->len ? (ed->len + ed->extralen) : 0; write_header(out, ctb, n ); iobuf_put(out, 1 ); /* version */ @@ -572,7 +597,7 @@ do_mdc( IOBUF out, PKT_mdc *mdc ) iobuf_put( out, 0xd3 ); /* packet ID and 1 byte length */ iobuf_put( out, 0x14 ); /* length = 20 */ if( iobuf_write( out, mdc->hash, sizeof(mdc->hash) ) ) - return GPGERR_WRITE_FILE; + return G10ERR_WRITE_FILE; return 0; } @@ -591,36 +616,36 @@ do_compressed( IOBUF out, int ctb, PKT_compressed *cd ) } - /**************** - * Find a subpacket of type REQTYPE in BUFFER and a return a pointer - * to the first byte of that subpacket data. - * And return the length of the packet in RET_N and the number of - * header bytes in RET_HLEN (length header and type byte). + * Delete all subpackets of type REQTYPE and return a bool whether a packet + * was deleted. */ -byte * -find_subpkt( byte *buffer, sigsubpkttype_t reqtype, - size_t *ret_hlen, size_t *ret_n ) +int +delete_sig_subpkt (subpktarea_t *area, sigsubpkttype_t reqtype ) { int buflen; sigsubpkttype_t type; - byte *bufstart; + byte *buffer, *bufstart; size_t n; + size_t unused = 0; + int okay = 0; - if( !buffer ) - return NULL; - buflen = (*buffer << 8) | buffer[1]; - buffer += 2; + if( !area ) + return 0; + buflen = area->len; + buffer = area->data; for(;;) { - if( !buflen ) - return NULL; /* end of packets; not found */ + if( !buflen ) { + okay = 1; + break; + } bufstart = buffer; n = *buffer++; buflen--; if( n == 255 ) { if( buflen < 4 ) break; n = (buffer[0] << 24) | (buffer[1] << 16) - | (buffer[2] << 8) | buffer[3]; + | (buffer[2] << 8) | buffer[3]; buffer += 4; buflen -= 4; } @@ -633,137 +658,175 @@ find_subpkt( byte *buffer, sigsubpkttype_t reqtype, } if( buflen < n ) break; + type = *buffer & 0x7f; if( type == reqtype ) { buffer++; + buflen--; n--; if( n > buflen ) break; - if( ret_hlen ) - *ret_hlen = buffer - bufstart; - if( ret_n ) - *ret_n = n; - return buffer; + buffer += n; /* point to next subpkt */ + buflen -= n; + memmove (bufstart, buffer, buflen); /* shift */ + unused += buffer - bufstart; + buffer = bufstart; } - buffer += n; buflen -=n; + else { + buffer += n; buflen -=n; + } } - log_error("find_subpkt: buffer shorter than subpacket\n"); - return NULL; + if (!okay) + log_error ("delete_subpkt: buffer shorter than subpacket\n"); + assert (unused <= area->len); + area->len -= unused; + return !!unused; } /**************** - * Create or update a signature subpacket for SIG of TYPE. - * This functions knows where to put the data (hashed or unhashed). - * The function may move data from the unhased part to the hashed one. - * Note: All pointers into sig->[un]hashed are not valid after a call - * to this function. The data to but into the subpaket should be - * in buffer with a length of buflen. + * Create or update a signature subpacket for SIG of TYPE. This + * functions knows where to put the data (hashed or unhashed). The + * function may move data from the unhashed part to the hashed one. + * Note: All pointers into sig->[un]hashed (e.g. returned by + * parse_sig_subpkt) are not valid after a call to this function. The + * data to put into the subpaket should be in a buffer with a length + * of buflen. */ void -build_sig_subpkt( PKT_signature *sig, sigsubpkttype_t type, +build_sig_subpkt (PKT_signature *sig, sigsubpkttype_t type, const byte *buffer, size_t buflen ) { - byte *data; - size_t hlen, dlen, nlen; - int found=0; - int critical, hashed, realloced; - size_t n, n0; + byte *p; + int critical, hashed; + subpktarea_t *oldarea, *newarea; + size_t nlen, n, n0; critical = (type & SIGSUBPKT_FLAG_CRITICAL); type &= ~SIGSUBPKT_FLAG_CRITICAL; - if( type == SIGSUBPKT_NOTATION ) - ; /* we allow multiple packets */ - else if( (data = find_subpkt( sig->hashed_data, type, &hlen, &dlen )) ) - found = 1; - else if( (data = find_subpkt( sig->unhashed_data, type, &hlen, &dlen ))) - found = 2; + /* Sanity check buffer sizes */ + if(parse_one_sig_subpkt(buffer,buflen,type)<0) + BUG(); - if( found ) - log_bug("build_sig_packet: update nyi\n"); - if( (buflen+1) >= 8384 ) - nlen = 5; - else if( (buflen+1) >= 192 ) - nlen = 2; - else - nlen = 1; - - switch( type ) { - case SIGSUBPKT_SIG_CREATED: - case SIGSUBPKT_PRIV_ADD_SIG: - case SIGSUBPKT_PREF_SYM: - case SIGSUBPKT_PREF_HASH: - case SIGSUBPKT_PREF_COMPR: - case SIGSUBPKT_KS_FLAGS: - case SIGSUBPKT_KEY_EXPIRE: + switch(type) + { case SIGSUBPKT_NOTATION: case SIGSUBPKT_POLICY: - case SIGSUBPKT_REVOC_REASON: - case SIGSUBPKT_KEY_FLAGS: - case SIGSUBPKT_FEATURES: - hashed = 1; break; - default: hashed = 0; break; - } + case SIGSUBPKT_REV_KEY: + /* we do allow multiple subpackets */ + break; - if( hashed ) { - n0 = sig->hashed_data ? ((*sig->hashed_data << 8) - | sig->hashed_data[1]) : 0; - n = n0 + nlen + 1 + buflen; /* length, type, buffer */ - realloced = !!sig->hashed_data; - data = sig->hashed_data ? gcry_xrealloc( sig->hashed_data, n+2 ) - : gcry_xmalloc( n+2 ); - } - else { - n0 = sig->unhashed_data ? ((*sig->unhashed_data << 8) - | sig->unhashed_data[1]) : 0; - n = n0 + nlen + 1 + buflen; /* length, type, buffer */ - realloced = !!sig->unhashed_data; - data = sig->unhashed_data ? gcry_xrealloc( sig->unhashed_data, n+2 ) - : gcry_xmalloc( n+2 ); + default: + /* we don't allow multiple subpackets */ + delete_sig_subpkt(sig->hashed,type); + delete_sig_subpkt(sig->unhashed,type); + break; + } + + /* Any special magic that needs to be done for this type so the + packet doesn't need to be reparsed? */ + switch(type) + { + case SIGSUBPKT_NOTATION: + sig->flags.notation=1; + break; + + case SIGSUBPKT_POLICY: + sig->flags.policy_url=1; + break; + + case SIGSUBPKT_EXPORTABLE: + if(buffer[0]) + sig->flags.exportable=1; + else + sig->flags.exportable=0; + break; + + case SIGSUBPKT_REVOCABLE: + if(buffer[0]) + sig->flags.revocable=1; + else + sig->flags.revocable=0; + break; + + default: + break; + } + + if( (buflen+1) >= 8384 ) + nlen = 5; /* write 5 byte length header */ + else if( (buflen+1) >= 192 ) + nlen = 2; /* write 2 byte length header */ + else + nlen = 1; /* just a 1 byte length header */ + + switch( type ) { + case SIGSUBPKT_ISSUER: + case SIGSUBPKT_PRIV_VERIFY_CACHE: /*(obsolete)*/ + hashed = 0; + break; + default: + hashed = 1; + break; } if( critical ) type |= SIGSUBPKT_FLAG_CRITICAL; - data[0] = (n >> 8) & 0xff; - data[1] = n & 0xff; - if( nlen == 5 ) { - data[n0+2] = 255; - data[n0+3] = (buflen+1) >> 24; - data[n0+4] = (buflen+1) >> 16; - data[n0+5] = (buflen+1) >> 8; - data[n0+6] = (buflen+1); - data[n0+7] = type; - memcpy(data+n0+8, buffer, buflen ); + oldarea = hashed? sig->hashed : sig->unhashed; + + /* Calculate new size of the area and allocate */ + n0 = oldarea? oldarea->len : 0; + n = n0 + nlen + 1 + buflen; /* length, type, buffer */ + if (oldarea && n <= oldarea->size) { /* fits into the unused space */ + newarea = oldarea; + /*log_debug ("updating area for type %d\n", type );*/ } - else if( nlen == 2 ) { - data[n0+2] = (buflen+1-192) / 256 + 192; - data[n0+3] = (buflen+1-192) & 256; - data[n0+4] = type; - memcpy(data+n0+5, buffer, buflen ); + else if (oldarea) { + newarea = m_realloc (oldarea, sizeof (*newarea) + n - 1); + newarea->size = n; + /*log_debug ("reallocating area for type %d\n", type );*/ } else { - data[n0+2] = buflen+1; - data[n0+3] = type; - memcpy(data+n0+4, buffer, buflen ); + newarea = m_alloc (sizeof (*newarea) + n - 1); + newarea->size = n; + /*log_debug ("allocating area for type %d\n", type );*/ + } + newarea->len = n; + + p = newarea->data + n0; + if (nlen == 5) { + *p++ = 255; + *p++ = (buflen+1) >> 24; + *p++ = (buflen+1) >> 16; + *p++ = (buflen+1) >> 8; + *p++ = (buflen+1); + *p++ = type; + memcpy (p, buffer, buflen); + } + else if (nlen == 2) { + *p++ = (buflen+1-192) / 256 + 192; + *p++ = (buflen+1-192) % 256; + *p++ = type; + memcpy (p, buffer, buflen); + } + else { + *p++ = buflen+1; + *p++ = type; + memcpy (p, buffer, buflen); } - if( hashed ) { - if( !realloced ) - gcry_free(sig->hashed_data); - sig->hashed_data = data; - } - else { - if( !realloced ) - gcry_free(sig->unhashed_data); - sig->unhashed_data = data; - } + if (hashed) + sig->hashed = newarea; + else + sig->unhashed = newarea; } /**************** * Put all the required stuff from SIG into subpackets of sig. + * Hmmm, should we delete those subpackets which are in a wrong area? */ void build_sig_subpkt_from_sig( PKT_signature *sig ) @@ -789,8 +852,70 @@ build_sig_subpkt_from_sig( PKT_signature *sig ) buf[2] = (u >> 8) & 0xff; buf[3] = u & 0xff; build_sig_subpkt( sig, SIGSUBPKT_SIG_CREATED, buf, 4 ); + + if(sig->expiredate) + { + u = sig->expiredate-sig->timestamp; + buf[0] = (u >> 24) & 0xff; + buf[1] = (u >> 16) & 0xff; + buf[2] = (u >> 8) & 0xff; + buf[3] = u & 0xff; + + /* Mark this CRITICAL, so if any implementation doesn't + understand sigs that can expire, it'll just disregard this + sig altogether. */ + + build_sig_subpkt( sig, SIGSUBPKT_SIG_EXPIRE | SIGSUBPKT_FLAG_CRITICAL, + buf, 4 ); + } } +void +build_attribute_subpkt(PKT_user_id *uid,byte type, + const void *buf,int buflen, + const void *header,int headerlen) +{ + byte *attrib; + int idx; + + if(1+headerlen+buflen>8383) + idx=5; + else if(1+headerlen+buflen>191) + idx=2; + else + idx=1; + + /* realloc uid->attrib_data to the right size */ + + uid->attrib_data=m_realloc(uid->attrib_data, + uid->attrib_len+idx+1+headerlen+buflen); + + attrib=&uid->attrib_data[uid->attrib_len]; + + if(idx==5) + { + attrib[0]=255; + attrib[1]=(1+headerlen+buflen) >> 24; + attrib[2]=(1+headerlen+buflen) >> 16; + attrib[3]=(1+headerlen+buflen) >> 8; + attrib[4]=1+headerlen+buflen; + } + else if(idx==2) + { + attrib[0]=(1+headerlen+buflen-192) / 256 + 192; + attrib[1]=(1+headerlen+buflen-192) % 256; + } + else + attrib[0]=1+headerlen+buflen; /* Good luck finding a JPEG this small! */ + + attrib[idx++]=type; + + /* Tack on our data at the end */ + + memcpy(&attrib[idx],header,headerlen); + memcpy(&attrib[idx+headerlen],buf,buflen); + uid->attrib_len+=idx+headerlen+buflen; +} static int do_signature( IOBUF out, int ctb, PKT_signature *sig ) @@ -818,16 +943,14 @@ do_signature( IOBUF out, int ctb, PKT_signature *sig ) /* timestamp and keyid must have been packed into the * subpackets prior to the call of this function, because * these subpackets are hashed */ - nn = sig->hashed_data?((sig->hashed_data[0]<<8) - |sig->hashed_data[1]) :0; + nn = sig->hashed? sig->hashed->len : 0; write_16(a, nn); if( nn ) - iobuf_write( a, sig->hashed_data+2, nn ); - nn = sig->unhashed_data?((sig->unhashed_data[0]<<8) - |sig->unhashed_data[1]) :0; + iobuf_write( a, sig->hashed->data, nn ); + nn = sig->unhashed? sig->unhashed->len : 0; write_16(a, nn); if( nn ) - iobuf_write( a, sig->unhashed_data+2, nn ); + iobuf_write( a, sig->unhashed->data, nn ); } iobuf_put(a, sig->digest_start[0] ); iobuf_put(a, sig->digest_start[1] ); @@ -842,7 +965,7 @@ do_signature( IOBUF out, int ctb, PKT_signature *sig ) else write_header(out, ctb, iobuf_get_temp_length(a) ); if( iobuf_write_temp( out, a ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; @@ -865,7 +988,7 @@ do_onepass_sig( IOBUF out, int ctb, PKT_onepass_sig *ops ) write_header(out, ctb, iobuf_get_temp_length(a) ); if( iobuf_write_temp( out, a ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; diff --git a/g10/cipher.c b/g10/cipher.c index cad6ff664..2af8750c8 100644 --- a/g10/cipher.c +++ b/g10/cipher.c @@ -1,5 +1,5 @@ /* cipher.c - En-/De-ciphering filter - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,9 +25,9 @@ #include #include -#include #include "errors.h" #include "iobuf.h" +#include "memory.h" #include "util.h" #include "filter.h" #include "packet.h" @@ -45,69 +45,69 @@ write_header( cipher_filter_context_t *cfx, IOBUF a ) PACKET pkt; PKT_encrypted ed; byte temp[18]; - unsigned int blocksize; - unsigned int nprefix; - int rc; - int use_mdc = opt.force_mdc; + unsigned blocksize; + unsigned nprefix; + int use_mdc; - blocksize = gcry_cipher_get_algo_blklen( cfx->dek->algo ); + blocksize = cipher_get_blocksize( cfx->dek->algo ); if( blocksize < 8 || blocksize > 16 ) log_fatal("unsupported blocksize %u\n", blocksize ); + + use_mdc = cfx->dek->use_mdc; + if( blocksize != 8 ) - use_mdc = 1; /* enable it for all modern ciphers */ - if( opt.rfc2440 ) + use_mdc = 1; /* Hack: enable it for all modern ciphers */ + /* Note: We should remove this hack as soon as a reasonable number of keys + are carrying the MDC flag. But always keep the hack for conventional + encryption */ + + if (opt.force_mdc) + use_mdc = 1; + + if( opt.rfc2440 || opt.rfc1991 || opt.disable_mdc ) use_mdc = 0; /* override - rfc2440 does not know about MDC */ memset( &ed, 0, sizeof ed ); ed.len = cfx->datalen; + ed.extralen = blocksize+2; ed.new_ctb = !ed.len && !opt.rfc1991; if( use_mdc ) { - ed.mdc_method = GCRY_MD_SHA1; - cfx->mdc_hash = gcry_md_open( GCRY_MD_SHA1, 0 ); - if( !cfx->mdc_hash ) - BUG(); + ed.mdc_method = DIGEST_ALGO_SHA1; + cfx->mdc_hash = md_open( DIGEST_ALGO_SHA1, 0 ); if ( DBG_HASHING ) - gcry_md_start_debug( cfx->mdc_hash, "creatmdc" ); + md_start_debug( cfx->mdc_hash, "creatmdc" ); } + + { + char buf[20]; + + sprintf (buf, "%d %d", ed.mdc_method, cfx->dek->algo); + write_status_text (STATUS_BEGIN_ENCRYPTION, buf); + } + init_packet( &pkt ); pkt.pkttype = use_mdc? PKT_ENCRYPTED_MDC : PKT_ENCRYPTED; pkt.pkt.encrypted = &ed; if( build_packet( a, &pkt )) log_bug("build_packet(ENCR_DATA) failed\n"); nprefix = blocksize; - gcry_randomize( temp, nprefix, GCRY_STRONG_RANDOM ); + randomize_buffer( temp, nprefix, 1 ); temp[nprefix] = temp[nprefix-2]; temp[nprefix+1] = temp[nprefix-1]; print_cipher_algo_note( cfx->dek->algo ); - if( !(cfx->cipher_hd = gcry_cipher_open( cfx->dek->algo, - GCRY_CIPHER_MODE_CFB, - GCRY_CIPHER_SECURE - | ((use_mdc || cfx->dek->algo >= 100) ? - 0 : GCRY_CIPHER_ENABLE_SYNC))) - ) { - /* we should never get an error here cause we already checked, that - * the algorithm is available. */ - BUG(); - } - - + cfx->cipher_hd = cipher_open( cfx->dek->algo, + use_mdc? CIPHER_MODE_CFB + : CIPHER_MODE_AUTO_CFB, 1 ); /* log_hexdump( "thekey", cfx->dek->key, cfx->dek->keylen );*/ - rc = gcry_cipher_setkey( cfx->cipher_hd, cfx->dek->key, cfx->dek->keylen ); - if( !rc ) - rc = gcry_cipher_setiv( cfx->cipher_hd, NULL, 0 ); - if( rc ) - log_fatal("set key or IV failed: %s\n", gcry_strerror(rc) ); + cipher_setkey( cfx->cipher_hd, cfx->dek->key, cfx->dek->keylen ); + cipher_setiv( cfx->cipher_hd, NULL, 0 ); /* log_hexdump( "prefix", temp, nprefix+2 ); */ - if( cfx->mdc_hash ) - gcry_md_write( cfx->mdc_hash, temp, nprefix+2 ); - rc = gcry_cipher_encrypt( cfx->cipher_hd, temp, nprefix+2, NULL, 0 ); - if( !rc ) - rc = gcry_cipher_sync( cfx->cipher_hd ); - if( rc ) - log_fatal("encrypt failed: %s\n", gcry_strerror(rc) ); + if( cfx->mdc_hash ) /* hash the "IV" */ + md_write( cfx->mdc_hash, temp, nprefix+2 ); + cipher_encrypt( cfx->cipher_hd, temp, temp, nprefix+2); + cipher_sync( cfx->cipher_hd ); iobuf_write(a, temp, nprefix+2); cfx->header=1; - } @@ -129,46 +129,39 @@ cipher_filter( void *opaque, int control, else if( control == IOBUFCTRL_FLUSH ) { /* encrypt */ assert(a); if( !cfx->header ) { - write_status( STATUS_BEGIN_ENCRYPTION ); write_header( cfx, a ); } if( cfx->mdc_hash ) - gcry_md_write( cfx->mdc_hash, buf, size ); - rc = gcry_cipher_encrypt( cfx->cipher_hd, buf, size, NULL, 0); - if( rc ) - log_fatal("encrypt failed: %s\n", gcry_strerror(rc) ); + md_write( cfx->mdc_hash, buf, size ); + cipher_encrypt( cfx->cipher_hd, buf, buf, size); if( iobuf_write( a, buf, size ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; } else if( control == IOBUFCTRL_FREE ) { if( cfx->mdc_hash ) { byte *hash; - int hashlen = gcry_md_get_algo_dlen( gcry_md_get_algo( cfx->mdc_hash ) ); + int hashlen = md_digest_length( md_get_algo( cfx->mdc_hash ) ); byte temp[22]; assert( hashlen == 20 ); /* we must hash the prefix of the MDC packet here */ temp[0] = 0xd3; temp[1] = 0x14; - gcry_md_putc( cfx->mdc_hash, temp[0] ); - gcry_md_putc( cfx->mdc_hash, temp[1] ); + md_putc( cfx->mdc_hash, temp[0] ); + md_putc( cfx->mdc_hash, temp[1] ); - hash = gcry_md_read( cfx->mdc_hash, 0 ); + md_final( cfx->mdc_hash ); + hash = md_read( cfx->mdc_hash, 0 ); memcpy(temp+2, hash, 20); - rc = gcry_cipher_encrypt( cfx->cipher_hd, temp, 22, NULL, 0 ); - if( rc ) - log_fatal("encrypt failed: %s\n", gcry_strerror(rc) ); - gcry_md_close( cfx->mdc_hash ); cfx->mdc_hash = NULL; + cipher_encrypt( cfx->cipher_hd, temp, temp, 22 ); + md_close( cfx->mdc_hash ); cfx->mdc_hash = NULL; if( iobuf_write( a, temp, 22 ) ) log_error("writing MDC packet failed\n" ); } - gcry_cipher_close(cfx->cipher_hd); - write_status( STATUS_END_ENCRYPTION ); + cipher_close(cfx->cipher_hd); } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "cipher_filter"; } return rc; } - - diff --git a/g10/comment.c b/g10/comment.c index b1732a29f..6d27e481b 100644 --- a/g10/comment.c +++ b/g10/comment.c @@ -1,5 +1,5 @@ /* comment.c - write comment stuff - * Copyright (C) 1998, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -29,7 +29,7 @@ #include "packet.h" #include "errors.h" #include "iobuf.h" -#include +#include "memory.h" #include "util.h" #include "main.h" #include "keydb.h" @@ -45,41 +45,59 @@ write_comment( IOBUF out, const char *s ) pkt.pkttype = PKT_COMMENT; if( *s != '#' ) { - pkt.pkt.comment = gcry_xmalloc( sizeof *pkt.pkt.comment + n ); + pkt.pkt.comment = m_alloc( sizeof *pkt.pkt.comment + n ); pkt.pkt.comment->len = n+1; *pkt.pkt.comment->data = '#'; strcpy(pkt.pkt.comment->data+1, s); } else { - pkt.pkt.comment = gcry_xmalloc( sizeof *pkt.pkt.comment + n - 1 ); + pkt.pkt.comment = m_alloc( sizeof *pkt.pkt.comment + n - 1 ); pkt.pkt.comment->len = n; strcpy(pkt.pkt.comment->data, s); } if( (rc = build_packet( out, &pkt )) ) - log_error("build_packet(comment) failed: %s\n", gpg_errstr(rc) ); + log_error("build_packet(comment) failed: %s\n", g10_errstr(rc) ); free_packet( &pkt ); return rc; } KBNODE -make_comment_node_from_buffer( const char *s, size_t n ) +make_comment_node( const char *s ) { PACKET *pkt; + size_t n = strlen(s); - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_COMMENT; - pkt->pkt.comment = gcry_xmalloc( sizeof *pkt->pkt.comment + n - 1 ); + pkt->pkt.comment = m_alloc( sizeof *pkt->pkt.comment + n - 1 ); pkt->pkt.comment->len = n; strcpy(pkt->pkt.comment->data, s); return new_kbnode( pkt ); } + KBNODE -make_comment_node( const char *s ) +make_mpi_comment_node( const char *s, MPI a ) { - return make_comment_node_from_buffer ( s, strlen (s) ); + PACKET *pkt; + byte *buf, *p, *pp; + unsigned n1, nb1; + size_t n = strlen(s); + + nb1 = mpi_get_nbits( a ); + p = buf = mpi_get_buffer( a, &n1, NULL ); + pkt = m_alloc_clear( sizeof *pkt ); + pkt->pkttype = PKT_COMMENT; + pkt->pkt.comment = m_alloc( sizeof *pkt->pkt.comment + n + 2 + n1 ); + pkt->pkt.comment->len = n+1+2+n1; + pp = pkt->pkt.comment->data; + memcpy(pp, s, n+1); + pp[n+1] = nb1 >> 8; + pp[n+2] = nb1 ; + memcpy(pp+n+3, p, n1 ); + m_free(buf); + return new_kbnode( pkt ); } - diff --git a/g10/compress.c b/g10/compress.c index 2666e9051..6d85e0181 100644 --- a/g10/compress.c +++ b/g10/compress.c @@ -1,5 +1,5 @@ /* compress.c - compress filter - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -27,10 +27,11 @@ #include #include -#include #include "util.h" +#include "memory.h" #include "packet.h" #include "filter.h" +#include "main.h" #include "options.h" @@ -63,7 +64,7 @@ init_compress( compress_filter_context_t *zfx, z_stream *zs ) } zfx->outbufsize = 8192; - zfx->outbuf = gcry_xmalloc( zfx->outbufsize ); + zfx->outbuf = m_alloc( zfx->outbufsize ); } static int @@ -73,7 +74,11 @@ do_compress( compress_filter_context_t *zfx, z_stream *zs, int flush, IOBUF a ) unsigned n; do { +#ifndef __riscos__ zs->next_out = zfx->outbuf; +#else /* __riscos__ */ + zs->next_out = (Bytef *) zfx->outbuf; +#endif /* __riscos__ */ zs->avail_out = zfx->outbufsize; if( DBG_FILTER ) log_debug("enter deflate: avail_in=%u, avail_out=%u, flush=%d\n", @@ -96,7 +101,7 @@ do_compress( compress_filter_context_t *zfx, z_stream *zs, int flush, IOBUF a ) if( iobuf_write( a, zfx->outbuf, n ) ) { log_debug("deflate: iobuf_write failed\n"); - return GPGERR_WRITE_FILE; + return G10ERR_WRITE_FILE; } } while( zs->avail_in || (flush == Z_FINISH && zrc != Z_STREAM_END) ); return 0; @@ -121,7 +126,7 @@ init_uncompress( compress_filter_context_t *zfx, z_stream *zs ) } zfx->inbufsize = 2048; - zfx->inbuf = gcry_xmalloc( zfx->inbufsize ); + zfx->inbuf = m_alloc( zfx->inbufsize ); zs->avail_in = 0; } @@ -143,7 +148,11 @@ do_uncompress( compress_filter_context_t *zfx, z_stream *zs, if( zs->avail_in < zfx->inbufsize && refill ) { n = zs->avail_in; if( !n ) +#ifndef __riscos__ zs->next_in = zfx->inbuf; +#else /* __riscos__ */ + zs->next_in = (Bytef *) zfx->inbuf; +#endif /* __riscos__ */ count = zfx->inbufsize - n; nread = iobuf_read( a, zfx->inbuf + n, count ); if( nread == -1 ) nread = 0; @@ -196,12 +205,16 @@ compress_filter( void *opaque, int control, if( control == IOBUFCTRL_UNDERFLOW ) { if( !zfx->status ) { - zs = zfx->opaque = gcry_xcalloc( 1, sizeof *zs ); + zs = zfx->opaque = m_alloc_clear( sizeof *zs ); init_uncompress( zfx, zs ); zfx->status = 1; } +#ifndef __riscos__ zs->next_out = buf; +#else /* __riscos__ */ + zs->next_out = (Bytef *) buf; +#endif /* __riscos__ */ zs->avail_out = size; zfx->outbufsize = size; /* needed only for calculation */ rc = do_uncompress( zfx, zs, a, ret_len ); @@ -212,7 +225,9 @@ compress_filter( void *opaque, int control, PKT_compressed cd; if( !zfx->algo ) - zfx->algo = opt.def_compress_algo; + zfx->algo = DEFAULT_COMPRESS_ALGO; + if( zfx->algo != 1 && zfx->algo != 2 ) + BUG(); memset( &cd, 0, sizeof cd ); cd.len = 0; cd.algorithm = zfx->algo; @@ -221,37 +236,54 @@ compress_filter( void *opaque, int control, pkt.pkt.compressed = &cd; if( build_packet( a, &pkt )) log_bug("build_packet(PKT_COMPRESSED) failed\n"); - zs = zfx->opaque = gcry_xcalloc( 1, sizeof *zs ); + zs = zfx->opaque = m_alloc_clear( sizeof *zs ); init_compress( zfx, zs ); zfx->status = 2; } +#ifndef __riscos__ zs->next_in = buf; +#else /* __riscos__ */ + zs->next_in = (Bytef *) buf; +#endif /* __riscos__ */ zs->avail_in = size; rc = do_compress( zfx, zs, Z_NO_FLUSH, a ); } else if( control == IOBUFCTRL_FREE ) { if( zfx->status == 1 ) { inflateEnd(zs); - gcry_free(zs); + m_free(zs); zfx->opaque = NULL; - gcry_free(zfx->outbuf); zfx->outbuf = NULL; + m_free(zfx->outbuf); zfx->outbuf = NULL; } else if( zfx->status == 2 ) { +#ifndef __riscos__ zs->next_in = buf; +#else /* __riscos__ */ + zs->next_in = (Bytef *) buf; +#endif /* __riscos__ */ zs->avail_in = 0; do_compress( zfx, zs, Z_FINISH, a ); deflateEnd(zs); - gcry_free(zs); + m_free(zs); zfx->opaque = NULL; - gcry_free(zfx->outbuf); zfx->outbuf = NULL; + m_free(zfx->outbuf); zfx->outbuf = NULL; } + if (zfx->release) + zfx->release (zfx); } else if( control == IOBUFCTRL_DESC ) *(char**)buf = "compress_filter"; return rc; } + +static void +release_context (compress_filter_context_t *ctx) +{ + m_free (ctx); +} + /**************** * Handle a compressed packet */ @@ -259,26 +291,19 @@ int handle_compressed( void *procctx, PKT_compressed *cd, int (*callback)(IOBUF, void *), void *passthru ) { - compress_filter_context_t cfx; + compress_filter_context_t *cfx; int rc; - memset( &cfx, 0, sizeof cfx ); if( cd->algorithm < 1 || cd->algorithm > 2 ) - return GPGERR_COMPR_ALGO; - cfx.algo = cd->algorithm; - - iobuf_push_filter( cd->buf, compress_filter, &cfx ); + return G10ERR_COMPR_ALGO; + cfx = m_alloc_clear (sizeof *cfx); + cfx->algo = cd->algorithm; + cfx->release = release_context; + iobuf_push_filter( cd->buf, compress_filter, cfx ); if( callback ) rc = callback(cd->buf, passthru ); else rc = proc_packets(procctx, cd->buf); - #if 0 - iobuf_pop_filter( cd->buf, compress_filter, &cfx ); - if( cd->len ) - iobuf_set_limit( cd->buf, 0 ); /* disable the readlimit */ - else - iobuf_clear_eof( cd->buf ); - #endif cd->buf = NULL; return rc; } diff --git a/g10/dearmor.c b/g10/dearmor.c index 937961e7f..4ec8fa012 100644 --- a/g10/dearmor.c +++ b/g10/dearmor.c @@ -1,5 +1,5 @@ /* dearmor.c - Armor utility - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,9 +25,9 @@ #include #include -#include #include "errors.h" #include "iobuf.h" +#include "memory.h" #include "util.h" #include "filter.h" #include "packet.h" @@ -52,7 +52,7 @@ dearmor_file( const char *fname ) if( !(inp = iobuf_open(fname)) ) { log_error("can't open %s: %s\n", fname? fname: "[stdin]", strerror(errno) ); - rc = GPGERR_OPEN_FILE; + rc = G10ERR_OPEN_FILE; goto leave; } @@ -94,7 +94,7 @@ enarmor_file( const char *fname ) if( !(inp = iobuf_open(fname)) ) { log_error("can't open %s: %s\n", fname? fname: "[stdin]", strerror(errno) ); - rc = GPGERR_OPEN_FILE; + rc = G10ERR_OPEN_FILE; goto leave; } diff --git a/g10/decrypt.c b/g10/decrypt.c index 981275602..297ee3418 100644 --- a/g10/decrypt.c +++ b/g10/decrypt.c @@ -1,5 +1,5 @@ /* decrypt.c - verify signed data - * Copyright (C) 1998, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,14 +25,15 @@ #include #include -#include #include "options.h" #include "packet.h" #include "errors.h" #include "iobuf.h" #include "keydb.h" +#include "memory.h" #include "util.h" #include "main.h" +#include "status.h" #include "i18n.h" @@ -57,7 +58,7 @@ decrypt_message( const char *filename ) fp = iobuf_open(filename); if( !fp ) { log_error(_("can't open `%s'\n"), print_fname_stdin(filename)); - return GPGERR_OPEN_FILE; + return G10ERR_OPEN_FILE; } if( !opt.no_armor ) { @@ -78,5 +79,60 @@ decrypt_message( const char *filename ) return rc; } +void +decrypt_messages(int nfiles, char **files) +{ + IOBUF fp; + armor_filter_context_t afx; + char *p, *output = NULL; + int rc = 0; + + if (opt.outfile) + { + log_error(_("--output doesn't work for this command\n")); + return; + + } + + while (nfiles--) + { + print_file_status(STATUS_FILE_START, *files, 3); + output = make_outfile_name(*files); + if (!output) + continue; + fp = iobuf_open(*files); + if (!fp) + { + log_error(_("can't open `%s'\n"), print_fname_stdin(*files)); + continue; + } + if (!opt.no_armor) + { + if (use_armor_filter(fp)) + { + memset(&afx, 0, sizeof afx); + iobuf_push_filter(fp, armor_filter, &afx); + } + } + rc = proc_packets(NULL, fp); + iobuf_close(fp); + if (rc) + log_error("%s: decryption failed: %s\n", print_fname_stdin(*files), + g10_errstr(rc)); + p = get_last_passphrase(); + set_next_passphrase(p); + m_free (p); + files++; + m_free(output); + write_status( STATUS_FILE_DONE ); + } + set_next_passphrase(NULL); +} + + + + + + diff --git a/g10/delkey.c b/g10/delkey.c index f4bfd01e4..f9d882113 100644 --- a/g10/delkey.c +++ b/g10/delkey.c @@ -1,5 +1,5 @@ /* delkey.c - delete keys - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -31,7 +31,7 @@ #include "errors.h" #include "iobuf.h" #include "keydb.h" -#include +#include "memory.h" #include "util.h" #include "main.h" #include "trustdb.h" @@ -43,34 +43,46 @@ /**************** * Delete a public or secret key from a keyring. + * r_sec_avail will be set if a secret key is available and the public + * key can't be deleted for that reason. */ -int -delete_key( const char *username, int secret ) +static int +do_delete_key( const char *username, int secret, int *r_sec_avail ) { int rc = 0; KBNODE keyblock = NULL; KBNODE node; - KBPOS kbpos; + KEYDB_HANDLE hd = keydb_new (secret); PKT_public_key *pk = NULL; PKT_secret_key *sk = NULL; u32 keyid[2]; int okay=0; int yes; + KEYDB_SEARCH_DESC desc; + + *r_sec_avail = 0; /* search the userid */ - rc = secret? find_secret_keyblock_byname( &keyblock, username ) - : find_keyblock_byname( &keyblock, username ); - if( rc ) { - log_error(_("%s: user not found: %s\n"), username, gpg_errstr(rc) ); + classify_user_id (username, &desc); + rc = desc.mode? keydb_search (hd, &desc, 1):G10ERR_INV_USER_ID; + if (rc) { + log_error (_("key `%s' not found: %s\n"), username, g10_errstr (rc)); write_status_text( STATUS_DELETE_PROBLEM, "1" ); goto leave; } + /* read the keyblock */ + rc = keydb_get_keyblock (hd, &keyblock ); + if (rc) { + log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); + goto leave; + } + /* get the keyid from the keyblock */ node = find_kbnode( keyblock, secret? PKT_SECRET_KEY:PKT_PUBLIC_KEY ); if( !node ) { log_error("Oops; key not found anymore!\n"); - rc = GPGERR_GENERAL; + rc = G10ERR_GENERAL; goto leave; } @@ -83,15 +95,12 @@ delete_key( const char *username, int secret ) keyid_from_pk( pk, keyid ); rc = seckey_available( keyid ); if( !rc ) { - log_error(_( - "there is a secret key for this public key!\n")); - log_info(_( - "use option \"--delete-secret-key\" to delete it first.\n")); - write_status_text( STATUS_DELETE_PROBLEM, "2" ); - rc = -1; + *r_sec_avail = 1; + rc = -1; + goto leave; } - else if( rc != GPGERR_NO_SECKEY ) { - log_error("%s: get secret key: %s\n", username, gpg_errstr(rc) ); + else if( rc != G10ERR_NO_SECKEY ) { + log_error("%s: get secret key: %s\n", username, g10_errstr(rc) ); } else rc = 0; @@ -113,15 +122,15 @@ delete_key( const char *username, int secret ) tty_printf("sec %4u%c/%08lX %s ", nbits_from_sk( sk ), pubkey_letter( sk->pubkey_algo ), - keyid[1], datestr_from_sk(sk) ); + (ulong)keyid[1], datestr_from_sk(sk) ); else tty_printf("pub %4u%c/%08lX %s ", nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), - keyid[1], datestr_from_pk(pk) ); + (ulong)keyid[1], datestr_from_pk(pk) ); p = get_user_id( keyid, &n ); tty_print_utf8_string( p, n ); - gcry_free(p); + m_free(p); tty_printf("\n\n"); yes = cpr_get_answer_is_yes( secret? "delete_key.secret.okay" @@ -142,16 +151,59 @@ delete_key( const char *username, int secret ) if( okay ) { - #warning MUST FIX THIS!!! - rc = delete_keyblock( &kbpos ); - if( rc ) { - log_error("delete_keyblock failed: %s\n", gpg_errstr(rc) ); + rc = keydb_delete_keyblock (hd); + if (rc) { + log_error (_("deleting keyblock failed: %s\n"), g10_errstr(rc) ); goto leave; } + + /* Note that the ownertrust being cleared will trigger a + revalidation_mark(). This makes sense - only deleting keys + that have ownertrust set should trigger this. */ + + if (!secret && pk && clear_ownertrust (pk)) { + if (opt.verbose) + log_info (_("ownertrust information cleared\n")); + } } leave: - release_kbnode( keyblock ); + keydb_release (hd); + release_kbnode (keyblock); return rc; } +/**************** + * Delete a public or secret key from a keyring. + */ +int +delete_keys( STRLIST names, int secret, int allow_both ) +{ + int rc, avail; + + for(;names;names=names->next) { + rc = do_delete_key (names->d, secret, &avail ); + if ( rc && avail ) { + if ( allow_both ) { + rc = do_delete_key (names->d, 1, &avail ); + if ( !rc ) + rc = do_delete_key (names->d, 0, &avail ); + } + else { + log_error(_( + "there is a secret key for public key \"%s\"!\n"),names->d); + log_info(_( + "use option \"--delete-secret-keys\" to delete it first.\n")); + write_status_text( STATUS_DELETE_PROBLEM, "2" ); + return rc; + } + } + + if(rc) { + log_error("%s: delete key failed: %s\n", names->d, g10_errstr(rc) ); + return rc; + } + } + + return 0; +} diff --git a/g10/encode.c b/g10/encode.c index f033c76ae..80a9039ec 100644 --- a/g10/encode.c +++ b/g10/encode.c @@ -1,5 +1,5 @@ /* encode.c - encode data - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -30,69 +30,18 @@ #include "errors.h" #include "iobuf.h" #include "keydb.h" -#include +#include "memory.h" #include "util.h" #include "main.h" #include "filter.h" #include "trustdb.h" #include "i18n.h" +#include "status.h" - -static int encode_simple( const char *filename, int mode ); +static int encode_simple( const char *filename, int mode, int compat ); static int write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out ); -/**************** - * Emulate our old PK interface here - sometime in the future we might - * change the internal design to directly fit to libgcrypt. - */ -static int -pk_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ) -{ - GCRY_SEXP s_ciph, s_data, s_pkey; - int rc; - - /* make a sexp from pkey */ - if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) { - rc = gcry_sexp_build ( &s_pkey, NULL, - "(public-key(elg(p%m)(g%m)(y%m)))", - pkey[0], pkey[1], pkey[2] ); - } - else - return GPGERR_PUBKEY_ALGO; - - if ( rc ) - BUG (); - - /* put the data into a simple list */ - if ( gcry_sexp_build( &s_data, NULL, "%m", data ) ) - BUG (); - - /* pass it to libgcrypt */ - rc = gcry_pk_encrypt( &s_ciph, s_data, s_pkey ); - gcry_sexp_release( s_data ); - gcry_sexp_release( s_pkey ); - - if( rc ) - ; - else { /* add better error handling or make gnupg use S-Exp directly */ - GCRY_SEXP list = gcry_sexp_find_token( s_ciph, "a" , 0 ); - assert( list ); - resarr[0] = gcry_sexp_nth_mpi( list, 1, 0 ); - assert( resarr[0] ); - gcry_sexp_release ( list ); - - list = gcry_sexp_find_token( s_ciph, "b" , 0 ); - assert( list ); - resarr[1] = gcry_sexp_nth_mpi( list, 1, 0 ); - assert( resarr[1] ); - gcry_sexp_release ( list ); - } - - gcry_sexp_release( s_ciph ); - return rc; -} - /**************** * Encode FILENAME with only the symmetric cipher. Take input from @@ -101,7 +50,11 @@ pk_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ) int encode_symmetric( const char *filename ) { - return encode_simple( filename, 1 ); + int compat = 1; + + if ( opt.expert ) + compat = 0; /* PGP knows how to handle this mode. */ + return encode_simple( filename, 1, compat ); } /**************** @@ -111,19 +64,49 @@ encode_symmetric( const char *filename ) int encode_store( const char *filename ) { - return encode_simple( filename, 0 ); + return encode_simple( filename, 0, 1 ); } +static void +encode_sesskey( DEK *dek, DEK **ret_dek, byte *enckey ) +{ + CIPHER_HANDLE hd; + DEK *c; + byte buf[33]; + assert ( dek->keylen < 32 ); + + c = m_alloc_clear( sizeof *c ); + c->keylen = dek->keylen; + c->algo = dek->algo; + make_session_key( c ); + /*log_hexdump( "thekey", c->key, c->keylen );*/ + + buf[0] = c->algo; + memcpy( buf + 1, c->key, c->keylen ); + + hd = cipher_open( dek->algo, CIPHER_MODE_CFB, 1 ); + cipher_setkey( hd, dek->key, dek->keylen ); + cipher_setiv( hd, NULL, 0 ); + cipher_encrypt( hd, buf, buf, c->keylen + 1 ); + cipher_close( hd ); + + memcpy( enckey, buf, c->keylen + 1 ); + memset( buf, 0, sizeof buf ); /* burn key */ + *ret_dek = c; +} static int -encode_simple( const char *filename, int mode ) +encode_simple( const char *filename, int mode, int compat ) { IOBUF inp, out; PACKET pkt; + DEK *dek = NULL; PKT_plaintext *pt = NULL; STRING2KEY *s2k = NULL; + byte enckey[33]; int rc = 0; + int seskeylen = 0; u32 filesize; cipher_filter_context_t cfx; armor_filter_context_t afx; @@ -136,40 +119,62 @@ encode_simple( const char *filename, int mode ) memset( &zfx, 0, sizeof zfx); memset( &tfx, 0, sizeof tfx); init_packet(&pkt); + + if (opt.compress == -1 && is_file_compressed(filename, &rc)) + { + if (opt.verbose) + log_info(_("`%s' already compressed\n"), filename); + do_compress = 0; + } + if (rc) + return rc; /* prepare iobufs */ if( !(inp = iobuf_open(filename)) ) { log_error(_("%s: can't open: %s\n"), filename? filename: "[stdin]", strerror(errno) ); - return GPGERR_OPEN_FILE; + return G10ERR_OPEN_FILE; } if( opt.textmode ) iobuf_push_filter( inp, text_filter, &tfx ); + /* Due the the fact that we use don't use an IV to encrypt the + session key we can't use the new mode with RFC1991 because + it has no S2K salt. RFC1991 always uses simple S2K. */ + if ( opt.rfc1991 && !compat ) + compat = 1; + cfx.dek = NULL; if( mode ) { - s2k = gcry_xcalloc( 1, sizeof *s2k ); + s2k = m_alloc_clear( sizeof *s2k ); s2k->mode = opt.rfc1991? 0:opt.s2k_mode; s2k->hash_algo = opt.def_digest_algo ? opt.def_digest_algo : opt.s2k_digest_algo; cfx.dek = passphrase_to_dek( NULL, 0, - opt.def_cipher_algo ? opt.def_cipher_algo - : opt.s2k_cipher_algo , s2k, 2 ); + opt.def_cipher_algo ? opt.def_cipher_algo + : opt.s2k_cipher_algo , s2k, 2, NULL ); if( !cfx.dek || !cfx.dek->keylen ) { - rc = GPGERR_PASSPHRASE; - gcry_free(cfx.dek); - gcry_free(s2k); + rc = G10ERR_PASSPHRASE; + m_free(cfx.dek); + m_free(s2k); iobuf_close(inp); - log_error(_("error creating passphrase: %s\n"), gpg_errstr(rc) ); + log_error(_("error creating passphrase: %s\n"), g10_errstr(rc) ); return rc; } + if ( !compat ) { + seskeylen = cipher_get_keylen( opt.def_cipher_algo ? + opt.def_cipher_algo: + opt.s2k_cipher_algo ) / 8; + encode_sesskey( cfx.dek, &dek, enckey ); + m_free( cfx.dek ); cfx.dek = dek; + } } if( (rc = open_outfile( filename, opt.armor? 1:0, &out )) ) { iobuf_cancel(inp); - gcry_free(cfx.dek); - gcry_free(s2k); + m_free(cfx.dek); + m_free(s2k); return rc; } @@ -184,15 +189,19 @@ encode_simple( const char *filename, int mode ) } #endif if( s2k && !opt.rfc1991 ) { - PKT_symkey_enc *enc = gcry_xcalloc( 1, sizeof *enc ); + PKT_symkey_enc *enc = m_alloc_clear( sizeof *enc + seskeylen + 1 ); enc->version = 4; enc->cipher_algo = cfx.dek->algo; enc->s2k = *s2k; + if ( !compat && seskeylen ) { + enc->seskeylen = seskeylen + 1; /* algo id */ + memcpy( enc->seskey, enckey, seskeylen + 1 ); + } pkt.pkttype = PKT_SYMKEY_ENC; pkt.pkt.symkey_enc = enc; if( (rc = build_packet( out, &pkt )) ) - log_error("build symkey packet failed: %s\n", gpg_errstr(rc) ); - gcry_free(enc); + log_error("build symkey packet failed: %s\n", g10_errstr(rc) ); + m_free(enc); } if (!opt.no_literal) { @@ -200,30 +209,36 @@ encode_simple( const char *filename, int mode ) if( filename || opt.set_filename ) { char *s = make_basename( opt.set_filename ? opt.set_filename : filename ); - pt = gcry_xmalloc( sizeof *pt + strlen(s) - 1 ); + pt = m_alloc( sizeof *pt + strlen(s) - 1 ); pt->namelen = strlen(s); memcpy(pt->name, s, pt->namelen ); - gcry_free(s); + m_free(s); } else { /* no filename */ - pt = gcry_xmalloc( sizeof *pt - 1 ); + pt = m_alloc( sizeof *pt - 1 ); pt->namelen = 0; } } - /* pgp5 has problems to decrypt symmetrically encrypted data from - * GnuPG if the filelength is in the inner packet. It works - * when only partial length headers are use. Until we have - * tracked this problem down. We use this temporary fix - * (fixme: remove the && !mode ) - */ - if( filename && !opt.textmode && !mode ) { + /* Note that PGP 5 has problems decrypting symmetrically encrypted + data if the file length is in the inner packet. It works when + only partial length headers are use. In the past, we always + used partial body length here, but since PGP 2, PGP 6, and PGP + 7 need the file length, and nobody should be using PGP 5 + nowadays anyway, this is now set to the file length. Note also + that this only applies to the RFC-1991 style symmetric + messages, and not the RFC-2440 style. PGP 6 and 7 work with + either partial length or fixed length with the new style + messages. */ + + if( filename && !opt.textmode ) { if( !(filesize = iobuf_get_filelength(inp)) ) log_info(_("%s: WARNING: empty file\n"), filename ); /* we can't yet encode the length of very large files, - * so we switch to partial length encoding in this case */ + * so we switch to partial lengthn encoding in this case */ if ( filesize >= IOBUF_FILELENGTH_LIMIT ) filesize = 0; + } else filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */ @@ -239,7 +254,11 @@ encode_simple( const char *filename, int mode ) cfx.datalen = filesize && !do_compress ? calc_packet_length( &pkt ) : 0; } else - cfx.datalen = filesize && !do_compress ? filesize : 0; + { + cfx.datalen = filesize && !do_compress ? filesize : 0; + pkt.pkttype = 0; + pkt.pkt.generic = NULL; + } /* register the cipher filter */ if( mode ) @@ -251,7 +270,7 @@ encode_simple( const char *filename, int mode ) /* do the work */ if (!opt.no_literal) { if( (rc = build_packet( out, &pkt )) ) - log_error("build_packet failed: %s\n", gpg_errstr(rc) ); + log_error("build_packet failed: %s\n", g10_errstr(rc) ); } else { /* user requested not to create a literal packet, @@ -260,8 +279,8 @@ encode_simple( const char *filename, int mode ) int bytes_copied; while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1) if (iobuf_write(out, copy_buffer, bytes_copied) == -1) { - rc = GPGERR_WRITE_FILE; - log_error("copying input to output failed: %s\n", gpg_errstr(rc) ); + rc = G10ERR_WRITE_FILE; + log_error("copying input to output failed: %s\n", g10_errstr(rc) ); break; } memset(copy_buffer, 0, 4096); /* burn buffer */ @@ -271,13 +290,16 @@ encode_simple( const char *filename, int mode ) iobuf_close(inp); if (rc) iobuf_cancel(out); - else + else { iobuf_close(out); /* fixme: check returncode */ + if (mode) + write_status( STATUS_END_ENCRYPTION ); + } if (pt) pt->buf = NULL; free_packet(&pkt); - gcry_free(cfx.dek); - gcry_free(s2k); + m_free(cfx.dek); + m_free(s2k); return rc; } @@ -291,123 +313,203 @@ encode_crypt( const char *filename, STRLIST remusr ) IOBUF inp = NULL, out = NULL; PACKET pkt; PKT_plaintext *pt = NULL; - int rc = 0; + int rc = 0, rc2 = 0; u32 filesize; + cipher_filter_context_t cfx; armor_filter_context_t afx; compress_filter_context_t zfx; text_filter_context_t tfx; - encrypt_filter_context_t efx; - PK_LIST pk_list; + PK_LIST pk_list,work_list; int do_compress = opt.compress && !opt.rfc1991; + + memset( &cfx, 0, sizeof cfx); memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); memset( &tfx, 0, sizeof tfx); - memset( &efx, 0, sizeof efx); init_packet(&pkt); - if( (rc=build_pk_list( remusr, &pk_list, GCRY_PK_USAGE_ENCR)) ) + if( (rc=build_pk_list( remusr, &pk_list, PUBKEY_USAGE_ENC)) ) return rc; + if(opt.pgp2) { + for(work_list=pk_list; work_list; work_list=work_list->next) + if(!(is_RSA(work_list->pk->pubkey_algo) && + nbits_from_pk(work_list->pk)<=2048)) + { + log_info(_("you can only encrypt to RSA keys of 2048 bits or " + "less in --pgp2 mode\n")); + log_info(_("this message may not be usable by PGP 2.x\n")); + opt.pgp2=0; + break; + } + } + + if (opt.compress == -1 && is_file_compressed(filename, &rc2)) + { + if (opt.verbose) + log_info(_("`%s' already compressed\n"), filename); + do_compress = 0; + } + if (rc2) + { + rc = rc2; + goto leave; + } + /* prepare iobufs */ if( !(inp = iobuf_open(filename)) ) { log_error(_("can't open %s: %s\n"), filename? filename: "[stdin]", strerror(errno) ); - rc = GPGERR_OPEN_FILE; + rc = G10ERR_OPEN_FILE; goto leave; } else if( opt.verbose ) log_info(_("reading from `%s'\n"), filename? filename: "[stdin]"); - /* If the user selected textmode, push the text filter onto the input */ if( opt.textmode ) iobuf_push_filter( inp, text_filter, &tfx ); - /* Now we can create the outputfile */ if( (rc = open_outfile( filename, opt.armor? 1:0, &out )) ) goto leave; - /* The first thing we have to push on the output stream - * is the armor filter */ + if( opt.armor ) iobuf_push_filter( out, armor_filter, &afx ); + #ifdef ENABLE_COMMENT_PACKETS + else { + write_comment( out, "#created by GNUPG v" VERSION " (" + PRINTABLE_OS_NAME ")"); + if( opt.comment_string ) + write_comment( out, opt.comment_string ); + } + #endif + /* create a session key */ + cfx.dek = m_alloc_secure_clear (sizeof *cfx.dek); + if( !opt.def_cipher_algo ) { /* try to get it from the prefs */ + cfx.dek->algo = select_algo_from_prefs(pk_list,PREFTYPE_SYM,-1,NULL); + /* The only way select_algo_from_prefs can fail here is when + mixing v3 and v4 keys, as v4 keys have an implicit + preference entry for 3DES, and the pk_list cannot be empty. + In this case, use 3DES anyway as it's the safest choice - + perhaps the v3 key is being used in an OpenPGP + implementation and we know that the implementation behind + any v4 key can handle 3DES. */ + if( cfx.dek->algo == -1 ) { + cfx.dek->algo = CIPHER_ALGO_3DES; - /* Prepare the plaintext packet */ - { - if (!opt.no_literal) { - if( filename || opt.set_filename ) { - char *s = make_basename( opt.set_filename ? - opt.set_filename : filename ); - pt = gcry_xmalloc( sizeof *pt + strlen(s) - 1 ); - pt->namelen = strlen(s); - memcpy(pt->name, s, pt->namelen ); - gcry_free(s); - } - else { /* no filename */ - pt = gcry_xmalloc( sizeof *pt - 1 ); - pt->namelen = 0; - } - } - - if( filename && !opt.textmode ) { - if( !(filesize = iobuf_get_filelength(inp)) ) - log_info(_("%s: WARNING: empty file\n"), filename ); - /* we can't yet encode the length of very large files, - * so we switch to partial lengthn encoding in this case */ - if ( filesize >= IOBUF_FILELENGTH_LIMIT ) - filesize = 0; - } - else - filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */ - - if (!opt.no_literal) { - pt->timestamp = make_timestamp(); - pt->mode = opt.textmode ? 't' : 'b'; - pt->len = filesize; - pt->new_ctb = !pt->len && !opt.rfc1991; - pt->buf = inp; - pkt.pkttype = PKT_PLAINTEXT; - pkt.pkt.plaintext = pt; - efx.cfx.datalen = filesize && !do_compress? - calc_packet_length( &pkt ) : 0; - } - else - efx.cfx.datalen = filesize && !do_compress ? filesize : 0; - } /* end preparation of plaintext packet */ - - /* push in the actual encryption filter */ - efx.pk_list = pk_list; - iobuf_push_filter( out, encrypt_filter, &efx ); - - /* register the compress filter (so that it is done before encryption) */ - if( do_compress ) { - int compr_algo = select_algo_from_prefs( pk_list, PREFTYPE_COMPR ); - if( !compr_algo ) - ; /* don't use compression */ - else { - if( compr_algo == 1 ) - zfx.algo = 1; /* default is 2 */ - iobuf_push_filter( out, compress_filter, &zfx ); + if( opt.pgp2 ) { + log_info(_("unable to use the IDEA cipher for all of the keys " + "you are encrypting to.\n")); + log_info(_("this message may not be usable by PGP 2.x\n")); + opt.pgp2=0; + } } } + else { + if(!opt.expert && + select_algo_from_prefs(pk_list,PREFTYPE_SYM, + opt.def_cipher_algo,NULL)!=opt.def_cipher_algo) + log_info(_("forcing symmetric cipher %s (%d) " + "violates recipient preferences\n"), + cipher_algo_to_string(opt.def_cipher_algo), + opt.def_cipher_algo); + + cfx.dek->algo = opt.def_cipher_algo; + } + cfx.dek->use_mdc = select_mdc_from_pklist (pk_list); + + make_session_key( cfx.dek ); + if( DBG_CIPHER ) + log_hexdump("DEK is: ", cfx.dek->key, cfx.dek->keylen ); + + rc = write_pubkey_enc_from_list( pk_list, cfx.dek, out ); + if( rc ) + goto leave; + + if (!opt.no_literal) { + /* setup the inner packet */ + if( filename || opt.set_filename ) { + char *s = make_basename( opt.set_filename ? opt.set_filename : filename ); + pt = m_alloc( sizeof *pt + strlen(s) - 1 ); + pt->namelen = strlen(s); + memcpy(pt->name, s, pt->namelen ); + m_free(s); + } + else { /* no filename */ + pt = m_alloc( sizeof *pt - 1 ); + pt->namelen = 0; + } + } + + if( filename && !opt.textmode ) { + if( !(filesize = iobuf_get_filelength(inp)) ) + log_info(_("%s: WARNING: empty file\n"), filename ); + /* we can't yet encode the length of very large files, + * so we switch to partial length encoding in this case */ + if ( filesize >= IOBUF_FILELENGTH_LIMIT ) + filesize = 0; + } + else + filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */ + + if (!opt.no_literal) { + pt->timestamp = make_timestamp(); + pt->mode = opt.textmode ? 't' : 'b'; + pt->len = filesize; + pt->new_ctb = !pt->len && !opt.rfc1991; + pt->buf = inp; + pkt.pkttype = PKT_PLAINTEXT; + pkt.pkt.plaintext = pt; + cfx.datalen = filesize && !do_compress? calc_packet_length( &pkt ) : 0; + } + else + cfx.datalen = filesize && !do_compress ? filesize : 0; + + /* register the cipher filter */ + iobuf_push_filter( out, cipher_filter, &cfx ); + + /* register the compress filter */ + if( do_compress ) { + int compr_algo = opt.def_compress_algo; + + if(compr_algo==-1) + { + if((compr_algo= + select_algo_from_prefs(pk_list,PREFTYPE_ZIP,-1,NULL))==-1) + compr_algo=DEFAULT_COMPRESS_ALGO; + } + else if(!opt.expert && + select_algo_from_prefs(pk_list,PREFTYPE_ZIP, + compr_algo,NULL)!=compr_algo) + log_info(_("forcing compression algorithm %s (%d) " + "violates recipient preferences\n"), + compress_algo_to_string(compr_algo),compr_algo); + + /* algo 0 means no compression */ + if( compr_algo ) + { + zfx.algo = compr_algo; + iobuf_push_filter( out, compress_filter, &zfx ); + } + } /* do the work */ if (!opt.no_literal) { if( (rc = build_packet( out, &pkt )) ) - log_error("build_packet failed: %s\n", gpg_errstr(rc) ); + log_error("build_packet failed: %s\n", g10_errstr(rc) ); } else { - /* user requested not to create a literal packet, - * so we copy the plain data */ + /* user requested not to create a literal packet, so we copy the plain data */ byte copy_buffer[4096]; int bytes_copied; while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1) if (iobuf_write(out, copy_buffer, bytes_copied) == -1) { - rc = GPGERR_WRITE_FILE; - log_error("copying input to output failed: %s\n", gpg_errstr(rc) ); + rc = G10ERR_WRITE_FILE; + log_error("copying input to output failed: %s\n", g10_errstr(rc) ); break; } - memset(copy_buffer, 0, DIM(copy_buffer)); /* burn buffer */ + memset(copy_buffer, 0, 4096); /* burn buffer */ } /* finish the stuff */ @@ -415,13 +517,14 @@ encode_crypt( const char *filename, STRLIST remusr ) iobuf_close(inp); if( rc ) iobuf_cancel(out); - else + else { iobuf_close(out); /* fixme: check returncode */ + write_status( STATUS_END_ENCRYPTION ); + } if( pt ) pt->buf = NULL; free_packet(&pkt); - gcry_free(efx.cfx.dek); /* Hmmm, why does the encrypt filter does not - * take care about this? */ + m_free(cfx.dek); release_pk_list( pk_list ); return rc; } @@ -430,7 +533,7 @@ encode_crypt( const char *filename, STRLIST remusr ) /**************** - * Filter to handle the entire public key encryption. + * Filter to do a complete public key encryption. */ int encrypt_filter( void *opaque, int control, @@ -445,16 +548,32 @@ encrypt_filter( void *opaque, int control, } else if( control == IOBUFCTRL_FLUSH ) { /* encrypt */ if( !efx->header_okay ) { - efx->cfx.dek = gcry_xmalloc_secure( sizeof *efx->cfx.dek ); + efx->cfx.dek = m_alloc_secure_clear( sizeof *efx->cfx.dek ); if( !opt.def_cipher_algo ) { /* try to get it from the prefs */ efx->cfx.dek->algo = - select_algo_from_prefs( efx->pk_list, PREFTYPE_SYM ); - if( efx->cfx.dek->algo == -1 ) + select_algo_from_prefs(efx->pk_list,PREFTYPE_SYM,-1,NULL); + if( efx->cfx.dek->algo == -1 ) { + /* because 3DES is implicitly in the prefs, this can only + * happen if we do not have any public keys in the list */ efx->cfx.dek->algo = DEFAULT_CIPHER_ALGO; + } } - else - efx->cfx.dek->algo = opt.def_cipher_algo; + else { + if(!opt.expert && + select_algo_from_prefs(efx->pk_list,PREFTYPE_SYM, + opt.def_cipher_algo, + NULL)!=opt.def_cipher_algo) + log_info(_("forcing symmetric cipher %s (%d) " + "violates recipient preferences\n"), + cipher_algo_to_string(opt.def_cipher_algo), + opt.def_cipher_algo); + + efx->cfx.dek->algo = opt.def_cipher_algo; + } + + efx->cfx.dek->use_mdc = select_mdc_from_pklist (efx->pk_list); + make_session_key( efx->cfx.dek ); if( DBG_CIPHER ) log_hexdump("DEK is: ", @@ -497,7 +616,7 @@ write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out ) pk = pk_list->pk; print_pubkey_algo_note( pk->pubkey_algo ); - enc = gcry_xcalloc( 1, sizeof *enc ); + enc = m_alloc_clear( sizeof *enc ); enc->pubkey_algo = pk->pubkey_algo; keyid_from_pk( pk, enc->keyid ); enc->throw_keyid = opt.throw_keyid; @@ -517,17 +636,17 @@ write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out ) */ frame = encode_session_key( dek, pubkey_nbits( pk->pubkey_algo, pk->pkey ) ); - rc = pk_encrypt( pk->pubkey_algo, enc->data, frame, pk->pkey ); - mpi_release( frame ); + rc = pubkey_encrypt( pk->pubkey_algo, enc->data, frame, pk->pkey ); + mpi_free( frame ); if( rc ) - log_error("pubkey_encrypt failed: %s\n", gpg_errstr(rc) ); + log_error("pubkey_encrypt failed: %s\n", g10_errstr(rc) ); else { if( opt.verbose ) { char *ustr = get_user_id_string_native( enc->keyid ); log_info(_("%s/%s encrypted for: %s\n"), - gcry_pk_algo_name(enc->pubkey_algo), - gcry_cipher_algo_name(dek->algo), ustr ); - gcry_free(ustr); + pubkey_algo_to_string(enc->pubkey_algo), + cipher_algo_to_string(dek->algo), ustr ); + m_free(ustr); } /* and write it */ init_packet(&pkt); @@ -535,7 +654,7 @@ write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out ) pkt.pkt.pubkey_enc = enc; rc = build_packet( out, &pkt ); if( rc ) - log_error("build_packet(pubkey_enc) failed: %s\n", gpg_errstr(rc)); + log_error("build_packet(pubkey_enc) failed: %s\n", g10_errstr(rc)); } free_pubkey_enc(enc); if( rc ) @@ -544,3 +663,47 @@ write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out ) return 0; } +void +encode_crypt_files(int nfiles, char **files, STRLIST remusr) +{ + int rc = 0; + + if (opt.outfile) + { + log_error(_("--output doesn't work for this command\n")); + return; + } + + if (!nfiles) + { + char line[2048]; + unsigned int lno = 0; + while ( fgets(line, DIM(line), stdin) ) + { + lno++; + if (!*line || line[strlen(line)-1] != '\n') + { + log_error("input line %u too long or missing LF\n", lno); + return; + } + line[strlen(line)-1] = '\0'; + print_file_status(STATUS_FILE_START, line, 2); + if ( (rc = encode_crypt(line, remusr)) ) + log_error("%s: encryption failed: %s\n", + print_fname_stdin(line), g10_errstr(rc) ); + write_status( STATUS_FILE_DONE ); + } + } + else + { + while (nfiles--) + { + print_file_status(STATUS_FILE_START, *files, 2); + if ( (rc = encode_crypt(*files, remusr)) ) + log_error("%s: encryption failed: %s\n", + print_fname_stdin(*files), g10_errstr(rc) ); + write_status( STATUS_FILE_DONE ); + files++; + } + } +} diff --git a/g10/encr-data.c b/g10/encr-data.c index 17d43e9d6..c8a8c85db 100644 --- a/g10/encr-data.c +++ b/g10/encr-data.c @@ -1,5 +1,5 @@ /* encr-data.c - process an encrypted data packet - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -23,10 +23,11 @@ #include #include #include - -#include #include "util.h" +#include "memory.h" #include "packet.h" +#include "mpi.h" +#include "cipher.h" #include "options.h" #include "i18n.h" @@ -37,8 +38,8 @@ static int decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); typedef struct { - GCRY_CIPHER_HD cipher_hd; - GCRY_MD_HD mdc_hash; + CIPHER_HANDLE cipher_hd; + MD_HANDLE mdc_hash; char defer[20]; int defer_filled; int eof_seen; @@ -55,20 +56,21 @@ decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek ) byte *p; int rc=0, c, i; byte temp[32]; - unsigned int blocksize; - unsigned int nprefix; + unsigned blocksize; + unsigned nprefix; memset( &dfx, 0, sizeof dfx ); - if( gcry_cipher_test_algo( dek->algo ) ) { - if( opt.verbose ) + if( opt.verbose && !dek->algo_info_printed ) { + const char *s = cipher_algo_to_string( dek->algo ); + if( s ) + log_info(_("%s encrypted data\n"), s ); + else log_info(_("encrypted with unknown algorithm %d\n"), dek->algo ); - rc = GPGERR_CIPHER_ALGO; - goto leave; + dek->algo_info_printed = 1; } - if( opt.verbose ) - log_info(_("%s encrypted data\n"), gcry_cipher_algo_name( dek->algo ) ); - - blocksize = gcry_cipher_get_algo_blklen( dek->algo ); + if( (rc=check_cipher_algo(dek->algo)) ) + goto leave; + blocksize = cipher_get_blocksize(dek->algo); if( !blocksize || blocksize > 16 ) log_fatal("unsupported blocksize %u\n", blocksize ); nprefix = blocksize; @@ -76,36 +78,28 @@ decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek ) BUG(); if( ed->mdc_method ) { - dfx.mdc_hash = gcry_md_open( ed->mdc_method, 0 ); + dfx.mdc_hash = md_open( ed->mdc_method, 0 ); if ( DBG_HASHING ) - gcry_md_start_debug(dfx.mdc_hash, "checkmdc"); + md_start_debug(dfx.mdc_hash, "checkmdc"); } - if( !(dfx.cipher_hd = gcry_cipher_open( dek->algo, - GCRY_CIPHER_MODE_CFB, - GCRY_CIPHER_SECURE - | ((ed->mdc_method || dek->algo >= 100)? - 0 : GCRY_CIPHER_ENABLE_SYNC) )) - ) { - /* we should never get an error here cause we already checked, that - * the algorithm is available. What about a flag to let the function - * die in this case? */ - BUG(); - } - - + dfx.cipher_hd = cipher_open( dek->algo, + ed->mdc_method? CIPHER_MODE_CFB + : CIPHER_MODE_AUTO_CFB, 1 ); /* log_hexdump( "thekey", dek->key, dek->keylen );*/ - rc = gcry_cipher_setkey( dfx.cipher_hd, dek->key, dek->keylen ); - if( rc == GCRYERR_WEAK_KEY ) { + rc = cipher_setkey( dfx.cipher_hd, dek->key, dek->keylen ); + if( rc == G10ERR_WEAK_KEY ) log_info(_("WARNING: message was encrypted with " "a weak key in the symmetric cipher.\n")); - rc = 0; - } else if( rc ) { - log_error("key setup failed: %s\n", gcry_strerror(rc) ); + log_error("key setup failed: %s\n", g10_errstr(rc) ); goto leave; } + if (!ed->buf) { + log_error(_("problem handling encrypted packet\n")); + goto leave; + } - gcry_cipher_setiv( dfx.cipher_hd, NULL, 0 ); + cipher_setiv( dfx.cipher_hd, NULL, 0 ); if( ed->len ) { for(i=0; i < (nprefix+2) && ed->len; i++, ed->len-- ) { @@ -122,17 +116,17 @@ decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek ) else temp[i] = c; } - gcry_cipher_decrypt( dfx.cipher_hd, temp, nprefix+2, NULL, 0 ); - gcry_cipher_sync( dfx.cipher_hd ); + cipher_decrypt( dfx.cipher_hd, temp, temp, nprefix+2); + cipher_sync( dfx.cipher_hd ); p = temp; /* log_hexdump( "prefix", temp, nprefix+2 ); */ if( p[nprefix-2] != p[nprefix] || p[nprefix-1] != p[nprefix+1] ) { - rc = GPGERR_BAD_KEY; + rc = G10ERR_BAD_KEY; goto leave; } if( dfx.mdc_hash ) - gcry_md_write( dfx.mdc_hash, temp, nprefix+2 ); + md_write( dfx.mdc_hash, temp, nprefix+2 ); if( ed->mdc_method ) iobuf_push_filter( ed->buf, mdc_decode_filter, &dfx ); @@ -142,21 +136,23 @@ decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek ) proc_packets( procctx, ed->buf ); ed->buf = NULL; if( ed->mdc_method && dfx.eof_seen == 2 ) - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; else if( ed->mdc_method ) { /* check the mdc */ - int datalen = gcry_md_get_algo_dlen( ed->mdc_method ); + int datalen = md_digest_length( ed->mdc_method ); - gcry_cipher_decrypt( dfx.cipher_hd, dfx.defer, 20, NULL, 0); + cipher_decrypt( dfx.cipher_hd, dfx.defer, dfx.defer, 20); + md_final( dfx.mdc_hash ); if( datalen != 20 - || memcmp(gcry_md_read( dfx.mdc_hash, 0 ), dfx.defer, datalen) ) - rc = GPGERR_BAD_SIGN; + || memcmp(md_read( dfx.mdc_hash, 0 ), dfx.defer, datalen) ) + rc = G10ERR_BAD_SIGN; /*log_hexdump("MDC calculated:", md_read( dfx.mdc_hash, 0), datalen);*/ /*log_hexdump("MDC message :", dfx.defer, 20);*/ } + leave: - gcry_cipher_close(dfx.cipher_hd); - gcry_md_close( dfx.mdc_hash ); + cipher_close(dfx.cipher_hd); + md_close( dfx.mdc_hash ); return rc; } @@ -222,8 +218,8 @@ mdc_decode_filter( void *opaque, int control, IOBUF a, } if( n ) { - gcry_cipher_decrypt( dfx->cipher_hd, buf, n, NULL, 0); - gcry_md_write( dfx->mdc_hash, buf, n ); + cipher_decrypt( dfx->cipher_hd, buf, buf, n); + md_write( dfx->mdc_hash, buf, n ); } else { assert( dfx->eof_seen ); @@ -249,7 +245,7 @@ decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) n = iobuf_read( a, buf, size ); if( n == -1 ) n = 0; if( n ) - gcry_cipher_decrypt( fc->cipher_hd, buf, n, NULL, 0 ); + cipher_decrypt( fc->cipher_hd, buf, buf, n); else rc = -1; /* eof */ *ret_len = n; diff --git a/g10/exec.c b/g10/exec.c new file mode 100644 index 000000000..229c968bc --- /dev/null +++ b/g10/exec.c @@ -0,0 +1,579 @@ +/* exec.c - generic call-a-program code + * Copyright (C) 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#ifndef EXEC_TEMPFILE_ONLY +#include +#endif +#ifdef HAVE_DOSISH_SYSTEM +#include +#endif +#include +#include +#include +#include +#include "options.h" +#include "memory.h" +#include "i18n.h" +#include "iobuf.h" +#include "util.h" +#include "exec.h" + +#ifdef NO_EXEC +int exec_write(struct exec_info **info,const char *program, + const char *args_in,const char *name,int writeonly,int binary) +{ + log_error(_("no remote program execution supported\n")); + return G10ERR_GENERAL; +} + +int exec_read(struct exec_info *info) { return G10ERR_GENERAL; } +int exec_finish(struct exec_info *info) { return G10ERR_GENERAL; } + +#else /* ! NO_EXEC */ + +#ifndef HAVE_MKDTEMP +char *mkdtemp(char *template); +#endif + +#if defined (__MINGW32__) || defined (__CYGWIN32__) +/* This is a nicer system() for windows that waits for programs to + return before returning control to the caller. I hate helpful + computers. */ +static int win_system(const char *command) +{ + PROCESS_INFORMATION pi; + STARTUPINFO si; + char *string; + + /* We must use a copy of the command as CreateProcess modifies this + argument. */ + string=m_strdup(command); + + memset(&pi,0,sizeof(pi)); + memset(&si,0,sizeof(si)); + si.cb=sizeof(si); + + if(!CreateProcess(NULL,string,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) + return -1; + + /* Wait for the child to exit */ + WaitForSingleObject(pi.hProcess,INFINITE); + + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + m_free(string); + + return 0; +} +#endif + +/* Makes a temp directory and filenames */ +static int make_tempdir(struct exec_info *info) +{ + char *tmp=opt.temp_dir,*namein=info->name,*nameout; + + if(!namein) + namein=info->binary?"tempin" EXTSEP_S "bin":"tempin" EXTSEP_S "txt"; + + nameout=info->binary?"tempout" EXTSEP_S "bin":"tempout" EXTSEP_S "txt"; + + /* Make up the temp dir and files in case we need them */ + + if(tmp==NULL) + { +#if defined (__MINGW32__) || defined (__CYGWIN32__) + tmp=m_alloc(256); + if(GetTempPath(256,tmp)==0) + strcpy(tmp,"c:\\windows\\temp"); + else + { + int len=strlen(tmp); + + /* GetTempPath may return with \ on the end */ + while(len>0 && tmp[len-1]=='\\') + { + tmp[len-1]='\0'; + len--; + } + } +#else /* More unixish systems */ + tmp=getenv("TMPDIR"); + if(tmp==NULL) + { + tmp=getenv("TMP"); + if(tmp==NULL) + { +#ifdef __riscos__ + tmp=".GnuPG"; + mkdir(tmp,0700); /* Error checks occur later on */ +#else + tmp="/tmp"; +#endif + } + } +#endif + } + + info->tempdir=m_alloc(strlen(tmp)+strlen(DIRSEP_S)+10+1); + + sprintf(info->tempdir,"%s" DIRSEP_S "gpg-XXXXXX",tmp); + +#if defined (__MINGW32__) || defined (__CYGWIN32__) + m_free(tmp); +#endif + + if(mkdtemp(info->tempdir)==NULL) + log_error(_("%s: can't create directory: %s\n"), + info->tempdir,strerror(errno)); + else + { + info->madedir=1; + + info->tempfile_in=m_alloc(strlen(info->tempdir)+ + strlen(DIRSEP_S)+strlen(namein)+1); + sprintf(info->tempfile_in,"%s" DIRSEP_S "%s",info->tempdir,namein); + + if(!info->writeonly) + { + info->tempfile_out=m_alloc(strlen(info->tempdir)+ + strlen(DIRSEP_S)+strlen(nameout)+1); + sprintf(info->tempfile_out,"%s" DIRSEP_S "%s",info->tempdir,nameout); + } + } + + return info->madedir?0:G10ERR_GENERAL; +} + +/* Expands %i and %o in the args to the full temp files within the + temp directory. */ +static int expand_args(struct exec_info *info,const char *args_in) +{ + const char *ch=args_in; + int size,len; + + info->use_temp_files=0; + info->keep_temp_files=0; + + if(DBG_EXTPROG) + log_debug("expanding string \"%s\"\n",args_in); + + size=100; + info->command=m_alloc(size); + len=0; + info->command[0]='\0'; + + while(*ch!='\0') + { + if(*ch=='%') + { + char *append=NULL; + + ch++; + + switch(*ch) + { + case 'O': + info->keep_temp_files=1; + /* fall through */ + + case 'o': /* out */ + if(!info->madedir) + { + if(make_tempdir(info)) + goto fail; + } + append=info->tempfile_out; + info->use_temp_files=1; + break; + + case 'I': + info->keep_temp_files=1; + /* fall through */ + + case 'i': /* in */ + if(!info->madedir) + { + if(make_tempdir(info)) + goto fail; + } + append=info->tempfile_in; + info->use_temp_files=1; + break; + + case '%': + append="%"; + break; + } + + if(append) + { + while(strlen(append)+len>size-1) + { + size+=100; + info->command=m_realloc(info->command,size); + } + + strcat(info->command,append); + len+=strlen(append); + } + } + else + { + if(len==size-1) /* leave room for the \0 */ + { + size+=100; + info->command=m_realloc(info->command,size); + } + + info->command[len++]=*ch; + info->command[len]='\0'; + } + + ch++; + } + + if(DBG_EXTPROG) + log_debug("args expanded to \"%s\", use %d, keep %d\n", + info->command,info->use_temp_files,info->keep_temp_files); + + return 0; + + fail: + + m_free(info->command); + info->command=NULL; + + return G10ERR_GENERAL; +} + +/* Either handles the tempfile creation, or the fork/exec. If it + returns ok, then info->tochild is a FILE * that can be written to. + The rules are: if there are no args, then it's a fork/exec/pipe. + If there are args, but no tempfiles, then it's a fork/exec/pipe via + shell -c. If there are tempfiles, then it's a system. */ + +int exec_write(struct exec_info **info,const char *program, + const char *args_in,const char *name,int writeonly,int binary) +{ + int ret=G10ERR_GENERAL; + + if(opt.exec_disable && !opt.no_perm_warn) + { + log_info(_("external program calls are disabled due to unsafe " + "options file permissions\n")); + + return ret; + } + +#if defined(HAVE_GETUID) && defined(HAVE_GETEUID) + /* There should be no way to get to this spot while still carrying + setuid privs. Just in case, bomb out if we are. */ + if(getuid()!=geteuid()) + BUG(); +#endif + + if(program==NULL && args_in==NULL) + BUG(); + + *info=m_alloc_clear(sizeof(struct exec_info)); + + if(name) + (*info)->name=m_strdup(name); + (*info)->binary=binary; + (*info)->writeonly=writeonly; + + /* Expand the args, if any */ + if(args_in && expand_args(*info,args_in)) + goto fail; + +#ifdef EXEC_TEMPFILE_ONLY + if(!(*info)->use_temp_files) + { + log_error(_("this platform requires temp files when calling external " + "programs\n")); + goto fail; + } + +#else /* !EXEC_TEMPFILE_ONLY */ + + /* If there are no args, or there are args, but no temp files, we + can use fork/exec/pipe */ + if(args_in==NULL || (*info)->use_temp_files==0) + { + int to[2],from[2]; + + if(pipe(to)==-1) + goto fail; + + if(pipe(from)==-1) + { + close(to[0]); + close(to[1]); + goto fail; + } + + if(((*info)->child=fork())==-1) + { + close(to[0]); + close(to[1]); + close(from[0]); + close(from[1]); + goto fail; + } + + if((*info)->child==0) + { + char *shell=getenv("SHELL"); + + if(shell==NULL) + shell="/bin/sh"; + + /* I'm the child */ + + /* If the program isn't going to respond back, they get to + keep their stdout/stderr */ + if(!(*info)->writeonly) + { + /* implied close of STDERR */ + if(dup2(STDOUT_FILENO,STDERR_FILENO)==-1) + _exit(1); + + /* implied close of STDOUT */ + close(from[0]); + if(dup2(from[1],STDOUT_FILENO)==-1) + _exit(1); + } + + /* implied close of STDIN */ + close(to[1]); + if(dup2(to[0],STDIN_FILENO)==-1) + _exit(1); + + if(args_in==NULL) + { + if(DBG_EXTPROG) + log_debug("execlp: %s\n",program); + + execlp(program,program,NULL); + } + else + { + if(DBG_EXTPROG) + log_debug("execlp: %s -c %s\n",shell,(*info)->command); + + execlp(shell,shell,"-c",(*info)->command,NULL); + } + + /* If we get this far the exec failed. Clean up and return. */ + + log_error(_("unable to execute %s \"%s\": %s\n"), + args_in==NULL?"program":"shell", + args_in==NULL?program:shell, + strerror(errno)); + + /* This mimics the POSIX sh behavior - 127 means "not found" + from the shell. */ + if(errno==ENOENT) + _exit(127); + + _exit(1); + } + + /* I'm the parent */ + + close(to[0]); + + (*info)->tochild=fdopen(to[1],binary?"wb":"w"); + if((*info)->tochild==NULL) + { + close(to[1]); + ret=G10ERR_WRITE_FILE; + goto fail; + } + + close(from[1]); + + (*info)->fromchild=iobuf_fdopen(from[0],"r"); + if((*info)->fromchild==NULL) + { + close(from[0]); + ret=G10ERR_READ_FILE; + goto fail; + } + + /* fd iobufs are cached?! */ + iobuf_ioctl((*info)->fromchild,3,1,NULL); + + return 0; + } +#endif /* !EXEC_TEMPFILE_ONLY */ + + if(DBG_EXTPROG) + log_debug("using temp file \"%s\"\n",(*info)->tempfile_in); + + /* It's not fork/exec/pipe, so create a temp file */ + (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w"); + if((*info)->tochild==NULL) + { + log_error(_("%s: can't create: %s\n"), + (*info)->tempfile_in,strerror(errno)); + ret=G10ERR_WRITE_FILE; + goto fail; + } + + ret=0; + + fail: + return ret; +} + +int exec_read(struct exec_info *info) +{ + int ret=G10ERR_GENERAL; + + fclose(info->tochild); + info->tochild=NULL; + + if(info->use_temp_files) + { + if(DBG_EXTPROG) + log_debug("system() command is %s\n",info->command); + +#if defined (__MINGW32__) || defined (__CYGWIN32__) + info->progreturn=win_system(info->command); +#else + info->progreturn=system(info->command); +#endif + + if(info->progreturn==-1) + { + log_error(_("system error while calling external program: %s\n"), + strerror(errno)); + info->progreturn=127; + goto fail; + } + +#if defined(WIFEXITED) && defined(WEXITSTATUS) + if(WIFEXITED(info->progreturn)) + info->progreturn=WEXITSTATUS(info->progreturn); + else + { + log_error(_("unnatural exit of external program\n")); + info->progreturn=127; + goto fail; + } +#else + /* If we don't have the macros, do the best we can. */ + info->progreturn = (info->progreturn & 0xff00) >> 8; +#endif + + /* 127 is the magic value returned from system() to indicate + that the shell could not be executed, or from /bin/sh to + indicate that the program could not be executed. */ + + if(info->progreturn==127) + { + log_error(_("unable to execute external program\n")); + goto fail; + } + + if(!info->writeonly) + { + info->fromchild=iobuf_open(info->tempfile_out); + if(info->fromchild==NULL) + { + log_error(_("unable to read external program response: %s\n"), + strerror(errno)); + ret=G10ERR_READ_FILE; + goto fail; + } + + /* Do not cache this iobuf on close */ + iobuf_ioctl(info->fromchild,3,1,NULL); + } + } + + ret=0; + + fail: + return ret; +} + +int exec_finish(struct exec_info *info) +{ + int ret=info->progreturn; + + if(info->fromchild) + iobuf_close(info->fromchild); + + if(info->tochild) + fclose(info->tochild); + +#ifndef EXEC_TEMPFILE_ONLY + if(info->child>0) + { + if(waitpid(info->child,&info->progreturn,0)!=0 && + WIFEXITED(info->progreturn)) + ret=WEXITSTATUS(info->progreturn); + else + { + log_error(_("unnatural exit of external program\n")); + ret=127; + } + } +#endif + + if(info->madedir && !info->keep_temp_files) + { + if(info->tempfile_in) + { + if(unlink(info->tempfile_in)==-1) + log_info(_("Warning: unable to remove tempfile (%s) \"%s\": %s\n"), + "in",info->tempfile_in,strerror(errno)); + } + + if(info->tempfile_out) + { + if(unlink(info->tempfile_out)==-1) + log_info(_("Warning: unable to remove tempfile (%s) \"%s\": %s\n"), + "out",info->tempfile_out,strerror(errno)); + } + + if(rmdir(info->tempdir)==-1) + log_info(_("Warning: unable to remove temp directory \"%s\": %s\n"), + info->tempdir,strerror(errno)); + } + + m_free(info->command); + m_free(info->name); + m_free(info->tempdir); + m_free(info->tempfile_in); + m_free(info->tempfile_out); + m_free(info); + + return ret; +} +#endif /* ! NO_EXEC */ diff --git a/g10/exec.h b/g10/exec.h new file mode 100644 index 000000000..2e0be460b --- /dev/null +++ b/g10/exec.h @@ -0,0 +1,22 @@ +#ifndef _EXEC_H_ +#define _EXEC_H_ + +#include +#include +#include "iobuf.h" + +struct exec_info +{ + int progreturn,binary,writeonly,madedir,use_temp_files,keep_temp_files; + pid_t child; + FILE *tochild; + IOBUF fromchild; + char *command,*name,*tempdir,*tempfile_in,*tempfile_out; +}; + +int exec_write(struct exec_info **info,const char *program, + const char *args_in,const char *name,int writeonly,int binary); +int exec_read(struct exec_info *info); +int exec_finish(struct exec_info *info); + +#endif /* !_EXEC_H_ */ diff --git a/g10/export.c b/g10/export.c index 9a9cd9859..47d06e651 100644 --- a/g10/export.c +++ b/g10/export.c @@ -1,5 +1,5 @@ /* export.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,11 +25,11 @@ #include #include -#include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" +#include "memory.h" #include "util.h" #include "main.h" #include "i18n.h" @@ -83,8 +83,10 @@ do_export( STRLIST users, int secret, int onlyrfc ) IOBUF out = NULL; int any, rc; armor_filter_context_t afx; + compress_filter_context_t zfx; memset( &afx, 0, sizeof afx); + memset( &zfx, 0, sizeof zfx); rc = open_outfile( NULL, 0, &out ); if( rc ) @@ -94,6 +96,8 @@ do_export( STRLIST users, int secret, int onlyrfc ) afx.what = secret?5:1; iobuf_push_filter( out, armor_filter, &afx ); } + if( opt.compress_keys && opt.compress ) + iobuf_push_filter( out, compress_filter, &zfx ); rc = do_export_stream( out, users, secret, onlyrfc, &any ); if( rc || !any ) @@ -108,54 +112,58 @@ static int do_export_stream( IOBUF out, STRLIST users, int secret, int onlyrfc, int *any ) { int rc = 0; - compress_filter_context_t zfx; PACKET pkt; KBNODE keyblock = NULL; KBNODE kbctx, node; - KBPOS kbpos; + int ndesc; + KEYDB_SEARCH_DESC *desc = NULL; + KEYDB_HANDLE kdbhd; STRLIST sl; - int all = !users; *any = 0; - memset( &zfx, 0, sizeof zfx); init_packet( &pkt ); + kdbhd = keydb_new (secret); - if( opt.compress_keys && opt.compress ) - iobuf_push_filter( out, compress_filter, &zfx ); + if (!users) { + ndesc = 1; + desc = m_alloc_clear ( ndesc * sizeof *desc); + desc[0].mode = KEYDB_SEARCH_MODE_FIRST; + } + else { + for (ndesc=0, sl=users; sl; sl = sl->next, ndesc++) + ; + desc = m_alloc ( ndesc * sizeof *desc); + + for (ndesc=0, sl=users; sl; sl = sl->next) { + if (classify_user_id (sl->d, desc+ndesc)) + ndesc++; + else + log_error (_("key `%s' not found: %s\n"), + sl->d, g10_errstr (G10ERR_INV_USER_ID)); + } - if( all ) { - rc = enum_keyblocks_begin( &kbpos, secret ); - if( rc ) { - if( rc != -1 ) - log_error("enum_keyblocks_begin failed: %s\n", gpg_errstr(rc)); - goto leave; - } - all = 2; + /* it would be nice to see which of the given users did + actually match one in the keyring. To implement this we + need to have a found flag for each entry in desc and to set + this we must check all those entries after a match to mark + all matched one - currently we stop at the first match. To + do this we need an extra flag to enable this feature so */ } - /* use the correct sequence. strlist_last,prev do work correctly with - * NULL pointers :-) */ - for( sl=strlist_last(users); sl || all ; sl=strlist_prev( users, sl )) { - if( all ) { /* get the next user */ - rc = enum_keyblocks_next( kbpos, 1, &keyblock ); - if( rc == -1 ) /* EOF */ - break; - if( rc ) { - log_error("enum_keyblocks_next failed: %s\n", gpg_errstr(rc)); - break; - } - } - else { - /* search the userid */ - rc = secret? find_secret_keyblock_byname( &keyblock, sl->d ) - : find_keyblock_byname( &keyblock, sl->d ); - if( rc ) { - log_error(_("%s: user not found: %s\n"), sl->d, gpg_errstr(rc)); - rc = 0; - continue; - } - } + while (!(rc = keydb_search (kdbhd, desc, ndesc))) { + int sha1_warned=0; + u32 sk_keyid[2]; + + if (!users) + desc[0].mode = KEYDB_SEARCH_MODE_NEXT; + + /* read the keyblock */ + rc = keydb_get_keyblock (kdbhd, &keyblock ); + if( rc ) { + log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); + goto leave; + } /* do not export keys which are incompatible with rfc2440 */ if( onlyrfc && (node = find_kbnode( keyblock, PKT_PUBLIC_KEY )) ) { @@ -167,15 +175,29 @@ do_export_stream( IOBUF out, STRLIST users, int secret, int onlyrfc, int *any ) } } - /* we can't apply GNU mode 1001 on an unprotected key */ - if( secret == 2 - && (node = find_kbnode( keyblock, PKT_SECRET_KEY )) - && !node->pkt->pkt.secret_key->is_protected ) - { - log_info(_("key %08lX: not protected - skipped\n"), - (ulong)keyid_from_sk( node->pkt->pkt.secret_key, NULL) ); - continue; - } + node=find_kbnode( keyblock, PKT_SECRET_KEY ); + if(node) + { + PKT_secret_key *sk=node->pkt->pkt.secret_key; + + keyid_from_sk(sk,sk_keyid); + + /* we can't apply GNU mode 1001 on an unprotected key */ + if( secret == 2 && !sk->is_protected ) + { + log_info(_("key %08lX: not protected - skipped\n"), + (ulong)sk_keyid[1]); + continue; + } + + /* no v3 keys with GNU mode 1001 */ + if( secret == 2 && sk->version == 3 ) + { + log_info(_("key %08lX: PGP 2.x style key - skipped\n"), + (ulong)sk_keyid[1]); + continue; + } + } /* and write it */ for( kbctx=NULL; (node = walk_kbnode( keyblock, &kbctx, 0 )); ) { @@ -183,13 +205,30 @@ do_export_stream( IOBUF out, STRLIST users, int secret, int onlyrfc, int *any ) * secret keyring */ if( !secret && node->pkt->pkttype == PKT_COMMENT ) continue; - /* do not export packets which are marked as not exportable */ + /* make sure that ring_trust packets never get exported */ + if (node->pkt->pkttype == PKT_RING_TRUST) + continue; + if( node->pkt->pkttype == PKT_SIGNATURE ) { - const char *p; - p = parse_sig_subpkt2( node->pkt->pkt.signature, - SIGSUBPKT_EXPORTABLE, NULL ); - if( p && !*p ) - continue; /* not exportable */ + /* do not export packets which are marked as not exportable */ + if( !node->pkt->pkt.signature->flags.exportable ) + continue; /* not exportable */ + + /* do not export packets with a "sensitive" revocation + key. This will need revisiting when we start + supporting creating revocation keys and not just + reading them. */ + if( node->pkt->pkt.signature->revkey ) { + int i; + + for(i=0;ipkt->pkt.signature->numrevkeys;i++) + if(node->pkt->pkt.signature->revkey[i]->class & 0x40) + continue; + } + + /* delete our verification cache */ + delete_sig_subpkt (node->pkt->pkt.signature->unhashed, + SIGSUBPKT_PRIV_VERIFY_CACHE); } if( secret == 2 && node->pkt->pkttype == PKT_SECRET_KEY ) { @@ -202,13 +241,28 @@ do_export_stream( IOBUF out, STRLIST users, int secret, int onlyrfc, int *any ) node->pkt->pkt.secret_key->protect.s2k.mode = save_mode; } else { + /* Warn the user if the secret key or any of the secret + subkeys are protected with SHA1 and we have + simple_sk_checksum set. */ + if(!sha1_warned && opt.simple_sk_checksum && + (node->pkt->pkttype==PKT_SECRET_KEY || + node->pkt->pkttype==PKT_SECRET_SUBKEY) && + node->pkt->pkt.secret_key->protect.sha1chk) + { + /* I hope this warning doesn't confuse people. */ + log_info("Warning: secret key %08lX does not have a " + "simple SK checksum\n",(ulong)sk_keyid[1]); + + sha1_warned=1; + } + rc = build_packet( out, node->pkt ); } if( rc ) { log_error("build_packet(%d) failed: %s\n", - node->pkt->pkttype, gpg_errstr(rc) ); - rc = GPGERR_WRITE_FILE; + node->pkt->pkttype, g10_errstr(rc) ); + rc = G10ERR_WRITE_FILE; goto leave; } } @@ -218,8 +272,8 @@ do_export_stream( IOBUF out, STRLIST users, int secret, int onlyrfc, int *any ) rc = 0; leave: - if( all == 2 ) - enum_keyblocks_end( kbpos ); + m_free(desc); + keydb_release (kdbhd); release_kbnode( keyblock ); if( !*any ) log_info(_("WARNING: nothing exported\n")); diff --git a/g10/filter.h b/g10/filter.h index a29d2aa29..b7a99e6bc 100644 --- a/g10/filter.h +++ b/g10/filter.h @@ -1,5 +1,5 @@ /* filter.h - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -17,18 +17,15 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_FILTER_H -#define GPG_FILTER_H - -#include - -#include "basicdefs.h" -#include "iobuf.h" +#ifndef G10_FILTER_H +#define G10_FILTER_H +#include "types.h" +#include "cipher.h" typedef struct { - GCRY_MD_HD md; /* catch all */ - GCRY_MD_HD md2; /* if we want to calculate an alternate hash */ + MD_HANDLE md; /* catch all */ + MD_HANDLE md2; /* if we want to calculate an alternate hash */ size_t maxbuf_size; } md_filter_context_t; @@ -67,8 +64,11 @@ typedef struct { int pending_lf; /* used together with faked */ } armor_filter_context_t; +struct unarmor_pump_s; +typedef struct unarmor_pump_s *UnarmorPump; -typedef struct { + +struct compress_filter_context_s { int status; void *opaque; /* (used for z_stream) */ byte *inbuf; @@ -77,26 +77,22 @@ typedef struct { unsigned outbufsize; int algo; /* compress algo */ int algo1hack; -} compress_filter_context_t; + void (*release)(struct compress_filter_context_s*); +}; +typedef struct compress_filter_context_s compress_filter_context_t; typedef struct { DEK *dek; u32 datalen; - GCRY_CIPHER_HD cipher_hd; + CIPHER_HANDLE cipher_hd; int header; - GCRY_MD_HD mdc_hash; + MD_HANDLE mdc_hash; byte enchash[20]; int create_mdc; /* flag will be set by the cipher filter */ } cipher_filter_context_t; -typedef struct { - int header_okay; - PK_LIST pk_list; - cipher_filter_context_t cfx; -} encrypt_filter_context_t; - typedef struct { byte *buffer; /* malloced buffer */ @@ -106,12 +102,14 @@ typedef struct { int truncated; /* number of truncated lines */ int not_dash_escaped; int escape_from; - GCRY_MD_HD md; + MD_HANDLE md; int pending_lf; int pending_esc; } text_filter_context_t; +/* encrypt_filter_context_t defined in main.h */ + /*-- mdfilter.c --*/ int md_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); void free_md_filter_context( md_filter_context_t *mfx ); @@ -120,6 +118,9 @@ void free_md_filter_context( md_filter_context_t *mfx ); int use_armor_filter( IOBUF a ); int armor_filter( void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len); +UnarmorPump unarmor_pump_new (void); +void unarmor_pump_release (UnarmorPump x); +int unarmor_pump (UnarmorPump x, int c); /*-- compress.c --*/ int compress_filter( void *opaque, int control, @@ -132,9 +133,9 @@ int cipher_filter( void *opaque, int control, /*-- textfilter.c --*/ int text_filter( void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len); -int copy_clearsig_text( IOBUF out, IOBUF inp, GCRY_MD_HD md, +int copy_clearsig_text( IOBUF out, IOBUF inp, MD_HANDLE md, int escape_dash, int escape_from, int pgp2mode ); -#endif /*GPG_FILTER_H*/ +#endif /*G10_FILTER_H*/ diff --git a/g10/free-packet.c b/g10/free-packet.c index 2cc4e25e9..e760999be 100644 --- a/g10/free-packet.c +++ b/g10/free-packet.c @@ -1,5 +1,5 @@ /* free-packet.c - cleanup stuff for packets - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,17 +24,18 @@ #include #include -#include #include "packet.h" #include "iobuf.h" +#include "mpi.h" #include "util.h" +#include "cipher.h" +#include "memory.h" #include "options.h" -#include "main.h" void free_symkey_enc( PKT_symkey_enc *enc ) { - gcry_free(enc); + m_free(enc); } void @@ -43,24 +44,27 @@ free_pubkey_enc( PKT_pubkey_enc *enc ) int n, i; n = pubkey_get_nenc( enc->pubkey_algo ); if( !n ) - mpi_release(enc->data[0]); + mpi_free(enc->data[0]); for(i=0; i < n; i++ ) - mpi_release( enc->data[i] ); - gcry_free(enc); + mpi_free( enc->data[i] ); + m_free(enc); } void free_seckey_enc( PKT_signature *sig ) { - int n, i; - n = pubkey_get_nsig( sig->pubkey_algo ); - if( !n ) - mpi_release(sig->data[0]); - for(i=0; i < n; i++ ) - mpi_release( sig->data[i] ); - gcry_free(sig->hashed_data); - gcry_free(sig->unhashed_data); - gcry_free(sig); + int n, i; + + n = pubkey_get_nsig( sig->pubkey_algo ); + if( !n ) + mpi_free(sig->data[0]); + for(i=0; i < n; i++ ) + mpi_free( sig->data[i] ); + + m_free(sig->revkey); + m_free(sig->hashed); + m_free(sig->unhashed); + m_free(sig); } @@ -71,15 +75,28 @@ release_public_key_parts( PKT_public_key *pk ) int n, i; n = pubkey_get_npkey( pk->pubkey_algo ); if( !n ) - mpi_release(pk->pkey[0]); + mpi_free(pk->pkey[0]); for(i=0; i < n; i++ ) { - mpi_release( pk->pkey[i] ); + mpi_free( pk->pkey[i] ); pk->pkey[i] = NULL; } + if (pk->prefs) { + m_free (pk->prefs); + pk->prefs = NULL; + } if( pk->namehash ) { - gcry_free(pk->namehash); + m_free(pk->namehash); pk->namehash = NULL; } + if (pk->user_id) { + free_user_id (pk->user_id); + pk->user_id = NULL; + } + if (pk->revkey) { + m_free(pk->revkey); + pk->revkey=NULL; + pk->numrevkeys=0; + } } @@ -87,42 +104,60 @@ void free_public_key( PKT_public_key *pk ) { release_public_key_parts( pk ); - gcry_free(pk); + m_free(pk); } -static void * -cp_data_block( byte *s ) +static subpktarea_t * +cp_subpktarea (subpktarea_t *s ) { - byte *d; - u16 len; + subpktarea_t *d; if( !s ) return NULL; - len = (s[0] << 8) | s[1]; - d = gcry_xmalloc( len+2 ); - memcpy(d, s, len+2); + d = m_alloc (sizeof (*d) + s->size - 1 ); + d->size = s->size; + d->len = s->len; + memcpy (d->data, s->data, s->len); return d; } +/* + * Return a copy of the preferences + */ +prefitem_t * +copy_prefs (const prefitem_t *prefs) +{ + size_t n; + prefitem_t *new; + + if (!prefs) + return NULL; + + for (n=0; prefs[n].type; n++) + ; + new = m_alloc ( sizeof (*new) * (n+1)); + for (n=0; prefs[n].type; n++) { + new[n].type = prefs[n].type; + new[n].value = prefs[n].value; + } + new[n].type = PREFTYPE_NONE; + new[n].value = 0; + + return new; +} + PKT_public_key * -copy_public_key_new_namehash( PKT_public_key *d, PKT_public_key *s, - const byte *namehash ) +copy_public_key ( PKT_public_key *d, PKT_public_key *s) { int n, i; if( !d ) - d = gcry_xmalloc(sizeof *d); + d = m_alloc(sizeof *d); memcpy( d, s, sizeof *d ); - if( namehash ) { - d->namehash = gcry_xmalloc( 20 ); - memcpy(d->namehash, namehash, 20 ); - } - else if( s->namehash ) { - d->namehash = gcry_xmalloc( 20 ); - memcpy(d->namehash, s->namehash, 20 ); - } + d->user_id = scopy_user_id (s->user_id); + d->prefs = copy_prefs (s->prefs); n = pubkey_get_npkey( s->pubkey_algo ); if( !n ) d->pkey[0] = mpi_copy(s->pkey[0]); @@ -130,16 +165,17 @@ copy_public_key_new_namehash( PKT_public_key *d, PKT_public_key *s, for(i=0; i < n; i++ ) d->pkey[i] = mpi_copy( s->pkey[i] ); } + if( !s->revkey && s->numrevkeys ) + BUG(); + if( s->numrevkeys ) { + d->revkey = m_alloc(sizeof(struct revocation_key)*s->numrevkeys); + memcpy(d->revkey,s->revkey,sizeof(struct revocation_key)*s->numrevkeys); + } + else + d->revkey = NULL; return d; } -PKT_public_key * -copy_public_key( PKT_public_key *d, PKT_public_key *s ) -{ - return copy_public_key_new_namehash( d, s, NULL ); -} - - /**************** * Replace all common parts of a sk by the one from the public key. * This is a hack and a better solution will be to just store the real secret @@ -151,7 +187,6 @@ copy_public_parts_to_secret_key( PKT_public_key *pk, PKT_secret_key *sk ) sk->expiredate = pk->expiredate; sk->pubkey_algo = pk->pubkey_algo; sk->pubkey_usage= pk->pubkey_usage; - sk->created = pk->created; sk->req_usage = pk->req_usage; sk->req_algo = pk->req_algo; sk->has_expired = pk->has_expired; @@ -163,15 +198,13 @@ copy_public_parts_to_secret_key( PKT_public_key *pk, PKT_secret_key *sk ) sk->keyid[1] = pk->keyid[1]; } - - PKT_signature * copy_signature( PKT_signature *d, PKT_signature *s ) { int n, i; if( !d ) - d = gcry_xmalloc(sizeof *d); + d = m_alloc(sizeof *d); memcpy( d, s, sizeof *d ); n = pubkey_get_nsig( s->pubkey_algo ); if( !n ) @@ -180,19 +213,27 @@ copy_signature( PKT_signature *d, PKT_signature *s ) for(i=0; i < n; i++ ) d->data[i] = mpi_copy( s->data[i] ); } - d->hashed_data = cp_data_block(s->hashed_data); - d->unhashed_data = cp_data_block(s->unhashed_data); + d->hashed = cp_subpktarea (s->hashed); + d->unhashed = cp_subpktarea (s->unhashed); + if(s->numrevkeys) + { + d->revkey=NULL; + d->numrevkeys=0; + parse_revkeys(d); + } return d; } +/* + * shallow copy of the user ID + */ PKT_user_id * -copy_user_id( PKT_user_id *d, PKT_user_id *s ) +scopy_user_id (PKT_user_id *s) { - if( !d ) - d = gcry_xmalloc(sizeof *d + s->len - 1 ); - memcpy( d, s, sizeof *d + s->len - 1 ); - return d; + if (s) + s->ref++; + return s; } @@ -204,9 +245,9 @@ release_secret_key_parts( PKT_secret_key *sk ) n = pubkey_get_nskey( sk->pubkey_algo ); if( !n ) - mpi_release(sk->skey[0]); + mpi_free(sk->skey[0]); for(i=0; i < n; i++ ) { - mpi_release( sk->skey[i] ); + mpi_free( sk->skey[i] ); sk->skey[i] = NULL; } } @@ -215,7 +256,7 @@ void free_secret_key( PKT_secret_key *sk ) { release_secret_key_parts( sk ); - gcry_free(sk); + m_free(sk); } PKT_secret_key * @@ -224,7 +265,7 @@ copy_secret_key( PKT_secret_key *d, PKT_secret_key *s ) int n, i; if( !d ) - d = gcry_xmalloc(sizeof *d); + d = m_alloc(sizeof *d); memcpy( d, s, sizeof *d ); n = pubkey_get_nskey( s->pubkey_algo ); if( !n ) @@ -239,15 +280,32 @@ copy_secret_key( PKT_secret_key *d, PKT_secret_key *s ) void free_comment( PKT_comment *rem ) { - gcry_free(rem); + m_free(rem); } void -free_user_id( PKT_user_id *uid ) +free_attributes(PKT_user_id *uid) { - if( uid->photo ) - gcry_free( uid->photo ); - gcry_free(uid); + m_free(uid->attribs); + m_free(uid->attrib_data); + + uid->attribs=NULL; + uid->attrib_data=NULL; + uid->attrib_len=0; +} + +void +free_user_id (PKT_user_id *uid) +{ + assert (uid->ref > 0); + if (--uid->ref) + return; + + free_attributes(uid); + + if (uid->prefs) + m_free (uid->prefs); + m_free (uid); } void @@ -259,7 +317,7 @@ free_compressed( PKT_compressed *zd ) while( iobuf_read( zd->buf, NULL, 1<<30 ) != -1 ) ; } - gcry_free(zd); + m_free(zd); } void @@ -280,7 +338,7 @@ free_encrypted( PKT_encrypted *ed ) } } } - gcry_free(ed); + m_free(ed); } @@ -302,7 +360,7 @@ free_plaintext( PKT_plaintext *pt ) } } } - gcry_free(pt); + m_free(pt); } /**************** @@ -345,13 +403,14 @@ free_packet( PACKET *pkt ) free_compressed( pkt->pkt.compressed); break; case PKT_ENCRYPTED: + case PKT_ENCRYPTED_MDC: free_encrypted( pkt->pkt.encrypted ); break; case PKT_PLAINTEXT: free_plaintext( pkt->pkt.plaintext ); break; default: - gcry_free( pkt->pkt.generic ); + m_free( pkt->pkt.generic ); break; } pkt->pkt.generic = NULL; @@ -460,23 +519,29 @@ cmp_signatures( PKT_signature *a, PKT_signature *b ) } - /**************** * Returns: true if the user ids do not match */ int cmp_user_ids( PKT_user_id *a, PKT_user_id *b ) { - int res; + int res=1; + + if( a == b ) + return 0; + + if( a->attrib_data && b->attrib_data ) + { + res = a->attrib_len - b->attrib_len; + if( !res ) + res = memcmp( a->attrib_data, b->attrib_data, a->attrib_len ); + } + else if( !a->attrib_data && !b->attrib_data ) + { + res = a->len - b->len; + if( !res ) + res = memcmp( a->name, b->name, a->len ); + } - res = a->len - b->len; - if( !res ) - res = memcmp( a->name, b->name, a->len ); return res; } - - - - - - diff --git a/g10/gpg.c b/g10/g10.c similarity index 52% rename from g10/gpg.c rename to g10/g10.c index 6faeb0721..b8cae1b1c 100644 --- a/g10/gpg.c +++ b/g10/g10.c @@ -1,5 +1,5 @@ -/* gpg.c - The GnuPG utility (main for gpg) - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* g10.c - The GnuPG utility (main for gpg) + * Copyright (C) 1998,1999,2000,2001,2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -29,22 +29,23 @@ #include /* for setmode() */ #endif - -#include +#define INCLUDED_BY_MAIN_MODULE 1 #include "packet.h" #include "iobuf.h" +#include "memory.h" #include "util.h" #include "main.h" #include "options.h" #include "keydb.h" #include "trustdb.h" +#include "mpi.h" +#include "cipher.h" #include "filter.h" #include "ttyio.h" #include "i18n.h" #include "status.h" -#include "gnupg-defs.h" -#include "hkp.h" - +#include "g10defs.h" +#include "keyserver-internal.h" enum cmd_and_opt_values { aNull = 0, oArmor = 'a', @@ -52,6 +53,7 @@ enum cmd_and_opt_values { aNull = 0, aSym = 'c', aDecrypt = 'd', aEncr = 'e', + aEncrFiles, oInteractive = 'i', oKOption = 'k', oDryRun = 'n', @@ -65,16 +67,25 @@ enum cmd_and_opt_values { aNull = 0, oCompress = 'z', oNotation = 'N', oBatch = 500, + oSigNotation, + oCertNotation, + oShowNotation, + oNoShowNotation, + aDecryptFiles, aClearsign, aStore, aKeygen, aSignEncr, + aSignSym, aSignKey, aLSignKey, + aNRSignKey, + aNRLSignKey, aListPackets, aEditKey, - aDeleteKey, - aDeleteSecretKey, + aDeleteKeys, + aDeleteSecretKeys, + aDeleteSecretAndPublicKeys, aKMode, aKModeC, aImport, @@ -86,16 +97,17 @@ enum cmd_and_opt_values { aNull = 0, aListSecretKeys, aSendKeys, aRecvKeys, + aSearchKeys, aExport, aExportAll, aExportSecret, aExportSecretSub, aCheckKeys, aGenRevoke, + aDesigRevoke, aPrimegen, aPrintMD, aPrintMDs, - aPrintHMAC, aCheckTrustDB, aUpdateTrustDB, aFixTrustDB, @@ -106,14 +118,25 @@ enum cmd_and_opt_values { aNull = 0, aDeArmor, aEnArmor, aGenRandom, + aPipeMode, + aRebuildKeydbCaches, + aRefreshKeys, oTextmode, + oExpert, + oNoExpert, + oAskSigExpire, + oNoAskSigExpire, + oAskCertExpire, + oNoAskCertExpire, oFingerprint, oWithFingerprint, oAnswerYes, oAnswerNo, + oDefCertCheckLevel, oKeyring, oSecretKeyring, + oShowKeyring, oDefaultKey, oDefRecipient, oDefRecipientSelf, @@ -122,7 +145,15 @@ enum cmd_and_opt_values { aNull = 0, oDebug, oDebugAll, oStatusFD, - oNoComment, +#ifdef __riscos__ + oStatusFile, +#endif /* __riscos__ */ + oAttributeFD, +#ifdef __riscos__ + oAttributeFile, +#endif /* __riscos__ */ + oSKComments, + oNoSKComments, oNoVersion, oEmitVersion, oCompletesNeeded, @@ -131,14 +162,29 @@ enum cmd_and_opt_values { aNull = 0, oLoadExtension, oRFC1991, oOpenPGP, + oPGP2, + oNoPGP2, + oPGP6, + oNoPGP6, + oPGP7, + oNoPGP7, oCipherAlgo, oDigestAlgo, + oCertDigestAlgo, oCompressAlgo, oPasswdFD, +#ifdef __riscos__ + oPasswdFile, +#endif /* __riscos__ */ oCommandFD, +#ifdef __riscos__ + oCommandFile, +#endif /* __riscos__ */ + oQuickRandom, oNoVerbose, oTrustDBName, oNoSecmemWarn, + oNoPermissionWarn, oNoArmor, oNoDefKeyring, oNoGreeting, @@ -152,47 +198,100 @@ enum cmd_and_opt_values { aNull = 0, oCompressKeys, oCompressSigs, oAlwaysTrust, + oEmuChecksumBug, oRunAsShmCP, oSetFilename, + oForYourEyesOnly, + oNoForYourEyesOnly, oSetPolicyURL, + oSigPolicyURL, + oCertPolicyURL, + oShowPolicyURL, + oNoShowPolicyURL, oUseEmbeddedFilename, oComment, oDefaultComment, oThrowKeyid, + oShowPhotos, + oNoShowPhotos, + oPhotoViewer, oForceV3Sigs, + oNoForceV3Sigs, + oForceV4Certs, + oNoForceV4Certs, oForceMDC, + oNoForceMDC, + oDisableMDC, + oNoDisableMDC, oS2KMode, oS2KDigest, oS2KCipher, + oSimpleSKChecksum, oCharset, oNotDashEscaped, oEscapeFrom, + oNoEscapeFrom, oLockOnce, oLockMultiple, oLockNever, oKeyServer, + oKeyServerOptions, + oTempDir, + oExecPath, oEncryptTo, oNoEncryptTo, oLoggerFD, +#ifdef __riscos__ + oLoggerFile, +#endif /* __riscos__ */ oUtf8Strings, oNoUtf8Strings, oDisableCipherAlgo, oDisablePubkeyAlgo, oAllowNonSelfsignedUID, + oNoAllowNonSelfsignedUID, oAllowFreeformUID, + oNoAllowFreeformUID, + oAllowSecretKeyImport, + oEnableSpecialFilenames, oNoLiteral, oSetFilesize, oHonorHttpProxy, oFastListMode, oListOnly, oIgnoreTimeConflict, + oIgnoreValidFrom, + oIgnoreCrcError, + oShowSessionKey, + oOverrideSessionKey, oNoRandomSeedFile, + oAutoKeyRetrieve, oNoAutoKeyRetrieve, oUseAgent, + oNoUseAgent, + oGpgAgentInfo, oMergeOnly, oTryAllSecrets, oTrustedKey, + oNoExpensiveTrustChecks, + oFixedListMode, + oNoSigCache, + oNoSigCreateCheck, + oAutoCheckTrustDB, + oNoAutoCheckTrustDB, + oPreservePermissions, + oDefaultPreferenceList, + oPersonalCipherPreferences, + oPersonalDigestPreferences, + oPersonalCompressPreferences, + oEmu3DESS2KBug, /* will be removed in 1.1 */ oEmuMDEncodeBug, + oDisplay, + oTTYname, + oTTYtype, + oLCctype, + oLCmessages, + oGroup, aTest }; @@ -204,9 +303,11 @@ static ARGPARSE_OPTS opts[] = { { aClearsign, "clearsign", 256, N_("|[file]|make a clear text signature") }, { aDetachedSign, "detach-sign", 256, N_("make a detached signature")}, { aEncr, "encrypt", 256, N_("encrypt data")}, + { aEncrFiles, "encrypt-files", 256, N_("|[files]|encrypt files")}, { aSym, "symmetric", 256, N_("encryption only with symmetric cipher")}, { aStore, "store", 256, N_("store only")}, { aDecrypt, "decrypt", 256, N_("decrypt data (default)")}, + { aDecryptFiles, "decrypt-files", 256, N_("|[files]|decrypt files")}, { aVerify, "verify" , 256, N_("verify a signature")}, { aVerifyFiles, "verify-files" , 256, "@" }, { aListKeys, "list-keys", 256, N_("list keys")}, @@ -216,16 +317,23 @@ static ARGPARSE_OPTS opts[] = { { oFingerprint, "fingerprint", 256, N_("list keys and fingerprints")}, { aListSecretKeys, "list-secret-keys", 256, N_("list secret keys")}, { aKeygen, "gen-key", 256, N_("generate a new key pair")}, - { aDeleteKey, "delete-key",256, N_("remove key from the public keyring")}, - { aDeleteSecretKey, "delete-secret-key",256, - N_("remove key from the secret keyring")}, + { aDeleteKeys,"delete-keys",256,N_("remove keys from the public keyring")}, + { aDeleteSecretKeys, "delete-secret-keys",256, + N_("remove keys from the secret keyring")}, { aSignKey, "sign-key" ,256, N_("sign a key")}, { aLSignKey, "lsign-key" ,256, N_("sign a key locally")}, + { aNRSignKey, "nrsign-key" ,256, N_("sign a key non-revocably")}, + { aNRLSignKey, "nrlsign-key" ,256, N_("sign a key locally and non-revocably")}, { aEditKey, "edit-key" ,256, N_("sign or edit a key")}, { aGenRevoke, "gen-revoke",256, N_("generate a revocation certificate")}, + { aDesigRevoke, "desig-revoke",256, "@" }, { aExport, "export" , 256, N_("export keys") }, { aSendKeys, "send-keys" , 256, N_("export keys to a key server") }, { aRecvKeys, "recv-keys" , 256, N_("import keys from a key server") }, + { aSearchKeys, "search-keys" , 256, + N_("search for keys on a key server") }, + { aRefreshKeys, "refresh-keys", 256, + N_("update all keys from a keyserver")}, { aExportAll, "export-all" , 256, "@" }, { aExportSecret, "export-secret-keys" , 256, "@" }, { aExportSecretSub, "export-secret-subkeys" , 256, "@" }, @@ -239,14 +347,13 @@ static ARGPARSE_OPTS opts[] = { { aUpdateTrustDB, "update-trustdb",0 , N_("update the trust database")}, { aCheckTrustDB, - "check-trustdb",0 , N_("|[NAMES]|check the trust database")}, + "check-trustdb",0 , N_("unattended trust database update")}, { aFixTrustDB, "fix-trustdb",0 , N_("fix a corrupted trust database")}, { aDeArmor, "dearmor", 256, N_("De-Armor a file or stdin") }, { aDeArmor, "dearmour", 256, "@" }, { aEnArmor, "enarmor", 256, N_("En-Armor a file or stdin") }, { aEnArmor, "enarmour", 256, "@" }, { aPrintMD, "print-md" , 256, N_("|algo [files]|print message digests")}, - { aPrintHMAC, "print-hmac" , 256, "@"}, { aPrimegen, "gen-prime" , 256, "@" }, { aGenRandom, "gen-random" , 256, "@" }, @@ -261,52 +368,92 @@ static ARGPARSE_OPTS opts[] = { { oDefRecipientSelf, "default-recipient-self" ,0, N_("use the default key as default recipient")}, { oNoDefRecipient, "no-default-recipient", 0, "@" }, + { oTempDir, "temp-directory", 2, "@" }, + { oExecPath, "exec-path", 2, "@" }, { oEncryptTo, "encrypt-to", 2, "@" }, { oNoEncryptTo, "no-encrypt-to", 0, "@" }, { oUser, "local-user",2, N_("use this user-id to sign or decrypt")}, { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") }, { oTextmodeShort, NULL, 0, "@"}, { oTextmode, "textmode", 0, N_("use canonical text mode")}, + { oExpert, "expert", 0, "@"}, + { oNoExpert, "no-expert", 0, "@"}, + { oAskSigExpire, "ask-sig-expire", 0, "@"}, + { oNoAskSigExpire, "no-ask-sig-expire", 0, "@"}, + { oAskCertExpire, "ask-cert-expire", 0, "@"}, + { oNoAskCertExpire, "no-ask-cert-expire", 0, "@"}, { oOutput, "output", 2, N_("use as output file")}, { oVerbose, "verbose", 0, N_("verbose") }, { oQuiet, "quiet", 0, N_("be somewhat more quiet") }, { oNoTTY, "no-tty", 0, N_("don't use the terminal at all") }, { oForceV3Sigs, "force-v3-sigs", 0, N_("force v3 signatures") }, + { oNoForceV3Sigs, "no-force-v3-sigs", 0, N_("do not force v3 signatures") }, + { oForceV4Certs, "force-v4-certs", 0, N_("force v4 key signatures") }, + { oNoForceV4Certs, "no-force-v4-certs", 0, N_("do not force v4 key signatures") }, { oForceMDC, "force-mdc", 0, N_("always use a MDC for encryption") }, + { oNoForceMDC, "no-force-mdc", 0, "@" }, + { oDisableMDC, "disable-mdc", 0, N_("never use a MDC for encryption") }, + { oNoDisableMDC, "no-disable-mdc", 0, "@" }, { oDryRun, "dry-run", 0, N_("do not make any changes") }, /*{ oInteractive, "interactive", 0, N_("prompt before overwriting") }, */ { oUseAgent, "use-agent",0, N_("use the gpg-agent")}, + { oNoUseAgent, "no-use-agent",0, "@"}, + { oGpgAgentInfo, "gpg-agent-info",2, "@"}, { oBatch, "batch", 0, N_("batch mode: never ask")}, { oAnswerYes, "yes", 0, N_("assume yes on most questions")}, { oAnswerNo, "no", 0, N_("assume no on most questions")}, { oKeyring, "keyring" ,2, N_("add this keyring to the list of keyrings")}, { oSecretKeyring, "secret-keyring" ,2, N_("add this secret keyring to the list")}, + { oShowKeyring, "show-keyring", 0, N_("show which keyring a listed key is on")}, { oDefaultKey, "default-key" ,2, N_("|NAME|use NAME as default secret key")}, { oKeyServer, "keyserver",2, N_("|HOST|use this keyserver to lookup keys")}, + { oKeyServerOptions, "keyserver-options",2,"@"}, { oCharset, "charset" , 2, N_("|NAME|set terminal charset to NAME") }, { oOptions, "options" , 2, N_("read options from file")}, { oDebug, "debug" ,4|16, "@"}, { oDebugAll, "debug-all" ,0, "@"}, { oStatusFD, "status-fd" ,1, N_("|FD|write status info to this FD") }, - { oNoComment, "no-comment", 0, "@"}, +#ifdef __riscos__ + { oStatusFile, "status-file" ,2, N_("|[file]|write status info to file") }, +#endif /* __riscos__ */ + { oAttributeFD, "attribute-fd" ,1, "@" }, +#ifdef __riscos__ + { oAttributeFile, "attribute-file" ,2, "@" }, +#endif /* __riscos__ */ + { oNoSKComments, "no-comment", 0, "@"}, + { oNoSKComments, "no-sk-comments", 0, "@"}, + { oSKComments, "sk-comments", 0, "@"}, { oCompletesNeeded, "completes-needed", 1, "@"}, { oMarginalsNeeded, "marginals-needed", 1, "@"}, { oMaxCertDepth, "max-cert-depth", 1, "@" }, - { oTrustedKey, "trusted-key", 2, N_("|KEYID|ulimately trust this key")}, + { oTrustedKey, "trusted-key", 2, N_("|KEYID|ultimately trust this key")}, { oLoadExtension, "load-extension" ,2, N_("|FILE|load extension module FILE")}, { oRFC1991, "rfc1991", 0, N_("emulate the mode described in RFC1991")}, { oOpenPGP, "openpgp", 0, N_("set all packet, cipher and digest options to OpenPGP behavior")}, + { oPGP2, "pgp2", 0, N_("set all packet, cipher and digest options to PGP 2.x behavior")}, + { oNoPGP2, "no-pgp2", 0, "@"}, + { oPGP6, "pgp6", 0, "@"}, + { oNoPGP6, "no-pgp6", 0, "@"}, + { oPGP7, "pgp7", 0, "@"}, + { oNoPGP7, "no-pgp7", 0, "@"}, { oS2KMode, "s2k-mode", 1, N_("|N|use passphrase mode N")}, { oS2KDigest, "s2k-digest-algo",2, N_("|NAME|use message digest algorithm NAME for passphrases")}, { oS2KCipher, "s2k-cipher-algo",2, N_("|NAME|use cipher algorithm NAME for passphrases")}, + { oSimpleSKChecksum, "simple-sk-checksum", 0, "@"}, { oCipherAlgo, "cipher-algo", 2 , N_("|NAME|use cipher algorithm NAME")}, { oDigestAlgo, "digest-algo", 2 , N_("|NAME|use message digest algorithm NAME")}, + { oCertDigestAlgo, "cert-digest-algo", 2 , "@" }, { oCompressAlgo, "compress-algo", 1 , N_("|N|use compress algorithm N")}, { oThrowKeyid, "throw-keyid", 0, N_("throw keyid field of encrypted packets")}, - { oNotation, "notation-data", 2, N_("|NAME=VALUE|use this notation data")}, + { oShowPhotos, "show-photos", 0, N_("Show Photo IDs")}, + { oNoShowPhotos, "no-show-photos", 0, N_("Don't show Photo IDs")}, + { oPhotoViewer, "photo-viewer", 2, N_("Set command line to view Photo IDs")}, + { oNotation, "notation-data", 2, "@" }, + { oSigNotation, "sig-notation", 2, "@" }, + { oCertNotation, "cert-notation", 2, "@" }, { 302, NULL, 0, N_( "@\n(See the man page for a complete listing of all commands and options)\n" @@ -324,12 +471,21 @@ static ARGPARSE_OPTS opts[] = { { aPrintMDs, "print-mds" , 256, "@"}, /* old */ { aListTrustDB, "list-trustdb",0 , "@"}, { aListTrustPath, "list-trust-path",0, "@"}, + { aPipeMode, "pipemode", 0, "@" }, { oKOption, NULL, 0, "@"}, { oPasswdFD, "passphrase-fd",1, "@" }, +#ifdef __riscos__ + { oPasswdFile, "passphrase-file",2, "@" }, +#endif /* __riscos__ */ { oCommandFD, "command-fd",1, "@" }, +#ifdef __riscos__ + { oCommandFile, "command-file",2, "@" }, +#endif /* __riscos__ */ + { oQuickRandom, "quick-random", 0, "@"}, { oNoVerbose, "no-verbose", 0, "@"}, { oTrustDBName, "trustdb-name", 2, "@" }, { oNoSecmemWarn, "no-secmem-warning", 0, "@" }, /* used only by regression tests */ + { oNoPermissionWarn, "no-permission-warning", 0, "@" }, { oNoArmor, "no-armor", 0, "@"}, { oNoArmor, "no-armour", 0, "@"}, { oNoDefKeyring, "no-default-keyring", 0, "@" }, @@ -345,20 +501,34 @@ static ARGPARSE_OPTS opts[] = { { oSkipVerify, "skip-verify",0, "@" }, { oCompressKeys, "compress-keys",0, "@"}, { oCompressSigs, "compress-sigs",0, "@"}, + { oDefCertCheckLevel, "default-cert-check-level", 1, "@"}, { oAlwaysTrust, "always-trust", 0, "@"}, + { oEmuChecksumBug, "emulate-checksum-bug", 0, "@"}, { oRunAsShmCP, "run-as-shm-coprocess", 4, "@" }, { oSetFilename, "set-filename", 2, "@" }, + { oForYourEyesOnly, "for-your-eyes-only", 0, "@" }, + { oNoForYourEyesOnly, "no-for-your-eyes-only", 0, "@" }, { oSetPolicyURL, "set-policy-url", 2, "@" }, + { oSigPolicyURL, "sig-policy-url", 2, "@" }, + { oCertPolicyURL, "cert-policy-url", 2, "@" }, + { oShowPolicyURL, "show-policy-url", 0, "@" }, + { oNoShowPolicyURL, "no-show-policy-url", 0, "@" }, + { oShowNotation, "show-notation", 0, "@" }, + { oNoShowNotation, "no-show-notation", 0, "@" }, { oComment, "comment", 2, "@" }, { oDefaultComment, "default-comment", 0, "@" }, { oNoVersion, "no-version", 0, "@"}, { oEmitVersion, "emit-version", 0, "@"}, { oNotDashEscaped, "not-dash-escaped", 0, "@" }, { oEscapeFrom, "escape-from-lines", 0, "@" }, + { oNoEscapeFrom, "no-escape-from-lines", 0, "@" }, { oLockOnce, "lock-once", 0, "@" }, { oLockMultiple, "lock-multiple", 0, "@" }, { oLockNever, "lock-never", 0, "@" }, { oLoggerFD, "logger-fd",1, "@" }, +#ifdef __riscos__ + { oLoggerFile, "logger-file",2, "@" }, +#endif /* __riscos__ */ { oUseEmbeddedFilename, "use-embedded-filename", 0, "@" }, { oUtf8Strings, "utf8-strings", 0, "@" }, { oNoUtf8Strings, "no-utf8-strings", 0, "@" }, @@ -366,47 +536,73 @@ static ARGPARSE_OPTS opts[] = { { oDisableCipherAlgo, "disable-cipher-algo", 2, "@" }, { oDisablePubkeyAlgo, "disable-pubkey-algo", 2, "@" }, { oAllowNonSelfsignedUID, "allow-non-selfsigned-uid", 0, "@" }, + { oNoAllowNonSelfsignedUID, "no-allow-non-selfsigned-uid", 0, "@" }, { oAllowFreeformUID, "allow-freeform-uid", 0, "@" }, + { oNoAllowFreeformUID, "no-allow-freeform-uid", 0, "@" }, { oNoLiteral, "no-literal", 0, "@" }, { oSetFilesize, "set-filesize", 20, "@" }, { oHonorHttpProxy,"honor-http-proxy", 0, "@" }, { oFastListMode,"fast-list-mode", 0, "@" }, + { oFixedListMode,"fixed-list-mode", 0, "@" }, { oListOnly, "list-only", 0, "@"}, { oIgnoreTimeConflict, "ignore-time-conflict", 0, "@" }, + { oIgnoreValidFrom, "ignore-valid-from", 0, "@" }, + { oIgnoreCrcError, "ignore-crc-error", 0,"@" }, + { oShowSessionKey, "show-session-key", 0, "@" }, + { oOverrideSessionKey, "override-session-key", 2, "@" }, { oNoRandomSeedFile, "no-random-seed-file", 0, "@" }, + { oAutoKeyRetrieve, "auto-key-retrieve", 0, "@" }, { oNoAutoKeyRetrieve, "no-auto-key-retrieve", 0, "@" }, + { oNoSigCache, "no-sig-cache", 0, "@" }, + { oNoSigCreateCheck, "no-sig-create-check", 0, "@" }, + { oAutoCheckTrustDB, "auto-check-trustdb", 0, "@"}, + { oNoAutoCheckTrustDB, "no-auto-check-trustdb", 0, "@"}, { oMergeOnly, "merge-only", 0, "@" }, + { oAllowSecretKeyImport, "allow-secret-key-import", 0, "@" }, { oTryAllSecrets, "try-all-secrets", 0, "@" }, + { oEnableSpecialFilenames, "enable-special-filenames", 0, "@" }, + { oNoExpensiveTrustChecks, "no-expensive-trust-checks", 0, "@" }, + { aDeleteSecretAndPublicKeys, "delete-secret-and-public-keys",256, "@" }, + { aRebuildKeydbCaches, "rebuild-keydb-caches", 256, "@"}, + { oPreservePermissions, "preserve-permissions", 0, "@"}, + { oDefaultPreferenceList, "default-preference-list", 2, "@"}, + { oPersonalCipherPreferences, "personal-cipher-preferences", 2, "@"}, + { oPersonalDigestPreferences, "personal-digest-preferences", 2, "@"}, + { oPersonalCompressPreferences, "personal-compress-preferences", 2, "@"}, + { oEmu3DESS2KBug, "emulate-3des-s2k-bug", 0, "@"}, { oEmuMDEncodeBug, "emulate-md-encode-bug", 0, "@"}, + { oDisplay, "display", 2, "@" }, + { oTTYname, "ttyname", 2, "@" }, + { oTTYtype, "ttytype", 2, "@" }, + { oLCctype, "lc-ctype", 2, "@" }, + { oLCmessages, "lc-messages", 2, "@" }, + { oGroup, "group", 2, "@" }, {0} }; -int gpg_errors_seen = 0; +int g10_errors_seen = 0; static int utf8_strings = 0; static int maybe_setuid = 1; -static char *build_list( const char *text, +static char *build_list( const char *text, char letter, const char *(*mapf)(int), int (*chkf)(int) ); static void set_cmd( enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd ); static void print_hex( byte *p, size_t n ); -static void print_mds( const char *fname, int algo, const char *key ); -static void add_notation_data( const char *string ); -static int check_policy_url( const char *s ); +static void print_mds( const char *fname, int algo ); +static void add_notation_data( const char *string, int which ); +static void add_policy_url( const char *string, int which ); +#ifdef __riscos__ +RISCOS_GLOBAL_STATICS("GnuPG Heap") +#endif /* __riscos__ */ -static int -our_pk_test_algo( int algo ) +const char * +strusage( int level ) { - return openpgp_pk_test_algo( algo, 0 ); -} - -static const char * -my_strusage( int level ) -{ - static char *digests, *pubkeys, *ciphers; + static char *digests, *pubkeys, *ciphers, *zips; const char *p; switch( level ) { case 11: p = "gpg (GnuPG)"; @@ -427,56 +623,90 @@ my_strusage( int level ) break; case 31: p = "\nHome: "; break; +#ifndef __riscos__ case 32: p = opt.homedir; break; +#else /* __riscos__ */ + case 32: p = make_filename(opt.homedir, NULL); break; +#endif /* __riscos__ */ case 33: p = _("\nSupported algorithms:\n"); break; case 34: - if( !ciphers ) - ciphers = build_list("Cipher: ", gcry_cipher_algo_name, - openpgp_cipher_test_algo ); - p = ciphers; + if( !pubkeys ) + pubkeys = build_list("Pubkey: ", 0, pubkey_algo_to_string, + check_pubkey_algo ); + p = pubkeys; break; case 35: - if( !pubkeys ) - pubkeys = build_list("Pubkey: ", gcry_pk_algo_name, - our_pk_test_algo ); - p = pubkeys; + if( !ciphers ) + ciphers = build_list("Cipher: ", 'S', cipher_algo_to_string, + check_cipher_algo ); + p = ciphers; break; case 36: if( !digests ) - digests = build_list("Hash: ", gcry_md_algo_name, - openpgp_md_test_algo ); + digests = build_list("Hash: ", 'H', digest_algo_to_string, + check_digest_algo ); p = digests; break; + case 37: + if( !zips ) + zips = build_list("Compress: ",'Z',compress_algo_to_string, + check_compress_algo); + p = zips; + break; - - default: p = NULL; + default: p = default_strusage(level); } return p; } static char * -build_list( const char *text, const char * (*mapf)(int), int (*chkf)(int) ) +build_list( const char *text, char letter, + const char * (*mapf)(int), int (*chkf)(int) ) { int i; + const char *s; size_t n=strlen(text)+2; - char *list, *p; + char *list, *p, *line=NULL; - if( maybe_setuid ) { - gcry_control( GCRYCTL_DROP_PRIVS ); /* drop setuid */ - } + if( maybe_setuid ) + secmem_init( 0 ); /* drop setuid */ - for(i=1; i < 110; i++ ) - if( !chkf(i) ) - n += strlen(mapf(i)) + 2; - list = gcry_xmalloc( 21 + n ); *list = 0; - for(p=NULL, i=1; i < 110; i++ ) { - if( !chkf(i) ) { - if( !p ) + for(i=0; i <= 110; i++ ) + if( !chkf(i) && (s=mapf(i)) ) + n += strlen(s) + 7 + 2; + list = m_alloc( 21 + n ); *list = 0; + for(p=NULL, i=0; i <= 110; i++ ) { + if( !chkf(i) && (s=mapf(i)) ) { + if( !p ) { p = stpcpy( list, text ); + line=p; + } else p = stpcpy( p, ", "); - p = stpcpy(p, mapf(i) ); + + if(strlen(line)>60) { + int spaces=strlen(text); + + list=m_realloc(list,n+spaces+1); + /* realloc could move the block, so find the end again */ + p=list; + while(*p) + p++; + + p=stpcpy(p, "\n"); + line=p; + for(;spaces;spaces--) + p=stpcpy(p, " "); + } + + p = stpcpy(p, s ); + if(opt.verbose && letter) + { + char num[8]; + sprintf(num," (%c%d)",letter,i); + p = stpcpy(p,num); + } } } if( p ) @@ -492,52 +722,20 @@ i18n_init(void) set_gettext_file( PACKAGE ); #else #ifdef ENABLE_NLS - #ifdef HAVE_LC_MESSAGES - setlocale( LC_TIME, "" ); - setlocale( LC_MESSAGES, "" ); - #else - setlocale( LC_ALL, "" ); - #endif - bindtextdomain( PACKAGE, GNUPG_LOCALEDIR ); + setlocale( LC_ALL, "" ); + bindtextdomain( PACKAGE, G10_LOCALEDIR ); textdomain( PACKAGE ); #endif #endif } - -static void -register_extension( const char *mainpgm, const char *fname ) -{ - #warning fixme add register cipher extension - /* Before we do so, we should design a beter API for this. - * I am currently thinking about using S-Exp to pass everything we - * need from the module to gcrypt. I hope we are not going to - * implement my-own-lisp-library-no-17000 */ - #if 0 - if( *fname != '/' ) { /* do tilde expansion etc */ - char *tmp; - - if( strchr(fname, '/') ) - tmp = make_filename(fname, NULL); - else - tmp = make_filename(GNUPG_LIBDIR, fname, NULL); - register_cipher_extension( mainpgm, tmp ); - gcry_free(tmp); - } - else - register_cipher_extension( mainpgm, fname ); - #endif -} - - - static void wrong_args( const char *text) { fputs(_("usage: gpg [options] "),stderr); fputs(text,stderr); putc('\n',stderr); - gpg_exit(2); + g10_exit(2); } @@ -546,7 +744,7 @@ make_username( const char *string ) { char *p; if( utf8_strings ) - p = gcry_xstrdup(string); + p = m_strdup(string); else p = native_to_utf8( string ); return p; @@ -556,19 +754,14 @@ make_username( const char *string ) static void set_debug(void) { - #if 0 - #warning memory debugging not enabled if( opt.debug & DBG_MEMORY_VALUE ) memory_debug_mode = 1; if( opt.debug & DBG_MEMSTAT_VALUE ) memory_stat_debug_mode = 1; - #endif - if( opt.debug & DBG_MPI_VALUE ) - gcry_control( GCRYCTL_SET_DEBUG_FLAGS, 2 ); + mpi_debug_mode = 1; if( opt.debug & DBG_CIPHER_VALUE ) - gcry_control( GCRYCTL_SET_DEBUG_FLAGS, 1 ); - + g10c_debug_mode = 1; if( opt.debug & DBG_IOBUF_VALUE ) iobuf_debug_mode = 1; @@ -586,6 +779,10 @@ set_cmd( enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd ) cmd = aSignEncr; else if( cmd == aEncr && new_cmd == aSign ) cmd = aSignEncr; + else if( cmd == aSign && new_cmd == aSym ) + cmd = aSignSym; + else if( cmd == aSym && new_cmd == aSign ) + cmd = aSignSym; else if( cmd == aKMode && new_cmd == aSym ) cmd = aKModeC; else if( ( cmd == aSign && new_cmd == aClearsign ) @@ -593,13 +790,39 @@ set_cmd( enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd ) cmd = aClearsign; else { log_error(_("conflicting commands\n")); - gpg_exit(2); + g10_exit(2); } *ret_cmd = cmd; } +static void add_group(char *string) +{ + char *name,*value; + struct groupitem *item; + STRLIST values=NULL; + + /* Break off the group name */ + name=strsep(&string," "); + if(string==NULL) + { + log_error(_("no values for group \"%s\"\n"),name); + return; + } + + /* Break apart the values */ + while((value=strsep(&string," ")) && *value!='\0') + add_to_strlist2(&values,value,utf8_strings); + + item=m_alloc(sizeof(struct groupitem)); + item->name=name; + item->values=values; + item->next=opt.grouplist; + + opt.grouplist=item; +} + int main( int argc, char **argv ) @@ -611,6 +834,8 @@ main( int argc, char **argv ) char **orig_argv; const char *fname; char *username; + STRLIST unsafe_files=NULL; + STRLIST extensions=NULL; int may_coredump; STRLIST sl, remusr= NULL, locusr=NULL; STRLIST nrings=NULL, sec_nrings=NULL; @@ -620,7 +845,7 @@ main( int argc, char **argv ) char *configname = NULL; unsigned configlineno; int parse_debug = 0; - int default_config =1; + int default_config = 1; int default_keyring = 1; int greeting = 0; int nogreeting = 0; @@ -629,30 +854,33 @@ main( int argc, char **argv ) const char *trustdb_name = NULL; char *def_cipher_string = NULL; char *def_digest_string = NULL; + char *cert_digest_string = NULL; char *s2k_cipher_string = NULL; char *s2k_digest_string = NULL; + char *pers_cipher_list = NULL; + char *pers_digest_list = NULL; + char *pers_compress_list = NULL; + int eyes_only=0; int pwfd = -1; int with_fpr = 0; /* make an option out of --fingerprint */ + int any_explicit_recipient = 0; #ifdef USE_SHM_COPROCESSING ulong requested_shm_size=0; #endif + #ifdef __riscos__ + riscos_global_defaults(); + opt.lock_once = 1; + #endif /* __riscos__ */ + trap_unaligned(); - set_strusage( my_strusage ); - gcry_control( GCRYCTL_SUSPEND_SECMEM_WARN ); + secmem_set_flags( secmem_get_flags() | 2 ); /* suspend warnings */ /* Please note that we may running SUID(ROOT), so be very CAREFUL * when adding any stuff between here and the call to * secmem_init() somewhere after the option parsing */ log_set_name("gpg"); - /* check that the libraries are suitable. Do it here because - * the option parse may need services of the library */ - if ( !gcry_check_version ( "1.1.0a" ) ) { - log_fatal(_("libgcrypt is too old (need %s, have %s)\n"), - VERSION, gcry_check_version(NULL) ); - } - - gcry_control( GCRYCTL_USE_SECURE_RNDPOOL ); + secure_random_alloc(); /* put random number into secure memory */ may_coredump = disable_core_dumps(); init_signals(); create_dotlock(NULL); /* register locking cleanup */ @@ -662,20 +890,23 @@ main( int argc, char **argv ) /* note: if you change these lines, look at oOpenPGP */ opt.def_cipher_algo = 0; opt.def_digest_algo = 0; - opt.def_compress_algo = 2; + opt.cert_digest_algo = 0; + opt.def_compress_algo = -1; opt.s2k_mode = 3; /* iterated+salted */ - opt.s2k_digest_algo = GCRY_MD_SHA1; - opt.s2k_cipher_algo = GCRY_CIPHER_CAST5; + opt.s2k_digest_algo = DIGEST_ALGO_SHA1; + opt.s2k_cipher_algo = CIPHER_ALGO_CAST5; opt.completes_needed = 1; opt.marginals_needed = 3; opt.max_cert_depth = 5; opt.pgp2_workarounds = 1; - opt.auto_key_retrieve = 1; - #ifdef __MINGW32__ + opt.force_v3_sigs = 1; + opt.escape_from = 1; + opt.keyserver_options.include_subkeys=1; +#if defined (__MINGW32__) || defined (__CYGWIN32__) opt.homedir = read_w32_registry_string( NULL, "Software\\GNU\\GnuPG", "HomeDir" ); - #else +#else opt.homedir = getenv("GNUPGHOME"); - #endif +#endif if( !opt.homedir || !*opt.homedir ) { opt.homedir = GNUPG_HOMEDIR; } @@ -709,19 +940,28 @@ main( int argc, char **argv ) else if ( pargs.r_opt == oStatusFD ) { /* this is needed to ensure that the status-fd filedescriptor is * initialized when init_shm_coprocessing() is called */ - set_status_fd( pargs.r.ret_int ); + set_status_fd( iobuf_translate_file_handle (pargs.r.ret_int, 1) ); } #endif } - - #ifdef USE_SHM_COPROCESSING +#ifdef HAVE_DOSISH_SYSTEM + if ( strchr (opt.homedir,'\\') ) { + char *d, *buf = m_alloc (strlen (opt.homedir)+1); + const char *s = opt.homedir; + for (d=buf,s=opt.homedir; *s; s++) + *d++ = *s == '\\'? '/': *s; + *d = 0; + opt.homedir = buf; + } +#endif +#ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) { init_shm_coprocessing(requested_shm_size, 1 ); } - #endif +#endif /* initialize the secure memory. */ - gcry_control( GCRYCTL_INIT_SECMEM, 16384, 0 ); + secmem_init( 16384 ); maybe_setuid = 0; /* Okay, we are now working under our real uid */ @@ -735,6 +975,20 @@ main( int argc, char **argv ) pargs.flags= 1; /* do not remove the args */ next_pass: if( configname ) { + + if(check_permissions(configname,0,1)) + { + add_to_strlist(&unsafe_files,configname); + + /* If any options file is unsafe, then disable any external + programs for keyserver calls or photo IDs. Since the + external program to call is set in the options file, a + unsafe options file can lead to an arbitrary program + being run. */ + + opt.exec_disable=1; + } + configlineno = 0; configfp = fopen( configname, "r" ); if( !configfp ) { @@ -746,9 +1000,9 @@ main( int argc, char **argv ) else { log_error(_("option file `%s': %s\n"), configname, strerror(errno) ); - gpg_exit(2); + g10_exit(2); } - gcry_free(configname); configname = NULL; + m_free(configname); configname = NULL; } if( parse_debug && configname ) log_info(_("reading options from `%s'\n"), configname ); @@ -764,37 +1018,47 @@ main( int argc, char **argv ) case aFastImport: set_cmd( &cmd, aFastImport); break; case aSendKeys: set_cmd( &cmd, aSendKeys); break; case aRecvKeys: set_cmd( &cmd, aRecvKeys); break; + case aSearchKeys: set_cmd( &cmd, aSearchKeys); break; + case aRefreshKeys: set_cmd( &cmd, aRefreshKeys); break; case aExport: set_cmd( &cmd, aExport); break; case aExportAll: set_cmd( &cmd, aExportAll); break; case aListKeys: set_cmd( &cmd, aListKeys); break; case aListSigs: set_cmd( &cmd, aListSigs); break; case aExportSecret: set_cmd( &cmd, aExportSecret); break; case aExportSecretSub: set_cmd( &cmd, aExportSecretSub); break; - case aDeleteSecretKey: set_cmd( &cmd, aDeleteSecretKey); + case aDeleteSecretKeys: set_cmd( &cmd, aDeleteSecretKeys); greeting=1; break; - case aDeleteKey: set_cmd( &cmd, aDeleteKey); greeting=1; break; + case aDeleteSecretAndPublicKeys: + set_cmd( &cmd, aDeleteSecretAndPublicKeys); + greeting=1; + break; + case aDeleteKeys: set_cmd( &cmd, aDeleteKeys); greeting=1; break; case aDetachedSign: detached_sig = 1; set_cmd( &cmd, aSign ); break; case aSym: set_cmd( &cmd, aSym); break; case aDecrypt: set_cmd( &cmd, aDecrypt); break; + case aDecryptFiles: set_cmd( &cmd, aDecryptFiles); break; case aEncr: set_cmd( &cmd, aEncr); break; + case aEncrFiles: set_cmd( &cmd, aEncrFiles ); break; case aSign: set_cmd( &cmd, aSign ); break; case aKeygen: set_cmd( &cmd, aKeygen); greeting=1; break; case aSignKey: set_cmd( &cmd, aSignKey); break; case aLSignKey: set_cmd( &cmd, aLSignKey); break; + case aNRSignKey: set_cmd( &cmd, aNRSignKey); break; + case aNRLSignKey: set_cmd( &cmd, aNRLSignKey); break; case aStore: set_cmd( &cmd, aStore); break; case aEditKey: set_cmd( &cmd, aEditKey); greeting=1; break; case aClearsign: set_cmd( &cmd, aClearsign); break; case aGenRevoke: set_cmd( &cmd, aGenRevoke); break; + case aDesigRevoke: set_cmd( &cmd, aDesigRevoke); break; case aVerify: set_cmd( &cmd, aVerify); break; case aVerifyFiles: set_cmd( &cmd, aVerifyFiles); break; case aPrimegen: set_cmd( &cmd, aPrimegen); break; case aGenRandom: set_cmd( &cmd, aGenRandom); break; case aPrintMD: set_cmd( &cmd, aPrintMD); break; case aPrintMDs: set_cmd( &cmd, aPrintMDs); break; - case aPrintHMAC: set_cmd( &cmd, aPrintHMAC); break; case aListTrustDB: set_cmd( &cmd, aListTrustDB); break; case aCheckTrustDB: set_cmd( &cmd, aCheckTrustDB); break; case aUpdateTrustDB: set_cmd( &cmd, aUpdateTrustDB); break; @@ -804,6 +1068,8 @@ main( int argc, char **argv ) case aEnArmor: set_cmd( &cmd, aEnArmor); break; case aExportOwnerTrust: set_cmd( &cmd, aExportOwnerTrust); break; case aImportOwnerTrust: set_cmd( &cmd, aImportOwnerTrust); break; + case aPipeMode: set_cmd( &cmd, aPipeMode); break; + case aRebuildKeydbCaches: set_cmd( &cmd, aRebuildKeydbCaches); break; case oArmor: opt.armor = 1; opt.no_armor=0; break; case oOutput: opt.outfile = pargs.r.ret_str; break; @@ -811,41 +1077,75 @@ main( int argc, char **argv ) case oNoTTY: tty_no_terminal(1); break; case oDryRun: opt.dry_run = 1; break; case oInteractive: opt.interactive = 1; break; - case oVerbose: - opt.verbose++; opt.list_sigs=1; - gcry_control( GCRYCTL_SET_VERBOSITY, (int)opt.verbose ); - break; + case oVerbose: g10_opt_verbose++; + opt.verbose++; opt.list_sigs=1; break; case oKOption: set_cmd( &cmd, aKMode ); break; - case oBatch: opt.batch = 1; greeting = 0; break; - case oUseAgent: opt.use_agent = 1; break; + case oBatch: opt.batch = 1; nogreeting = 1; break; + case oUseAgent: +#ifndef __riscos__ + opt.use_agent = 1; +#else /* __riscos__ */ + opt.use_agent = 0; + not_implemented("use-agent"); +#endif /* __riscos__ */ + break; + case oNoUseAgent: opt.use_agent = 0; break; + case oGpgAgentInfo: opt.gpg_agent_info = pargs.r.ret_str; break; case oAnswerYes: opt.answer_yes = 1; break; case oAnswerNo: opt.answer_no = 1; break; case oKeyring: append_to_strlist( &nrings, pargs.r.ret_str); break; + case oShowKeyring: opt.show_keyring = 1; break; case oDebug: opt.debug |= pargs.r.ret_ulong; break; case oDebugAll: opt.debug = ~0; break; - case oStatusFD: set_status_fd( pargs.r.ret_int ); break; - case oLoggerFD: log_set_logfile( NULL, pargs.r.ret_int ); break; + case oStatusFD: + set_status_fd( iobuf_translate_file_handle (pargs.r.ret_int, 1) ); + break; +#ifdef __riscos__ + case oStatusFile: + set_status_fd( iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 1), 1) ); + break; +#endif /* __riscos__ */ + case oAttributeFD: + set_attrib_fd(iobuf_translate_file_handle (pargs.r.ret_int, 1)); + break; +#ifdef __riscos__ + case oAttributeFile: + set_attrib_fd(iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 1), 1) ); + break; +#endif /* __riscos__ */ + case oLoggerFD: + log_set_logfile( NULL, + iobuf_translate_file_handle (pargs.r.ret_int, 1) ); + break; +#ifdef __riscos__ + case oLoggerFile: + log_set_logfile( NULL, + iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 1), 1) ); + break; +#endif /* __riscos__ */ case oWithFingerprint: - with_fpr=1; /*fall thru*/ + opt.with_fingerprint = 1; + with_fpr=1; /*fall thru*/ case oFingerprint: opt.fingerprint++; break; case oSecretKeyring: append_to_strlist( &sec_nrings, pargs.r.ret_str); break; case oOptions: /* config files may not be nested (silently ignore them) */ if( !configfp ) { - gcry_free(configname); - configname = gcry_xstrdup(pargs.r.ret_str); + m_free(configname); + configname = m_strdup(pargs.r.ret_str); goto next_pass; } break; case oNoArmor: opt.no_armor=1; opt.armor=0; break; case oNoDefKeyring: default_keyring = 0; break; + case oDefCertCheckLevel: opt.def_cert_check_level=pargs.r.ret_int; break; case oNoGreeting: nogreeting = 1; break; - case oNoVerbose: - opt.verbose = 0; opt.list_sigs=0; - gcry_control( GCRYCTL_SET_VERBOSITY, (int)opt.verbose ); - break; - case oNoComment: opt.no_comment=1; break; + case oNoVerbose: g10_opt_verbose = 0; + opt.verbose = 0; opt.list_sigs=0; break; + case oQuickRandom: quick_random_gen(1); break; + case oSKComments: opt.sk_comments=1; break; + case oNoSKComments: opt.sk_comments=0; break; case oNoVersion: opt.no_version=1; break; case oEmitVersion: opt.no_version=0; break; case oCompletesNeeded: opt.completes_needed = pargs.r.ret_int; break; @@ -858,15 +1158,15 @@ main( int argc, char **argv ) opt.def_recipient = make_username(pargs.r.ret_str); break; case oDefRecipientSelf: - gcry_free(opt.def_recipient); opt.def_recipient = NULL; + m_free(opt.def_recipient); opt.def_recipient = NULL; opt.def_recipient_self = 1; break; case oNoDefRecipient: - gcry_free(opt.def_recipient); opt.def_recipient = NULL; + m_free(opt.def_recipient); opt.def_recipient = NULL; opt.def_recipient_self = 0; break; - case oNoOptions: break; /* no-options */ - case oHomedir: opt.homedir = pargs.r.ret_str; break; + case oNoOptions: opt.no_homedir_creation = 1; break; /* no-options */ + case oHomedir: break; case oNoBatch: opt.batch = 0; break; case oWithKeyData: opt.with_key_data=1; /* fall thru */ case oWithColons: opt.with_colons=':'; break; @@ -877,17 +1177,26 @@ main( int argc, char **argv ) case aListSecretKeys: set_cmd( &cmd, aListSecretKeys); break; case oAlwaysTrust: opt.always_trust = 1; break; case oLoadExtension: - register_extension(orig_argc? *orig_argv:NULL, pargs.r.ret_str); +#ifndef __riscos__ + add_to_strlist(&extensions,pargs.r.ret_str); + register_cipher_extension(orig_argc? *orig_argv:NULL, + pargs.r.ret_str); +#else /* __riscos__ */ + not_implemented("load-extension"); +#endif /* __riscos__ */ break; case oRFC1991: opt.rfc1991 = 1; opt.rfc2440 = 0; - opt.no_comment = 1; + opt.force_v4_certs = 0; + opt.sk_comments = 0; opt.escape_from = 1; break; case oOpenPGP: opt.rfc1991 = 0; opt.rfc2440 = 1; + opt.allow_non_selfsigned_uid = 1; + opt.allow_freeform_uid = 1; opt.pgp2_workarounds = 0; opt.escape_from = 0; opt.force_v3_sigs = 0; @@ -896,32 +1205,63 @@ main( int argc, char **argv ) opt.not_dash_escaped = 0; opt.def_cipher_algo = 0; opt.def_digest_algo = 0; + opt.cert_digest_algo = 0; opt.def_compress_algo = 1; - opt.s2k_mode = 3; /* iterated+salted */ - opt.s2k_digest_algo = GCRY_MD_SHA1; - opt.s2k_cipher_algo = GCRY_CIPHER_CAST5; + opt.s2k_mode = 3; /* iterated+salted */ + opt.s2k_digest_algo = DIGEST_ALGO_SHA1; + opt.s2k_cipher_algo = CIPHER_ALGO_CAST5; break; + case oPGP2: opt.pgp2 = 1; break; + case oNoPGP2: opt.pgp2 = 0; break; + case oPGP6: opt.pgp6 = 1; break; + case oNoPGP6: opt.pgp6 = 0; break; + case oPGP7: opt.pgp7 = 1; break; + case oNoPGP7: opt.pgp7 = 0; break; + case oEmuChecksumBug: opt.emulate_bugs |= EMUBUG_GPGCHKSUM; break; + case oEmu3DESS2KBug: opt.emulate_bugs |= EMUBUG_3DESS2K; break; case oEmuMDEncodeBug: opt.emulate_bugs |= EMUBUG_MDENCODE; break; case oCompressSigs: opt.compress_sigs = 1; break; case oRunAsShmCP: +#ifndef __riscos__ #ifndef USE_SHM_COPROCESSING /* not possible in the option file, * but we print the warning here anyway */ log_error("shared memory coprocessing is not available\n"); #endif +#else /* __riscos__ */ + not_implemented("run-as-shm-coprocess"); +#endif /* __riscos__ */ break; case oSetFilename: opt.set_filename = pargs.r.ret_str; break; - case oSetPolicyURL: opt.set_policy_url = pargs.r.ret_str; break; + case oForYourEyesOnly: eyes_only = 1; break; + case oNoForYourEyesOnly: eyes_only = 0; break; + case oSetPolicyURL: + add_policy_url(pargs.r.ret_str,0); + add_policy_url(pargs.r.ret_str,1); + break; + case oSigPolicyURL: add_policy_url(pargs.r.ret_str,0); break; + case oCertPolicyURL: add_policy_url(pargs.r.ret_str,1); break; + case oShowPolicyURL: opt.show_policy_url=1; break; + case oNoShowPolicyURL: opt.show_policy_url=0; break; case oUseEmbeddedFilename: opt.use_embedded_filename = 1; break; case oComment: opt.comment_string = pargs.r.ret_str; break; case oDefaultComment: opt.comment_string = NULL; break; case oThrowKeyid: opt.throw_keyid = 1; break; + case oShowPhotos: opt.show_photos = 1; break; + case oNoShowPhotos: opt.show_photos = 0; break; + case oPhotoViewer: opt.photo_viewer = pargs.r.ret_str; break; case oForceV3Sigs: opt.force_v3_sigs = 1; break; + case oNoForceV3Sigs: opt.force_v3_sigs = 0; break; + case oForceV4Certs: opt.force_v4_certs = 1; break; + case oNoForceV4Certs: opt.force_v4_certs = 0; break; case oForceMDC: opt.force_mdc = 1; break; + case oNoForceMDC: opt.force_mdc = 0; break; + case oDisableMDC: opt.disable_mdc = 1; break; + case oNoDisableMDC: opt.disable_mdc = 0; break; case oS2KMode: opt.s2k_mode = pargs.r.ret_int; break; - case oS2KDigest: s2k_digest_string = gcry_xstrdup(pargs.r.ret_str); break; - case oS2KCipher: s2k_cipher_string = gcry_xstrdup(pargs.r.ret_str); break; - + case oS2KDigest: s2k_digest_string = m_strdup(pargs.r.ret_str); break; + case oS2KCipher: s2k_cipher_string = m_strdup(pargs.r.ret_str); break; + case oSimpleSKChecksum: opt.simple_sk_checksum = 1; break; case oNoEncryptTo: opt.no_encrypt_to = 1; break; case oEncryptTo: /* store the recipient in the second list */ sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings ); @@ -929,18 +1269,41 @@ main( int argc, char **argv ) break; case oRecipient: /* store the recipient */ add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings ); + any_explicit_recipient = 1; break; case oTextmodeShort: opt.textmode = 2; break; case oTextmode: opt.textmode=1; break; + case oExpert: opt.expert = 1; break; + case oNoExpert: opt.expert = 0; break; + case oAskSigExpire: opt.ask_sig_expire = 1; break; + case oNoAskSigExpire: opt.ask_sig_expire = 0; break; + case oAskCertExpire: opt.ask_cert_expire = 1; break; + case oNoAskCertExpire: opt.ask_cert_expire = 0; break; case oUser: /* store the local users */ add_to_strlist2( &locusr, pargs.r.ret_str, utf8_strings ); break; case oCompress: opt.compress = pargs.r.ret_int; break; - case oPasswdFD: pwfd = pargs.r.ret_int; break; - case oCommandFD: opt.command_fd = pargs.r.ret_int; break; - case oCipherAlgo: def_cipher_string = gcry_xstrdup(pargs.r.ret_str); break; - case oDigestAlgo: def_digest_string = gcry_xstrdup(pargs.r.ret_str); break; - case oNoSecmemWarn: gcry_control( GCRYCTL_DISABLE_SECMEM_WARN ); break; + case oPasswdFD: + pwfd = iobuf_translate_file_handle (pargs.r.ret_int, 0); + break; +#ifdef __riscos__ + case oPasswdFile: + pwfd = iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 0), 0); + break; +#endif /* __riscos__ */ + case oCommandFD: + opt.command_fd = iobuf_translate_file_handle (pargs.r.ret_int, 0); + break; +#ifdef __riscos__ + case oCommandFile: + opt.command_fd = iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 0), 0); + break; +#endif /* __riscos__ */ + case oCipherAlgo: def_cipher_string = m_strdup(pargs.r.ret_str); break; + case oDigestAlgo: def_digest_string = m_strdup(pargs.r.ret_str); break; + case oCertDigestAlgo: cert_digest_string = m_strdup(pargs.r.ret_str); break; + case oNoSecmemWarn: secmem_set_flags( secmem_get_flags() | 1 ); break; + case oNoPermissionWarn: opt.no_perm_warn=1; break; case oCharset: if( set_native_charset( pargs.r.ret_str ) ) log_error(_("%s is not a valid character set\n"), @@ -948,54 +1311,129 @@ main( int argc, char **argv ) break; case oNotDashEscaped: opt.not_dash_escaped = 1; break; case oEscapeFrom: opt.escape_from = 1; break; + case oNoEscapeFrom: opt.escape_from = 0; break; case oLockOnce: opt.lock_once = 1; break; - #if 0 - #warning no disable_dotlock() yet case oLockNever: disable_dotlock(); break; - #endif - case oLockMultiple: opt.lock_once = 0; break; - case oKeyServer: opt.keyserver_name = pargs.r.ret_str; break; - case oNotation: add_notation_data( pargs.r.ret_str ); break; + case oLockMultiple: +#ifndef __riscos__ + opt.lock_once = 0; +#else /* __riscos__ */ + not_implemented("lock-multiple"); +#endif /* __riscos__ */ + break; + case oKeyServer: + if(parse_keyserver_uri(pargs.r.ret_str,configname,configlineno)) + log_error(_("could not parse keyserver URI\n")); + break; + case oKeyServerOptions: + parse_keyserver_options(pargs.r.ret_str); + break; + case oTempDir: opt.temp_dir=pargs.r.ret_str; break; + case oExecPath: + { + /* Notice that path is never freed. That is + intentional due to the way putenv() works. */ + char *path=m_alloc(5+strlen(pargs.r.ret_str)+1); + strcpy(path,"PATH="); + strcat(path,pargs.r.ret_str); + if(putenv(path)!=0) + log_error(_("unable to set exec-path to %s\n"),path); + } + break; + case oNotation: + add_notation_data( pargs.r.ret_str, 0 ); + add_notation_data( pargs.r.ret_str, 1 ); + break; + case oSigNotation: add_notation_data( pargs.r.ret_str, 0 ); break; + case oCertNotation: add_notation_data( pargs.r.ret_str, 1 ); break; + case oShowNotation: opt.show_notation=1; break; + case oNoShowNotation: opt.show_notation=0; break; case oUtf8Strings: utf8_strings = 1; break; case oNoUtf8Strings: utf8_strings = 0; break; - case oDisableCipherAlgo: { - int algo = gcry_cipher_map_name(pargs.r.ret_str); - gcry_cipher_ctl( NULL, GCRYCTL_DISABLE_ALGO, - &algo, sizeof algo ); - } + case oDisableCipherAlgo: + disable_cipher_algo( string_to_cipher_algo(pargs.r.ret_str) ); break; - case oDisablePubkeyAlgo: { - int algo = gcry_pk_map_name(pargs.r.ret_str); - gcry_pk_ctl( GCRYCTL_DISABLE_ALGO, - &algo, sizeof algo ); - } + case oDisablePubkeyAlgo: + disable_pubkey_algo( string_to_pubkey_algo(pargs.r.ret_str) ); break; + case oNoSigCache: opt.no_sig_cache = 1; break; + case oNoSigCreateCheck: opt.no_sig_create_check = 1; break; case oAllowNonSelfsignedUID: opt.allow_non_selfsigned_uid = 1; break; + case oNoAllowNonSelfsignedUID: opt.allow_non_selfsigned_uid=0; break; case oAllowFreeformUID: opt.allow_freeform_uid = 1; break; + case oNoAllowFreeformUID: opt.allow_freeform_uid = 0; break; case oNoLiteral: opt.no_literal = 1; break; case oSetFilesize: opt.set_filesize = pargs.r.ret_ulong; break; - case oHonorHttpProxy: opt.honor_http_proxy = 1; break; + case oHonorHttpProxy: + opt.keyserver_options.honor_http_proxy = 1; + deprecated_warning(configname,configlineno, + "--honor-http-proxy", + "--keyserver-options ", + "honor-http-proxy"); + break; case oFastListMode: opt.fast_list_mode = 1; break; + case oFixedListMode: opt.fixed_list_mode = 1; break; case oListOnly: opt.list_only=1; break; case oIgnoreTimeConflict: opt.ignore_time_conflict = 1; break; + case oIgnoreValidFrom: opt.ignore_valid_from = 1; break; + case oIgnoreCrcError: opt.ignore_crc_error = 1; break; case oNoRandomSeedFile: use_random_seed = 0; break; - case oNoAutoKeyRetrieve: opt.auto_key_retrieve = 0; break; + case oAutoKeyRetrieve: + case oNoAutoKeyRetrieve: + opt.keyserver_options.auto_key_retrieve= + (pargs.r_opt==oAutoKeyRetrieve); + deprecated_warning(configname,configlineno, + pargs.r_opt==oAutoKeyRetrieve?"--auto-key-retrieve": + "--no-auto-key-retrieve","--keyserver-options ", + pargs.r_opt==oAutoKeyRetrieve?"auto-key-retrieve": + "no-auto-key-retrieve"); + break; + case oShowSessionKey: opt.show_session_key = 1; break; + case oOverrideSessionKey: + opt.override_session_key = pargs.r.ret_str; + break; case oMergeOnly: opt.merge_only = 1; break; + case oAllowSecretKeyImport: /* obsolete */ break; case oTryAllSecrets: opt.try_all_secrets = 1; break; case oTrustedKey: register_trusted_key( pargs.r.ret_str ); break; - + case oEnableSpecialFilenames: + iobuf_enable_special_filenames (1); + break; + case oNoExpensiveTrustChecks: opt.no_expensive_trust_checks=1; break; + case oAutoCheckTrustDB: opt.no_auto_check_trustdb=0; break; + case oNoAutoCheckTrustDB: opt.no_auto_check_trustdb=1; break; + case oPreservePermissions: opt.preserve_permissions=1; break; + case oDefaultPreferenceList: + opt.def_preference_list = pargs.r.ret_str; + break; + case oPersonalCipherPreferences: + pers_cipher_list=pargs.r.ret_str; + break; + case oPersonalDigestPreferences: + pers_digest_list=pargs.r.ret_str; + break; + case oPersonalCompressPreferences: + pers_compress_list=pargs.r.ret_str; + break; + case oDisplay: opt.display = pargs.r.ret_str; break; + case oTTYname: opt.ttyname = pargs.r.ret_str; break; + case oTTYtype: opt.ttytype = pargs.r.ret_str; break; + case oLCctype: opt.lc_ctype = pargs.r.ret_str; break; + case oLCmessages: opt.lc_messages = pargs.r.ret_str; break; + case oGroup: add_group(pargs.r.ret_str); break; default : pargs.err = configfp? 1:2; break; } } + if( configfp ) { fclose( configfp ); configfp = NULL; - gcry_free(configname); configname = NULL; + m_free(configname); configname = NULL; goto next_pass; } - gcry_free( configname ); configname = NULL; + m_free( configname ); configname = NULL; if( log_get_errorcount(0) ) - gpg_exit(2); + g10_exit(2); if( nogreeting ) greeting = 0; @@ -1012,9 +1450,39 @@ main( int argc, char **argv ) } #endif + check_permissions(opt.homedir,0,0); + + if(unsafe_files) + { + STRLIST tmp; + + for(tmp=unsafe_files;tmp;tmp=tmp->next) + check_permissions(tmp->d,0,0); + + free_strlist(unsafe_files); + } + + if(extensions) + { + STRLIST tmp; + + for(tmp=extensions;tmp;tmp=tmp->next) + check_permissions(tmp->d,1,0); + + free_strlist(extensions); + } + if( may_coredump && !opt.quiet ) log_info(_("WARNING: program may create a core file!\n")); + if (eyes_only) { + if (opt.set_filename) + log_info(_("WARNING: %s overrides %s\n"), + "--for-your-eyes-only","--set-filename"); + + opt.set_filename="_CONSOLE"; + } + if (opt.no_literal) { log_info(_("NOTE: %s is not for normal use!\n"), "--no-literal"); if (opt.textmode) @@ -1022,51 +1490,142 @@ main( int argc, char **argv ) "--textmode", "--no-literal" ); if (opt.set_filename) log_error(_("%s makes no sense with %s!\n"), - "--set-filename", "--no-literal" ); + eyes_only?"--for-your-eyes-only":"--set-filename", + "--no-literal" ); } + if (opt.set_filesize) log_info(_("NOTE: %s is not for normal use!\n"), "--set-filesize"); if( opt.batch ) tty_batchmode( 1 ); - gcry_control( GCRYCTL_RESUME_SECMEM_WARN ); + secmem_set_flags( secmem_get_flags() & ~2 ); /* resume warnings */ set_debug(); - /* FIXME: should set filenames of libgcrypt explicitly - * gpg_opt_homedir = opt.homedir; */ + g10_opt_homedir = opt.homedir; + + /* Do these after the switch(), so they can override settings. */ + if(opt.pgp2 && (opt.pgp6 || opt.pgp7)) + log_error(_("%s not allowed with %s!\n"), + "--pgp2",opt.pgp6?"--pgp6":"--pgp7"); + else + { + if(opt.pgp2) + { + int unusable=0; + + if(cmd==aSign && !detached_sig) + { + log_info(_("you can only make detached or clear signatures " + "while in --pgp2 mode\n")); + unusable=1; + } + else if(cmd==aSignEncr || cmd==aSignSym) + { + log_info(_("you can't sign and encrypt at the " + "same time while in --pgp2 mode\n")); + unusable=1; + } + else if(argc==0 && (cmd==aSign || cmd==aEncr || cmd==aSym)) + { + log_info(_("you must use files (and not a pipe) when " + "working with --pgp2 enabled.\n")); + unusable=1; + } + else if(cmd==aEncr || cmd==aSym) + { + /* Everything else should work without IDEA (except using + a secret key encrypted with IDEA and setting an IDEA + preference, but those have their own error + messages). */ + + if(check_cipher_algo(CIPHER_ALGO_IDEA)) + { + log_info(_("encrypting a message in --pgp2 mode requires " + "the IDEA cipher\n")); + idea_cipher_warn(1); + unusable=1; + } + else if(cmd==aSym) + { + m_free(def_cipher_string); + def_cipher_string = m_strdup("idea"); + } + } + + if(unusable) + { + log_info(_("this message may not be usable by PGP 2.x\n")); + opt.pgp2=0; + } + else + { + opt.rfc1991 = 1; + opt.rfc2440 = 0; + opt.force_mdc = 0; + opt.disable_mdc = 1; + opt.force_v4_certs = 0; + opt.sk_comments = 0; + opt.escape_from = 1; + opt.force_v3_sigs = 1; + opt.pgp2_workarounds = 1; + opt.ask_sig_expire = 0; + opt.ask_cert_expire = 0; + m_free(def_digest_string); + def_digest_string = m_strdup("md5"); + opt.def_compress_algo = 1; + } + } + + if(opt.pgp6 || opt.pgp7) + { + opt.force_mdc=0; + opt.disable_mdc=1; + opt.sk_comments=0; + opt.escape_from=1; + opt.force_v3_sigs=1; + opt.ask_sig_expire=0; + opt.def_compress_algo=1; + } + } /* must do this after dropping setuid, because string_to... * may try to load an module */ if( def_cipher_string ) { - opt.def_cipher_algo = gcry_cipher_map_name(def_cipher_string); - gcry_free(def_cipher_string); def_cipher_string = NULL; - if( openpgp_cipher_test_algo(opt.def_cipher_algo) ) + opt.def_cipher_algo = string_to_cipher_algo(def_cipher_string); + if(opt.def_cipher_algo==0 && + ascii_strcasecmp(def_cipher_string,"idea")==0) + idea_cipher_warn(1); + m_free(def_cipher_string); def_cipher_string = NULL; + if( check_cipher_algo(opt.def_cipher_algo) ) log_error(_("selected cipher algorithm is invalid\n")); } if( def_digest_string ) { - opt.def_digest_algo = gcry_md_map_name(def_digest_string); - gcry_free(def_digest_string); def_digest_string = NULL; - if( openpgp_md_test_algo(opt.def_digest_algo) ) + opt.def_digest_algo = string_to_digest_algo(def_digest_string); + m_free(def_digest_string); def_digest_string = NULL; + if( check_digest_algo(opt.def_digest_algo) ) log_error(_("selected digest algorithm is invalid\n")); } + if( cert_digest_string ) { + opt.cert_digest_algo = string_to_digest_algo(cert_digest_string); + m_free(cert_digest_string); cert_digest_string = NULL; + if( check_digest_algo(opt.cert_digest_algo) ) + log_error(_("selected certification digest algorithm is invalid\n")); + } if( s2k_cipher_string ) { - opt.s2k_cipher_algo = gcry_cipher_map_name(s2k_cipher_string); - gcry_free(s2k_cipher_string); s2k_cipher_string = NULL; - if( openpgp_cipher_test_algo(opt.s2k_cipher_algo) ) + opt.s2k_cipher_algo = string_to_cipher_algo(s2k_cipher_string); + m_free(s2k_cipher_string); s2k_cipher_string = NULL; + if( check_cipher_algo(opt.s2k_cipher_algo) ) log_error(_("selected cipher algorithm is invalid\n")); } if( s2k_digest_string ) { - opt.s2k_digest_algo = gcry_md_map_name(s2k_digest_string); - gcry_free(s2k_digest_string); s2k_digest_string = NULL; - if( openpgp_md_test_algo(opt.s2k_digest_algo) ) + opt.s2k_digest_algo = string_to_digest_algo(s2k_digest_string); + m_free(s2k_digest_string); s2k_digest_string = NULL; + if( check_digest_algo(opt.s2k_digest_algo) ) log_error(_("selected digest algorithm is invalid\n")); } - if( opt.set_policy_url ) { - if( check_policy_url( opt.set_policy_url ) ) - log_error(_("the given policy URL is invalid\n")); - } - if( opt.def_compress_algo < 1 || opt.def_compress_algo > 2 ) - log_error(_("compress algorithm must be in range %d..%d\n"), 1, 2); + if( opt.def_compress_algo < -1 || opt.def_compress_algo > 2 ) + log_error(_("compress algorithm must be in range %d..%d\n"), 0, 2); if( opt.completes_needed < 1 ) log_error(_("completes-needed must be greater than 0\n")); if( opt.marginals_needed < 2 ) @@ -1082,18 +1641,40 @@ main( int argc, char **argv ) log_error(_("invalid S2K mode; must be 0, 1 or 3\n")); } + if(opt.def_cert_check_level<0 || opt.def_cert_check_level>3) + log_error(_("invalid default-check-level; must be 0, 1, 2, or 3\n")); + + /* This isn't actually needed, but does serve to error out if the + string is invalid. */ + if(opt.def_preference_list && + keygen_set_std_prefs(opt.def_preference_list,0)) + log_error(_("invalid default preferences\n")); + + /* We provide defaults for the personal digest list */ + if(!pers_digest_list) + pers_digest_list="h2"; + + if(pers_cipher_list && + keygen_set_std_prefs(pers_cipher_list,PREFTYPE_SYM)) + log_error(_("invalid personal cipher preferences\n")); + + if(pers_digest_list && + keygen_set_std_prefs(pers_digest_list,PREFTYPE_HASH)) + log_error(_("invalid personal digest preferences\n")); + + if(pers_compress_list && + keygen_set_std_prefs(pers_compress_list,PREFTYPE_ZIP)) + log_error(_("invalid personal compress preferences\n")); if( log_get_errorcount(0) ) - gpg_exit(2); + g10_exit(2); /* set the random seed file */ if( use_random_seed ) { char *p = make_filename(opt.homedir, "random_seed", NULL ); - #if 0 - #warning set_random_seed_file missing + check_permissions(p,0,0); set_random_seed_file(p); - #endif - gcry_free(p); + m_free(p); } if( !cmd && opt.fingerprint && !with_fpr ) { @@ -1112,9 +1693,12 @@ main( int argc, char **argv ) opt.list_sigs++; opt.verbose = opt.verbose > 1; - gcry_control( GCRYCTL_SET_VERBOSITY, (int)opt.verbose ); + g10_opt_verbose = opt.verbose; } + /* Compression algorithm 0 means no compression at all */ + if( opt.def_compress_algo == 0) + opt.compress = 0; /* kludge to let -sat generate a clear text signature */ if( opt.textmode == 2 && !detached_sig && opt.armor && cmd == aSign ) @@ -1123,20 +1707,27 @@ main( int argc, char **argv ) if( opt.verbose > 1 ) set_packet_list_mode(1); - /* add the keyrings, but not for some special commands and - * not in case of "-kvv userid keyring" */ + /* Add the keyrings, but not for some special commands and not in + case of "-kvv userid keyring". Also avoid adding the secret + keyring for a couple of commands to avoid unneeded access in + case the secrings are stored on a floppy */ if( cmd != aDeArmor && cmd != aEnArmor - && !(cmd == aKMode && argc == 2 ) ) { - - if( !sec_nrings && default_keyring ) /* add default secret rings */ - add_keyblock_resource("secring.gpg", 0, 1); - for(sl = sec_nrings; sl; sl = sl->next ) - add_keyblock_resource( sl->d, 0, 1 ); - if( !nrings && default_keyring ) /* add default ring */ - add_keyblock_resource("pubring.gpg", 0, 0); + && !(cmd == aKMode && argc == 2 ) ) + { + if (cmd != aCheckKeys && cmd != aListSigs && cmd != aListKeys + && cmd != aVerify && cmd != aVerifyFiles + && cmd != aSym) + { + if (!sec_nrings || default_keyring) /* add default secret rings */ + keydb_add_resource ("secring" EXTSEP_S "gpg", 0, 1); + for (sl = sec_nrings; sl; sl = sl->next) + keydb_add_resource ( sl->d, 0, 1 ); + } + if( !nrings || default_keyring ) /* add default ring */ + keydb_add_resource ("pubring" EXTSEP_S "gpg", 0, 0); for(sl = nrings; sl; sl = sl->next ) - add_keyblock_resource( sl->d, 0, 0 ); - } + keydb_add_resource ( sl->d, 0, 0 ); + } FREE_STRLIST(nrings); FREE_STRLIST(sec_nrings); @@ -1150,7 +1741,6 @@ main( int argc, char **argv ) case aPrimegen: case aPrintMD: case aPrintMDs: - case aPrintHMAC: case aGenRandom: case aDeArmor: case aEnArmor: @@ -1168,32 +1758,50 @@ main( int argc, char **argv ) default: rc = setup_trustdb(1, trustdb_name ); break; } if( rc ) - log_error(_("failed to initialize the TrustDB: %s\n"), gpg_errstr(rc)); + log_error(_("failed to initialize the TrustDB: %s\n"), g10_errstr(rc)); + switch (cmd) { + case aStore: + case aSym: + case aSign: + case aSignSym: + case aClearsign: + if (!opt.quiet && any_explicit_recipient) + log_info (_("WARNING: recipients (-r) given " + "without using public key encryption\n")); + break; + default: + break; + } + switch( cmd ) { case aStore: /* only store the file */ if( argc > 1 ) wrong_args(_("--store [filename]")); if( (rc = encode_store(fname)) ) log_error_f( print_fname_stdin(fname), - "store failed: %s\n", gpg_errstr(rc) ); + "store failed: %s\n", g10_errstr(rc) ); break; case aSym: /* encrypt the given file only with the symmetric cipher */ if( argc > 1 ) wrong_args(_("--symmetric [filename]")); if( (rc = encode_symmetric(fname)) ) log_error_f(print_fname_stdin(fname), - "symmetric encryption failed: %s\n",gpg_errstr(rc) ); + "symmetric encryption failed: %s\n",g10_errstr(rc) ); break; case aEncr: /* encrypt the given file */ if( argc > 1 ) wrong_args(_("--encrypt [filename]")); if( (rc = encode_crypt(fname,remusr)) ) - log_error("%s: encryption failed: %s\n", print_fname_stdin(fname), gpg_errstr(rc) ); + log_error("%s: encryption failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); break; + case aEncrFiles: /* encrypt the given files */ + encode_crypt_files(argc, argv, remusr); + break; + case aSign: /* sign the given file */ sl = NULL; if( detached_sig ) { /* sign all files */ @@ -1204,12 +1812,12 @@ main( int argc, char **argv ) if( argc > 1 ) wrong_args(_("--sign [filename]")); if( argc ) { - sl = gcry_xcalloc( 1, sizeof *sl + strlen(fname)); + sl = m_alloc_clear( sizeof *sl + strlen(fname)); strcpy(sl->d, fname); } } if( (rc = sign_file( sl, detached_sig, locusr, 0, NULL, NULL)) ) - log_error("signing failed: %s\n", gpg_errstr(rc) ); + log_error("signing failed: %s\n", g10_errstr(rc) ); free_strlist(sl); break; @@ -1217,47 +1825,60 @@ main( int argc, char **argv ) if( argc > 1 ) wrong_args(_("--sign --encrypt [filename]")); if( argc ) { - sl = gcry_xcalloc( 1, sizeof *sl + strlen(fname)); + sl = m_alloc_clear( sizeof *sl + strlen(fname)); strcpy(sl->d, fname); } else sl = NULL; if( (rc = sign_file(sl, detached_sig, locusr, 1, remusr, NULL)) ) - log_error("%s: sign+encrypt failed: %s\n", print_fname_stdin(fname), gpg_errstr(rc) ); + log_error("%s: sign+encrypt failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); free_strlist(sl); break; + case aSignSym: /* sign and conventionally encrypt the given file */ + if (argc > 1) + wrong_args(_("--sign --symmetric [filename]")); + rc = sign_symencrypt_file (fname, locusr); + if (rc) + log_error("%s: sign+symmetric failed: %s\n", + print_fname_stdin(fname), g10_errstr(rc) ); + break; + case aClearsign: /* make a clearsig */ if( argc > 1 ) wrong_args(_("--clearsign [filename]")); if( (rc = clearsign_file(fname, locusr, NULL)) ) - log_error("%s: clearsign failed: %s\n", print_fname_stdin(fname), gpg_errstr(rc) ); + log_error("%s: clearsign failed: %s\n", + print_fname_stdin(fname), g10_errstr(rc) ); break; case aVerify: if( (rc = verify_signatures( argc, argv ) )) - log_error("verify signatures failed: %s\n", gpg_errstr(rc) ); + log_error("verify signatures failed: %s\n", g10_errstr(rc) ); break; case aVerifyFiles: if( (rc = verify_files( argc, argv ) )) - log_error("verify files failed: %s\n", gpg_errstr(rc) ); + log_error("verify files failed: %s\n", g10_errstr(rc) ); break; case aDecrypt: if( argc > 1 ) wrong_args(_("--decrypt [filename]")); if( (rc = decrypt_message( fname ) )) - log_error("decrypt_message failed: %s\n", gpg_errstr(rc) ); + log_error("decrypt_message failed: %s\n", g10_errstr(rc) ); break; - + case aDecryptFiles: + decrypt_messages(argc, argv); + break; + case aSignKey: /* sign the key given as argument */ if( argc != 1 ) wrong_args(_("--sign-key user-id")); username = make_username( fname ); keyedit_menu(fname, locusr, NULL, 1 ); - gcry_free(username); + m_free(username); break; case aLSignKey: @@ -1265,9 +1886,25 @@ main( int argc, char **argv ) wrong_args(_("--lsign-key user-id")); username = make_username( fname ); keyedit_menu(fname, locusr, NULL, 2 ); - gcry_free(username); + m_free(username); break; + case aNRSignKey: + if( argc != 1 ) + wrong_args(_("--nrsign-key user-id")); + username = make_username( fname ); + keyedit_menu(fname, locusr, NULL, 3 ); + m_free(username); + break; + + case aNRLSignKey: + if( argc != 1 ) + wrong_args(_("--nrlsign-key user-id")); + username = make_username( fname ); + keyedit_menu(fname, locusr, NULL, 4 ); + m_free(username); + break; + case aEditKey: /* Edit a key signature */ if( !argc ) wrong_args(_("--edit-key user-id [commands]")); @@ -1281,22 +1918,22 @@ main( int argc, char **argv ) } else keyedit_menu(username, locusr, NULL, 0 ); - gcry_free(username); + m_free(username); break; - case aDeleteSecretKey: - if( argc != 1 ) - wrong_args(_("--delete-secret-key user-id")); - case aDeleteKey: - if( argc != 1 ) - wrong_args(_("--delete-key user-id")); - username = make_username( fname ); - if( (rc = delete_key(username, cmd==aDeleteSecretKey)) ) - log_error("%s: delete key failed: %s\n", username, gpg_errstr(rc) ); - gcry_free(username); + case aDeleteKeys: + case aDeleteSecretKeys: + case aDeleteSecretAndPublicKeys: + sl = NULL; + /* I'm adding these in reverse order as add_to_strlist2 + reverses them again, and it's easier to understand in the + proper order :) */ + for( ; argc; argc-- ) + add_to_strlist2( &sl, argv[argc-1], utf8_strings ); + delete_keys(sl,cmd==aDeleteSecretKeys,cmd==aDeleteSecretAndPublicKeys); + free_strlist(sl); break; - case aCheckKeys: opt.check_sigs = 1; case aListSigs: @@ -1332,7 +1969,7 @@ main( int argc, char **argv ) else { /* add keyring (default keyrings are not registered in this * special case */ - add_keyblock_resource( argv[1], 0, 0 ); + keydb_add_resource( argv[1], 0, 0 ); sl = NULL; if (**argv) add_to_strlist2( &sl, *argv, utf8_strings ); @@ -1359,7 +1996,7 @@ main( int argc, char **argv ) case aFastImport: case aImport: - import_keys( argc? argv:NULL, argc, (cmd == aFastImport) ); + import_keys( argc? argv:NULL, argc, (cmd == aFastImport), NULL ); break; case aExport: @@ -1370,14 +2007,31 @@ main( int argc, char **argv ) for( ; argc; argc--, argv++ ) add_to_strlist2( &sl, *argv, utf8_strings ); if( cmd == aSendKeys ) - hkp_export( sl ); + keyserver_export( sl ); else if( cmd == aRecvKeys ) - hkp_import( sl ); + keyserver_import( sl ); else export_pubkeys( sl, (cmd == aExport) ); free_strlist(sl); break; + case aSearchKeys: + sl = NULL; + for( ; argc; argc--, argv++ ) + append_to_strlist2( &sl, *argv, utf8_strings ); + + keyserver_search( sl ); + free_strlist(sl); + break; + + case aRefreshKeys: + sl = NULL; + for( ; argc; argc--, argv++ ) + add_to_strlist2( &sl, *argv, utf8_strings ); + keyserver_refresh(sl); + free_strlist(sl); + break; + case aExportSecret: sl = NULL; for( ; argc; argc--, argv++ ) @@ -1399,7 +2053,15 @@ main( int argc, char **argv ) wrong_args("--gen-revoke user-id"); username = make_username(*argv); gen_revoke( username ); - gcry_free( username ); + m_free( username ); + break; + + case aDesigRevoke: + if( argc != 1 ) + wrong_args("--desig-revoke user-id"); + username = make_username(*argv); + gen_desig_revoke( username ); + m_free( username ); break; case aDeArmor: @@ -1407,7 +2069,7 @@ main( int argc, char **argv ) wrong_args("--dearmor [file]"); rc = dearmor_file( argc? *argv: NULL ); if( rc ) - log_error(_("dearmoring failed: %s\n"), gpg_errstr(rc)); + log_error(_("dearmoring failed: %s\n"), g10_errstr(rc)); break; case aEnArmor: @@ -1415,17 +2077,12 @@ main( int argc, char **argv ) wrong_args("--enarmor [file]"); rc = enarmor_file( argc? *argv: NULL ); if( rc ) - log_error(_("enarmoring failed: %s\n"), gpg_errstr(rc)); + log_error(_("enarmoring failed: %s\n"), g10_errstr(rc)); break; case aPrimegen: - { - #if 1 - log_error( "command is currently not implemented\n"); - #else - /* FIXME: disabled until we have an API to create primes */ - int mode = argc < 2 ? 0 : atoi(*argv); + { int mode = argc < 2 ? 0 : atoi(*argv); if( mode == 1 && argc == 2 ) { mpi_print( stdout, generate_public_prime( atoi(argv[1]) ), 1); @@ -1450,12 +2107,11 @@ main( int argc, char **argv ) atoi(argv[2]), g, NULL ), 1); putchar('\n'); mpi_print( stdout, g, 1 ); - mpi_release(g); + mpi_free(g); } else wrong_args("--gen-prime mode bits [qbits] "); putchar('\n'); - #endif } break; @@ -1470,17 +2126,33 @@ main( int argc, char **argv ) while( endless || count ) { byte *p; - size_t n = !endless && count < 100? count : 100; + /* Wee need a multiple of 3, so that in case of + armored output we get a correct string. No + linefolding is done, as it is best to levae this to + other tools */ + size_t n = !endless && count < 99? count : 99; - p = gcry_random_bytes( n, level ); + p = get_random_bits( n*8, level, 0); #ifdef HAVE_DOSISH_SYSTEM setmode ( fileno(stdout), O_BINARY ); #endif - fwrite( p, n, 1, stdout ); - gcry_free(p); + if (opt.armor) { + char *tmp = make_radix64_string (p, n); + fputs (tmp, stdout); + m_free (tmp); + if (n%3 == 1) + putchar ('='); + if (n%3) + putchar ('='); + } else { + fwrite( p, n, 1, stdout ); + } + m_free(p); if( !endless ) count -= n; } + if (opt.armor) + putchar ('\n'); } break; @@ -1489,53 +2161,28 @@ main( int argc, char **argv ) wrong_args("--print-md algo [files]"); { int all_algos = (**argv=='*' && !(*argv)[1]); - int algo = all_algos? 0 : gcry_md_map_name(*argv); + int algo = all_algos? 0 : string_to_digest_algo(*argv); if( !algo && !all_algos ) log_error(_("invalid hash algorithm `%s'\n"), *argv ); else { argc--; argv++; if( !argc ) - print_mds(NULL, algo, NULL); + print_mds(NULL, algo); else { for(; argc; argc--, argv++ ) - print_mds(*argv, algo, NULL); + print_mds(*argv, algo); } } } break; - case aPrintHMAC: - if( argc < 2 ) - wrong_args("--print-hmac hash-algo key [files]"); - { - int all_algos = (**argv=='*' && !(*argv)[1]); - int algo = all_algos? 0 : gcry_md_map_name(*argv); - - if( !algo && !all_algos ) - log_error(_("invalid hash algorithm `%s'\n"), *argv ); - else { - const char *key; - argc--; argv++; - key = *argv; - argc--; argv++; - if( !argc ) - print_mds(NULL, algo, key ); - else { - for(; argc; argc--, argv++ ) - print_mds(*argv, algo, key ); - } - } - } - break; - - case aPrintMDs: /* old option */ if( !argc ) - print_mds(NULL,0,NULL); + print_mds(NULL,0); else { for(; argc; argc--, argv++ ) - print_mds(*argv,0,NULL); + print_mds(*argv,0); } break; @@ -1555,15 +2202,8 @@ main( int argc, char **argv ) break; case aCheckTrustDB: - if( !argc ) - check_trustdb(NULL); - else { - for( ; argc; argc--, argv++ ) { - username = make_username( *argv ); - check_trustdb( username ); - gcry_free(username); - } - } + /* Old versions allowed for arguments - ignore them */ + check_trustdb(); break; case aFixTrustDB: @@ -1578,7 +2218,7 @@ main( int argc, char **argv ) for( ; argc; argc--, argv++ ) { username = make_username( *argv ); list_trust_path( username ); - gcry_free(username); + m_free(username); } break; @@ -1593,9 +2233,21 @@ main( int argc, char **argv ) wrong_args("--import-ownertrust [file]"); import_ownertrust( argc? *argv:NULL ); break; + + case aPipeMode: + if ( argc ) + wrong_args ("--pipemode"); + run_in_pipemode (); + break; + + case aRebuildKeydbCaches: + if (argc) + wrong_args ("--rebuild-keydb-caches"); + keydb_rebuild_caches (); + break; case aListPackets: - opt.list_packets=1; + opt.list_packets=2; default: if( argc > 1 ) wrong_args(_("[filename]")); @@ -1620,7 +2272,7 @@ main( int argc, char **argv ) } rc = proc_packets(NULL, a ); if( rc ) - log_error("processing message failed: %s\n", gpg_errstr(rc) ); + log_error("processing message failed: %s\n", g10_errstr(rc) ); iobuf_close(a); } break; @@ -1629,28 +2281,24 @@ main( int argc, char **argv ) /* cleanup */ FREE_STRLIST(remusr); FREE_STRLIST(locusr); - gpg_exit(0); + g10_exit(0); return 8; /*NEVER REACHED*/ } void -gpg_exit( int rc ) +g10_exit( int rc ) { - #if 0 - #warning no update_random_seed_file update_random_seed_file(); - #endif if( opt.debug & DBG_MEMSTAT_VALUE ) { - gcry_control( GCRYCTL_DUMP_MEMORY_STATS ); - gcry_control( GCRYCTL_DUMP_RANDOM_STATS ); + m_print_stats("on exit"); + random_dump_stats(); } if( opt.debug ) - gcry_control( GCRYCTL_DUMP_SECMEM_STATS ); - gcry_control( GCRYCTL_TERM_SECMEM ); + secmem_dump_stats(); + secmem_term(); rc = rc? rc : log_get_errorcount(0)? 2 : - gpg_errors_seen? 1 : 0; - /*write_status( STATUS_LEAVE );*/ + g10_errors_seen? 1 : 0; exit(rc ); } @@ -1692,71 +2340,106 @@ print_hex( byte *p, size_t n ) } static void -print_mds( const char *fname, int algo, const char *key ) +print_hashline( MD_HANDLE md, int algo, const char *fname ) +{ + int i, n; + const byte *p; + + if ( fname ) { + for (p = fname; *p; p++ ) { + if ( *p <= 32 || *p > 127 || *p == ':' || *p == '%' ) + printf("%%%02X", *p ); + else + putchar( *p ); + } + } + putchar(':'); + printf("%d:", algo ); + p = md_read( md, algo ); + n = md_digest_length(algo); + for(i=0; i < n ; i++, p++ ) + printf("%02X", *p ); + putchar(':'); + putchar('\n'); +} + +static void +print_mds( const char *fname, int algo ) { FILE *fp; char buf[1024]; size_t n; - GCRY_MD_HD md; + MD_HANDLE md; char *pname; - int have_tiger = 0; if( !fname ) { fp = stdin; #ifdef HAVE_DOSISH_SYSTEM setmode ( fileno(fp) , O_BINARY ); #endif - pname = gcry_xstrdup("[stdin]: "); + pname = m_strdup("[stdin]: "); } else { - pname = gcry_xmalloc(strlen(fname)+3); + pname = m_alloc(strlen(fname)+3); strcpy(stpcpy(pname,fname),": "); fp = fopen( fname, "rb" ); } if( !fp ) { log_error("%s%s\n", pname, strerror(errno) ); - gcry_free(pname); + m_free(pname); return; } - md = gcry_md_open( 0, key? GCRY_MD_FLAG_HMAC : 0 ); + md = md_open( 0, 0 ); if( algo ) - gcry_md_enable( md, algo ); + md_enable( md, algo ); else { - /* Fixme: this does not work with hmac */ - gcry_md_enable( md, GCRY_MD_MD5 ); - gcry_md_enable( md, GCRY_MD_SHA1 ); - gcry_md_enable( md, GCRY_MD_RMD160 ); - have_tiger = !gcry_md_enable( md, GCRY_MD_TIGER ); + md_enable( md, DIGEST_ALGO_MD5 ); + md_enable( md, DIGEST_ALGO_SHA1 ); + md_enable( md, DIGEST_ALGO_RMD160 ); + if( !check_digest_algo(DIGEST_ALGO_TIGER) ) + md_enable( md, DIGEST_ALGO_TIGER ); } - if( key ) - gcry_md_setkey( md, key, strlen(key) ); while( (n=fread( buf, 1, DIM(buf), fp )) ) - gcry_md_write( md, buf, n ); + md_write( md, buf, n ); if( ferror(fp) ) log_error("%s%s\n", pname, strerror(errno) ); else { - if( algo ) { - if( fname ) - fputs( pname, stdout ); - print_hex(gcry_md_read(md, algo), gcry_md_get_algo_dlen(algo) ); - } - else { - printf( "%s MD5 = ", fname?pname:"" ); - print_hex(gcry_md_read(md, GCRY_MD_MD5), 16 ); - printf("\n%s SHA1 = ", fname?pname:"" ); - print_hex(gcry_md_read(md, GCRY_MD_SHA1), 20 ); - printf("\n%sRMD160 = ", fname?pname:"" ); - print_hex(gcry_md_read(md, GCRY_MD_RMD160), 20 ); - if( have_tiger ) { - printf("\n%s TIGER = ", fname?pname:"" ); - print_hex(gcry_md_read(md, GCRY_MD_TIGER), 24 ); - } - } - putchar('\n'); + md_final(md); + if ( opt.with_colons ) { + if ( algo ) + print_hashline( md, algo, fname ); + else { + print_hashline( md, DIGEST_ALGO_MD5, fname ); + print_hashline( md, DIGEST_ALGO_SHA1, fname ); + print_hashline( md, DIGEST_ALGO_RMD160, fname ); + if( !check_digest_algo(DIGEST_ALGO_TIGER) ) + print_hashline( md, DIGEST_ALGO_TIGER, fname ); + } + } + else { + if( algo ) { + if( fname ) + fputs( pname, stdout ); + print_hex(md_read(md, algo), md_digest_length(algo) ); + } + else { + printf( "%s MD5 = ", fname?pname:"" ); + print_hex(md_read(md, DIGEST_ALGO_MD5), 16 ); + printf("\n%s SHA1 = ", fname?pname:"" ); + print_hex(md_read(md, DIGEST_ALGO_SHA1), 20 ); + printf("\n%sRMD160 = ", fname?pname:"" ); + print_hex(md_read(md, DIGEST_ALGO_RMD160), 20 ); + if( !check_digest_algo(DIGEST_ALGO_TIGER) ) { + printf("\n%s TIGER = ", fname?pname:"" ); + print_hex(md_read(md, DIGEST_ALGO_TIGER), 24 ); + } + } + putchar('\n'); + } } - gcry_md_close(md); + md_close(md); if( fp != stdin ) fclose(fp); @@ -1765,41 +2448,35 @@ print_mds( const char *fname, int algo, const char *key ) /**************** * Check the supplied name,value string and add it to the notation - * data to be used for signatures. - */ + * data to be used for signatures. which==0 for sig notations, and 1 + * for cert notations. +*/ static void -add_notation_data( const char *string ) +add_notation_data( const char *string, int which ) { const char *s; - const char *s2; - STRLIST sl; + STRLIST sl,*notation_data; int critical=0; int highbit=0; + if(which) + notation_data=&opt.cert_notation_data; + else + notation_data=&opt.sig_notation_data; + if( *string == '!' ) { critical = 1; string++; } - s = string; - if( !*s || (*s & 0x80) || (!isalpha(*s) && *s != '_') ) { - log_error(_("the first character of a notation name " - "must be a letter or an underscore\n") ); - return; - } - for(s++; *s != '='; s++ ) { - if( !*s || (*s & 0x80) || (!isalnum(*s) && *s != '_' && *s != '.' ) ) { - log_error(_("a notation name must have only letters, " - "digits, dots or underscores and end with an '='\n") ); + for( s=string ; *s != '='; s++ ) { + if( !*s || (*s & 0x80) || (!isgraph(*s) && !isspace(*s)) ) { + log_error(_("a notation name must have only printable characters " + "or spaces, and end with an '='\n") ); return; } } - if( s[-1] == '.' || ((s2=strstr(string, "..")) && s2 < s ) ) { - log_error(_("dots in a notation name must be surrounded " - "by other characters\n") ); - return; - } - /* we do only support printabe text - therefore we enforce the use + /* we only support printable text - therefore we enforce the use * of only printable characters (an empty value is valid) */ for( s++; *s ; s++ ) { if( iscntrl(*s) ) { @@ -1812,26 +2489,44 @@ add_notation_data( const char *string ) } if( highbit ) /* must use UTF8 encoding */ - sl = add_to_strlist2( &opt.notation_data, string, utf8_strings ); + sl = add_to_strlist2( notation_data, string, utf8_strings ); else - sl = add_to_strlist( &opt.notation_data, string ); + sl = add_to_strlist( notation_data, string ); if( critical ) sl->flags |= 1; } -static int -check_policy_url( const char *s ) +static void +add_policy_url( const char *string, int which ) { - if( *s == '!' ) - s++; - if( !*s ) - return -1; - for(; *s ; s++ ) { - if( (*s & 0x80) || iscntrl(*s) ) - return -1; - } - return 0; -} + int i,critical=0; + STRLIST sl; + if(*string=='!') + { + string++; + critical=1; + } + + for(i=0;iflags |= 1; +} diff --git a/g10/getkey.c b/g10/getkey.c index 8f38c4a34..87680502a 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1,5 +1,5 @@ /* getkey.c - Get a key from the database - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,10 +24,9 @@ #include #include #include - #include "util.h" #include "packet.h" -#include +#include "memory.h" #include "iobuf.h" #include "keydb.h" #include "options.h" @@ -35,81 +34,26 @@ #include "trustdb.h" #include "i18n.h" +#define MAX_PK_CACHE_ENTRIES 200 +#define MAX_UID_CACHE_ENTRIES 200 -#if 0 -#define MAX_UNK_CACHE_ENTRIES 1000 /* we use a linked list - so I guess - * this is a reasonable limit */ -#define MAX_PK_CACHE_ENTRIES 50 +#if MAX_PK_CACHE_ENTRIES < 2 + #error We need the cache for key creation #endif -#define MAX_UID_CACHE_ENTRIES 50 -/* A map of the all characters valid used for word_match() - * Valid characters are in in this table converted to uppercase. - * because the upper 128 bytes have special meaning, we assume - * that they are all valid. - * Note: We must use numerical values here in case that this program - * will be converted to those little blue HAL9000s with their strange - * EBCDIC character set (user ids are UTF-8). - * wk 2000-04-13: Hmmm, does this really make sense, given the fact that - * we can run gpg now on a S/390 running GNU/Linux, where the code - * translation is done by the device drivers? - */ -static const byte word_match_chars[256] = { - /* 00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 08 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 18 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 28 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - /* 38 */ 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 40 */ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - /* 48 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - /* 50 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - /* 58 */ 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 60 */ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - /* 68 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - /* 70 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - /* 78 */ 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - /* 88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - /* 90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - /* 98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - /* a0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - /* a8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, - /* b0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - /* b8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - /* c0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - /* c8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - /* d0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - /* d8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - /* e0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - /* e8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - /* f0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - /* f8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff -}; - -typedef struct { - int mode; - u32 keyid[2]; - byte fprint[20]; - char *namebuf; - const char *name; -} getkey_item_t; struct getkey_ctx_s { - /* make an array or a linked list from dome fields */ - int primary; + int exact; KBNODE keyblock; - KBPOS kbpos; + KBPOS kbpos; KBNODE found_key; /* pointer into some keyblock */ int last_rc; int req_usage; int req_algo; - ulong count; + KEYDB_HANDLE kr_handle; int not_allocated; int nitems; - getkey_item_t items[1]; + KEYDB_SEARCH_DESC items[1]; }; #if 0 @@ -127,12 +71,6 @@ typedef struct keyid_list { } *keyid_list_t; -#if MAX_UNK_CACHE_ENTRIES - static keyid_list_t unknown_keyids; - static int unk_cache_entries; /* number of entries in unknown keys cache */ - static int unk_cache_disabled; -#endif - #if MAX_PK_CACHE_ENTRIES typedef struct pk_cache_entry { struct pk_cache_entry *next; @@ -156,11 +94,9 @@ typedef struct user_id_db { static user_id_db_t user_id_db; static int uid_cache_entries; /* number of entries in uid cache */ - - -static char* prepare_word_match( const byte *name ); -static int lookup( GETKEY_CTX ctx, KBNODE *ret_kb, int secmode ); - +static void merge_selfsigs( KBNODE keyblock ); +static int lookup( GETKEY_CTX ctx, KBNODE *ret_keyblock, int secmode ); +static int check_revocation_keys(PKT_public_key *pk,PKT_signature *sig); #if 0 static void @@ -180,7 +116,7 @@ print_stats() #endif -static void +void cache_public_key( PKT_public_key *pk ) { #if MAX_PK_CACHE_ENTRIES @@ -190,8 +126,11 @@ cache_public_key( PKT_public_key *pk ) if( pk_cache_disabled ) return; + if( pk->dont_cache ) + return; + if( is_ELGAMAL(pk->pubkey_algo) - || pk->pubkey_algo == GCRY_PK_DSA + || pk->pubkey_algo == PUBKEY_ALGO_DSA || is_RSA(pk->pubkey_algo) ) { keyid_from_pk( pk, keyid ); } @@ -213,7 +152,7 @@ cache_public_key( PKT_public_key *pk ) return; } pk_cache_entries++; - ce = gcry_xmalloc( sizeof *ce ); + ce = m_alloc( sizeof *ce ); ce->next = pk_cache; pk_cache = ce; ce->pk = copy_public_key( NULL, pk ); @@ -222,6 +161,7 @@ cache_public_key( PKT_public_key *pk ) #endif } + /* * Return the user ID from the given keyblock. * We use the primary uid flag which has been set by the merge_selfsigs @@ -232,16 +172,21 @@ static const char * get_primary_uid ( KBNODE keyblock, size_t *uidlen ) { KBNODE k; + const char *s; for (k=keyblock; k; k=k->next ) { if ( k->pkt->pkttype == PKT_USER_ID + && !k->pkt->pkt.user_id->attrib_data && k->pkt->pkt.user_id->is_primary ) { *uidlen = k->pkt->pkt.user_id->len; return k->pkt->pkt.user_id->name; } } - *uidlen = 12; - return "[No user ID]"; + /* fixme: returning translatable constants instead of a user ID is + * not good because they are probably not utf-8 encoded. */ + s = _("[User id not found]"); + *uidlen = strlen (s); + return s; } @@ -250,7 +195,7 @@ release_keyid_list ( keyid_list_t k ) { while ( k ) { keyid_list_t k2 = k->next; - gcry_free (k); + m_free (k); k = k2; } } @@ -259,7 +204,7 @@ release_keyid_list ( keyid_list_t k ) * Store the association of keyid and userid * Feed only public keys to this function. */ -void +static void cache_user_id( KBNODE keyblock ) { user_id_db_t r; @@ -271,7 +216,7 @@ cache_user_id( KBNODE keyblock ) for (k=keyblock; k; k = k->next ) { if ( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { - keyid_list_t a = gcry_xcalloc ( 1, sizeof *a ); + keyid_list_t a = m_alloc_clear ( sizeof *a ); /* Hmmm: For a long list of keyids it might be an advantage * to append the keys */ keyid_from_pk( k->pkt->pkt.public_key, a->keyid ); @@ -284,7 +229,7 @@ cache_user_id( KBNODE keyblock ) if( DBG_CACHE ) log_debug("cache_user_id: already in cache\n"); release_keyid_list ( keyids ); - gcry_free ( a ); + m_free ( a ); return; } } @@ -305,10 +250,10 @@ cache_user_id( KBNODE keyblock ) r = user_id_db; user_id_db = r->next; release_keyid_list ( r->keyids ); - gcry_free(r); + m_free(r); uid_cache_entries--; } - r = gcry_xmalloc( sizeof *r + uidlen-1 ); + r = m_alloc( sizeof *r + uidlen-1 ); r->keyids = keyids; r->len = uidlen; memcpy(r->name, uid, r->len); @@ -321,17 +266,6 @@ cache_user_id( KBNODE keyblock ) void getkey_disable_caches() { - #if MAX_UNK_CACHE_ENTRIES - { - keyid_list_t kl, kl2; - for( kl = unknown_keyids; kl; kl = kl2 ) { - kl2 = kl->next; - gcry_free(kl); - } - unknown_keyids = NULL; - unk_cache_disabled = 1; - } - #endif #if MAX_PK_CACHE_ENTRIES { pk_cache_entry_t ce, ce2; @@ -339,7 +273,7 @@ getkey_disable_caches() for( ce = pk_cache; ce; ce = ce2 ) { ce2 = ce->next; free_public_key( ce->pk ); - gcry_free( ce ); + m_free( ce ); } pk_cache_disabled=1; pk_cache_entries = 0; @@ -351,15 +285,14 @@ getkey_disable_caches() static void -pk_from_block ( GETKEY_CTX ctx, - PKT_public_key *pk, KBNODE keyblock, const char *namehash ) +pk_from_block ( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE keyblock ) { KBNODE a = ctx->found_key ? ctx->found_key : keyblock; assert ( a->pkt->pkttype == PKT_PUBLIC_KEY || a->pkt->pkttype == PKT_PUBLIC_SUBKEY ); - copy_public_key_new_namehash( pk, a->pkt->pkt.public_key, namehash); + copy_public_key ( pk, a->pkt->pkt.public_key ); } static void @@ -386,15 +319,6 @@ get_pubkey( PKT_public_key *pk, u32 *keyid ) int internal = 0; int rc = 0; - #if MAX_UNK_CACHE_ENTRIES - { /* let's see whether we checked the keyid already */ - keyid_list_t kl; - for( kl = unknown_keyids; kl; kl = kl->next ) - if( kl->keyid[0] == keyid[0] && kl->keyid[1] == keyid[1] ) - return GPGERR_NO_PUBKEY; /* already checked and not found */ - } - #endif - #if MAX_PK_CACHE_ENTRIES { /* Try to get it from the cache */ pk_cache_entry_t ce; @@ -409,7 +333,7 @@ get_pubkey( PKT_public_key *pk, u32 *keyid ) #endif /* more init stuff */ if( !pk ) { - pk = gcry_xcalloc( 1, sizeof *pk ); + pk = m_alloc_clear( sizeof *pk ); internal++; } @@ -418,16 +342,18 @@ get_pubkey( PKT_public_key *pk, u32 *keyid ) { struct getkey_ctx_s ctx; KBNODE kb = NULL; memset( &ctx, 0, sizeof ctx ); + ctx.exact = 1; /* use the key ID exactly as given */ ctx.not_allocated = 1; + ctx.kr_handle = keydb_new (0); ctx.nitems = 1; - ctx.items[0].mode = 11; - ctx.items[0].keyid[0] = keyid[0]; - ctx.items[0].keyid[1] = keyid[1]; + ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID; + ctx.items[0].u.kid[0] = keyid[0]; + ctx.items[0].u.kid[1] = keyid[1]; ctx.req_algo = pk->req_algo; ctx.req_usage = pk->req_usage; rc = lookup( &ctx, &kb, 0 ); if ( !rc ) { - pk_from_block ( &ctx, pk, kb, NULL ); + pk_from_block ( &ctx, pk, kb ); } get_pubkey_end( &ctx ); release_kbnode ( kb ); @@ -435,26 +361,7 @@ get_pubkey( PKT_public_key *pk, u32 *keyid ) if( !rc ) goto leave; - #if MAX_UNK_CACHE_ENTRIES - /* not found: store it for future reference */ - if( unk_cache_disabled ) - ; - else if( ++unk_cache_entries > MAX_UNK_CACHE_ENTRIES ) { - unk_cache_disabled = 1; - if( opt.verbose > 1 ) - log_info(_("too many entries in unk cache - disabled\n")); - } - else { - keyid_list_t kl; - - kl = gcry_xmalloc( sizeof *kl ); - kl->keyid[0] = keyid[0]; - kl->keyid[1] = keyid[1]; - kl->next = unknown_keyids; - unknown_keyids = kl; - } - #endif - rc = GPGERR_NO_PUBKEY; + rc = G10ERR_NO_PUBKEY; leave: if( !rc ) @@ -473,11 +380,13 @@ get_pubkeyblock( u32 *keyid ) KBNODE keyblock = NULL; memset( &ctx, 0, sizeof ctx ); + /* no need to set exact here because we want the entire block */ ctx.not_allocated = 1; + ctx.kr_handle = keydb_new (0); ctx.nitems = 1; - ctx.items[0].mode = 11; - ctx.items[0].keyid[0] = keyid[0]; - ctx.items[0].keyid[1] = keyid[1]; + ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID; + ctx.items[0].u.kid[0] = keyid[0]; + ctx.items[0].u.kid[1] = keyid[1]; rc = lookup( &ctx, &keyblock, 0 ); get_pubkey_end( &ctx ); @@ -498,11 +407,13 @@ get_seckey( PKT_secret_key *sk, u32 *keyid ) KBNODE kb = NULL; memset( &ctx, 0, sizeof ctx ); + ctx.exact = 1; /* use the key ID exactly as given */ ctx.not_allocated = 1; + ctx.kr_handle = keydb_new (1); ctx.nitems = 1; - ctx.items[0].mode = 11; - ctx.items[0].keyid[0] = keyid[0]; - ctx.items[0].keyid[1] = keyid[1]; + ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID; + ctx.items[0].u.kid[0] = keyid[0]; + ctx.items[0].u.kid[1] = keyid[1]; ctx.req_algo = sk->req_algo; ctx.req_usage = sk->req_usage; rc = lookup( &ctx, &kb, 1 ); @@ -524,61 +435,30 @@ get_seckey( PKT_secret_key *sk, u32 *keyid ) /**************** - * Check whether the secret key is available + * Check whether the secret key is available. This is just a fast + * check and does not tell us whether the secret key is valid. It + * merely tells other whether there is some secret key. * Returns: 0 := key is available - * GPGERR_NO_SECKEY := not availabe + * G10ERR_NO_SECKEY := not availabe */ int seckey_available( u32 *keyid ) { int rc; - struct getkey_ctx_s ctx; - KBNODE kb = NULL; + KEYDB_HANDLE hd = keydb_new (1); - memset( &ctx, 0, sizeof ctx ); - ctx.not_allocated = 1; - ctx.nitems = 1; - ctx.items[0].mode = 11; - ctx.items[0].keyid[0] = keyid[0]; - ctx.items[0].keyid[1] = keyid[1]; - rc = lookup( &ctx, &kb, 1 ); - get_seckey_end( &ctx ); - release_kbnode ( kb ); + rc = keydb_search_kid (hd, keyid); + if ( rc == -1 ) + rc = G10ERR_NO_SECKEY; + keydb_release (hd); return rc; } - -static int -hextobyte( const byte *s ) -{ - int c; - - if( *s >= '0' && *s <= '9' ) - c = 16 * (*s - '0'); - else if( *s >= 'A' && *s <= 'F' ) - c = 16 * (10 + *s - 'A'); - else if( *s >= 'a' && *s <= 'f' ) - c = 16 * (10 + *s - 'a'); - else - return -1; - s++; - if( *s >= '0' && *s <= '9' ) - c += *s - '0'; - else if( *s >= 'A' && *s <= 'F' ) - c += 10 + *s - 'A'; - else if( *s >= 'a' && *s <= 'f' ) - c += 10 + *s - 'a'; - else - return -1; - return c; -} - - - /**************** * Return the type of the user id: * + * Please use the constants KEYDB_SERCH_MODE_xxx * 0 = Invalid user ID * 1 = exact match * 2 = match a substring @@ -594,8 +474,6 @@ hextobyte( const byte *s ) * 21 = Unified fingerprint :fpr:pk_algo: * (We don't use pk_algo yet) * - * if fprint is not NULL, it should be an array of at least 20 bytes. - * * Rules used: * - If the username starts with 8,9,16 or 17 hex-digits (the first one * must be in the range 0..9), this is considered a keyid; depending @@ -620,16 +498,21 @@ hextobyte( const byte *s ) * is not case sensitive. */ -int -classify_user_id( const char *name, u32 *keyid, byte *fprint, - const char **retstr, size_t *retlen ) +static int +classify_user_id2( const char *name, + KEYDB_SEARCH_DESC *desc, + int *force_exact ) { - const char * s; - int mode = 0; - int hexprefix = 0; - int hexlength; - - /* skip leading spaces. FIXME: what is with leading spaces? */ + const char *s; + int hexprefix = 0; + int hexlength; + int mode = 0; + + /* clear the structure so that the mode field is set to zero unless + * we set it to the correct value right at the end of this function */ + memset (desc, 0, sizeof *desc); + *force_exact = 0; + /* skip leading spaces. Fixme: what is with trailing spaces? */ for(s = name; *s && isspace(*s); s++ ) ; @@ -638,42 +521,42 @@ classify_user_id( const char *name, u32 *keyid, byte *fprint, return 0; case '.': /* an email address, compare from end */ - mode = 5; + mode = KEYDB_SEARCH_MODE_MAILEND; s++; + desc->u.name = s; break; case '<': /* an email address */ - mode = 3; + mode = KEYDB_SEARCH_MODE_MAIL; + desc->u.name = s; break; case '@': /* part of an email address */ - mode = 4; + mode = KEYDB_SEARCH_MODE_MAILSUB; s++; + desc->u.name = s; break; case '=': /* exact compare */ - mode = 1; + mode = KEYDB_SEARCH_MODE_EXACT; s++; + desc->u.name = s; break; case '*': /* case insensitive substring search */ - mode = 2; + mode = KEYDB_SEARCH_MODE_SUBSTR; s++; + desc->u.name = s; break; case '+': /* compare individual words */ - mode = 6; + mode = KEYDB_SEARCH_MODE_WORDS; s++; + desc->u.name = s; break; case '#': /* local user id */ - mode = 12; - s++; - if (keyid) { - if (keyid_from_lid(strtoul(s, NULL, 10), keyid)) - keyid[0] = keyid[1] = 0; - } - break; + return 0; /* This is now obsolete and van't not be used anymore*/ case ':': /*Unified fingerprint */ { @@ -689,14 +572,12 @@ classify_user_id( const char *name, u32 *keyid, byte *fprint, } if (i != 32 && i != 40) return 0; /* invalid length of fpr*/ - if (fprint) { - for (i=0,si=s; si < se; i++, si +=2) - fprint[i] = hextobyte(si); - for ( ; i < 20; i++) - fprint[i]= 0; - } + for (i=0,si=s; si < se; i++, si +=2) + desc->u.fpr[i] = hextobyte(si); + for ( ; i < 20; i++) + desc->u.fpr[i]= 0; s = se + 1; - mode = 21; + mode = KEYDB_SEARCH_MODE_FPR; } break; @@ -707,6 +588,10 @@ classify_user_id( const char *name, u32 *keyid, byte *fprint, } hexlength = strspn(s, "0123456789abcdefABCDEF"); + if (hexlength >= 8 && s[hexlength] =='!') { + *force_exact = 1; + hexlength++; /* just for the following check */ + } /* check if a hexadecimal number is terminated by EOS or blank */ if (hexlength && s[hexlength] && !isspace(s[hexlength])) { @@ -716,16 +601,17 @@ classify_user_id( const char *name, u32 *keyid, byte *fprint, hexlength = 0; /* a hex number, but really were not. */ } + if (*force_exact) + hexlength--; + if (hexlength == 8 || (!hexprefix && hexlength == 9 && *s == '0')){ /* short keyid */ if (hexlength == 9) s++; - if (keyid) { - keyid[0] = 0; - keyid[1] = strtoul( s, NULL, 16 ); - } - mode = 10; + desc->u.kid[0] = 0; + desc->u.kid[1] = strtoul( s, NULL, 16 ); + mode = KEYDB_SEARCH_MODE_SHORT_KID; } else if (hexlength == 16 || (!hexprefix && hexlength == 17 && *s == '0')) { @@ -734,9 +620,9 @@ classify_user_id( const char *name, u32 *keyid, byte *fprint, if (hexlength == 17) s++; mem2str(buf, s, 9 ); - keyid[0] = strtoul( buf, NULL, 16 ); - keyid[1] = strtoul( s+8, NULL, 16 ); - mode = 11; + desc->u.kid[0] = strtoul( buf, NULL, 16 ); + desc->u.kid[1] = strtoul( s+8, NULL, 16 ); + mode = KEYDB_SEARCH_MODE_LONG_KID; } else if (hexlength == 32 || (!hexprefix && hexlength == 33 && *s == '0')) { @@ -744,16 +630,14 @@ classify_user_id( const char *name, u32 *keyid, byte *fprint, int i; if (hexlength == 33) s++; - if (fprint) { - memset(fprint+16, 4, 0); - for (i=0; i < 16; i++, s+=2) { - int c = hextobyte(s); - if (c == -1) - return 0; - fprint[i] = c; - } - } - mode = 16; + memset(desc->u.fpr+16, 0, 4); + for (i=0; i < 16; i++, s+=2) { + int c = hextobyte(s); + if (c == -1) + return 0; + desc->u.fpr[i] = c; + } + mode = KEYDB_SEARCH_MODE_FPR16; } else if (hexlength == 40 || (!hexprefix && hexlength == 41 && *s == '0')) { @@ -761,131 +645,140 @@ classify_user_id( const char *name, u32 *keyid, byte *fprint, int i; if (hexlength == 41) s++; - if (fprint) { - for (i=0; i < 20; i++, s+=2) { - int c = hextobyte(s); - if (c == -1) - return 0; - fprint[i] = c; - } - } - mode = 20; + for (i=0; i < 20; i++, s+=2) { + int c = hextobyte(s); + if (c == -1) + return 0; + desc->u.fpr[i] = c; + } + mode = KEYDB_SEARCH_MODE_FPR20; } else { if (hexprefix) /* This was a hex number with a prefix */ return 0; /* and a wrong length */ - mode = 2; /* Default is case insensitive substring search */ + *force_exact = 0; + desc->u.name = s; + mode = KEYDB_SEARCH_MODE_SUBSTR; /* default mode */ } } - if( retstr ) - *retstr = s; - if( retlen ) - *retlen = strlen(s); - + desc->mode = mode; return mode; } +int +classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc) +{ + int dummy; + KEYDB_SEARCH_DESC dummy_desc; + if (!desc) + desc = &dummy_desc; + return classify_user_id2 (name, desc, &dummy); +} /**************** * Try to get the pubkey by the userid. This function looks for the * first pubkey certificate which has the given name in a user_id. * if pk/sk has the pubkey algo set, the function will only return * a pubkey with that algo. - * The caller must provide provide storage for either the pk or the sk. - * If ret_kb is not NULL the funtion will return the keyblock there. + * The caller should provide storage for either the pk or the sk. + * If ret_kb is not NULL the function will return the keyblock there. */ static int key_byname( GETKEY_CTX *retctx, STRLIST namelist, - PKT_public_key *pk, PKT_secret_key *sk, KBNODE *ret_kb ) + PKT_public_key *pk, PKT_secret_key *sk, int secmode, + KBNODE *ret_kb, KEYDB_HANDLE *ret_kdbhd ) { int rc = 0; int n; STRLIST r; GETKEY_CTX ctx; KBNODE help_kb = NULL; + int exact; - if( retctx ) /* reset the returned context in case of error */ + if( retctx ) {/* reset the returned context in case of error */ + assert (!ret_kdbhd); /* not allowed because the handle is + stored in the context */ *retctx = NULL; + } + if (ret_kdbhd) + *ret_kdbhd = NULL; /* build the search context */ - /* Performance hint: Use a static buffer if there is only one name */ - /* and we don't have mode 6 */ for(n=0, r=namelist; r; r = r->next ) n++; - ctx = gcry_xcalloc( 1, sizeof *ctx + (n-1)*sizeof ctx->items ); + ctx = m_alloc_clear (sizeof *ctx + (n-1)*sizeof ctx->items ); ctx->nitems = n; for(n=0, r=namelist; r; r = r->next, n++ ) { - int mode = classify_user_id( r->d, - ctx->items[n].keyid, - ctx->items[n].fprint, - &ctx->items[n].name, - NULL ); - - /* if we don't use one of the exact key specifications, we assume that - * the primary key is requested */ - if ( mode != 10 && mode != 11 - && mode != 16 && mode == 20 && mode != 21 ) - ctx->primary = 1; - - ctx->items[n].mode = mode; - if( !ctx->items[n].mode ) { - gcry_free( ctx ); - return GPGERR_INV_USER_ID; - } - if( ctx->items[n].mode == 6 ) { - ctx->items[n].namebuf = prepare_word_match(ctx->items[n].name); - ctx->items[n].name = ctx->items[n].namebuf; + classify_user_id2 (r->d, &ctx->items[n], &exact); + + if (exact) + ctx->exact = 1; + if (!ctx->items[n].mode) { + m_free (ctx); + return G10ERR_INV_USER_ID; } } - - + ctx->kr_handle = keydb_new (secmode); if ( !ret_kb ) ret_kb = &help_kb; - if( sk ) { + if( secmode ) { + if (sk) { + ctx->req_algo = sk->req_algo; + ctx->req_usage = sk->req_usage; + } rc = lookup( ctx, ret_kb, 1 ); if ( !rc && sk ) { sk_from_block ( ctx, sk, *ret_kb ); } } else { - + if (pk) { + ctx->req_algo = pk->req_algo; + ctx->req_usage = pk->req_usage; + } rc = lookup( ctx, ret_kb, 0 ); if ( !rc && pk ) { - pk_from_block ( ctx, pk, *ret_kb, NULL /* FIXME need to get the namehash*/ ); + pk_from_block ( ctx, pk, *ret_kb ); } } release_kbnode ( help_kb ); - if( retctx ) /* caller wants the context */ + if (retctx) /* caller wants the context */ *retctx = ctx; else { - /* Hmmm, why not get_pubkey-end here?? */ - enum_keyblocks_end( ctx->kbpos ); ctx->kbpos = NULL; - for(n=0; n < ctx->nitems; n++ ) - gcry_free( ctx->items[n].namebuf ); - gcry_free( ctx ); + if (ret_kdbhd) { + *ret_kdbhd = ctx->kr_handle; + ctx->kr_handle = NULL; + } + get_pubkey_end (ctx); } return rc; } +/* + * Find a public key from NAME and returh the keyblock or the key. + * If ret_kdb is not NULL, the KEYDB handle used to locate this keyblock is + * returned and the caller is responsible for closing it. + */ int -get_pubkey_byname( GETKEY_CTX *retctx, PKT_public_key *pk, - const char *name, KBNODE *ret_keyblock ) +get_pubkey_byname (PKT_public_key *pk, + const char *name, KBNODE *ret_keyblock, + KEYDB_HANDLE *ret_kdbhd ) { int rc; STRLIST namelist = NULL; add_to_strlist( &namelist, name ); - rc = key_byname( retctx, namelist, pk, NULL, ret_keyblock ); + rc = key_byname( NULL, namelist, pk, NULL, 0, ret_keyblock, ret_kdbhd); free_strlist( namelist ); return rc; } @@ -894,7 +787,7 @@ int get_pubkey_bynames( GETKEY_CTX *retctx, PKT_public_key *pk, STRLIST names, KBNODE *ret_keyblock ) { - return key_byname( retctx, names, pk, NULL, ret_keyblock ); + return key_byname( retctx, names, pk, NULL, 0, ret_keyblock, NULL); } int @@ -904,7 +797,7 @@ get_pubkey_next( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE *ret_keyblock ) rc = lookup( ctx, ret_keyblock, 0 ); if ( !rc && pk && ret_keyblock ) - pk_from_block ( ctx, pk, *ret_keyblock, NULL ); + pk_from_block ( ctx, pk, *ret_keyblock ); return rc; } @@ -914,70 +807,15 @@ void get_pubkey_end( GETKEY_CTX ctx ) { if( ctx ) { - int n; - - enum_keyblocks_end( ctx->kbpos ); ctx->kbpos = NULL; - for(n=0; n < ctx->nitems; n++ ) - gcry_free( ctx->items[n].namebuf ); + memset (&ctx->kbpos, 0, sizeof ctx->kbpos); + keydb_release (ctx->kr_handle); if( !ctx->not_allocated ) - gcry_free( ctx ); + m_free( ctx ); } } -/**************** - * Combined function to search for a username and get the position - * of the keyblock. - */ -int -find_keyblock_byname( KBNODE *retblock, const char *username ) -{ - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - int rc; - - rc = get_pubkey_byname( NULL, pk, username, retblock ); - free_public_key(pk); - return rc; -} - - -/**************** - * Combined function to search for a key and get the position - * of the keyblock. Used for merging while importing keys. - */ -int -find_keyblock_bypk( KBNODE *retblock, PKT_public_key *pk ) -{ - char ufpr[50]; - - unified_fingerprint_from_pk( pk, ufpr, sizeof ufpr ); - return find_keyblock_byname( retblock, ufpr ); -} - -int -find_kblocation_bypk( void *re_opaque, PKT_public_key *pk ) -{ - PKT_public_key *dummy_pk = gcry_xcalloc( 1, sizeof *pk ); - char ufpr[50]; - GETKEY_CTX ctx; - int rc; - - unified_fingerprint_from_pk( pk, ufpr, sizeof ufpr ); - /* FIXME: There is no need to return any informaton, we just - * wnat to know the location. Using the general lookup function - * has the problem that we might not get the key becuase it has expired - * or due to some similar probelm. A solotion would be a locate-only - * flag in the ctx */ - rc = get_pubkey_byname( &ctx, dummy_pk, ufpr, NULL ); - free_public_key(dummy_pk); - if ( !rc ) - ringedit_copy_kbpos( re_opaque, ctx->kbpos ); - get_pubkey_end( ctx ); - - return rc; -} - /**************** * Search for a key with the given fingerprint. @@ -996,18 +834,21 @@ get_pubkey_byfprint( PKT_public_key *pk, KBNODE kb = NULL; memset( &ctx, 0, sizeof ctx ); + ctx.exact = 1 ; ctx.not_allocated = 1; + ctx.kr_handle = keydb_new (0); ctx.nitems = 1; - ctx.items[0].mode = fprint_len; - memcpy( ctx.items[0].fprint, fprint, fprint_len ); + ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16 + : KEYDB_SEARCH_MODE_FPR20; + memcpy( ctx.items[0].u.fpr, fprint, fprint_len ); rc = lookup( &ctx, &kb, 0 ); if (!rc && pk ) - pk_from_block ( &ctx, pk, kb, NULL ); + pk_from_block ( &ctx, pk, kb ); release_kbnode ( kb ); get_pubkey_end( &ctx ); } else - rc = GPGERR_GENERAL; /* Oops */ + rc = G10ERR_GENERAL; /* Oops */ return rc; } @@ -1026,54 +867,27 @@ get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint, memset( &ctx, 0, sizeof ctx ); ctx.not_allocated = 1; + ctx.kr_handle = keydb_new (0); ctx.nitems = 1; - ctx.items[0].mode = fprint_len; - memcpy( ctx.items[0].fprint, fprint, fprint_len ); + ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16 + : KEYDB_SEARCH_MODE_FPR20; + memcpy( ctx.items[0].u.fpr, fprint, fprint_len ); rc = lookup( &ctx, ret_keyblock, 0 ); get_pubkey_end( &ctx ); } else - rc = GPGERR_GENERAL; /* Oops */ + rc = G10ERR_GENERAL; /* Oops */ return rc; } - -/**************** - * Search for a key with the given lid and return the entire keyblock - */ -int -get_keyblock_bylid( KBNODE *ret_keyblock, ulong lid ) -{ - int rc; - struct getkey_ctx_s ctx; - u32 kid[2]; - - if( keyid_from_lid( lid, kid ) ) - kid[0] = kid[1] = 0; - memset( &ctx, 0, sizeof ctx ); - ctx.not_allocated = 1; - ctx.nitems = 1; - ctx.items[0].mode = 12; - ctx.items[0].keyid[0] = kid[0]; - ctx.items[0].keyid[1] = kid[1]; - rc = lookup( &ctx, ret_keyblock, 0 ); - get_pubkey_end( &ctx ); - - return rc; -} - - - - - /**************** * Get a secret key by name and store it into sk * If NAME is NULL use the default key */ -int -get_seckey_byname( GETKEY_CTX *retctx, +static int +get_seckey_byname2( GETKEY_CTX *retctx, PKT_secret_key *sk, const char *name, int unprotect, KBNODE *retblock ) { @@ -1082,7 +896,7 @@ get_seckey_byname( GETKEY_CTX *retctx, if( !name && opt.def_secret_key && *opt.def_secret_key ) { add_to_strlist( &namelist, opt.def_secret_key ); - rc = key_byname( retctx, namelist, NULL, sk, retblock ); + rc = key_byname( retctx, namelist, NULL, sk, 1, retblock, NULL ); } else if( !name ) { /* use the first one as default key */ struct getkey_ctx_s ctx; @@ -1092,9 +906,9 @@ get_seckey_byname( GETKEY_CTX *retctx, assert (!retblock); memset( &ctx, 0, sizeof ctx ); ctx.not_allocated = 1; - ctx.primary = 1; + ctx.kr_handle = keydb_new (1); ctx.nitems = 1; - ctx.items[0].mode = 15; + ctx.items[0].mode = KEYDB_SEARCH_MODE_FIRST; rc = lookup( &ctx, &kb, 1 ); if (!rc && sk ) sk_from_block ( &ctx, sk, kb ); @@ -1103,7 +917,7 @@ get_seckey_byname( GETKEY_CTX *retctx, } else { add_to_strlist( &namelist, name ); - rc = key_byname( retctx, namelist, NULL, sk, retblock ); + rc = key_byname( retctx, namelist, NULL, sk, 1, retblock, NULL ); } free_strlist( namelist ); @@ -1114,11 +928,18 @@ get_seckey_byname( GETKEY_CTX *retctx, return rc; } +int +get_seckey_byname( PKT_secret_key *sk, const char *name, int unlock ) +{ + return get_seckey_byname2 ( NULL, sk, name, unlock, NULL ); +} + + int get_seckey_bynames( GETKEY_CTX *retctx, PKT_secret_key *sk, STRLIST names, KBNODE *ret_keyblock ) { - return key_byname( retctx, names, NULL, sk, ret_keyblock ); + return key_byname( retctx, names, NULL, sk, 1, ret_keyblock, NULL ); } @@ -1142,200 +963,41 @@ get_seckey_end( GETKEY_CTX ctx ) } - /**************** - * Combined function to search for a username and get the position - * of the keyblock. This function does not unprotect the secret key. + * Search for a key with the given fingerprint. + * FIXME: + * We should replace this with the _byname function. Thiscsan be done + * by creating a userID conforming to the unified fingerprint style. */ int -find_secret_keyblock_byname( KBNODE *retblock, const char *username ) +get_seckey_byfprint( PKT_secret_key *sk, + const byte *fprint, size_t fprint_len) { - PKT_secret_key *sk = gcry_xcalloc( 1, sizeof *sk ); int rc; - rc = get_seckey_byname( NULL, sk, username, 0, retblock ); - free_secret_key(sk); - return rc; -} + if( fprint_len == 20 || fprint_len == 16 ) { + struct getkey_ctx_s ctx; + KBNODE kb = NULL; - - -/**************** - * Combined function to search for a key and get the position - * of the keyblock. - */ -int -find_keyblock_bysk( KBNODE *retblock, PKT_secret_key *sk ) -{ - char ufpr[50]; - - unified_fingerprint_from_sk( sk, ufpr, sizeof ufpr ); - return find_secret_keyblock_byname( retblock, ufpr ); -} - -int -find_kblocation_bysk( void *re_opaque, PKT_secret_key *sk ) -{ - PKT_secret_key *dummy_sk = gcry_xcalloc( 1, sizeof *sk ); - char ufpr[50]; - GETKEY_CTX ctx; - int rc; - - unified_fingerprint_from_sk( sk, ufpr, sizeof ufpr ); - rc = get_seckey_byname( &ctx, dummy_sk, ufpr, 0, NULL ); - free_secret_key(dummy_sk); - if ( !rc ) - ringedit_copy_kbpos( re_opaque, &ctx->kbpos ); - get_seckey_end( ctx ); - - return rc; -} - - - - -/******************************************************* - ************** compare functions ********************** - *******************************************************/ - -/**************** - * Do a word match (original user id starts with a '+'). - * The pattern is already tokenized to a more suitable format: - * There are only the real words in it delimited by one space - * and all converted to uppercase. - * - * Returns: 0 if all words match. - * - * Note: This algorithm is a straightforward one and not very - * fast. It works for UTF-8 strings. The uidlen should - * be removed but due to the fact that old versions of - * pgp don't use UTF-8 we still use the length; this should - * be fixed in parse-packet (and replace \0 by some special - * UTF-8 encoding) - */ -static int -word_match( const byte *uid, size_t uidlen, const byte *pattern ) -{ - size_t wlen, n; - const byte *p; - const byte *s; - - for( s=pattern; *s; ) { - do { - /* skip leading delimiters */ - while( uidlen && !word_match_chars[*uid] ) - uid++, uidlen--; - /* get length of the word */ - n = uidlen; p = uid; - while( n && word_match_chars[*p] ) - p++, n--; - wlen = p - uid; - /* and compare against the current word from pattern */ - for(n=0, p=uid; n < wlen && s[n] != ' ' && s[n] ; n++, p++ ) { - if( word_match_chars[*p] != s[n] ) - break; - } - if( n == wlen && (s[n] == ' ' || !s[n]) ) - break; /* found */ - uid += wlen; - uidlen -= wlen; - } while( uidlen ); - if( !uidlen ) - return -1; /* not found */ - - /* advance to next word in pattern */ - for(; *s != ' ' && *s ; s++ ) - ; - if( *s ) - s++ ; + memset( &ctx, 0, sizeof ctx ); + ctx.exact = 1 ; + ctx.not_allocated = 1; + ctx.kr_handle = keydb_new (1); + ctx.nitems = 1; + ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16 + : KEYDB_SEARCH_MODE_FPR20; + memcpy( ctx.items[0].u.fpr, fprint, fprint_len ); + rc = lookup( &ctx, &kb, 1 ); + if (!rc && sk ) + sk_from_block ( &ctx, sk, kb ); + release_kbnode ( kb ); + get_pubkey_end( &ctx ); } - return 0; /* found */ -} - -/**************** - * prepare word word_match; that is parse the name and - * build the pattern. - * caller has to free the returned pattern - */ -static char* -prepare_word_match( const byte *name ) -{ - byte *pattern, *p; - int c; - - /* the original length is always enough for the pattern */ - p = pattern = gcry_xmalloc(strlen(name)+1); - do { - /* skip leading delimiters */ - while( *name && !word_match_chars[*name] ) - name++; - /* copy as long as we don't have a delimiter and convert - * to uppercase. - * fixme: how can we handle utf8 uppercasing */ - for( ; *name && (c=word_match_chars[*name]); name++ ) - *p++ = c; - *p++ = ' '; /* append pattern delimiter */ - } while( *name ); - p[-1] = 0; /* replace last pattern delimiter by EOS */ - - return pattern; -} - - - - - -static int -compare_name( const char *uid, size_t uidlen, const char *name, int mode ) -{ - int i; - const char *s, *se; - - if( mode == 1 ) { /* exact match */ - for(i=0; name[i] && uidlen; i++, uidlen-- ) - if( uid[i] != name[i] ) - break; - if( !uidlen && !name[i] ) - return 0; /* found */ - } - else if( mode == 2 ) { /* case insensitive substring */ - if( memistr( uid, uidlen, name ) ) - return 0; - } - else if( mode >= 3 && mode <= 5 ) { /* look at the email address */ - for( i=0, s= uid; i < uidlen && *s != '<'; s++, i++ ) - ; - if( i < uidlen ) { - /* skip opening delim and one char and look for the closing one*/ - s++; i++; - for( se=s+1, i++; i < uidlen && *se != '>'; se++, i++ ) - ; - if( i < uidlen ) { - i = se - s; - if( mode == 3 ) { /* exact email address */ - if( strlen(name)-2 == i && !memicmp( s, name+1, i) ) - return 0; - } - else if( mode == 4 ) { /* email substring */ - if( memistr( s, i, name ) ) - return 0; - } - else { /* email from end */ - /* nyi */ - } - } - } - } - else if( mode == 6 ) - return word_match( uid, uidlen, name ); else - BUG(); - - return -1; /* not found */ + rc = G10ERR_GENERAL; /* Oops */ + return rc; } - - /************************************************ ************* Merging stuff ******************** @@ -1344,7 +1006,11 @@ compare_name( const char *uid, size_t uidlen, const char *name, int mode ) /**************** * merge all selfsignatures with the keys. * FIXME: replace this at least for the public key parts - * by merge_selfsigs + * by merge_selfsigs. + * It is still used in keyedit.c and + * at 2 or 3 other places - check whether it is really needed. + * It might be needed by the key edit and import stuff because + * the keylock is changed. */ void merge_keys_and_selfsig( KBNODE keyblock ) @@ -1356,6 +1022,13 @@ merge_keys_and_selfsig( KBNODE keyblock ) u32 kid[2] = { 0, 0 }; u32 sigdate = 0; + if (keyblock && keyblock->pkt->pkttype == PKT_PUBLIC_KEY ) { + /* divert to our new function */ + merge_selfsigs (keyblock); + return; + } + /* still need the old one because the new one can't handle secret keys */ + for(k=keyblock; k; k = k->next ) { if( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { @@ -1394,7 +1067,7 @@ merge_keys_and_selfsig( KBNODE keyblock ) const byte *p; u32 ed; - p = parse_sig_subpkt( sig->hashed_data, SIGSUBPKT_KEY_EXPIRE, NULL ); + p = parse_sig_subpkt( sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL ); if( pk ) { ed = p? pk->timestamp + buffer_to_u32(p):0; if( sig->timestamp > sigdate ) { @@ -1410,49 +1083,71 @@ merge_keys_and_selfsig( KBNODE keyblock ) } } } + + if(pk && (pk->expiredate==0 || + (pk->max_expiredate && pk->expiredate>pk->max_expiredate))) + pk->expiredate=pk->max_expiredate; + + if(sk && (sk->expiredate==0 || + (sk->max_expiredate && sk->expiredate>sk->max_expiredate))) + sk->expiredate=sk->max_expiredate; } } - +/* + * Apply information from SIGNODE (which is the valid self-signature + * associated with that UID) to the UIDNODE: + * - wether the UID has been revoked + * - assumed creation date of the UID + * - temporary store the keyflags here + * - temporary store the key expiration time here + * - mark whether the primary user ID flag hat been set. + * - store the preferences + */ static void -fixup_uidnode ( KBNODE uidnode, KBNODE signode ) +fixup_uidnode ( KBNODE uidnode, KBNODE signode, u32 keycreated ) { PKT_user_id *uid = uidnode->pkt->pkt.user_id; PKT_signature *sig = signode->pkt->pkt.signature; - const byte *p; - size_t n; + const byte *p, *sym, *hash, *zip; + size_t n, nsym, nhash, nzip; uid->created = 0; /* not created == invalid */ - if ( !signode ) - return; /* no self-signature */ - if ( IS_UID_REV ( sig ) ) + if ( IS_UID_REV ( sig ) ) { + uid->is_revoked = 1; return; /* has been revoked */ + } + + uid->created = sig->timestamp; /* this one is okay */ + uid->selfsigversion = sig->version; + /* If we got this far, it's not expired :) */ + uid->is_expired = 0; + uid->expiredate = sig->expiredate; - uid->created = sig->timestamp; /* this one is okay */ - - /* store the key flags in the helper variable for later processing */ uid->help_key_usage = 0; - p = parse_sig_subpkt ( sig->hashed_data, SIGSUBPKT_KEY_FLAGS, &n ); + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_FLAGS, &n ); if ( p && n ) { /* first octet of the keyflags */ if ( (*p & 3) ) - uid->help_key_usage |= GCRY_PK_USAGE_SIGN; + uid->help_key_usage |= PUBKEY_USAGE_SIG; if ( (*p & 12) ) - uid->help_key_usage |= GCRY_PK_USAGE_ENCR; + uid->help_key_usage |= PUBKEY_USAGE_ENC; + /* Note: we do not set the CERT flag here because it can be assumed + * that thre is no real policy to set it. */ } /* ditto or the key expiration */ uid->help_key_expire = 0; - p = parse_sig_subpkt ( sig->hashed_data, SIGSUBPKT_KEY_EXPIRE, NULL); - if ( p ) { - uid->help_key_expire = sig->timestamp + buffer_to_u32(p); + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); + if ( p ) { + uid->help_key_expire = keycreated + buffer_to_u32(p); } /* Set the primary user ID flag - we will later wipe out some - * of them to only have one in out keyblock */ + * of them to only have one in our keyblock */ uid->is_primary = 0; - p = parse_sig_subpkt ( sig->hashed_data, SIGSUBPKT_PRIMARY_UID, NULL ); + p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PRIMARY_UID, NULL ); if ( p && *p ) uid->is_primary = 1; /* We could also query this from the unhashed area if it is not in @@ -1460,6 +1155,46 @@ fixup_uidnode ( KBNODE uidnode, KBNODE signode ) * there should be no security problem with this. * For now we only look at the hashed one. */ + + /* Now build the preferences list. These must come from the + hashed section so nobody can modify the ciphers a key is + willing to accept. */ + p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_SYM, &n ); + sym = p; nsym = p?n:0; + p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_HASH, &n ); + hash = p; nhash = p?n:0; + p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_COMPR, &n ); + zip = p; nzip = p?n:0; + if (uid->prefs) + m_free (uid->prefs); + n = nsym + nhash + nzip; + if (!n) + uid->prefs = NULL; + else { + uid->prefs = m_alloc (sizeof (*uid->prefs) * (n+1)); + n = 0; + for (; nsym; nsym--, n++) { + uid->prefs[n].type = PREFTYPE_SYM; + uid->prefs[n].value = *sym++; + } + for (; nhash; nhash--, n++) { + uid->prefs[n].type = PREFTYPE_HASH; + uid->prefs[n].value = *hash++; + } + for (; nzip; nzip--, n++) { + uid->prefs[n].type = PREFTYPE_ZIP; + uid->prefs[n].value = *zip++; + } + uid->prefs[n].type = PREFTYPE_NONE; /* end of list marker */ + uid->prefs[n].value = 0; + } + + /* see whether we have the MDC feature */ + uid->mdc_feature = 0; + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_FEATURES, &n); + if (p && n && (p[0] & 0x01)) + uid->mdc_feature = 1; + } static void @@ -1472,29 +1207,38 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) KBNODE signode, uidnode, uidnode2; u32 curtime = make_timestamp (); unsigned int key_usage = 0; + u32 keytimestamp = 0; u32 key_expire = 0; int key_expire_seen = 0; + byte sigversion = 0; *r_revoked = 0; if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) BUG (); pk = keyblock->pkt->pkt.public_key; - pk->created = 0; + keytimestamp = pk->timestamp; + keyid_from_pk( pk, kid ); pk->main_keyid[0] = kid[0]; pk->main_keyid[1] = kid[1]; if ( pk->version < 4 ) { - /* before v4 the key packet itself contains the expiration date - * and there was noway to change it. So we also use only the - * one from the key packet */ - key_expire = pk->expiredate; + /* before v4 the key packet itself contains the expiration + * date and there was no way to change it, so we start with + * the one from the key packet */ + key_expire = pk->max_expiredate; key_expire_seen = 1; } /* first pass: find the latest direct key self-signature. * We assume that the newest one overrides all others */ + + /* In case this key was already merged */ + m_free(pk->revkey); + pk->revkey=NULL; + pk->numrevkeys=0; + signode = NULL; sigdate = 0; /* helper to find the latest signature */ for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { @@ -1505,30 +1249,82 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) ; /* signature did not verify */ else if ( IS_KEY_REV (sig) ){ /* key has been revoked - there is no way to override - * such a revocation, so we can stop now. - * we can't cope with expiration times for revocations - * here because we have to assumethat an attacker can - * generate all kinds of signatures. + * such a revocation, so we theoretically can stop now. + * We should not cope with expiration times for revocations + * here because we have to assume that an attacker can + * generate all kinds of signatures. However due to the + * fact that the key has been revoked it does not harm + * either and by continuing we gather some more info on + * that key. */ *r_revoked = 1; - return; } - else if ( IS_KEY_SIG (sig) && sig->timestamp >= sigdate ) { - const byte *p; - - p = parse_sig_subpkt( sig->hashed_data, - SIGSUBPKT_SIG_EXPIRE, NULL ); - if ( p && (sig->timestamp + buffer_to_u32(p)) >= curtime ) + else if ( IS_KEY_SIG (sig) ) { + /* Add any revocation keys onto the pk. This is + particularly interesting since we normally only + get data from the most recent 1F signature, but + you need multiple 1F sigs to properly handle + revocation keys (PGP does it this way, and a + revocation key could be sensitive and hence in a + different signature). */ + if(sig->revkey) { + int i; + + pk->revkey= + m_realloc(pk->revkey,sizeof(struct revocation_key)* + (pk->numrevkeys+sig->numrevkeys)); + + for(i=0;inumrevkeys;i++) + memcpy(&pk->revkey[pk->numrevkeys++], + sig->revkey[i], + sizeof(struct revocation_key)); + } + + if( sig->timestamp >= sigdate ) { + if(sig->flags.expired) ; /* signature has expired - ignore it */ else { sigdate = sig->timestamp; signode = k; - } + sigversion = sig->version; + + } + } } } } } + /* Remove dupes from the revocation keys */ + + if(pk->revkey) + { + int i,j,x,changed=0; + + for(i=0;inumrevkeys;i++) + { + for(j=i+1;jnumrevkeys;j++) + { + if(memcmp(&pk->revkey[i],&pk->revkey[j], + sizeof(struct revocation_key))==0) + { + /* remove j */ + + for(x=j;xnumrevkeys-1;x++) + pk->revkey[x]=pk->revkey[x+1]; + + pk->numrevkeys--; + j--; + changed=1; + } + } + } + + if(changed) + pk->revkey=m_realloc(pk->revkey, + pk->numrevkeys*sizeof(struct revocation_key)); + } + if ( signode ) { /* some information from a direct key signature take precedence * over the same information given in UID sigs. @@ -1537,40 +1333,60 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) const byte *p; size_t n; - p = parse_sig_subpkt ( sig->hashed_data, SIGSUBPKT_KEY_FLAGS, &n ); + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_FLAGS, &n ); if ( p && n ) { /* first octet of the keyflags */ if ( (*p & 3) ) - key_usage |= GCRY_PK_USAGE_SIGN; + key_usage |= PUBKEY_USAGE_SIG; if ( (*p & 12) ) - key_usage |= GCRY_PK_USAGE_ENCR; + key_usage |= PUBKEY_USAGE_ENC; } - if ( pk->version > 3 ) { - p = parse_sig_subpkt ( sig->hashed_data, - SIGSUBPKT_KEY_EXPIRE, NULL); - if ( p ) { - key_expire = sig->timestamp + buffer_to_u32(p); - key_expire_seen = 1; - } + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); + if ( p ) { + key_expire = keytimestamp + buffer_to_u32(p); + key_expire_seen = 1; } - /* and set the created field */ - pk->created = sigdate; - /* and mark that key as valid: one direct key signature should + + /* mark that key as valid: one direct key signature should * render a key as valid */ pk->is_valid = 1; } + /* pass 1.5: look for key revocation signatures that were not made + by the key (i.e. did a revocation key issue a revocation for + us?). Only bother to do this if there is a revocation key in + the first place. */ + + if(pk->revkey) + for(k=keyblock; k && k->pkt->pkttype != PKT_USER_ID; k = k->next ) + { + if ( k->pkt->pkttype == PKT_SIGNATURE ) + { + PKT_signature *sig = k->pkt->pkt.signature; + + if(IS_KEY_REV(sig) && + (sig->keyid[0]!=kid[0] || sig->keyid[1]!=kid[1])) + { + if(check_revocation_keys(pk,sig)) + ; /* did not verify, or loop broken */ + else + *r_revoked=1; + + /* In the future handle subkey and cert revocations? + PGP doesn't, but it's in 2440. */ + } + } + } /* second pass: look at the self-signature of all user IDs */ signode = uidnode = NULL; sigdate = 0; /* helper to find the latest signature in one user ID */ uiddate = 0; /* and over of all user IDs */ for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { - if ( k->pkt->pkttype == PKT_USER_ID - || k->pkt->pkttype == PKT_PHOTO_ID ) { - if ( uidnode ) - fixup_uidnode ( uidnode, signode ); + if ( k->pkt->pkttype == PKT_USER_ID ) { + if ( uidnode && signode ) + fixup_uidnode ( uidnode, signode, keytimestamp ); uidnode = k; signode = NULL; if ( sigdate > uiddate ) @@ -1582,48 +1398,89 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) if ( sig->keyid[0] == kid[0] && sig->keyid[1]==kid[1] ) { if ( check_key_signature( keyblock, k, NULL ) ) ; /* signature did not verify */ - else if ( IS_UID_SIG (sig) || IS_UID_REV (sig)) { - /* Note: we allow to invalidated cert revocations + else if ( (IS_UID_SIG (sig) || IS_UID_REV (sig)) + && sig->timestamp >= sigdate ) { + /* Note: we allow to invalidate cert revocations * by a newer signature. An attacker can't use this * because a key should be revoced with a key revocation. * The reason why we have to allow for that is that at * one time an email address may become invalid but later * the same email address may become valid again (hired, * fired, hired again). - */ - const byte *p; - - p = parse_sig_subpkt( sig->hashed_data, - SIGSUBPKT_SIG_EXPIRE, NULL ); - if ( p && (sig->timestamp + buffer_to_u32(p)) >= curtime ) - ; /* signature/revocation has expired - ignore it */ + */ + if(sig->flags.expired) { + /* Expired uids don't get to be primary unless + they are the only uid there is. */ + uidnode->pkt->pkt.user_id->is_primary=0; + uidnode->pkt->pkt.user_id->is_expired=1; + uidnode->pkt->pkt.user_id->expiredate=sig->expiredate; + } else { sigdate = sig->timestamp; signode = k; + if( sig->version > sigversion ) + sigversion = sig->version; } } } } } - if ( uidnode ) { - fixup_uidnode ( uidnode, signode ); + if ( uidnode && signode ) { + fixup_uidnode ( uidnode, signode, keytimestamp ); pk->is_valid = 1; } - if ( sigdate > uiddate ) - uiddate = sigdate; - /* if we do not have a direct key signature, take the key creation date - * from the latest user ID. Hmmm, another possibilty would be to take - * it from the latest primary user ID - but we don't implement it for - * now */ - if ( !pk->created ) - pk->created = uiddate; - if ( !pk->created ) { - /* oops, still no creation date: use the timestamp */ - if (DBG_CACHE) - log_debug( "merge_selfsigs_main: " - "using timestamp as creation date\n"); - pk->created = pk->timestamp; - } + + /* If the key isn't valid yet, and we have + --allow-non-selfsigned-uid set, then force it valid. */ + if(!pk->is_valid && opt.allow_non_selfsigned_uid) + { + if(opt.verbose) + log_info(_("Invalid key %08lX made valid by " + "--allow-non-selfsigned-uid\n"), + (ulong)keyid_from_pk(pk,NULL)); + + pk->is_valid = 1; + } + + /* The key STILL isn't valid, so try and find an ultimately + trusted signature. */ + if(!pk->is_valid) + { + uidnode=NULL; + + for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k=k->next) + { + if ( k->pkt->pkttype == PKT_USER_ID ) + uidnode = k; + else if ( k->pkt->pkttype == PKT_SIGNATURE && uidnode ) + { + PKT_signature *sig = k->pkt->pkt.signature; + + if(sig->keyid[0] != kid[0] || sig->keyid[1]!=kid[1]) + { + PKT_public_key *ultimate_pk; + + ultimate_pk=m_alloc_clear(sizeof(*ultimate_pk)); + + if(get_pubkey(ultimate_pk,sig->keyid)==0 && + check_key_signature(keyblock,k,NULL)==0 && + get_ownertrust(ultimate_pk)==TRUST_ULTIMATE) + { + free_public_key(ultimate_pk); + pk->is_valid=1; + break; + } + + free_public_key(ultimate_pk); + } + } + } + } + + /* Record the highest selfsigversion so we know if this is a v3 + key through and through, or a v3 key with a v4 selfsig, which + means we can trust the preferences (if any). */ + pk->selfsigversion=sigversion; /* Now that we had a look at all user IDs we can now get some information * from those user IDs. @@ -1634,8 +1491,7 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) uiddate = 0; /* helper to find the latest user ID */ for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { - if ( k->pkt->pkttype == PKT_USER_ID - || k->pkt->pkttype == PKT_PHOTO_ID ) { + if ( k->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = k->pkt->pkt.user_id; if ( uid->help_key_usage && uid->created > uiddate ) { key_usage = uid->help_key_usage; @@ -1654,16 +1510,14 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) } pk->pubkey_usage = key_usage; - if ( !key_expire_seen ) { /* find the latest valid user ID with a key expiration set - * Note, that this may be a diferent one from the above because + * Note, that this may be a different one from the above because * some user IDs may have no expiration date set */ uiddate = 0; for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { - if ( k->pkt->pkttype == PKT_USER_ID - || k->pkt->pkttype == PKT_PHOTO_ID ) { + if ( k->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = k->pkt->pkt.user_id; if ( uid->help_key_expire && uid->created > uiddate ) { key_expire = uid->help_key_expire; @@ -1672,17 +1526,23 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) } } } - - pk->has_expired = key_expire >= curtime? 0 : key_expire; - /* FIXME: we should see how to get rid of the expiretime fields */ + /* Currently only v3 keys have a maximum expiration date, but I'll + bet v5 keys get this feature again. */ + if(key_expire==0 || (pk->max_expiredate && key_expire>pk->max_expiredate)) + key_expire=pk->max_expiredate; + + pk->has_expired = key_expire >= curtime? 0 : key_expire; + pk->expiredate = key_expire; + /* Fixme: we should see how to get rid of the expiretime fields but + * this needs changes at other places too. */ /* and now find the real primary user ID and delete all others */ uiddate = uiddate2 = 0; uidnode = uidnode2 = NULL; for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { - if ( k->pkt->pkttype == PKT_USER_ID - || k->pkt->pkttype == PKT_PHOTO_ID ) { + if ( k->pkt->pkttype == PKT_USER_ID && + !k->pkt->pkt.user_id->attrib_data) { PKT_user_id *uid = k->pkt->pkt.user_id; if ( uid->is_primary && uid->created > uiddate ) { uiddate = uid->created; @@ -1697,8 +1557,8 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) if ( uidnode ) { for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { - if ( k->pkt->pkttype == PKT_USER_ID - || k->pkt->pkttype == PKT_PHOTO_ID ) { + if ( k->pkt->pkttype == PKT_USER_ID && + !k->pkt->pkt.user_id->attrib_data) { PKT_user_id *uid = k->pkt->pkt.user_id; if ( k != uidnode ) uid->is_primary = 0; @@ -1709,7 +1569,23 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) /* none is flagged primary - use the latest user ID we have */ uidnode2->pkt->pkt.user_id->is_primary = 1; } + else + { + /* None of our uids were self-signed, so pick the first one to + be the primary. This is the best we can do here since + there are no self sigs to date the uids. */ + for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; + k = k->next ) + { + if(k->pkt->pkttype==PKT_USER_ID && + !k->pkt->pkt.user_id->attrib_data) + { + k->pkt->pkt.user_id->is_primary=1; + break; + } + } + } } @@ -1724,6 +1600,7 @@ merge_selfsigs_subkey( KBNODE keyblock, KBNODE subnode ) KBNODE signode; u32 curtime = make_timestamp (); unsigned int key_usage = 0; + u32 keytimestamp = 0; u32 key_expire = 0; const byte *p; size_t n; @@ -1735,11 +1612,11 @@ merge_selfsigs_subkey( KBNODE keyblock, KBNODE subnode ) return; /* (actually this should never happen) */ keyid_from_pk( mainpk, mainkid ); subpk = subnode->pkt->pkt.public_key; + keytimestamp = subpk->timestamp; + subpk->is_valid = 0; subpk->main_keyid[0] = mainpk->main_keyid[0]; subpk->main_keyid[1] = mainpk->main_keyid[1]; - if ( subpk->version < 4 ) - return; /* there are no v3 subkeys */ /* find the latest key binding self-signature. */ signode = NULL; @@ -1752,17 +1629,13 @@ merge_selfsigs_subkey( KBNODE keyblock, KBNODE subnode ) if ( check_key_signature( keyblock, k, NULL ) ) ; /* signature did not verify */ else if ( IS_SUBKEY_REV (sig) ) { - /* key has been revoked - given the fact that it is easy - * to create a new subkey, it does not make sense to - * revive a revoked key. So we can stop here. - */ subpk->is_revoked = 1; - return; + /* although we could stop now, we continue to + * figure out other information like the old expiration + * time */ } else if ( IS_SUBKEY_SIG (sig) && sig->timestamp >= sigdate ) { - p = parse_sig_subpkt( sig->hashed_data, - SIGSUBPKT_SIG_EXPIRE, NULL ); - if ( p && (sig->timestamp + buffer_to_u32(p)) >= curtime ) + if(sig->flags.expired) ; /* signature has expired - ignore it */ else { sigdate = sig->timestamp; @@ -1774,21 +1647,19 @@ merge_selfsigs_subkey( KBNODE keyblock, KBNODE subnode ) } if ( !signode ) { - subpk->created = subpk->timestamp; return; /* no valid key binding */ } subpk->is_valid = 1; - subpk->created = sigdate; sig = signode->pkt->pkt.signature; - p = parse_sig_subpkt ( sig->hashed_data, SIGSUBPKT_KEY_FLAGS, &n ); + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_FLAGS, &n ); if ( p && n ) { /* first octet of the keyflags */ if ( (*p & 3) ) - key_usage |= GCRY_PK_USAGE_SIGN; + key_usage |= PUBKEY_USAGE_SIG; if ( (*p & 12) ) - key_usage |= GCRY_PK_USAGE_ENCR; + key_usage |= PUBKEY_USAGE_ENC; } if ( !key_usage ) { /* no key flags at all: get it from the algo */ key_usage = openpgp_pk_algo_usage ( subpk->pubkey_algo ); @@ -1800,12 +1671,13 @@ merge_selfsigs_subkey( KBNODE keyblock, KBNODE subnode ) } subpk->pubkey_usage = key_usage; - p = parse_sig_subpkt ( sig->hashed_data, SIGSUBPKT_KEY_EXPIRE, NULL); + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); if ( p ) - key_expire = sig->timestamp + buffer_to_u32(p); + key_expire = keytimestamp + buffer_to_u32(p); else key_expire = 0; subpk->has_expired = key_expire >= curtime? 0 : key_expire; + subpk->expiredate = key_expire; } @@ -1828,9 +1700,20 @@ merge_selfsigs( KBNODE keyblock ) KBNODE k; int revoked; PKT_public_key *main_pk; + prefitem_t *prefs; + int mdc_feature; - if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) + if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) { + if (keyblock->pkt->pkttype == PKT_SECRET_KEY ) { + log_error ("expected public key but found secret key " + "- must stop\n"); + /* we better exit here becuase a public key is expected at + other places too. FIXME: Figure this out earlier and + don't get to here at all */ + g10_exit (1); + } BUG (); + } merge_selfsigs_main ( keyblock, &revoked ); main_pk = keyblock->pkt->pkt.public_key; @@ -1855,6 +1738,44 @@ merge_selfsigs( KBNODE keyblock ) merge_selfsigs_subkey ( keyblock, k ); } } + + /* If the main key is not valid, then the subkeys aren't either, + even if they have binding sigs. */ + if(!main_pk->is_valid) + for(k=keyblock; k; k=k->next) + if(k->pkt->pkttype==PKT_PUBLIC_SUBKEY) + k->pkt->pkt.public_key->is_valid=0; + + /* set the preference list of all keys to those of the primary real + * user ID. Note: we use these preferences when we don't know by + * which user ID the key has been selected. + * fixme: we should keep atoms of commonly used preferences or + * use reference counting to optimize the preference lists storage. + * FIXME: it might be better to use the intersection of + * all preferences. + * Do a similar thing for the MDC feature flag. + */ + prefs = NULL; + mdc_feature = 0; + for (k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next) { + if (k->pkt->pkttype == PKT_USER_ID + && !k->pkt->pkt.user_id->attrib_data + && k->pkt->pkt.user_id->is_primary) { + prefs = k->pkt->pkt.user_id->prefs; + mdc_feature = k->pkt->pkt.user_id->mdc_feature; + break; + } + } + for(k=keyblock; k; k = k->next ) { + if ( k->pkt->pkttype == PKT_PUBLIC_KEY + || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { + PKT_public_key *pk = k->pkt->pkt.public_key; + if (pk->prefs) + m_free (pk->prefs); + pk->prefs = copy_prefs (prefs); + pk->mdc_feature = mdc_feature; + } + } } @@ -1865,7 +1786,7 @@ merge_selfsigs( KBNODE keyblock ) * keys at all and have a way to store just the real secret parts * from the key. */ -void +static void merge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) { KBNODE pub; @@ -1898,7 +1819,7 @@ merge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) if ( !cmp_public_secret_key ( pk, sk ) ) { copy_public_parts_to_secret_key ( pk, sk ); free_public_key ( pk ); - pub->pkt->pkttype = PKT_SECRET_KEY; + pub->pkt->pkttype = PKT_SECRET_SUBKEY; pub->pkt->pkt.secret_key = copy_secret_key (NULL, sk); break; } @@ -1911,11 +1832,12 @@ merge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) } /* This function checks that for every public subkey a corresponding - * secret subkey is avalable and deletes the public subkey otherwise. - * We need this function becuase we can'tdelete it later when we + * secret subkey is available and deletes the public subkey otherwise. + * We need this function because we can't delete it later when we * actually merge the secret parts into the pubring. + * The function also plays some games with the node flags. */ -void +static void premerge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) { KBNODE last, pub; @@ -1924,6 +1846,7 @@ premerge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) assert ( secblock->pkt->pkttype == PKT_SECRET_KEY ); for (pub=pubblock,last=NULL; pub; last = pub, pub = pub->next ) { + pub->flag &= ~3; /* reset bits 0 and 1 */ if ( pub->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { KBNODE sec; PKT_public_key *pk = pub->pkt->pkt.public_key; @@ -1931,14 +1854,25 @@ premerge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) for (sec=secblock->next; sec; sec = sec->next ) { if ( sec->pkt->pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *sk = sec->pkt->pkt.secret_key; - if ( !cmp_public_secret_key ( pk, sk ) ) + if ( !cmp_public_secret_key ( pk, sk ) ) { + if ( sk->protect.s2k.mode == 1001 ) { + /* The secret parts are not available so + we can't use that key for signing etc. + Fix the pubkey usage */ + pk->pubkey_usage &= ~PUBKEY_USAGE_SIG; + } + /* transfer flag bits 0 and 1 to the pubblock */ + pub->flag |= (sec->flag &3); break; + } } } if ( !sec ) { KBNODE next, ll; - log_error ( "no corresponding secret subkey " - "for public subkey - removing\n" ); + + log_info ( "no secret subkey " + "for public subkey %08lX - ignoring\n", + (ulong)keyid_from_pk (pk,NULL) ); /* we have to remove the subkey in this case */ assert ( last ); /* find the next subkey */ @@ -1956,108 +1890,25 @@ premerge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) } } } + /* We need to copy the found bits (0 and 1) from the secret key to + the public key. This has already been done for the subkeys but + got lost on the primary key - fix it here *. */ + pubblock->flag |= (secblock->flag & 3); } -/************************************************ - ************* Find stuff *********************** - ************************************************/ - -static int -find_by_name( KBNODE keyblock, const char *name, - int mode, byte *namehash ) -{ - KBNODE k; - - for(k=keyblock; k; k = k->next ) { - if( k->pkt->pkttype == PKT_USER_ID - && !compare_name( k->pkt->pkt.user_id->name, - k->pkt->pkt.user_id->len, name, mode)) { - /* we found a matching name, look for the key */ - if( k->pkt->pkt.user_id->photo ) { - /* oops: this can never happen */ - gcry_md_hash_buffer( GCRY_MD_RMD160, namehash, - k->pkt->pkt.user_id->photo, - k->pkt->pkt.user_id->photolen ); - } - else { - gcry_md_hash_buffer( GCRY_MD_RMD160, namehash, - k->pkt->pkt.user_id->name, - k->pkt->pkt.user_id->len ); - } - return 1; - } - } - - return 0; -} - - - -static KBNODE -find_by_keyid( KBNODE keyblock, u32 *keyid, int mode ) -{ - KBNODE k; - - for(k=keyblock; k; k = k->next ) { - if( k->pkt->pkttype == PKT_PUBLIC_KEY - || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { - u32 aki[2]; - keyid_from_pk( k->pkt->pkt.public_key, aki ); - if( aki[1] == keyid[1] && ( mode == 10 || aki[0] == keyid[0] ) ) { - return k; /* found */ - } - } - } - return NULL; -} - - - -static KBNODE -find_by_fpr( KBNODE keyblock, const char *name, int mode ) -{ - KBNODE k; - - for(k=keyblock; k; k = k->next ) { - if( k->pkt->pkttype == PKT_PUBLIC_KEY - || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { - byte afp[MAX_FINGERPRINT_LEN]; - size_t an; - - fingerprint_from_pk(k->pkt->pkt.public_key, afp, &an ); - if ( mode == 21 ) { - /* Unified fingerprint. The fingerprint is always 20 bytes*/ - while ( an < 20 ) - afp[an++] = 0; - if ( !memcmp( afp, name, 20 ) ) - return k; - } - else { - if( an == mode && !memcmp( afp, name, an) ) { - return k; - } - } - } - } - return NULL; -} - - - - /* See see whether the key fits * our requirements and in case we do not - * request a the primary key, we should select + * request the primary key, we should select * a suitable subkey. * FIXME: Check against PGP 7 whether we still need a kludge * to favor type 16 keys over type 20 keys when type 20 * has not been explitely requested. * Returns: True when a suitable key has been found. * - * We have to distinguish four cases: + * We have to distinguish four cases: FIXME! * 1. No usage and no primary key requested * Examples for this case are that we have a keyID to be used * for decrytion or verification. @@ -2069,35 +1920,79 @@ find_by_fpr( KBNODE keyblock, const char *name, int mode ) * 4. Usage but no primary key requested * FIXME * FIXME: Tell what is going to happen here and something about the rationale + * Note: We don't use this function if no specific usage is requested; + * This way the getkey functions can be used for plain key listings. * + * CTX ist the keyblock we are investigating, if FOUNDK is not NULL this + * is the key we actually found by looking at the keyid or a fingerprint and + * may eitehr point to the primary or one of the subkeys. */ static int -finish_lookup( GETKEY_CTX ctx, KBNODE foundk ) +finish_lookup (GETKEY_CTX ctx) { KBNODE keyblock = ctx->keyblock; KBNODE k; - #define USAGE_MASK (GCRY_PK_USAGE_SIGN|GCRY_PK_USAGE_ENCR) + KBNODE foundk = NULL; + PKT_user_id *foundu = NULL; + #define USAGE_MASK (PUBKEY_USAGE_SIG|PUBKEY_USAGE_ENC) unsigned int req_usage = ( ctx->req_usage & USAGE_MASK ); + /* Request the primary if we're certifying another key, and also + if signing data while --pgp6 or --pgp7 is on since pgp 6 and 7 + do not understand signatures made by a signing subkey. */ + int req_prim = (ctx->req_usage & PUBKEY_USAGE_CERT) || + ((opt.pgp6 || opt.pgp7) && (ctx->req_usage & PUBKEY_USAGE_SIG)); u32 latest_date; KBNODE latest_key; + u32 curtime = make_timestamp (); - assert( !foundk || foundk->pkt->pkttype == PKT_PUBLIC_KEY - || foundk->pkt->pkttype == PKT_PUBLIC_SUBKEY ); assert( keyblock->pkt->pkttype == PKT_PUBLIC_KEY ); ctx->found_key = NULL; - - if ( DBG_CACHE ) - log_debug( "finish_lookup: checking %s (req_usage=%x)\n", - foundk? "one key":"all keys", req_usage); + if (ctx->exact) { + for (k=keyblock; k; k = k->next) { + if ( (k->flag & 1) ) { + assert ( k->pkt->pkttype == PKT_PUBLIC_KEY + || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ); + foundk = k; + break; + } + } + } + + for (k=keyblock; k; k = k->next) { + if ( (k->flag & 2) ) { + assert (k->pkt->pkttype == PKT_USER_ID); + foundu = k->pkt->pkt.user_id; + break; + } + } + + if ( DBG_CACHE ) + log_debug( "finish_lookup: checking key %08lX (%s)(req_usage=%x)\n", + (ulong)keyid_from_pk( keyblock->pkt->pkt.public_key, NULL), + foundk? "one":"all", req_usage); + + if (!req_usage) { + latest_key = foundk? foundk:keyblock; + goto found; + } + + if (!req_usage) { + PKT_public_key *pk = foundk->pkt->pkt.public_key; + if (pk->user_id) + free_user_id (pk->user_id); + pk->user_id = scopy_user_id (foundu); + ctx->found_key = foundk; + cache_user_id( keyblock ); + return 1; /* found */ + } + latest_date = 0; latest_key = NULL; - /* We do check the subkeys only if we either have requested a specific - * usage or have not requested to get the primary key. */ - if ( (req_usage || !ctx->primary) - && (!foundk || foundk->pkt->pkttype == PKT_PUBLIC_SUBKEY) ) { + /* do not look at subkeys if a certification key is requested */ + if ((!foundk || foundk->pkt->pkttype == PKT_PUBLIC_SUBKEY) && !req_prim) { KBNODE nextk; /* either start a loop or check just this one subkey */ for (k=foundk?foundk:keyblock; k; k = nextk ) { @@ -2108,6 +2003,9 @@ finish_lookup( GETKEY_CTX ctx, KBNODE foundk ) if ( foundk ) nextk = NULL; /* what a hack */ pk = k->pkt->pkt.public_key; + if (DBG_CACHE) + log_debug( "\tchecking subkey %08lX\n", + (ulong)keyid_from_pk( pk, NULL)); if ( !pk->is_valid ) { if (DBG_CACHE) log_debug( "\tsubkey not valid\n"); @@ -2123,9 +2021,13 @@ finish_lookup( GETKEY_CTX ctx, KBNODE foundk ) log_debug( "\tsubkey has expired\n"); continue; } + if ( pk->timestamp > curtime && !opt.ignore_valid_from ) { + if (DBG_CACHE) + log_debug( "\tsubkey not yet valid\n"); + continue; + } - if ( req_usage && - !((pk->pubkey_usage&USAGE_MASK) & req_usage) ) { + if ( !((pk->pubkey_usage&USAGE_MASK) & req_usage) ) { if (DBG_CACHE) log_debug( "\tusage does not match: want=%x have=%x\n", req_usage, pk->pubkey_usage ); @@ -2133,18 +2035,19 @@ finish_lookup( GETKEY_CTX ctx, KBNODE foundk ) } if (DBG_CACHE) - log_debug( "\tconsidering key %08lX\n", - (ulong)keyid_from_pk( pk, NULL)); - if ( pk->created > latest_date ) { - latest_date = pk->created; + log_debug( "\tsubkey looks fine\n"); + if ( pk->timestamp > latest_date ) { + latest_date = pk->timestamp; latest_key = k; } } } - if ( !latest_key ) { + /* Okay now try the primary key unless we want an exact + * key ID match on a subkey */ + if ((!latest_key && !(ctx->exact && foundk != keyblock)) || req_prim) { PKT_public_key *pk; - if (DBG_CACHE && !foundk ) + if (DBG_CACHE && !foundk && !req_prim ) log_debug( "\tno suitable subkeys found - trying primary\n"); pk = keyblock->pkt->pkt.public_key; if ( !pk->is_valid ) { @@ -2159,17 +2062,17 @@ finish_lookup( GETKEY_CTX ctx, KBNODE foundk ) if (DBG_CACHE) log_debug( "\tprimary key has expired\n"); } - else if ( req_usage - && !((pk->pubkey_usage&USAGE_MASK) & req_usage) ) { + else if ( !((pk->pubkey_usage&USAGE_MASK) & req_usage) ) { if (DBG_CACHE) - log_debug( "\tusage does not match: want=%x have=%x\n", + log_debug( "\tprimary key usage does not match: " + "want=%x have=%x\n", req_usage, pk->pubkey_usage ); } else { /* okay */ if (DBG_CACHE) log_debug( "\tprimary key may be used\n"); latest_key = keyblock; - latest_date = pk->created; + latest_date = pk->timestamp; } } @@ -2179,13 +2082,21 @@ finish_lookup( GETKEY_CTX ctx, KBNODE foundk ) return 0; } + found: if (DBG_CACHE) log_debug( "\tusing key %08lX\n", (ulong)keyid_from_pk( latest_key->pkt->pkt.public_key, NULL) ); + if (latest_key) { + PKT_public_key *pk = latest_key->pkt->pkt.public_key; + if (pk->user_id) + free_user_id (pk->user_id); + pk->user_id = scopy_user_id (foundu); + } + ctx->found_key = latest_key; - if ( latest_key != keyblock ) { + if (latest_key != keyblock && opt.verbose) { log_info(_("using secondary key %08lX " "instead of primary key %08lX\n"), (ulong)keyid_from_pk( latest_key->pkt->pkt.public_key, NULL), @@ -2197,109 +2108,91 @@ finish_lookup( GETKEY_CTX ctx, KBNODE foundk ) return 1; /* found */ } - + static int lookup( GETKEY_CTX ctx, KBNODE *ret_keyblock, int secmode ) { int rc; - int oldmode = set_packet_list_mode(0); - byte namehash[20]; - int use_namehash=0; KBNODE secblock = NULL; /* helper */ - - if( !ctx->count ) /* first time */ - rc = enum_keyblocks_begin( &ctx->kbpos, secmode ); - else - rc = 0; - if( !rc ) { - while( !(rc = enum_keyblocks_next( ctx->kbpos, 1, &ctx->keyblock )) ) { - int n; - getkey_item_t *item; - - if ( secmode ) { - /* find the correspondig public key and use this - * this one for the selection process */ - u32 aki[2]; - KBNODE k = ctx->keyblock; - - if ( k->pkt->pkttype != PKT_SECRET_KEY ) - BUG(); - keyid_from_sk( k->pkt->pkt.secret_key, aki ); - k = get_pubkeyblock( aki ); - if( !k ) { - log_info(_("key %08lX: secret key without public key " - "- skipped\n"), (ulong)aki[1] ); - goto skip; - } - secblock = ctx->keyblock; - ctx->keyblock = k; - premerge_public_with_secret ( ctx->keyblock, secblock ); - } - - - /* loop over all the user ids we want to look for */ - item = ctx->items; - for(n=0; n < ctx->nitems; n++, item++ ) { - KBNODE k = NULL; - int found = 0; + int no_suitable_key = 0; - if( item->mode < 10 ) { - found = find_by_name( ctx->keyblock, - item->name, item->mode, - namehash ); - use_namehash = found; - } - else if( item->mode >= 10 && item->mode <= 12 ) { - k = find_by_keyid( ctx->keyblock, - item->keyid, item->mode ); - found = !!k; - } - else if( item->mode == 15 ) { - found = 1; - } - else if( item->mode == 16 || item->mode == 20 - || item->mode == 21 ) { - k = find_by_fpr( ctx->keyblock, - item->fprint, item->mode ); - found = !!k; - } - else - BUG(); - if( found ) { - /* this keyblock looks fine - do further investigation */ - merge_selfsigs ( ctx->keyblock ); - if ( finish_lookup( ctx, k ) ) { - if ( secmode ) { - merge_public_with_secret ( ctx->keyblock, - secblock); - release_kbnode (secblock); - secblock = NULL; - } - goto found; - } - } - } - skip: - /* release resources and try the next keyblock */ + rc = 0; + while (!(rc = keydb_search (ctx->kr_handle, ctx->items, ctx->nitems))) { + /* If we are searching for the first key we have to make sure + that the next interation does not no an implicit reset. + This can be triggered by an empty key ring. */ + if (ctx->nitems && ctx->items->mode == KEYDB_SEARCH_MODE_FIRST) + ctx->items->mode = KEYDB_SEARCH_MODE_NEXT; + + rc = keydb_get_keyblock (ctx->kr_handle, &ctx->keyblock); + if (rc) { + log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); + rc = 0; + goto skip; + } + + if ( secmode ) { + /* find the correspondig public key and use this + * this one for the selection process */ + u32 aki[2]; + KBNODE k = ctx->keyblock; + + if (k->pkt->pkttype != PKT_SECRET_KEY) + BUG(); + + keyid_from_sk (k->pkt->pkt.secret_key, aki); + k = get_pubkeyblock (aki); + if( !k ) { + if (!opt.quiet) + log_info(_("key %08lX: secret key without public key " + "- skipped\n"), (ulong)aki[1] ); + goto skip; + } + secblock = ctx->keyblock; + ctx->keyblock = k; + + premerge_public_with_secret ( ctx->keyblock, secblock ); + } + + /* warning: node flag bits 0 and 1 should be preserved by + * merge_selfsigs. For secret keys, premerge did tranfer the + * keys to the keyblock */ + merge_selfsigs ( ctx->keyblock ); + if ( finish_lookup (ctx) ) { + no_suitable_key = 0; if ( secmode ) { - release_kbnode( secblock ); + merge_public_with_secret ( ctx->keyblock, + secblock); + release_kbnode (secblock); secblock = NULL; } - release_kbnode( ctx->keyblock ); - ctx->keyblock = NULL; - } - found: - ; + goto found; + } + else + no_suitable_key = 1; + + skip: + /* release resources and continue search */ + if ( secmode ) { + release_kbnode( secblock ); + secblock = NULL; + } + release_kbnode( ctx->keyblock ); + ctx->keyblock = NULL; } + + found: if( rc && rc != -1 ) - log_error("enum_keyblocks failed: %s\n", gpg_errstr(rc)); + log_error("keydb_search failed: %s\n", g10_errstr(rc)); if( !rc ) { *ret_keyblock = ctx->keyblock; /* return the keyblock */ ctx->keyblock = NULL; } + else if (rc == -1 && no_suitable_key) + rc = secmode ? G10ERR_UNU_SECKEY : G10ERR_UNU_PUBKEY; else if( rc == -1 ) - rc = secmode ? GPGERR_NO_SECKEY : GPGERR_NO_PUBKEY; + rc = secmode ? G10ERR_NO_SECKEY : G10ERR_NO_PUBKEY; if ( secmode ) { release_kbnode( secblock ); @@ -2307,36 +2200,14 @@ lookup( GETKEY_CTX ctx, KBNODE *ret_keyblock, int secmode ) } release_kbnode( ctx->keyblock ); ctx->keyblock = NULL; - set_packet_list_mode(oldmode); - #if 0 - if( opt.debug & DBG_MEMSTAT_VALUE ) { - static int initialized; - - if( !initialized ) { - initialized = 1; - atexit( print_stats ); - } - - assert( ctx->mode < DIM(lkup_stats) ); - lkup_stats[ctx->mode].any = 1; - if( !rc ) - lkup_stats[ctx->mode].okay_count++; - else if ( rc == GPGERR_NO_PUBKEY || rc == GPGERR_NO_SECKEY ) - lkup_stats[ctx->mode].nokey_count++; - else - lkup_stats[ctx->mode].error_count++; - } - #endif ctx->last_rc = rc; - ctx->count++; return rc; } - /**************** * FIXME: Replace by the generic function * It does not work as it is right now - it is used at @@ -2352,34 +2223,33 @@ lookup( GETKEY_CTX ctx, KBNODE *ret_keyblock, int secmode ) * to indicate EOF. * 4) Always call this function a last time with SK set to NULL, * so that can free it's context. - * - * */ int enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys ) { int rc=0; - PACKET pkt; - int save_mode; struct { int eof; - int sequence; - const char *name; - IOBUF iobuf; + int first; + KEYDB_HANDLE hd; + KBNODE keyblock; + KBNODE node; } *c = *context; if( !c ) { /* make a new context */ - c = gcry_xcalloc( 1, sizeof *c ); + c = m_alloc_clear( sizeof *c ); *context = c; - c->sequence = 0; - c->name = enum_keyblock_resources( &c->sequence, 1 ); + c->hd = keydb_new (1); + c->first = 1; + c->keyblock = NULL; + c->node = NULL; } if( !sk ) { /* free the context */ - if( c->iobuf ) - iobuf_close(c->iobuf); - gcry_free( c ); + keydb_release (c->hd); + release_kbnode (c->keyblock); + m_free( c ); *context = NULL; return 0; } @@ -2387,33 +2257,33 @@ enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys ) if( c->eof ) return -1; - /* FIXME: This assumes a plain keyring file */ - for( ; c->name; c->name = enum_keyblock_resources( &c->sequence, 1 ) ) { - if( !c->iobuf ) { - if( !(c->iobuf = iobuf_open( c->name ) ) ) { - log_error("enum_secret_keys: can't open `%s'\n", c->name ); - continue; /* try next file */ - } - } + do { + /* get the next secret key from the current keyblock */ + for (; c->node; c->node = c->node->next) { + if (c->node->pkt->pkttype == PKT_SECRET_KEY + || (with_subkeys + && c->node->pkt->pkttype == PKT_SECRET_SUBKEY) ) { + copy_secret_key (sk, c->node->pkt->pkt.secret_key ); + c->node = c->node->next; + return 0; /* found */ + } + } + release_kbnode (c->keyblock); + c->keyblock = c->node = NULL; + + rc = c->first? keydb_search_first (c->hd) : keydb_search_next (c->hd); + c->first = 0; + if (rc) { + keydb_release (c->hd); c->hd = NULL; + c->eof = 1; + return -1; /* eof */ + } + + rc = keydb_get_keyblock (c->hd, &c->keyblock); + c->node = c->keyblock; + } while (!rc); - save_mode = set_packet_list_mode(0); - init_packet(&pkt); - while( (rc=parse_packet(c->iobuf, &pkt, NULL)) != -1 ) { - if( rc ) - ; /* e.g. unknown packet */ - else if( pkt.pkttype == PKT_SECRET_KEY - || ( with_subkeys && pkt.pkttype == PKT_SECRET_SUBKEY ) ) { - copy_secret_key( sk, pkt.pkt.secret_key ); - set_packet_list_mode(save_mode); - return 0; /* found */ - } - free_packet(&pkt); - } - set_packet_list_mode(save_mode); - iobuf_close(c->iobuf); c->iobuf = NULL; - } - c->eof = 1; - return -1; + return rc; /* error */ } @@ -2438,7 +2308,7 @@ get_user_id_string( u32 *keyid ) keyid_list_t a; for (a=r->keyids; a; a= a->next ) { if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) { - p = gcry_xmalloc( r->len + 10 ); + p = m_alloc( r->len + 10 ); sprintf(p, "%08lX %.*s", (ulong)keyid[1], r->len, r->name ); return p; @@ -2446,7 +2316,7 @@ get_user_id_string( u32 *keyid ) } } } while( ++pass < 2 && !get_pubkey( NULL, keyid ) ); - p = gcry_xmalloc( 15 ); + p = m_alloc( 15 ); sprintf(p, "%08lX [?]", (ulong)keyid[1] ); return p; } @@ -2456,9 +2326,9 @@ char* get_user_id_string_native( u32 *keyid ) { char *p = get_user_id_string( keyid ); - char *p2 = utf8_to_native( p, strlen(p) ); + char *p2 = utf8_to_native( p, strlen(p), 0 ); - gcry_free(p); + m_free(p); return p2; } @@ -2475,7 +2345,7 @@ get_long_user_id_string( u32 *keyid ) keyid_list_t a; for (a=r->keyids; a; a= a->next ) { if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) { - p = gcry_xmalloc( r->len + 20 ); + p = m_alloc( r->len + 20 ); sprintf(p, "%08lX%08lX %.*s", (ulong)keyid[0], (ulong)keyid[1], r->len, r->name ); @@ -2484,7 +2354,7 @@ get_long_user_id_string( u32 *keyid ) } } } while( ++pass < 2 && !get_pubkey( NULL, keyid ) ); - p = gcry_xmalloc( 25 ); + p = m_alloc( 25 ); sprintf(p, "%08lX%08lX [?]", (ulong)keyid[0], (ulong)keyid[1] ); return p; } @@ -2502,7 +2372,7 @@ get_user_id( u32 *keyid, size_t *rn ) keyid_list_t a; for (a=r->keyids; a; a= a->next ) { if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) { - p = gcry_xmalloc( r->len ); + p = m_alloc( r->len ); memcpy(p, r->name, r->len ); *rn = r->len; return p; @@ -2510,9 +2380,84 @@ get_user_id( u32 *keyid, size_t *rn ) } } } while( ++pass < 2 && !get_pubkey( NULL, keyid ) ); - p = gcry_xstrdup( _("[User id not found]") ); + p = m_strdup( _("[User id not found]") ); *rn = strlen(p); return p; } +char* +get_user_id_native( u32 *keyid ) +{ + size_t rn; + char *p = get_user_id( keyid, &rn ); + char *p2 = utf8_to_native( p, rn, 0 ); + + m_free(p); + return p2; +} + +KEYDB_HANDLE +get_ctx_handle(GETKEY_CTX ctx) +{ + return ctx->kr_handle; +} + +/* Check the revocation keys to see if any of them have revoked our + pk. sig is the revocation sig. pk is the key it is on. This code + will need to be modified if gpg ever becomes multi-threaded. Note + that this is written so that a revoked revoker can still issue + revocations: i.e. If A revokes B, but A is revoked, B is still + revoked. I'm not completely convinced this is the proper behavior, + but it matches how PGP does it. -dms */ + +/* Return 0 if pk is revoked, non-0 if not revoked */ +static int +check_revocation_keys(PKT_public_key *pk,PKT_signature *sig) +{ + static int busy=0; + int i,rc=-1; + + assert(IS_KEY_REV(sig)); + assert((sig->keyid[0]!=pk->keyid[0]) || (sig->keyid[0]!=pk->keyid[1])); + + if(busy) + { + /* return -1 (i.e. not revoked), but mark the pk as uncacheable + as we don't really know its revocation status until it is + checked directly. */ + + pk->dont_cache=1; + return -1; + } + + busy=1; + + /* printf("looking at %08lX with a sig from %08lX\n",(ulong)pk->keyid[1], + (ulong)sig->keyid[1]); */ + + /* is the issuer of the sig one of our revokers? */ + if( !pk->revkey && pk->numrevkeys ) + BUG(); + else + for(i=0;inumrevkeys;i++) { + u32 keyid[2]; + + keyid_from_fingerprint(pk->revkey[i].fpr,MAX_FINGERPRINT_LEN,keyid); + + if(keyid[0]==sig->keyid[0] && keyid[1]==sig->keyid[1]) { + MD_HANDLE md; + + md=md_open(sig->digest_algo,0); + hash_public_key(md,pk); + if(signature_check(sig,md)==0) { + rc=0; + break; + } + } + } + + busy=0; + + return rc; +} diff --git a/g10/basicdefs.h b/g10/global.h similarity index 63% rename from g10/basicdefs.h rename to g10/global.h index 1a7f0901a..3c4e59ec4 100644 --- a/g10/basicdefs.h +++ b/g10/global.h @@ -1,5 +1,5 @@ -/* basicdefs.h - Some definitions used at many place - * Copyright (C) 1999 Free Software Foundation, Inc. +/* global.h - Local typedefs and constants + * Copyright (C) 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -18,23 +18,12 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_BASICDEFS_H -#define GPG_BASICDEFS_H +#ifndef GPG_GLOBAL_H +#define GPG_GLOBAL_H -#include "types.h" +#define MAX_FINGERPRINT_LEN 20 -typedef struct { - int algo; - int keylen; - byte key[32]; /* this is the largest used keylen (256 bit) */ -} DEK; +typedef struct kbnode_struct *KBNODE; +typedef struct keydb_search_desc KEYDB_SEARCH_DESC; - -struct pk_list; -struct sk_list; -typedef struct pk_list *PK_LIST; -typedef struct sk_list *SK_LIST; - - - -#endif /* GPG_BASICDEFS_H */ +#endif /*GPG_GLOBAL_H*/ diff --git a/g10/gpgd.c b/g10/gpgd.c index 8ca37d34a..365556604 100644 --- a/g10/gpgd.c +++ b/g10/gpgd.c @@ -1,5 +1,5 @@ -/* ggpd.c - The GnuPG daemon (keyserver) - * Copyright (C) 1998 Free Software Foundation, Inc. +/* gpd.c - The GnuPG daemon (keyserver) + * Copyright (C) 1998, 1999 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -112,7 +112,7 @@ build_list( const char *text, const char * (*mapf)(int), int (*chkf)(int) ) for(i=1; i < 100; i++ ) if( !chkf(i) && (s=mapf(i)) ) n += strlen(s) + 2; - list = gcry_xmalloc( 21 + n ); *list = 0; + list = m_alloc( 21 + n ); *list = 0; for(p=NULL, i=1; i < 100; i++ ) { if( !chkf(i) && (s=mapf(i)) ) { if( !p ) @@ -201,9 +201,9 @@ main( int argc, char **argv ) else { log_error("option file `%s': %s\n", configname, strerror(errno) ); - gpg_exit(1); + g10_exit(1); } - gcry_free(configname); configname = NULL; + m_free(configname); configname = NULL; } if( parse_debug && configname ) log_info("reading options from `%s'\n", configname ); @@ -216,8 +216,8 @@ main( int argc, char **argv ) case 'v': opt.verbose++; break; case 501: if( !configfp ) { - gcry_free(configname); - configname = gcry_xstrdup(pargs.r.ret_str); + m_free(configname); + configname = m_strdup(pargs.r.ret_str); goto next_pass; } break; @@ -230,12 +230,12 @@ main( int argc, char **argv ) if( configfp ) { fclose( configfp ); configfp = NULL; - gcry_free(configname); configname = NULL; + m_free(configname); configname = NULL; goto next_pass; } - gcry_free( configname ); configname = NULL; + m_free( configname ); configname = NULL; if( log_get_errorcount(0) ) - gpg_exit(2); + g10_exit(2); fprintf(stderr, "%s %s; %s\n", strusage(11), strusage(13), strusage(14) ); fprintf(stderr, "%s\n", strusage(15) ); @@ -245,13 +245,13 @@ main( int argc, char **argv ) become_daemon(); - gpg_exit(0); + g10_exit(0); return 8; /*NEVER REACHED*/ } void -gpg_exit( int rc ) +g10_exit( int rc ) { secmem_term(); rc = rc? rc : log_get_errorcount(0)? 2:0; diff --git a/g10/gpgv.c b/g10/gpgv.c new file mode 100644 index 000000000..362f5c528 --- /dev/null +++ b/g10/gpgv.c @@ -0,0 +1,372 @@ +/* gpgv.c - The GnuPG signature verify utility + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_DOSISH_SYSTEM + #include /* for setmode() */ +#endif + +#define INCLUDED_BY_MAIN_MODULE 1 +#include "packet.h" +#include "iobuf.h" +#include "memory.h" +#include "util.h" +#include "main.h" +#include "options.h" +#include "keydb.h" +#include "trustdb.h" +#include "mpi.h" +#include "cipher.h" +#include "filter.h" +#include "ttyio.h" +#include "i18n.h" +#include "status.h" +#include "g10defs.h" + + +enum cmd_and_opt_values { aNull = 0, + oQuiet = 'q', + oVerbose = 'v', + oBatch = 500, + oKeyring, + oIgnoreTimeConflict, + oStatusFD, + oLoggerFD, + oHomedir, +aTest }; + + +static ARGPARSE_OPTS opts[] = { + + { 301, NULL, 0, N_("@\nOptions:\n ") }, + + { oVerbose, "verbose", 0, N_("verbose") }, + { oQuiet, "quiet", 0, N_("be somewhat more quiet") }, + { oKeyring, "keyring" ,2, N_("take the keys from this keyring")}, + { oIgnoreTimeConflict, "ignore-time-conflict", 0, + N_("make timestamp conflicts only a warning") }, + { oStatusFD, "status-fd" ,1, N_("|FD|write status info to this FD") }, + { oLoggerFD, "logger-fd",1, "@" }, + { oHomedir, "homedir", 2, "@" }, /* defaults to "~/.gnupg" */ + +{0} }; + + + +int g10_errors_seen = 0; + +#ifdef __riscos__ +RISCOS_GLOBAL_STATICS("GnuPG (gpgv) Heap") +#endif /* __riscos__ */ + +const char * +strusage( int level ) +{ + const char *p; + switch( level ) { + case 11: p = "gpgv (GnuPG)"; + break; + case 13: p = VERSION; break; + case 17: p = PRINTABLE_OS_NAME; break; + case 19: p = + _("Please report bugs to .\n"); + break; + case 1: + case 40: p = + _("Usage: gpgv [options] [files] (-h for help)"); + break; + case 41: p = + _("Syntax: gpg [options] [files]\n" + "Check signatures against known trusted keys\n"); + break; + + default: p = default_strusage(level); + } + return p; +} + + + + +static void +i18n_init(void) +{ + #ifdef USE_SIMPLE_GETTEXT + set_gettext_file( PACKAGE ); + #else + #ifdef ENABLE_NLS + #ifdef HAVE_LC_MESSAGES + setlocale( LC_TIME, "" ); + setlocale( LC_MESSAGES, "" ); + #else + setlocale( LC_ALL, "" ); + #endif + bindtextdomain( PACKAGE, G10_LOCALEDIR ); + textdomain( PACKAGE ); + #endif + #endif +} + + +int +main( int argc, char **argv ) +{ + ARGPARSE_ARGS pargs; + int rc=0; + STRLIST sl; + STRLIST nrings=NULL; + unsigned configlineno; + + #ifdef __riscos__ + riscos_global_defaults(); + #endif /* __riscos__ */ + + log_set_name("gpgv"); + init_signals(); + i18n_init(); + opt.command_fd = -1; /* no command fd */ + opt.pgp2_workarounds = 1; + opt.keyserver_options.auto_key_retrieve = 1; + opt.always_trust = 1; + opt.batch = 1; + + #if defined (__MINGW32__) || defined (__CYGWIN32__) + opt.homedir = read_w32_registry_string( NULL, "Software\\GNU\\GnuPG", "HomeDir" ); + #else + opt.homedir = getenv("GNUPGHOME"); + #endif + if( !opt.homedir || !*opt.homedir ) { + opt.homedir = GNUPG_HOMEDIR; + } + tty_no_terminal(1); + tty_batchmode(1); + disable_dotlock(); + + pargs.argc = &argc; + pargs.argv = &argv; + pargs.flags= 1; /* do not remove the args */ + while( optfile_parse( NULL, NULL, &configlineno, &pargs, opts) ) { + switch( pargs.r_opt ) { + case oQuiet: opt.quiet = 1; break; + case oVerbose: g10_opt_verbose++; + opt.verbose++; opt.list_sigs=1; break; + case oKeyring: append_to_strlist( &nrings, pargs.r.ret_str); break; + case oStatusFD: set_status_fd( pargs.r.ret_int ); break; + case oLoggerFD: log_set_logfile( NULL, pargs.r.ret_int ); break; + case oHomedir: opt.homedir = pargs.r.ret_str; break; + default : pargs.err = 2; break; + } + } + + if( log_get_errorcount(0) ) + g10_exit(2); + + g10_opt_homedir = opt.homedir; + + if( opt.verbose > 1 ) + set_packet_list_mode(1); + + if( !nrings ) /* no keyring given: use default one */ + keydb_add_resource ("trustedkeys" EXTSEP_S "gpg", 0, 0); + for(sl = nrings; sl; sl = sl->next ) + keydb_add_resource (sl->d, 0, 0 ); + + FREE_STRLIST(nrings); + + if( (rc = verify_signatures( argc, argv ) )) + log_error("verify signatures failed: %s\n", g10_errstr(rc) ); + + /* cleanup */ + g10_exit(0); + return 8; /*NEVER REACHED*/ +} + + +void +g10_exit( int rc ) +{ + rc = rc? rc : log_get_errorcount(0)? 2 : + g10_errors_seen? 1 : 0; + exit(rc ); +} + + +/* Stub: + * We have to override the trustcheck from pkclist.c becuase + * this utility assumes that all keys in the keyring are trustworthy + */ +int +check_signatures_trust( PKT_signature *sig ) +{ + return 0; +} + + +/* Stub: + * We don't have the trustdb , so we have to provide some stub functions + * instead + */ +int +get_validity_info (PKT_public_key *pk, const byte *namehash ) +{ + return '?'; +} + +/* Stub: */ +int +get_ownertrust_info (PKT_public_key *pk) +{ + return '?'; +} + +unsigned int +get_ownertrust (PKT_public_key *pk) +{ + return TRUST_UNKNOWN; +} + + +/* Stub: + * Because we only work with trusted keys, it does not make sense to + * get them from a keyserver + */ +int +keyserver_import_keyid( u32 *keyid, void *dummy ) +{ + return -1; +} + +/* Stub: + * No encryption here but mainproc links to these functions. + */ +int +get_session_key( PKT_pubkey_enc *k, DEK *dek ) +{ + return G10ERR_GENERAL; +} +/* Stub: */ +int +get_override_session_key( DEK *dek, const char *string ) +{ + return G10ERR_GENERAL; +} +/* Stub: */ +int +decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek ) +{ + return G10ERR_GENERAL; +} + + +/* Stub: + * No interactive commnds, so we don't need the helptexts + */ +void +display_online_help( const char *keyword ) +{ +} + +/* Stub: + * We don't use secret keys, but getkey.c links to this + */ +int +check_secret_key( PKT_secret_key *sk, int n ) +{ + return G10ERR_GENERAL; +} + +/* Stub: + * No secret key, so no passphrase needed + */ +DEK * +passphrase_to_dek( u32 *keyid, int pubkey_algo, + int cipher_algo, STRING2KEY *s2k, int mode, + const char *tmp) +{ + return NULL; +} + +/* Stubs to avoid linking to photoid.c */ +void show_photos(const struct user_attribute *attrs,int count,PKT_public_key *pk) {} +int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len) {return 0;} +char *image_type_to_string(byte type,int string) {return NULL;} + +/* Stubs to void linking to ../cipher/cipher.c */ +int string_to_cipher_algo( const char *string ) { return 0; } +const char *cipher_algo_to_string( int algo ) { return "?";} +void disable_cipher_algo( int algo ) {} +int check_cipher_algo( int algo ) { return -1;} +unsigned int cipher_get_keylen( int algo ) { return 0; } +unsigned int cipher_get_blocksize( int algo ) {return 0;} +CIPHER_HANDLE cipher_open( int algo, int mode, int secure ) { return NULL;} +void cipher_close( CIPHER_HANDLE c ) {} +int cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen ) { return -1;} +void cipher_setiv( CIPHER_HANDLE c, const byte *iv, unsigned ivlen ){} +void cipher_encrypt( CIPHER_HANDLE c, byte *outbuf, + byte *inbuf, unsigned nbytes ) {} +void cipher_decrypt( CIPHER_HANDLE c, byte *outbuf, + byte *inbuf, unsigned nbytes ) {} +void cipher_sync( CIPHER_HANDLE c ) {} + +/* Stubs to avoid linking to ../cipher/random.c */ +void random_dump_stats(void) {} +int quick_random_gen( int onoff ) { return -1;} +void randomize_buffer( byte *buffer, size_t length, int level ) {} +int random_is_faked() { return -1;} +byte *get_random_bits( size_t nbits, int level, int secure ) { return NULL;} +void set_random_seed_file( const char *name ) {} +void update_random_seed_file() {} +void fast_random_poll() {} + +/* Stubs to avoid linking of ../cipher/primegen.c */ +void register_primegen_progress ( void (*cb)( void *, int), void *cb_data ) {} +MPI generate_secret_prime( unsigned nbits ) { return NULL;} +MPI generate_public_prime( unsigned nbits ) { return NULL;} +MPI generate_elg_prime( int mode, unsigned pbits, unsigned qbits, + MPI g, MPI **ret_factors ) { return NULL;} + +/* Do not link to ../cipher/rndlinux.c */ +void rndlinux_constructor(void) {} + + +/* Stubs to avoid linking to ../util/ttyio.c */ +int tty_batchmode( int onoff ) { return 0; } +void tty_printf( const char *fmt, ... ) { } +void tty_print_string( byte *p, size_t n ) { } +void tty_print_utf8_string( byte *p, size_t n ) {} +void tty_print_utf8_string2( byte *p, size_t n, size_t max_n ) {} +char *tty_get( const char *prompt ) { return NULL;} +char *tty_get_hidden( const char *prompt ) {return NULL; } +void tty_kill_prompt(void) {} +int tty_get_answer_is_yes( const char *prompt ) {return 0;} +int tty_no_terminal(int onoff) {return 0;} + +/* We do not do any locking, so use these stubs here */ +void disable_dotlock(void) {} +DOTLOCK create_dotlock( const char *file_to_lock ) { return NULL; } +int make_dotlock( DOTLOCK h, long timeout ) { return 0;} +int release_dotlock( DOTLOCK h ) {return 0;} +void remove_lockfiles(void) {} diff --git a/g10/helptext.c b/g10/helptext.c index 4a7a14fde..0150c549c 100644 --- a/g10/helptext.c +++ b/g10/helptext.c @@ -1,5 +1,5 @@ /* helptext.c - English help texts - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -49,6 +49,13 @@ static struct helptexts { const char *key; const char *help; } helptexts[] = { "to do with the (implicitly created) web-of-certificates." )}, +{ "edit_ownertrust.set_ultimate.okay", N_( + "To build the Web-of-Trust, GnuPG needs to know which keys are\n" + "ultimately trusted - those are usually the keys for which you have\n" + "access to the secret key. Answer \"yes\" to set this key to\n" + "ultimately trusted\n" +)}, + { "revoked_key.override", N_( "If you want to use this revoked key anyway, answer \"yes\"." )}, @@ -87,6 +94,12 @@ static struct helptexts { const char *key; const char *help; } helptexts[] = { "with them are quite large and very slow to verify." )}, +{ "keygen.algo.rsa_se", N_( +"In general it is not a good idea to use the same key for signing and\n" +"encryption. This algorithm should only be used in certain domains.\n" +"Please consult your security expert first." +)}, + { "keygen.size", N_( "Enter the size of the key" @@ -145,6 +158,29 @@ static struct helptexts { const char *key; const char *help; } helptexts[] = { "Answer \"yes\" or \"no\"" )}, +{ "sign_uid.class", N_( +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n\n" +"\"0\" means you make no particular claim as to how carefully you verified the\n" +" key.\n\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous user.\n\n" +"\"2\" means you did casual verification of the key. For example, this could\n" +" mean that you verified the key fingerprint and checked the user ID on the\n" +" key against a photo ID.\n\n" +"\"3\" means you did extensive verification of the key. For example, this could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with a\n" +" photo ID (such as a passport) that the name of the key owner matches the\n" +" name in the user ID on the key, and finally that you verified (by exchange\n" +" of email) that the email address on the key belongs to the key owner.\n\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive\"\n" +"mean to you when you sign other keys.\n\n" +"If you don't know what the right answer is, answer \"0\"." +)}, { "change_passwd.empty.okay", N_( "Answer \"yes\" or \"no\"" @@ -197,11 +233,16 @@ static struct helptexts { const char *key; const char *help; } helptexts[] = { "a second one is available." )}, +{ "keyedit.updpref.okay", N_( + "Change the preferences of all user IDs (or just of the selected ones)\n" + "to the current list of preferences. The timestamp of all affected\n" + "self-signatures will be advanced by one second.\n" +)}, + { "passphrase.enter", N_( "" "Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " )}, @@ -231,7 +272,7 @@ static struct helptexts { const char *key; const char *help; } helptexts[] = { " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" - " \"Key is superseeded\"\n" + " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -271,5 +312,3 @@ display_online_help( const char *keyword ) } tty_printf("\n"); } - - diff --git a/g10/hkp.c b/g10/hkp.c index 2f6031361..7b96570cd 100644 --- a/g10/hkp.c +++ b/g10/hkp.c @@ -1,5 +1,5 @@ -/* hkp.c - Horrowitz Keyserver Protocol - * Copyright (C) 1999 Free Software Foundation, Inc. +/* hkp.c - Horowitz Keyserver Protocol + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -34,6 +34,7 @@ #include "filter.h" #include "http.h" #include "main.h" +#include "keyserver-internal.h" static int urlencode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); @@ -47,95 +48,72 @@ static int urlencode_filter( void *opaque, int control, * or other error codes. */ int -hkp_ask_import( u32 *keyid ) +hkp_ask_import( KEYDB_SEARCH_DESC *desc, void *stats_handle) { - #ifdef HAVE_DOSISH_SYSTEM - return -1; - #else struct http_context hd; char *request; int rc; - unsigned int hflags = opt.honor_http_proxy? HTTP_FLAG_TRY_PROXY : 0; + unsigned int hflags = opt.keyserver_options.honor_http_proxy? HTTP_FLAG_TRY_PROXY : 0; + u32 key[2]; - if( !opt.keyserver_name ) - return -1; - log_info(_("requesting key %08lX from %s ...\n"), (ulong)keyid[1], - opt.keyserver_name ); - request = gcry_xmalloc( strlen( opt.keyserver_name ) + 100 ); + if(desc->mode==KEYDB_SEARCH_MODE_FPR20) + keyid_from_fingerprint(desc->u.fpr,MAX_FINGERPRINT_LEN,key); + else if(desc->mode==KEYDB_SEARCH_MODE_LONG_KID || + desc->mode==KEYDB_SEARCH_MODE_SHORT_KID) + { + key[0]=desc->u.kid[0]; + key[1]=desc->u.kid[1]; + } + else + return -1; /* HKP does not support v3 fingerprints */ + + log_info(_("requesting key %08lX from HKP keyserver %s\n"), + (ulong)key[1],opt.keyserver_host ); + request = m_alloc( strlen( opt.keyserver_host ) + 100 ); /* hkp does not accept the long keyid - we should really write a * nicer one :-) * FIXME: request binary mode - need to pass no_armor mode * down to the import function. Marc told that there is such a * binary mode ... how? */ - sprintf( request, "x-hkp://%s:11371/pks/lookup?op=get&search=0x%08lX", - opt.keyserver_name, (ulong)keyid[1] ); + + if(opt.keyserver_options.broken_http_proxy) + hflags |= HTTP_FLAG_NO_SHUTDOWN; + + sprintf(request,"x-hkp://%s%s%s/pks/lookup?op=get&search=0x%08lX", + opt.keyserver_host, + atoi(opt.keyserver_port)>0?":":"", + atoi(opt.keyserver_port)>0?opt.keyserver_port:"", + (ulong)key[1] ); + + if(opt.keyserver_options.verbose>2) + log_info("request is \"%s\"\n",request); + rc = http_open_document( &hd, request, hflags ); if( rc ) { log_info(_("can't get key from keyserver: %s\n"), - rc == GPGERR_NETWORK? strerror(errno) - : gpg_errstr(rc) ); + rc == G10ERR_NETWORK? strerror(errno) + : g10_errstr(rc) ); } else { - rc = import_keys_stream( hd.fp_read , 0 ); + rc = import_keys_stream( hd.fp_read, 0, stats_handle); http_close( &hd ); } - gcry_free( request ); + m_free( request ); return rc; - #endif } - - -int -hkp_import( STRLIST users ) -{ - #ifdef HAVE_DOSISH_SYSTEM - return -1; - #else - if( !opt.keyserver_name ) { - log_error(_("no keyserver known (use option --keyserver)\n")); - return -1; - } - - for( ; users; users = users->next ) { - u32 kid[2]; - int type = classify_user_id( users->d, kid, NULL, NULL, NULL ); - if( type != 10 && type != 11 ) { - log_info(_("%s: not a valid key ID\n"), users->d ); - continue; - } - /* because the function may use log_info in some situations, the - * errorcounter ist not increaed and the program will return - * with success - which is not good when this function is used. - */ - if( hkp_ask_import( kid ) ) - log_inc_errorcount(); - } - return 0; - #endif -} - - int hkp_export( STRLIST users ) { - #ifdef HAVE_DOSISH_SYSTEM - return -1; - #else int rc; armor_filter_context_t afx; IOBUF temp = iobuf_temp(); struct http_context hd; char *request; unsigned int status; - unsigned int hflags = opt.honor_http_proxy? HTTP_FLAG_TRY_PROXY : 0; - - if( !opt.keyserver_name ) { - log_error(_("no keyserver known (use option --keyserver)\n")); - return -1; - } + unsigned int hflags = opt.keyserver_options.honor_http_proxy? HTTP_FLAG_TRY_PROXY : 0; iobuf_push_filter( temp, urlencode_filter, NULL ); @@ -151,23 +129,34 @@ hkp_export( STRLIST users ) iobuf_flush_temp( temp ); - request = gcry_xmalloc( strlen( opt.keyserver_name ) + 100 ); - sprintf( request, "x-hkp://%s:11371/pks/add", opt.keyserver_name ); + request = m_alloc( strlen( opt.keyserver_host ) + 100 ); + + if(opt.keyserver_options.broken_http_proxy) + hflags |= HTTP_FLAG_NO_SHUTDOWN; + + sprintf( request, "x-hkp://%s%s%s/pks/add", + opt.keyserver_host, + atoi(opt.keyserver_port)>0?":":"", + atoi(opt.keyserver_port)>0?opt.keyserver_port:""); + + if(opt.keyserver_options.verbose>2) + log_info("request is \"%s\"\n",request); + rc = http_open( &hd, HTTP_REQ_POST, request , hflags ); if( rc ) { log_error(_("can't connect to `%s': %s\n"), - opt.keyserver_name, - rc == GPGERR_NETWORK? strerror(errno) - : gpg_errstr(rc) ); + opt.keyserver_host, + rc == G10ERR_NETWORK? strerror(errno) + : g10_errstr(rc) ); iobuf_close(temp); - gcry_free( request ); + m_free( request ); return rc; } sprintf( request, "Content-Length: %u\n", (unsigned)iobuf_get_temp_length(temp) + 9 ); iobuf_writestr( hd.fp_write, request ); - gcry_free( request ); + m_free( request ); http_start_data( &hd ); iobuf_writestr( hd.fp_write, "keytext=" ); @@ -180,26 +169,28 @@ hkp_export( STRLIST users ) rc = http_wait_response( &hd, &status ); if( rc ) { log_error(_("error sending to `%s': %s\n"), - opt.keyserver_name, gpg_errstr(rc) ); + opt.keyserver_host, g10_errstr(rc) ); } else { #if 1 if( opt.verbose ) { int c; while( (c=iobuf_get(hd.fp_read)) != EOF ) + if ( c >= 32 && c < 127 ) putchar( c ); + else + putchar ( '?' ); } #endif if( (status/100) == 2 ) log_info(_("success sending to `%s' (status=%u)\n"), - opt.keyserver_name, status ); + opt.keyserver_host, status ); else log_error(_("failed sending to `%s': status=%u\n"), - opt.keyserver_name, status ); + opt.keyserver_host, status ); } http_close( &hd ); return rc; - #endif } static int @@ -228,3 +219,373 @@ urlencode_filter( void *opaque, int control, return rc; } +static int +write_quoted(IOBUF a, const char *buf, char delim) +{ + char quoted[5]; + + sprintf(quoted,"\\x%02X",delim); + + while(*buf) + { + if(*buf==delim) + { + if(iobuf_writestr(a,quoted)) + return -1; + } + else if(*buf=='\\') + { + if(iobuf_writestr(a,"\\x5c")) + return -1; + } + else + { + if(iobuf_writebyte(a,*buf)) + return -1; + } + + buf++; + } + + return 0; +} + +/* pub 2048/3CB3B415 1998/04/03 David M. Shaw <dshaw@jabberwocky.com> */ + +/* Luckily enough, both the HKP server and NAI HKP interface to their + LDAP server are close enough in output so the same function can + parse them both. */ + +static int +parse_hkp_index(IOBUF buffer,char *line) +{ + static int open=0,revoked=0; + static char *key=NULL; +#ifdef __riscos__ + static char *uid=NULL; +#else + static unsigned char *uid=NULL; +#endif + static u32 bits,createtime; + int ret=0; + + /* printf("Open %d, LINE: %s, uid: %s\n",open,line,uid); */ + + /* Try and catch some bastardization of HKP. If we don't have + certain unchanging landmarks, we can't reliably parse the + response. */ + if(open && ascii_memcasecmp(line,"",6)!=0 && + ascii_memcasecmp(line,"pub ",5)!=0 && + ascii_memcasecmp(line," ",5)!=0) + { + m_free(key); + m_free(uid); + log_error(_("this keyserver is not fully HKP compatible\n")); + return -1; + } + + /* For multiple UIDs */ + if(open && uid!=NULL) + { + ret=0; + + if(!(revoked && !opt.keyserver_options.include_revoked)) + { + char intstr[11]; + + if(key) + write_quoted(buffer,key,':'); + iobuf_writestr(buffer,":"); + write_quoted(buffer,uid,':'); + iobuf_writestr(buffer,":"); + iobuf_writestr(buffer,revoked?"1:":":"); + sprintf(intstr,"%u",createtime); + write_quoted(buffer,intstr,':'); + iobuf_writestr(buffer,"::::"); + sprintf(intstr,"%u",bits); + write_quoted(buffer,intstr,':'); + iobuf_writestr(buffer,"\n"); + + ret=1; + } + + if(strncmp(line," ",5)!=0) + { + revoked=0; + m_free(key); + m_free(uid); + uid=NULL; + open=0; + } + } + + if(ascii_memcasecmp(line,"pub ",5)==0) + { + char *tok,*temp; + + open=1; + + line+=4; + + tok=strsep(&line,"/"); + if(tok==NULL) + return ret; + + bits=atoi(tok); + + tok=strsep(&line,">"); + if(tok==NULL) + return ret; + + tok=strsep(&line,"<"); + if(tok==NULL) + return ret; + + key=m_strdup(tok); + + tok=strsep(&line," "); + if(tok==NULL) + return ret; + + tok=strsep(&line," "); + if(tok==NULL) + return ret; + + /* The date parser wants '-' instead of '/', so... */ + temp=tok; + while(*temp!='\0') + { + if(*temp=='/') + *temp='-'; + + temp++; + } + + createtime=scan_isodatestr(tok); + } + + if(open) + { + int uidindex=0; + + if(line==NULL) + { + uid=m_strdup("Key index corrupted"); + return ret; + } + + /* All that's left is the user name. Strip off anything + and de-urlencode it. */ + + while(*line==' ' && *line!='\0') + line++; + + if(strncmp(line,"*** KEY REVOKED ***",19)==0) + { + revoked=1; + return ret; + } + + uid=m_alloc(strlen(line)+1); + + while(*line!='\0') + { + switch(*line) + { + case '<': + while(*line!='>' && *line!='\0') + line++; + + if(*line!='\0') + line++; + break; + + case '&': + if((*(line+1)!='\0' && tolower(*(line+1))=='l') && + (*(line+2)!='\0' && tolower(*(line+2))=='t') && + (*(line+3)!='\0' && *(line+3)==';')) + { + uid[uidindex++]='<'; + line+=4; + break; + } + else if((*(line+1)!='\0' && tolower(*(line+1))=='g') && + (*(line+2)!='\0' && tolower(*(line+2))=='t') && + (*(line+3)!='\0' && *(line+3)==';')) + { + uid[uidindex++]='>'; + line+=4; + break; + } + else if((*(line+1)!='\0' && tolower(*(line+1))=='a') && + (*(line+2)!='\0' && tolower(*(line+2))=='m') && + (*(line+3)!='\0' && tolower(*(line+3))=='p') && + (*(line+4)!='\0' && *(line+4)==';')) + { + uid[uidindex++]='&'; + line+=5; + break; + } + + default: + uid[uidindex++]=*line; + line++; + break; + } + } + + uid[uidindex]='\0'; + + /* Chop off the trailing \r, \n, or both. This is fussy as the + true HKP servers have \r\n, and the NAI HKP servers have just + \n. */ + + if(isspace(uid[uidindex-1])) + uid[uidindex-1]='\0'; + + if(isspace(uid[uidindex-2])) + uid[uidindex-2]='\0'; + } + + return ret; +} + +int hkp_search(STRLIST tokens) +{ + int rc=0,len=0,max,first=1; + unsigned int maxlen=1024,buflen=0; +#ifndef __riscos__ + unsigned char *searchstr=NULL,*searchurl; + unsigned char *request; +#else + char *searchstr=NULL,*searchurl; + char *request; +#endif + struct http_context hd; + unsigned int hflags=opt.keyserver_options.honor_http_proxy?HTTP_FLAG_TRY_PROXY:0; + byte *line=NULL; + + /* Glue the tokens together to make a search string */ + + for(;tokens;tokens=tokens->next) + { + len+=strlen(tokens->d)+1; + + searchstr=m_realloc(searchstr,len+1); + if(first) + { + searchstr[0]='\0'; + first=0; + } + + strcat(searchstr,tokens->d); + strcat(searchstr," "); + } + + if(len<=1) + { + m_free(searchstr); + return 0; + } + + searchstr[len-1]='\0'; + + log_info(_("searching for \"%s\" from HKP server %s\n"), + searchstr,opt.keyserver_host); + + /* Now make it url-ish */ + + max=0; + len=0; + searchurl=NULL; + request=searchstr; + + while(*request!='\0') + { + if(max-len<3) + { + max+=100; + searchurl=m_realloc(searchurl,max+1); /* Note +1 for \0 */ + } + + if(isalnum(*request) || *request=='-') + searchurl[len++]=*request; + else if(*request==' ') + searchurl[len++]='+'; + else + { + sprintf(&searchurl[len],"%%%02X",*request); + len+=3; + } + + request++; + } + + searchurl[len]='\0'; + + request=m_alloc(strlen(opt.keyserver_host) + 100 + strlen(searchurl)); + + if(opt.keyserver_options.broken_http_proxy) + hflags |= HTTP_FLAG_NO_SHUTDOWN; + + sprintf(request,"x-hkp://%s%s%s/pks/lookup?op=index&search=%s", + opt.keyserver_host, + atoi(opt.keyserver_port)>0?":":"", + atoi(opt.keyserver_port)>0?opt.keyserver_port:"", + searchurl); + + if(opt.keyserver_options.verbose>2) + log_info("request is \"%s\"\n",request); + + rc=http_open_document(&hd,request,hflags); + if(rc) + { + log_error(_("can't search keyserver: %s\n"), + rc==G10ERR_NETWORK?strerror(errno):g10_errstr(rc)); + } + else + { + IOBUF buffer; + int count=1; + int ret; + + buffer=iobuf_temp(); + + rc=1; + while(rc!=0) + { + /* This is a judgement call. Is it better to slurp up all + the results before prompting the user? On the one hand, + it probably makes the keyserver happier to not be blocked + on sending for a long time while the user picks a key. + On the other hand, it might be nice for the server to be + able to stop sending before a large search result page is + complete. */ + + rc=iobuf_read_line(hd.fp_read,&line,&buflen,&maxlen); + + ret=parse_hkp_index(buffer,line); + if(ret==-1) + break; + + if(rc!=0) + count+=ret; + } + + http_close(&hd); + + count--; + + if(ret>-1) + keyserver_search_prompt(buffer,count,searchstr); + + iobuf_close(buffer); + m_free(line); + } + + m_free(request); + m_free(searchurl); + m_free(searchstr); + + return rc; +} diff --git a/g10/hkp.h b/g10/hkp.h index 64f049739..1fbf123f5 100644 --- a/g10/hkp.h +++ b/g10/hkp.h @@ -1,5 +1,5 @@ -/* hkp.h - Horrowitz Keyserver Protocol - * Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* hkp.h - Horowitz Keyserver Protocol + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -18,13 +18,12 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_HKP_H -#define GPG_HKP_H 1 +#ifndef G10_HKP_H +#define G10_HKP_H 1 - -int hkp_ask_import( u32 *keyid ); +int hkp_ask_import( KEYDB_SEARCH_DESC *desc, void *stats_handle); int hkp_import( STRLIST users ); int hkp_export( STRLIST users ); +int hkp_search(STRLIST tokens); - -#endif /*GPG_HKP_H*/ +#endif /*G10_HKP_H*/ diff --git a/g10/import.c b/g10/import.c index 7e2e5bc18..ccc665145 100644 --- a/g10/import.c +++ b/g10/import.c @@ -1,5 +1,5 @@ /* import.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -29,15 +29,15 @@ #include "packet.h" #include "errors.h" #include "keydb.h" -#include +#include "memory.h" #include "util.h" #include "trustdb.h" #include "main.h" #include "i18n.h" #include "status.h" +#include "keyserver-internal.h" - -static struct { +struct stats_s { ulong count; ulong no_user_id; ulong imported; @@ -51,18 +51,22 @@ static struct { ulong secret_imported; ulong secret_dups; ulong skipped_new_keys; -} stats; +}; -static int import( IOBUF inp, int fast, const char* fname ); -static void print_stats(void); +static int import( IOBUF inp, int fast, const char* fname, + struct stats_s *stats ); static int read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root ); -static int import_one( const char *fname, KBNODE keyblock, int fast ); -static int import_secret_one( const char *fname, KBNODE keyblock ); -static int import_revoke_cert( const char *fname, KBNODE node ); +static void revocation_present(KBNODE keyblock); +static void remove_bad_stuff (KBNODE keyblock); +static int import_one( const char *fname, KBNODE keyblock, int fast, + struct stats_s *stats); +static int import_secret_one( const char *fname, KBNODE keyblock, + struct stats_s *stats ); +static int import_revoke_cert( const char *fname, KBNODE node, + struct stats_s *stats); static int chk_self_sigs( const char *fname, KBNODE keyblock, PKT_public_key *pk, u32 *keyid ); -static void mark_non_selfsigned_uids_valid( KBNODE keyblock, u32 *kid ); static int delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid ); static int merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock, u32 *keyid, @@ -77,6 +81,18 @@ static int merge_keysigs( KBNODE dst, KBNODE src, int *n_sigs, const char *fname, u32 *keyid ); +void * +import_new_stats_handle (void) +{ + return m_alloc_clear ( sizeof (struct stats_s) ); +} + +void +import_release_stats_handle (void *p) +{ + m_free (p); +} + /**************** * Import the public keys from the given filename. Input may be armored. * This function rejects all keys which are not validly self signed on at @@ -109,12 +125,13 @@ static int merge_keysigs( KBNODE dst, KBNODE src, int *n_sigs, * */ void -import_keys( char **fnames, int nnames, int fast ) +import_keys( char **fnames, int nnames, int fast, void *stats_handle ) { int i; + struct stats_s *stats = stats_handle; - /* fixme: don't use static variables */ - memset( &stats, 0, sizeof( stats ) ); + if (!stats) + stats = import_new_stats_handle (); if( !fnames && !nnames ) nnames = 1; /* Ohh what a ugly hack to jump into the loop */ @@ -127,36 +144,42 @@ import_keys( char **fnames, int nnames, int fast ) if( !inp ) log_error(_("can't open `%s': %s\n"), fname, strerror(errno) ); else { - int rc = import( inp, fast, fname ); + int rc = import( inp, fast, fname, stats ); iobuf_close(inp); if( rc ) log_error("import from `%s' failed: %s\n", fname, - gpg_errstr(rc) ); + g10_errstr(rc) ); } if( !fname ) break; } - print_stats(); - if( !fast ) - sync_trustdb(); + if (!stats_handle) { + import_print_stats (stats); + import_release_stats_handle (stats); + } + } int -import_keys_stream( IOBUF inp, int fast ) +import_keys_stream( IOBUF inp, int fast, void *stats_handle ) { int rc = 0; + struct stats_s *stats = stats_handle; + + if (!stats) + stats = import_new_stats_handle (); + + rc = import( inp, fast, "[stream]", stats); + if (!stats_handle) { + import_print_stats (stats); + import_release_stats_handle (stats); + } - /* fixme: don't use static variables */ - memset( &stats, 0, sizeof( stats ) ); - rc = import( inp, fast, "[stream]" ); - print_stats(); - if( !fast ) - sync_trustdb(); return rc; } static int -import( IOBUF inp, int fast, const char* fname ) +import( IOBUF inp, int fast, const char* fname, struct stats_s *stats ) { PACKET *pending_pkt = NULL; KBNODE keyblock; @@ -165,19 +188,20 @@ import( IOBUF inp, int fast, const char* fname ) getkey_disable_caches(); if( !opt.no_armor ) { /* armored reading is not disabled */ - armor_filter_context_t *afx = gcry_xcalloc( 1, sizeof *afx ); + armor_filter_context_t *afx = m_alloc_clear( sizeof *afx ); afx->only_keyblocks = 1; iobuf_push_filter2( inp, armor_filter, afx, 1 ); } while( !(rc = read_block( inp, &pending_pkt, &keyblock) )) { + remove_bad_stuff (keyblock); if( keyblock->pkt->pkttype == PKT_PUBLIC_KEY ) - rc = import_one( fname, keyblock, fast ); - else if( keyblock->pkt->pkttype == PKT_SECRET_KEY ) - rc = import_secret_one( fname, keyblock ); + rc = import_one( fname, keyblock, fast, stats ); + else if( keyblock->pkt->pkttype == PKT_SECRET_KEY ) + rc = import_secret_one( fname, keyblock, stats ); else if( keyblock->pkt->pkttype == PKT_SIGNATURE && keyblock->pkt->pkt.signature->sig_class == 0x20 ) - rc = import_revoke_cert( fname, keyblock ); + rc = import_revoke_cert( fname, keyblock, stats ); else { log_info( _("skipping block of type %d\n"), keyblock->pkt->pkttype ); @@ -185,67 +209,70 @@ import( IOBUF inp, int fast, const char* fname ) release_kbnode(keyblock); if( rc ) break; - if( !(++stats.count % 100) && !opt.quiet ) - log_info(_("%lu keys so far processed\n"), stats.count ); + if( !(++stats->count % 100) && !opt.quiet ) + log_info(_("%lu keys so far processed\n"), stats->count ); } if( rc == -1 ) rc = 0; - else if( rc && rc != GPGERR_INV_KEYRING ) - log_error( _("error reading `%s': %s\n"), fname, gpg_errstr(rc)); + else if( rc && rc != G10ERR_INV_KEYRING ) + log_error( _("error reading `%s': %s\n"), fname, g10_errstr(rc)); return rc; } -static void -print_stats() +void +import_print_stats (void *hd) { + struct stats_s *stats = hd; + if( !opt.quiet ) { - log_info(_("Total number processed: %lu\n"), stats.count ); - if( stats.skipped_new_keys ) + log_info(_("Total number processed: %lu\n"), stats->count ); + if( stats->skipped_new_keys ) log_info(_(" skipped new keys: %lu\n"), - stats.skipped_new_keys ); - if( stats.no_user_id ) - log_info(_(" w/o user IDs: %lu\n"), stats.no_user_id ); - if( stats.imported || stats.imported_rsa ) { - log_info(_(" imported: %lu"), stats.imported ); - if( stats.imported_rsa ) - fprintf(stderr, " (RSA: %lu)", stats.imported_rsa ); + stats->skipped_new_keys ); + if( stats->no_user_id ) + log_info(_(" w/o user IDs: %lu\n"), stats->no_user_id ); + if( stats->imported || stats->imported_rsa ) { + log_info(_(" imported: %lu"), stats->imported ); + if( stats->imported_rsa ) + fprintf(stderr, " (RSA: %lu)", stats->imported_rsa ); putc('\n', stderr); } - if( stats.unchanged ) - log_info(_(" unchanged: %lu\n"), stats.unchanged ); - if( stats.n_uids ) - log_info(_(" new user IDs: %lu\n"), stats.n_uids ); - if( stats.n_subk ) - log_info(_(" new subkeys: %lu\n"), stats.n_subk ); - if( stats.n_sigs ) - log_info(_(" new signatures: %lu\n"), stats.n_sigs ); - if( stats.n_revoc ) - log_info(_(" new key revocations: %lu\n"), stats.n_revoc ); - if( stats.secret_read ) - log_info(_(" secret keys read: %lu\n"), stats.secret_read ); - if( stats.secret_imported ) - log_info(_(" secret keys imported: %lu\n"), stats.secret_imported ); - if( stats.secret_dups ) - log_info(_(" secret keys unchanged: %lu\n"), stats.secret_dups ); + if( stats->unchanged ) + log_info(_(" unchanged: %lu\n"), stats->unchanged ); + if( stats->n_uids ) + log_info(_(" new user IDs: %lu\n"), stats->n_uids ); + if( stats->n_subk ) + log_info(_(" new subkeys: %lu\n"), stats->n_subk ); + if( stats->n_sigs ) + log_info(_(" new signatures: %lu\n"), stats->n_sigs ); + if( stats->n_revoc ) + log_info(_(" new key revocations: %lu\n"), stats->n_revoc ); + if( stats->secret_read ) + log_info(_(" secret keys read: %lu\n"), stats->secret_read ); + if( stats->secret_imported ) + log_info(_(" secret keys imported: %lu\n"), stats->secret_imported ); + if( stats->secret_dups ) + log_info(_(" secret keys unchanged: %lu\n"), stats->secret_dups ); } if( is_status_enabled() ) { - char buf[12*20]; - sprintf(buf, "%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", - stats.count, - stats.no_user_id, - stats.imported, - stats.imported_rsa, - stats.unchanged, - stats.n_uids, - stats.n_subk, - stats.n_sigs, - stats.n_revoc, - stats.secret_read, - stats.secret_imported, - stats.secret_dups); + char buf[13*20]; + sprintf(buf, "%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", + stats->count, + stats->no_user_id, + stats->imported, + stats->imported_rsa, + stats->unchanged, + stats->n_uids, + stats->n_subk, + stats->n_sigs, + stats->n_revoc, + stats->secret_read, + stats->secret_imported, + stats->secret_dups, + stats->skipped_new_keys ); write_status_text( STATUS_IMPORT_RES, buf ); } } @@ -272,13 +299,13 @@ read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root ) } else in_cert = 0; - pkt = gcry_xmalloc( sizeof *pkt ); + pkt = m_alloc( sizeof *pkt ); init_packet(pkt); - while( (rc=parse_packet(a, pkt, NULL)) != -1 ) { + while( (rc=parse_packet(a, pkt)) != -1 ) { if( rc ) { /* ignore errors */ - if( rc != GPGERR_UNKNOWN_PACKET ) { - log_error("read_block: read error: %s\n", gpg_errstr(rc) ); - rc = GPGERR_INV_KEYRING; + if( rc != G10ERR_UNKNOWN_PACKET ) { + log_error("read_block: read error: %s\n", g10_errstr(rc) ); + rc = G10ERR_INV_KEYRING; goto ready; } free_packet( pkt ); @@ -300,11 +327,11 @@ read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root ) case PKT_COMPRESSED: if( pkt->pkt.compressed->algorithm < 1 || pkt->pkt.compressed->algorithm > 2 ) { - rc = GPGERR_COMPR_ALGO; + rc = G10ERR_COMPR_ALGO; goto ready; } { - compress_filter_context_t *cfx = gcry_xcalloc( 1, sizeof *cfx ); + compress_filter_context_t *cfx = m_alloc_clear( sizeof *cfx ); cfx->algo = pkt->pkt.compressed->algorithm; pkt->pkt.compressed->buf = NULL; iobuf_push_filter2( a, compress_filter, cfx, 1 ); @@ -313,6 +340,11 @@ read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root ) init_packet(pkt); break; + case PKT_RING_TRUST: + /* skip those packets */ + free_packet( pkt ); + init_packet(pkt); + break; case PKT_PUBLIC_KEY: case PKT_SECRET_KEY: @@ -328,7 +360,7 @@ read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root ) root = new_kbnode( pkt ); else add_kbnode( root, new_kbnode( pkt ) ); - pkt = gcry_xmalloc( sizeof *pkt ); + pkt = m_alloc( sizeof *pkt ); } init_packet(pkt); break; @@ -343,19 +375,125 @@ read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root ) else *ret_root = root; free_packet( pkt ); - gcry_free( pkt ); + m_free( pkt ); return rc; } +static void +remove_bad_stuff (KBNODE keyblock) +{ + KBNODE node; + + for (node=keyblock; node; node = node->next ) { + if( node->pkt->pkttype == PKT_SIGNATURE ) { + /* delete the subpackets we used to use for the + verification cache */ + delete_sig_subpkt (node->pkt->pkt.signature->unhashed, + SIGSUBPKT_PRIV_VERIFY_CACHE); + } + } +} + +/* Clean the subkeys on a pk so that they each have at most 1 binding + sig and at most 1 revocation sig. This works based solely on the + timestamps like the rest of gpg. If the standard does get + revocation targets, this may need to be revised. */ + +static int +clean_subkeys(KBNODE keyblock,u32 *keyid) +{ + int removed=0; + KBNODE node,sknode=keyblock; + + while((sknode=find_kbnode(sknode,PKT_PUBLIC_SUBKEY))) + { + KBNODE bsnode=NULL,rsnode=NULL; + u32 bsdate=0,rsdate=0; + + sknode=sknode->next; + + for(node=sknode;node;node=node->next) + { + if(node->pkt->pkttype==PKT_SIGNATURE) + { + PKT_signature *sig=node->pkt->pkt.signature; + + /* We're only interested in valid sigs */ + if(check_key_signature(keyblock,node,NULL)) + continue; + + if(IS_SUBKEY_SIG(sig) && bsdate<=sig->timestamp) + { + bsnode=node; + bsdate=sig->timestamp; + } + else if(IS_SUBKEY_REV(sig) && rsdate<=sig->timestamp) + { + rsnode=node; + rsdate=sig->timestamp; + } + /* If it's not a subkey sig or rev, then it shouldn't be + here so ignore it. */ + } + else + break; + } + + /* We now know the most recent binding sig and revocation sig + (if any). If the binding sig is more recent than the + revocation sig, strip everything but the binding sig. If the + revocation sig is more recent than the binding sig, strip + everything but the binding sig and the revocation sig. */ + + if(bsdate>=rsdate) + { + rsnode=NULL; + rsdate=0; + } + + for(node=sknode;node;node=node->next) + { + if(node->pkt->pkttype==PKT_SIGNATURE) + { + PKT_signature *sig=node->pkt->pkt.signature; + + if(IS_SUBKEY_SIG(sig) && node!=bsnode) + { + delete_kbnode(node); + removed++; + } + else if(IS_SUBKEY_REV(sig) && node!=rsnode) + { + delete_kbnode(node); + removed++; + } + } + else + break; + } + } + + if(removed) + { + log_info(_("key %08lX: removed multiple subkey binding\n"), + (ulong)keyid[1]); + commit_kbnode(&keyblock); + } + + return removed; +} + + /**************** * Try to import one keyblock. Return an error only in serious cases, but * never for an invalid keyblock. It uses log_error to increase the * internal errorcount, so that invalid input can be detected by programs - * which called gpg. + * which called g10. */ static int -import_one( const char *fname, KBNODE keyblock, int fast ) +import_one( const char *fname, KBNODE keyblock, int fast, + struct stats_s *stats ) { PKT_public_key *pk; PKT_public_key *pk_orig; @@ -395,8 +533,18 @@ import_one( const char *fname, KBNODE keyblock, int fast ) if( rc ) return rc== -1? 0:rc; + /* If we allow such a thing, mark unsigned uids as valid */ if( opt.allow_non_selfsigned_uid ) - mark_non_selfsigned_uids_valid( keyblock, keyid ); + for( node=keyblock; node; node = node->next ) + if( node->pkt->pkttype == PKT_USER_ID && !(node->flag & 1) ) + { + char *user=utf8_to_native(node->pkt->pkt.user_id->name, + node->pkt->pkt.user_id->len,0); + node->flag |= 1; + log_info( _("key %08lX: accepted non self-signed user ID '%s'\n"), + (ulong)keyid[1],user); + m_free(user); + } if( !delete_inv_parts( fname, keyblock, keyid ) ) { if( !opt.quiet ) { @@ -404,47 +552,63 @@ import_one( const char *fname, KBNODE keyblock, int fast ) (ulong)keyid[1]); log_info(_("this may be caused by a missing self-signature\n")); } - stats.no_user_id++; + stats->no_user_id++; return 0; } - /* do we have this key already in one of our pubrings ? */ - pk_orig = gcry_xcalloc( 1, sizeof *pk_orig ); + pk_orig = m_alloc_clear( sizeof *pk_orig ); rc = get_pubkey( pk_orig, keyid ); - if( rc && rc != GPGERR_NO_PUBKEY ) { + if( rc && rc != G10ERR_NO_PUBKEY && rc != G10ERR_UNU_PUBKEY ) { log_error( _("key %08lX: public key not found: %s\n"), - (ulong)keyid[1], gpg_errstr(rc)); + (ulong)keyid[1], g10_errstr(rc)); } else if ( rc && opt.merge_only ) { if( opt.verbose ) log_info( _("key %08lX: new key - skipped\n"), (ulong)keyid[1] ); rc = 0; fast = 1; /* so that we don't get into the trustdb update */ - stats.skipped_new_keys++; + stats->skipped_new_keys++; } else if( rc ) { /* insert this key */ -#if 0 /* we don't know wehre we are going to write */ + KEYDB_HANDLE hd = keydb_new (0); + + rc = keydb_locate_writable (hd, NULL); + if (rc) { + log_error (_("no writable keyring found: %s\n"), g10_errstr (rc)); + keydb_release (hd); + return G10ERR_GENERAL; + } if( opt.verbose > 1 ) - log_info( _("writing to `%s'\n"), - keyblock_resource_name(kbpos) ); -#endif - if( (rc=insert_keyblock( keyblock )) ) - log_error( _("error writing key: %s\n"), gpg_errstr(rc) ); - /* we are ready */ - if( !opt.quiet ) - log_info( _("key %08lX: public key imported\n"), (ulong)keyid[1]); + log_info (_("writing to `%s'\n"), keydb_get_resource_name (hd) ); + clean_subkeys(keyblock,keyid); + rc = keydb_insert_keyblock (hd, keyblock ); + if (rc) + log_error (_("error writing keyring `%s': %s\n"), + keydb_get_resource_name (hd), g10_errstr(rc)); + else + revalidation_mark (); + keydb_release (hd); + + /* we are ready */ + if( !opt.quiet ) { + char *p=get_user_id_native(keyid); + log_info( _("key %08lX: public key \"%s\" imported\n"), + (ulong)keyid[1],p); + m_free(p); + } if( is_status_enabled() ) { char *us = get_long_user_id_string( keyid ); write_status_text( STATUS_IMPORTED, us ); - gcry_free(us); + m_free(us); } - stats.imported++; + stats->imported++; if( is_RSA( pk->pubkey_algo ) ) - stats.imported_rsa++; + stats->imported_rsa++; new_key = 1; } else { /* merge */ + KEYDB_HANDLE hd; int n_uids, n_sigs, n_subk; /* Compare the original against the new key; just to be sure nothing @@ -452,15 +616,31 @@ import_one( const char *fname, KBNODE keyblock, int fast ) if( cmp_public_keys( pk_orig, pk ) ) { log_error( _("key %08lX: doesn't match our copy\n"), (ulong)keyid[1]); - rc = GPGERR_GENERAL; goto leave; } /* now read the original keyblock */ - rc = find_keyblock_bypk( &keyblock_orig, pk_orig ); + hd = keydb_new (0); + { + byte afp[MAX_FINGERPRINT_LEN]; + size_t an; + + fingerprint_from_pk (pk_orig, afp, &an); + while (an < MAX_FINGERPRINT_LEN) + afp[an++] = 0; + rc = keydb_search_fpr (hd, afp); + } if( rc ) { - log_error( _("key %08lX: can't locate original keyblock: %s\n"), - (ulong)keyid[1], gpg_errstr(rc)); + log_error (_("key %08lX: can't locate original keyblock: %s\n"), + (ulong)keyid[1], g10_errstr(rc)); + keydb_release (hd); + goto leave; + } + rc = keydb_get_keyblock (hd, &keyblock_orig ); + if (rc) { + log_error (_("key %08lX: can't read original keyblock: %s\n"), + (ulong)keyid[1], g10_errstr(rc)); + keydb_release (hd); goto leave; } @@ -471,73 +651,80 @@ import_one( const char *fname, KBNODE keyblock, int fast ) n_uids = n_sigs = n_subk = 0; rc = merge_blocks( fname, keyblock_orig, keyblock, keyid, &n_uids, &n_sigs, &n_subk ); - if( rc ) + if( rc ) { + keydb_release (hd); goto leave; + } if( n_uids || n_sigs || n_subk ) { mod_key = 1; /* keyblock_orig has been updated; write */ - if( (rc=update_keyblock( keyblock_orig )) ) - log_error( _("error writing key: %s\n"), gpg_errstr(rc) ); + n_sigs-=clean_subkeys(keyblock_orig,keyid); + rc = keydb_update_keyblock (hd, keyblock_orig); + if (rc) + log_error (_("error writing keyring `%s': %s\n"), + keydb_get_resource_name (hd), g10_errstr(rc) ); + else + revalidation_mark (); + /* we are ready */ if( !opt.quiet ) { + char *p=get_user_id_native(keyid); if( n_uids == 1 ) - log_info( _("key %08lX: 1 new user ID\n"), - (ulong)keyid[1]); + log_info( _("key %08lX: \"%s\" 1 new user ID\n"), + (ulong)keyid[1], p); else if( n_uids ) - log_info( _("key %08lX: %d new user IDs\n"), - (ulong)keyid[1], n_uids ); + log_info( _("key %08lX: \"%s\" %d new user IDs\n"), + (ulong)keyid[1], p, n_uids ); if( n_sigs == 1 ) - log_info( _("key %08lX: 1 new signature\n"), - (ulong)keyid[1]); + log_info( _("key %08lX: \"%s\" 1 new signature\n"), + (ulong)keyid[1], p); else if( n_sigs ) - log_info( _("key %08lX: %d new signatures\n"), - (ulong)keyid[1], n_sigs ); + log_info( _("key %08lX: \"%s\" %d new signatures\n"), + (ulong)keyid[1], p, n_sigs ); if( n_subk == 1 ) - log_info( _("key %08lX: 1 new subkey\n"), - (ulong)keyid[1]); + log_info( _("key %08lX: \"%s\" 1 new subkey\n"), + (ulong)keyid[1], p); else if( n_subk ) - log_info( _("key %08lX: %d new subkeys\n"), - (ulong)keyid[1], n_subk ); + log_info( _("key %08lX: \"%s\" %d new subkeys\n"), + (ulong)keyid[1], p, n_subk ); + m_free(p); } - stats.n_uids +=n_uids; - stats.n_sigs +=n_sigs; - stats.n_subk +=n_subk; + stats->n_uids +=n_uids; + stats->n_sigs +=n_sigs; + stats->n_subk +=n_subk; } else { - if( !opt.quiet ) - log_info( _("key %08lX: not changed\n"), (ulong)keyid[1] ); - stats.unchanged++; + if( !opt.quiet ) { + char *p=get_user_id_native(keyid); + log_info( _("key %08lX: \"%s\" not changed\n"), + (ulong)keyid[1],p); + m_free(p); + } + stats->unchanged++; } - } - if( !rc && !fast ) { - rc = query_trust_record( new_key? pk : pk_orig ); - if( rc && rc != -1 ) - log_error("trustdb error: %s\n", gpg_errstr(rc) ); - else if( rc == -1 ) { /* not found trustdb */ - rc = insert_trust_record( new_key? keyblock : keyblock_orig ); - if( rc ) - log_error("key %08lX: trustdb insert failed: %s\n", - (ulong)keyid[1], gpg_errstr(rc) ); - } - else if( mod_key ) - rc = update_trust_record( keyblock_orig, 1, NULL ); - else - rc = clear_trust_checked_flag( new_key? pk : pk_orig ); + keydb_release (hd); hd = NULL; } leave: release_kbnode( keyblock_orig ); free_public_key( pk_orig ); + + revocation_present(keyblock); + return rc; } /**************** * Ditto for secret keys. Handling is simpler than for public keys. + * We allow secret key importing only when allow is true, this is so + * that a secret key can not be imported accidently and thereby tampering + * with the trust calculation. */ static int -import_secret_one( const char *fname, KBNODE keyblock ) +import_secret_one( const char *fname, KBNODE keyblock, + struct stats_s *stats) { PKT_secret_key *sk; KBNODE node, uidnode; @@ -563,7 +750,8 @@ import_secret_one( const char *fname, KBNODE keyblock ) uidnode->pkt->pkt.user_id->len ); putc('\n', stderr); } - stats.secret_read++; + stats->secret_read++; + if( !uidnode ) { log_error( _("key %08lX: no user ID\n"), (ulong)keyid[1]); return 0; @@ -573,22 +761,34 @@ import_secret_one( const char *fname, KBNODE keyblock ) /* do we have this key already in one of our secrings ? */ rc = seckey_available( keyid ); - if( rc == GPGERR_NO_SECKEY && !opt.merge_only ) { /*just insert this key*/ - if( (rc=insert_keyblock( keyblock )) ) - log_error( _("error writing key: %s\n"), gpg_errstr(rc) ); + if( rc == G10ERR_NO_SECKEY && !opt.merge_only ) { /* simply insert this key */ + KEYDB_HANDLE hd = keydb_new (1); + + /* get default resource */ + rc = keydb_locate_writable (hd, NULL); + if (rc) { + log_error (_("no default secret keyring: %s\n"), g10_errstr (rc)); + keydb_release (hd); + return G10ERR_GENERAL; + } + rc = keydb_insert_keyblock (hd, keyblock ); + if (rc) + log_error (_("error writing keyring `%s': %s\n"), + keydb_get_resource_name (hd), g10_errstr(rc) ); + keydb_release (hd); /* we are ready */ if( !opt.quiet ) log_info( _("key %08lX: secret key imported\n"), (ulong)keyid[1]); - stats.secret_imported++; + stats->secret_imported++; } else if( !rc ) { /* we can't merge secret keys */ log_error( _("key %08lX: already in secret keyring\n"), (ulong)keyid[1]); - stats.secret_dups++; + stats->secret_dups++; } else log_error( _("key %08lX: secret key not found: %s\n"), - (ulong)keyid[1], gpg_errstr(rc)); + (ulong)keyid[1], g10_errstr(rc)); return rc; } @@ -598,10 +798,11 @@ import_secret_one( const char *fname, KBNODE keyblock ) * Import a revocation certificate; this is a single signature packet. */ static int -import_revoke_cert( const char *fname, KBNODE node ) +import_revoke_cert( const char *fname, KBNODE node, struct stats_s *stats ) { PKT_public_key *pk=NULL; KBNODE onode, keyblock = NULL; + KEYDB_HANDLE hd = NULL; u32 keyid[2]; int rc = 0; @@ -612,9 +813,9 @@ import_revoke_cert( const char *fname, KBNODE node ) keyid[0] = node->pkt->pkt.signature->keyid[0]; keyid[1] = node->pkt->pkt.signature->keyid[1]; - pk = gcry_xcalloc( 1, sizeof *pk ); + pk = m_alloc_clear( sizeof *pk ); rc = get_pubkey( pk, keyid ); - if( rc == GPGERR_NO_PUBKEY ) { + if( rc == G10ERR_NO_PUBKEY ) { log_info( _("key %08lX: no public key - " "can't apply revocation certificate\n"), (ulong)keyid[1]); rc = 0; @@ -622,15 +823,30 @@ import_revoke_cert( const char *fname, KBNODE node ) } else if( rc ) { log_error( _("key %08lX: public key not found: %s\n"), - (ulong)keyid[1], gpg_errstr(rc)); + (ulong)keyid[1], g10_errstr(rc)); goto leave; } /* read the original keyblock */ - rc = find_keyblock_bypk( &keyblock, pk ); - if( rc ) { - log_error( _("key %08lX: can't locate original keyblock: %s\n"), - (ulong)keyid[1], gpg_errstr(rc)); + hd = keydb_new (0); + { + byte afp[MAX_FINGERPRINT_LEN]; + size_t an; + + fingerprint_from_pk (pk, afp, &an); + while (an < MAX_FINGERPRINT_LEN) + afp[an++] = 0; + rc = keydb_search_fpr (hd, afp); + } + if (rc) { + log_error (_("key %08lX: can't locate original keyblock: %s\n"), + (ulong)keyid[1], g10_errstr(rc)); + goto leave; + } + rc = keydb_get_keyblock (hd, &keyblock ); + if (rc) { + log_error (_("key %08lX: can't read original keyblock: %s\n"), + (ulong)keyid[1], g10_errstr(rc)); goto leave; } @@ -641,7 +857,8 @@ import_revoke_cert( const char *fname, KBNODE node ) rc = check_key_signature( keyblock, node, NULL); if( rc ) { log_error( _("key %08lX: invalid revocation certificate" - ": %s - rejected\n"), (ulong)keyid[1], gpg_errstr(rc)); + ": %s - rejected\n"), (ulong)keyid[1], g10_errstr(rc)); + goto leave; } @@ -663,24 +880,23 @@ import_revoke_cert( const char *fname, KBNODE node ) insert_kbnode( keyblock, clone_kbnode(node), 0 ); /* and write the keyblock back */ - if( (rc=update_keyblock( keyblock )) ) - log_error( _("error writing key: %s\n"), gpg_errstr(rc) ); + rc = keydb_update_keyblock (hd, keyblock ); + if (rc) + log_error (_("error writing keyring `%s': %s\n"), + keydb_get_resource_name (hd), g10_errstr(rc) ); + keydb_release (hd); hd = NULL; /* we are ready */ - if( !opt.quiet ) - log_info( _("key %08lX: revocation certificate imported\n"), - (ulong)keyid[1]); - stats.n_revoc++; - if( clear_trust_checked_flag( pk ) ) { - /* seems that we have to insert the record first */ - rc = insert_trust_record( keyblock ); - if( rc ) - log_error("key %08lX: trustdb insert failed: %s\n", - (ulong)keyid[1], gpg_errstr(rc) ); - else - rc = clear_trust_checked_flag( pk ); + if( !opt.quiet ) { + char *p=get_user_id_native(keyid); + log_info( _("key %08lX: \"%s\" revocation certificate imported\n"), + (ulong)keyid[1],p); + m_free(p); } + stats->n_revoc++; + revalidation_mark (); leave: + keydb_release (hd); release_kbnode( keyblock ); free_public_key( pk ); return rc; @@ -713,16 +929,25 @@ chk_self_sigs( const char *fname, KBNODE keyblock, (ulong)keyid[1]); return -1; /* the complete keyblock is invalid */ } - rc = check_key_signature( keyblock, n, NULL); - if( rc ) { - log_info( rc == GPGERR_PUBKEY_ALGO ? - _("key %08lX: unsupported public key algorithm\n"): - _("key %08lX: invalid self-signature\n"), - (ulong)keyid[1]); - unode->flag |= 2; /* mark as invalid */ + /* If it hasn't been marked valid yet, keep trying */ + if(!(unode->flag&1)) { + rc = check_key_signature( keyblock, n, NULL); + if( rc ) + { + char *p=utf8_to_native(unode->pkt->pkt.user_id->name, + strlen(unode->pkt->pkt.user_id->name),0); + log_info( rc == G10ERR_PUBKEY_ALGO ? + _("key %08lX: unsupported public key " + "algorithm on user id \"%s\"\n"): + _("key %08lX: invalid self-signature " + "on user id \"%s\"\n"), + (ulong)keyid[1],p); + m_free(p); + } + else + unode->flag |= 1; /* mark that signature checked */ } - unode->flag |= 1; /* mark that signature checked */ } else if( sig->sig_class == 0x18 ) { KBNODE knode = find_prev_kbnode( keyblock, @@ -737,16 +962,17 @@ chk_self_sigs( const char *fname, KBNODE keyblock, n->flag |= 4; /* delete this */ } else { + /* If it hasn't been marked valid yet, keep trying */ + if(!(knode->flag&1)) { rc = check_key_signature( keyblock, n, NULL); - if( rc ) { - log_info( rc == GPGERR_PUBKEY_ALGO ? + if( rc ) + log_info( rc == G10ERR_PUBKEY_ALGO ? _("key %08lX: unsupported public key algorithm\n"): _("key %08lX: invalid subkey binding\n"), (ulong)keyid[1]); - - knode->flag |= 2; /* mark as invalid */ - } - knode->flag |= 1; /* mark that signature checked */ + else + knode->flag |= 1; /* mark that signature checked */ + } } } } @@ -754,30 +980,6 @@ chk_self_sigs( const char *fname, KBNODE keyblock, return 0; } - - -/**************** - * If a user ID has at least one signature, mark it as valid - */ -static void -mark_non_selfsigned_uids_valid( KBNODE keyblock, u32 *kid ) -{ - KBNODE node; - for(node=keyblock->next; node; node = node->next ) { - if( node->pkt->pkttype == PKT_USER_ID && !(node->flag & 1) ) { - if( (node->next && node->next->pkt->pkttype == PKT_SIGNATURE) - || !node->next ) { - node->flag |= 1; - log_info( _("key %08lX: accepted non self-signed user ID '"), - (ulong)kid[1]); - print_string( log_stream(), node->pkt->pkt.user_id->name, - node->pkt->pkt.user_id->len, 0 ); - fputs("'\n", log_stream() ); - } - } - } -} - /**************** * delete all parts which are invalid and those signatures whose * public key algorithm is not available in this implemenation; @@ -790,7 +992,6 @@ delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid ) { KBNODE node; int nvalid=0, uid_seen=0; - const char *p; for(node=keyblock->next; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { @@ -833,14 +1034,12 @@ delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid ) } } else if( node->pkt->pkttype == PKT_SIGNATURE - && openpgp_pk_test_algo( node->pkt->pkt.signature->pubkey_algo, 0 ) - && node->pkt->pkt.signature->pubkey_algo != GCRY_PK_RSA ) + && check_pubkey_algo( node->pkt->pkt.signature->pubkey_algo) + && node->pkt->pkt.signature->pubkey_algo != PUBKEY_ALGO_RSA ) delete_kbnode( node ); /* build_packet() can't handle this */ - else if( node->pkt->pkttype == PKT_SIGNATURE - && (p = parse_sig_subpkt2( node->pkt->pkt.signature, - SIGSUBPKT_EXPORTABLE, NULL )) - && !*p - && seckey_available( node->pkt->pkt.signature->keyid ) ) { + else if( node->pkt->pkttype == PKT_SIGNATURE && + !node->pkt->pkt.signature->flags.exportable && + seckey_available( node->pkt->pkt.signature->keyid ) ) { /* here we violate the rfc a bit by still allowing * to import non-exportable signature when we have the * the secret key used to create this signature - it @@ -860,12 +1059,22 @@ delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid ) delete_kbnode( node ); } else { - int rc = check_key_signature( keyblock, node, NULL); - if( rc ) { - log_error( _("key %08lX: invalid revocation " - "certificate: %s - skipped\n"), - (ulong)keyid[1], gpg_errstr(rc)); - delete_kbnode( node ); + /* If the revocation cert is from a different key than + the one we're working on don't check it - it's + probably from a revocation key and won't be + verifiable with this key anyway. */ + + if(node->pkt->pkt.signature->keyid[0]==keyid[0] && + node->pkt->pkt.signature->keyid[1]==keyid[1]) + { + int rc = check_key_signature( keyblock, node, NULL); + if( rc ) + { + log_error( _("key %08lX: invalid revocation " + "certificate: %s - skipped\n"), + (ulong)keyid[1], g10_errstr(rc)); + delete_kbnode( node ); + } } } } @@ -968,7 +1177,84 @@ collapse_uids( KBNODE *keyblock ) return 1; } +/* Check for a 0x20 revocation from a revocation key that is not + present. This gets called without the benefit of merge_xxxx so you + can't rely on pk->revkey and friends. */ +static void +revocation_present(KBNODE keyblock) +{ + KBNODE onode,inode; + PKT_public_key *pk=keyblock->pkt->pkt.public_key; + for(onode=keyblock->next;onode;onode=onode->next) + { + /* If we reach user IDs, we're done. */ + if(onode->pkt->pkttype==PKT_USER_ID) + break; + + if(onode->pkt->pkttype==PKT_SIGNATURE && + onode->pkt->pkt.signature->sig_class==0x1F && + onode->pkt->pkt.signature->revkey) + { + int idx; + PKT_signature *sig=onode->pkt->pkt.signature; + + for(idx=0;idxnumrevkeys;idx++) + { + u32 keyid[2]; + + keyid_from_fingerprint(sig->revkey[idx]->fpr, + MAX_FINGERPRINT_LEN,keyid); + + for(inode=keyblock->next;inode;inode=inode->next) + { + /* If we reach user IDs, we're done. */ + if(inode->pkt->pkttype==PKT_USER_ID) + break; + + if(inode->pkt->pkttype==PKT_SIGNATURE && + inode->pkt->pkt.signature->sig_class==0x20 && + inode->pkt->pkt.signature->keyid[0]==keyid[0] && + inode->pkt->pkt.signature->keyid[1]==keyid[1]) + { + /* Okay, we have a revocation key, and a + revocation issued by it. Do we have the key + itself? */ + int rc; + + rc=get_pubkey_byfprint(NULL,sig->revkey[idx]->fpr, + MAX_FINGERPRINT_LEN); + if(rc==G10ERR_NO_PUBKEY || rc==G10ERR_UNU_PUBKEY) + { + /* No, so try and get it */ + if(opt.keyserver_scheme && + opt.keyserver_options.auto_key_retrieve) + { + log_info(_("Warning: key %08lX may be revoked: " + "fetching revocation key %08lX\n"), + (ulong)keyid_from_pk(pk,NULL), + (ulong)keyid[1]); + keyserver_import_fprint(sig->revkey[idx]->fpr, + MAX_FINGERPRINT_LEN); + + /* Do we have it now? */ + rc=get_pubkey_byfprint(NULL, + sig->revkey[idx]->fpr, + MAX_FINGERPRINT_LEN); + } + + if(rc==G10ERR_NO_PUBKEY || rc==G10ERR_UNU_PUBKEY) + log_info(_("Warning: key %08lX may be revoked: " + "revocation key %08lX not present.\n"), + (ulong)keyid_from_pk(pk,NULL), + (ulong)keyid[1]); + } + } + } + } + } + } +} /**************** * compare and merge the blocks @@ -1010,16 +1296,49 @@ merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock, } } if( !found ) { + char *p=get_user_id_native(keyid); KBNODE n2 = clone_kbnode(node); insert_kbnode( keyblock_orig, n2, 0 ); n2->flag |= 1; - log_info( _("key %08lX: revocation certificate added\n"), + ++*n_sigs; + log_info(_("key %08lX: \"%s\" revocation certificate added\n"), + (ulong)keyid[1],p); + m_free(p); + } + } + } + + /* 2nd: merge in any direct key (0x1F) sigs */ + for(node=keyblock->next; node; node=node->next ) { + if( node->pkt->pkttype == PKT_USER_ID ) + break; + else if( node->pkt->pkttype == PKT_SIGNATURE + && node->pkt->pkt.signature->sig_class == 0x1F ) { + /* check whether we already have this */ + found = 0; + for(onode=keyblock_orig->next; onode; onode=onode->next ) { + if( onode->pkt->pkttype == PKT_USER_ID ) + break; + else if( onode->pkt->pkttype == PKT_SIGNATURE + && onode->pkt->pkt.signature->sig_class == 0x1F + && !cmp_signatures(onode->pkt->pkt.signature, + node->pkt->pkt.signature)) { + found = 1; + break; + } + } + if( !found ) { + KBNODE n2 = clone_kbnode(node); + insert_kbnode( keyblock_orig, n2, 0 ); + n2->flag |= 1; + ++*n_sigs; + log_info( _("key %08lX: direct key signature added\n"), (ulong)keyid[1]); } } } - /* 2nd: try to merge new certificates in */ + /* 3rd: try to merge new certificates in */ for(onode=keyblock_orig->next; onode; onode=onode->next ) { if( !(onode->flag & 1) && onode->pkt->pkttype == PKT_USER_ID) { /* find the user id in the imported keyblock */ @@ -1036,7 +1355,7 @@ merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock, } } - /* 3rd: add new user-ids */ + /* 4th: add new user-ids */ for(node=keyblock->next; node; node=node->next ) { if( node->pkt->pkttype == PKT_USER_ID) { /* do we have this in the original keyblock */ @@ -1054,7 +1373,7 @@ merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock, } } - /* add new subkeys */ + /* 5th: add new subkeys */ for(node=keyblock->next; node; node=node->next ) { onode = NULL; if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { @@ -1087,7 +1406,7 @@ merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock, } } - /* merge subkey certificates */ + /* 6th: merge subkey certificates */ for(onode=keyblock_orig->next; onode; onode=onode->next ) { if( !(onode->flag & 1) && ( onode->pkt->pkttype == PKT_PUBLIC_SUBKEY @@ -1126,11 +1445,6 @@ append_uid( KBNODE keyblock, KBNODE node, int *n_sigs, KBNODE n, n_where=NULL; assert(node->pkt->pkttype == PKT_USER_ID ); - if( !node->next || node->next->pkt->pkttype == PKT_USER_ID ) { - log_error( _("key %08lX: our copy has no self-signature\n"), - (ulong)keyid[1]); - return GPGERR_GENERAL; - } /* find the position */ for( n = keyblock; n; n_where = n, n = n->next ) { @@ -1179,12 +1493,6 @@ merge_sigs( KBNODE dst, KBNODE src, int *n_sigs, assert(dst->pkt->pkttype == PKT_USER_ID ); assert(src->pkt->pkttype == PKT_USER_ID ); - if( !dst->next || dst->next->pkt->pkttype == PKT_USER_ID ) { - log_error( _("key %08lX: our copy has no self-signature\n"), - (ulong)keyid[1]); - return 0; - } - for(n=src->next; n && n->pkt->pkttype != PKT_USER_ID; n = n->next ) { if( n->pkt->pkttype != PKT_SIGNATURE ) @@ -1304,4 +1612,3 @@ append_key( KBNODE keyblock, KBNODE node, int *n_sigs, return 0; } - diff --git a/g10/kbnode.c b/g10/kbnode.c index 2c1e2ad3c..06d28f844 100644 --- a/g10/kbnode.c +++ b/g10/kbnode.c @@ -1,5 +1,5 @@ /* kbnode.c - keyblock node utility functions - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -23,9 +23,8 @@ #include #include #include - -#include #include "util.h" +#include "memory.h" #include "packet.h" #include "keydb.h" @@ -42,7 +41,7 @@ alloc_node(void) if( n ) unused_nodes = n->next; else - n = gcry_xmalloc( sizeof *n ); + n = m_alloc( sizeof *n ); n->next = NULL; n->pkt = NULL; n->flag = 0; @@ -59,7 +58,7 @@ free_node( KBNODE n ) n->next = unused_nodes; unused_nodes = n; #else - gcry_free( n ); + m_free( n ); #endif } } @@ -95,7 +94,7 @@ release_kbnode( KBNODE n ) n2 = n->next; if( !is_cloned_kbnode(n) ) { free_packet( n->pkt ); - gcry_free( n->pkt ); + m_free( n->pkt ); } free_node( n ); n = n2; @@ -165,9 +164,10 @@ find_prev_kbnode( KBNODE root, KBNODE node, int pkttype ) { KBNODE n1; - for(n1=NULL ; root && root != node; root = root->next ) - if( !pkttype || root->pkt->pkttype == pkttype ) - n1 = root; + for (n1=NULL; root && root != node; root = root->next ) { + if (!pkttype ||root->pkt->pkttype == pkttype) + n1 = root; + } return n1; } @@ -185,7 +185,7 @@ find_next_kbnode( KBNODE node, int pkttype ) for( node=node->next ; node; node = node->next ) { if( !pkttype ) return node; - else if( pkttype == PKT_USER_ID + else if( pkttype == PKT_USER_ID && ( node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_SECRET_KEY ) ) return NULL; @@ -267,7 +267,7 @@ commit_kbnode( KBNODE *root ) nl->next = n->next; if( !is_cloned_kbnode(n) ) { free_packet( n->pkt ); - gcry_free( n->pkt ); + m_free( n->pkt ); } free_node( n ); changed = 1; @@ -291,7 +291,7 @@ remove_kbnode( KBNODE *root, KBNODE node ) nl->next = n->next; if( !is_cloned_kbnode(n) ) { free_packet( n->pkt ); - gcry_free( n->pkt ); + m_free( n->pkt ); } free_node( n ); } @@ -356,28 +356,44 @@ dump_kbnode( KBNODE node ) case PKT_PLAINTEXT: s="plaintext"; break; case PKT_COMPRESSED: s="compressed"; break; case PKT_ENCRYPTED: s="encrypted"; break; + case PKT_GPG_CONTROL: s="gpg-control"; break; default: s="unknown"; break; } fprintf(stderr, "node %p %02x/%02x type=%s", node, node->flag, node->private_flag, s); if( node->pkt->pkttype == PKT_USER_ID ) { + PKT_user_id *uid = node->pkt->pkt.user_id; fputs(" \"", stderr); - print_string( stderr, node->pkt->pkt.user_id->name, - node->pkt->pkt.user_id->len, 0 ); - fputs("\"\n", stderr); + print_string( stderr, uid->name, uid->len, 0 ); + fprintf (stderr, "\" %c%c%c%c\n", + uid->is_expired? 'e':'.', + uid->is_revoked? 'r':'.', + uid->created? 'v':'.', + uid->is_primary? 'p':'.' ); } else if( node->pkt->pkttype == PKT_SIGNATURE ) { - fprintf(stderr, " class=%02x keyid=%08lX\n", + fprintf(stderr, " class=%02x keyid=%08lX ts=%lu\n", node->pkt->pkt.signature->sig_class, - (ulong)node->pkt->pkt.signature->keyid[1] ); + (ulong)node->pkt->pkt.signature->keyid[1], + (ulong)node->pkt->pkt.signature->timestamp); + } + else if( node->pkt->pkttype == PKT_GPG_CONTROL ) { + fprintf(stderr, " ctrl=%d len=%u\n", + node->pkt->pkt.gpg_control->control, + (unsigned int)node->pkt->pkt.gpg_control->datalen); } else if( node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { - fprintf(stderr, " keyid=%08lX\n", (ulong) - keyid_from_pk( node->pkt->pkt.public_key, NULL )); + PKT_public_key *pk = node->pkt->pkt.public_key; + fprintf(stderr, " keyid=%08lX a=%d u=%d %c%c%c%c\n", + (ulong)keyid_from_pk( pk, NULL ), + pk->pubkey_algo, pk->pubkey_usage, + pk->has_expired? 'e':'.', + pk->is_revoked? 'r':'.', + pk->is_valid? 'v':'.', + pk->mdc_feature? 'm':'.'); } else fputs("\n", stderr); } } - diff --git a/g10/kbx.h b/g10/kbx.h deleted file mode 100644 index 25825a4ec..000000000 --- a/g10/kbx.h +++ /dev/null @@ -1,51 +0,0 @@ -/* kbx.h - The GnuPG Keybox - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This file is part of GnuPG. - * - * GnuPG is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GnuPG is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - -#ifndef GPG_KBX_H -#define GPG_KBX_H 1 - -#include "keydb.h" - -/*-- kbxblob.c */ -struct kbxblob; -typedef struct kbxblob *KBXBLOB; - -int kbx_new_blob ( KBXBLOB *r_blob, char *image, size_t imagelen ); -int kbx_create_blob ( KBXBLOB *r_blob, KBNODE keyblock ); -void kbx_release_blob ( KBXBLOB blob ); -const char *kbx_get_blob_image ( KBXBLOB blob, size_t *n ); - -int kbx_dump_blob ( FILE *fp, KBXBLOB blob ); -int kbx_blob_has_fpr ( KBXBLOB blob, const byte *fpr ); -int kbx_blob_has_kid ( KBXBLOB blob, const byte *keyidbuf, size_t keyidlen ); -int kbx_blob_has_uid ( KBXBLOB blob, - int (*cmp)(const byte *, size_t, void *), void *opaque ); - -/*-- kbxio.c --*/ -int kbx_read_blob ( KBXBLOB *r_blob, FILE *a ); - -/*-- kbxfile.c --*/ -int kbxfile_search_by_fpr( const char *filename, const byte *fpr ); -int kbxfile_search_by_kid ( const char *filename, u32 *kid, int mode ); -int kbxfile_search_by_uid ( const char *filename, const char *name ); -void print_kbxfile( const char *filename ); - - -#endif /*GPG_KBX_H*/ diff --git a/g10/kbxblob.c b/g10/kbxblob.c deleted file mode 100644 index 01d0dfe10..000000000 --- a/g10/kbxblob.c +++ /dev/null @@ -1,895 +0,0 @@ -/* kbxblob.c - KBX Blob handling - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This file is part of GnuPG. - * - * GnuPG is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GnuPG is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - - -/* The keybox data formats - -The KeyBox uses an augmented OpenPGP key format. This makes random -access to a keyblock easier and also gives the opportunity to store -additional information (e.g. the fingerprint) along with the key. -All integers are stored in network byte order, offsets are counted from -the beginning of the Blob. - -The first record of a plain KBX file has a special format: - - u32 length of the first record - byte Blob type (1) - byte version number (1) - byte reserved - byte reserved - u32 magic 'KBXf' - byte marginals used for validity calculation of this file - byte completes ditto. - byte cert_depth ditto. - -The standard KBX Blob looks like this: - - u32 length of this blob (including these 4 bytes) - byte Blob type (2) - byte version number of this blob type (1) - u16 Blob flags - bit 0 = contains secret key material - - u32 offset to the OpenPGP keyblock - u32 length of the keyblock - u16 number of keys (at least 1!) - u16 size of additional key information - n times: - b20 The keys fingerprint - (fingerprints are always 20 bytes, MD5 left padded with zeroes) - u32 offset to the n-th key's keyID (a keyID is always 8 byte) - u16 special key flags - bit 0 = - u16 reserved - u16 number of user IDs - u16 size of additional user ID information - n times: - u32 offset to the n-th user ID - u32 length of this user ID. - u16 special user ID flags. - bit 0 = - byte validity - byte reserved - u16 number of signatures - u16 size of signature information (4) - u32 expiration time of signature with some special values: - 0x00000000 = not checked - 0x00000001 = missing key - 0x00000002 = bad signature - 0x10000000 = valid and expires at some date in 1978. - 0xffffffff = valid and does not expire - u8 assigned ownertrust - u8 all_validity - u16 reserved - u32 recheck_after - u32 Newest timestamp in the keyblock (useful for KS syncronsiation?) - u32 Blob created at - u32 size of reserved space (not including this field) - reserved space - - Here we might want to put other data - - Here comes the keyblock - - maybe we put a signature here later. - - b16 MD5 checksum (useful for KS syncronisation) - * - */ - - -#include -#include -#include -#include -#include -#include -#include - -#include "iobuf.h" -#include "util.h" -#include "kbx.h" - -/* special values of the signature status */ -#define SF_NONE(a) ( !(a) ) -#define SF_NOKEY(a) ((a) & (1<<0)) -#define SF_BAD(a) ((a) & (1<<1)) -#define SF_VALID(a) ((a) & (1<<29)) - -#if MAX_FINGERPRINT_LEN < 20 - #error fingerprints are 20 bytes -#endif - -struct kbxblob_key { - char fpr[20]; - u32 off_kid; - ulong off_kid_addr; - u16 flags; -}; -struct kbxblob_uid { - ulong off_addr; - u32 len; - u16 flags; - byte validity; -}; - -struct keyid_list { - struct keyid_list *next; - int seqno; - byte kid[8]; -}; - -struct fixup_list { - struct fixup_list *next; - u32 off; - u32 val; -}; - - -struct kbxblob { - byte *blob; - size_t bloblen; - - /* stuff used only by kbx_create_blob */ - int nkeys; - struct kbxblob_key *keys; - int nuids; - struct kbxblob_uid *uids; - int nsigs; - u32 *sigs; - struct fixup_list *fixups; - - struct keyid_list *temp_kids; - IOBUF buf; /* the KBX is temporarly stored here */ -}; - -void kbx_release_blob ( KBXBLOB blob ); - -/* Note: this functions are only used for temportay iobufs and therefore - * they can't fail */ -static void -put8 ( IOBUF out, byte a ) -{ - iobuf_put ( out, a ); -} - -static void -put16 ( IOBUF out, u16 a ) -{ - iobuf_put ( out, a>>8 ); - iobuf_put ( out, a ); -} - -static void -put32 ( IOBUF out, u32 a ) -{ - iobuf_put (out, a>> 24); - iobuf_put (out, a>> 16); - iobuf_put (out, a>> 8); - iobuf_put (out, a ); -} - -static void -putn ( IOBUF out, const byte *p, size_t n ) -{ - for ( ; n; p++, n-- ) { - iobuf_put ( out, *p ); - } -} - - -/**************** - * We must store the keyid at some place because we can't calculate the - * offset yet. This is only used for v3 keyIDs. Function returns an index - * value for later fixupd; this must be a non-zero value - */ -static int -temp_store_kid ( KBXBLOB blob, PKT_public_key *pk ) -{ - struct keyid_list *k, *r; - - k = gcry_xmalloc ( sizeof *k ); - k->kid[0] = pk->keyid[0] >> 24 ; - k->kid[1] = pk->keyid[0] >> 16 ; - k->kid[2] = pk->keyid[0] >> 8 ; - k->kid[3] = pk->keyid[0] ; - k->kid[4] = pk->keyid[0] >> 24 ; - k->kid[5] = pk->keyid[0] >> 16 ; - k->kid[6] = pk->keyid[0] >> 8 ; - k->kid[7] = pk->keyid[0] ; - k->seqno = 0; - k->next = blob->temp_kids; - blob->temp_kids = k; - for ( r=k; r; r = r->next ) { - k->seqno++; - } - - return k->seqno; -} - -static void -put_stored_kid( KBXBLOB blob, int seqno ) -{ - struct keyid_list *r; - - for ( r = blob->temp_kids; r; r = r->next ) { - if( r->seqno == seqno ) { - putn ( blob->buf, r->kid, 8 ); - return; - } - } - BUG(); -} - -static void -release_kid_list ( struct keyid_list *kl ) -{ - struct keyid_list *r, *r2; - - for ( r = kl; r; r = r2 ) { - r2 = r->next; - gcry_free( r ); - } -} - - -static int -create_key_part( KBXBLOB blob, KBNODE keyblock ) -{ - KBNODE node; - size_t fprlen; - int n; - - for ( n=0, node = keyblock; node; node = node->next ) { - if ( node->pkt->pkttype == PKT_PUBLIC_KEY - || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { - PKT_public_key *pk = node->pkt->pkt.public_key; - char tmp[20]; - - fingerprint_from_pk( pk, tmp , &fprlen ); - memcpy(blob->keys[n].fpr,tmp,20); - if ( fprlen != 20 ) { /*v3 fpr - shift right and fill with zeroes*/ - assert( fprlen == 16 ); - memmove( blob->keys[n].fpr+4, blob->keys[n].fpr, 16); - memset( blob->keys[n].fpr, 0, 4 ); - blob->keys[n].off_kid = temp_store_kid( blob, pk ); - } - else { - blob->keys[n].off_kid = 0; /* will be fixed up later */ - } - blob->keys[n].flags = 0; - n++; - } - else if ( node->pkt->pkttype == PKT_SECRET_KEY - || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { - BUG(); /* not yet implemented */ - } - } - assert( n == blob->nkeys ); - return 0; -} - -static int -create_uid_part( KBXBLOB blob, KBNODE keyblock ) -{ - KBNODE node; - int n; - - for ( n=0, node = keyblock; node; node = node->next ) { - if ( node->pkt->pkttype == PKT_USER_ID ) { - PKT_user_id *u = node->pkt->pkt.user_id; - - blob->uids[n].len = u->len; - blob->uids[n].flags = 0; - blob->uids[n].validity = 0; - n++; - } - } - assert( n == blob->nuids ); - return 0; -} - -static int -create_sig_part( KBXBLOB blob, KBNODE keyblock ) -{ - KBNODE node; - int n; - - for ( n=0, node = keyblock; node; node = node->next ) { - if ( node->pkt->pkttype == PKT_SIGNATURE ) { - PKT_signature *sig = node->pkt->pkt.signature; - - blob->sigs[n] = 0; /* FIXME: check the signature here */ - n++; - } - } - assert( n == blob->nsigs ); - return 0; -} - - -static int -create_blob_header( KBXBLOB blob ) -{ - IOBUF a = blob->buf; - int i; - - put32 ( a, 0 ); /* blob length, needs fixup */ - put8 ( a, 2 ); /* blob type */ - put8 ( a, 1 ); /* blob type version */ - put16 ( a, 0 ); /* blob flags */ - - put32 ( a, 0 ); /* offset to the keyblock, needs fixup */ - put32 ( a, 0 ); /* length of the keyblock, needs fixup */ - - put16 ( a, blob->nkeys ); - put16 ( a, 20 + 4 + 2 + 2 ); /* size of key info */ - for ( i=0; i < blob->nkeys; i++ ) { - putn ( a, blob->keys[i].fpr, 20 ); - blob->keys[i].off_kid_addr = iobuf_get_temp_length (a); - put32 ( a, 0 ); /* offset to keyid, fixed up later */ - put16 ( a, blob->keys[i].flags ); - put16 ( a, 0 ); /* reserved */ - } - - put16 ( a, blob->nuids ); - put16 ( a, 4 + 4 + 2 + 1 + 1 ); /* size of uid info */ - for ( i=0; i < blob->nuids; i++ ) { - blob->uids[i].off_addr = iobuf_get_temp_length ( a ); - put32 ( a, 0 ); /* offset to userid, fixed up later */ - put32 ( a, blob->uids[i].len ); - put16 ( a, blob->uids[i].flags ); - put8 ( a, 0 ); /* validity */ - put8 ( a, 0 ); /* reserved */ - } - - put16 ( a, blob->nsigs ); - put16 ( a, 4 ); /* size of sig info */ - for ( i=0; i < blob->nsigs; i++ ) { - put32 ( a, blob->sigs[i] ); - } - - put8 ( a, 0 ); /* assigned ownertrust */ - put8 ( a, 0 ); /* validity of all user IDs */ - put16 ( a, 0 ); /* reserved */ - put32 ( a, 0 ); /* time of next recheck */ - put32 ( a, 0 ); /* newest timestamp (none) */ - put32 ( a, make_timestamp() ); /* creation time */ - put32 ( a, 0 ); /* size of reserved space */ - /* reserved space (which is currently of size 0) */ - - /* We need to store the keyids for all v3 keys because those key IDs are - * not part of the fingerprint. While we are doing that, we fixup all - * the keyID offsets */ - for ( i=0; i < blob->nkeys; i++ ) { - struct fixup_list *fl = gcry_xcalloc(1, sizeof *fl ); - fl->off = blob->keys[i].off_kid_addr; - fl->next = blob->fixups; - blob->fixups = fl; - - if ( blob->keys[i].off_kid ) { /* this is a v3 one */ - fl->val = iobuf_get_temp_length (a); - put_stored_kid ( blob, blob->keys[i].off_kid ); - } - else { /* the better v4 key IDs - just store an offset 8 bytes back */ - fl->val = blob->keys[i].off_kid_addr-8; - } - } - - - return 0; -} - -static int -create_blob_keyblock( KBXBLOB blob, KBNODE keyblock ) -{ - IOBUF a = blob->buf; - KBNODE node; - int rc; - int n; - u32 kbstart = iobuf_get_temp_length ( a ); - - { - struct fixup_list *fl = gcry_xcalloc(1, sizeof *fl ); - fl->off = 8; - fl->val = kbstart; - fl->next = blob->fixups; - blob->fixups = fl; - } - for ( n = 0, node = keyblock; node; node = node->next ) { - rc = build_packet ( a, node->pkt ); - if ( rc ) { - gpg_log_error("build_packet(%d) for kbxblob failed: %s\n", - node->pkt->pkttype, gpg_errstr(rc) ); - return GPGERR_WRITE_FILE; - } - if ( node->pkt->pkttype == PKT_USER_ID ) { - PKT_user_id *u = node->pkt->pkt.user_id; - /* build_packet has set the offset of the name into u ; - * now we can do the fixup */ - struct fixup_list *fl = gcry_xcalloc(1, sizeof *fl ); - fl->off = blob->uids[n].off_addr; - fl->val = u->stored_at; - fl->next = blob->fixups; - blob->fixups = fl; - n++; - } - } - assert( n == blob->nuids ); - { - struct fixup_list *fl = gcry_xcalloc(1, sizeof *fl ); - fl->off = 12; - fl->val = iobuf_get_temp_length (a) - kbstart; - fl->next = blob->fixups; - blob->fixups = fl; - } - return 0; -} - -static int -create_blob_trailer( KBXBLOB blob ) -{ - IOBUF a = blob->buf; - return 0; -} - -static int -create_blob_finish( KBXBLOB blob ) -{ - IOBUF a = blob->buf; - byte *p; - char *pp; - int i; - size_t n; - - /* write a placeholder for the checksum */ - for ( i = 0; i < 16; i++ ) - put32( a, 0 ); - /* get the memory area */ - iobuf_flush_temp ( a ); - p = iobuf_get_temp_buffer ( a ); - n = iobuf_get_temp_length ( a ); - assert( n >= 20 ); - - /* fixup the length */ - { - struct fixup_list *fl = gcry_xcalloc(1, sizeof *fl ); - fl->off = 0; - fl->val = n; - fl->next = blob->fixups; - blob->fixups = fl; - } - /* do the fixups */ - { - struct fixup_list *fl; - for ( fl = blob->fixups; fl; fl = fl->next ) { - assert( fl->off+4 <= n ); - p[fl->off+0] = fl->val >> 24 ; - p[fl->off+1] = fl->val >> 16 ; - p[fl->off+2] = fl->val >> 8 ; - p[fl->off+3] = fl->val ; - } - - } - - /* calculate and store the MD5 checksum */ - gcry_md_hash_buffer( GCRY_MD_MD5, p + n - 16, p, n - 16 ); - - pp = gcry_malloc ( n ); - if ( !pp ) - return GCRYERR_NO_MEM; - memcpy ( pp , p, n ); - blob->blob = pp; - blob->bloblen = n; - - return 0; -} - - -int -kbx_create_blob ( KBXBLOB *r_blob, KBNODE keyblock ) -{ - int rc = 0; - KBNODE node; - KBXBLOB blob; - - *r_blob = NULL; - blob = gcry_xcalloc (1, sizeof *blob ); - if( !blob ) - return GCRYERR_NO_MEM; - - /* fixme: Do some sanity checks on the keyblock */ - - /* count userids and keys so that we can allocate the arrays */ - for ( node = keyblock; node; node = node->next ) { - switch ( node->pkt->pkttype ) { - case PKT_PUBLIC_KEY: - case PKT_SECRET_KEY: - case PKT_PUBLIC_SUBKEY: - case PKT_SECRET_SUBKEY: blob->nkeys++; break; - case PKT_USER_ID: blob->nuids++; break; - case PKT_SIGNATURE: blob->nsigs++; break; - default: break; - } - } - blob->keys = gcry_xcalloc ( blob->nkeys, sizeof ( *blob->keys ) ); - blob->uids = gcry_xcalloc ( blob->nuids, sizeof ( *blob->uids ) ); - blob->sigs = gcry_xcalloc ( blob->nsigs, sizeof ( *blob->sigs ) ); - if ( !blob->keys || !blob->uids || !blob->sigs ) { - rc = GCRYERR_NO_MEM; - goto leave; - } - - rc = create_key_part ( blob, keyblock ); - if( rc ) - goto leave; - rc = create_uid_part ( blob, keyblock ); - if( rc ) - goto leave; - rc = create_sig_part ( blob, keyblock ); - if( rc ) - goto leave; - - blob->buf = iobuf_temp(); - rc = create_blob_header ( blob ); - if( rc ) - goto leave; - rc = create_blob_keyblock ( blob, keyblock ); - if( rc ) - goto leave; - rc = create_blob_trailer ( blob ); - if( rc ) - goto leave; - rc = create_blob_finish ( blob ); - if( rc ) - goto leave; - - - leave: - release_kid_list( blob->temp_kids ); - blob->temp_kids = NULL; - if ( rc ) { - kbx_release_blob ( blob ); - *r_blob = NULL; - } - else { - *r_blob = blob; - } - return rc; -} - -int -kbx_new_blob ( KBXBLOB *r_blob, char *image, size_t imagelen ) -{ - KBXBLOB blob; - - *r_blob = NULL; - blob = gcry_xcalloc (1, sizeof *blob ); - if( !blob ) - return GCRYERR_NO_MEM; - blob->blob = image; - blob->bloblen = imagelen; - *r_blob = blob; - return 0; -} - - - -const char * -kbx_get_blob_image ( KBXBLOB blob, size_t *n ) -{ - *n = blob->bloblen; - return blob->blob; -} - -void -kbx_release_blob ( KBXBLOB blob ) -{ - if( !blob ) - return; - if( blob->buf ) - iobuf_cancel( blob->buf ); - gcry_free( blob->keys ); - gcry_free( blob->uids ); - gcry_free( blob->sigs ); - - gcry_free ( blob->blob ); - - gcry_free( blob ); -} - -static ulong -get32( const byte *buffer ) -{ - ulong a; - a = *buffer << 24; - a |= buffer[1] << 16; - a |= buffer[2] << 8; - a |= buffer[3]; - return a; -} - -static ulong -get16( const byte *buffer ) -{ - ulong a; - a = *buffer << 8; - a |= buffer[1]; - return a; -} - - -int -kbx_dump_blob ( FILE *fp, KBXBLOB blob ) -{ - const byte *buffer = blob->blob; - size_t length = blob->bloblen; - ulong n, nkeys, keyinfolen; - ulong nuids, uidinfolen; - ulong nsigs, siginfolen; - ulong keyblock_off, keyblock_len; - const byte *p; - - if( length < 40 ) { - fprintf( fp, "blob too short\n"); - return -1; - } - n = get32( buffer ); - if( n > length ) { - fprintf( fp, "blob larger than length - output truncated\n"); - } - else - length = n; /* ignore the rest */ - fprintf( fp, "Length: %lu\n", n ); - fprintf( fp, "Type: %d\n", buffer[4] ); - fprintf( fp, "Version: %d\n", buffer[5] ); - if( buffer[4] != 2 ) { - fprintf( fp, "can't dump this blob type\n" ); - return 0; - } - - n = get16( buffer + 6 ); - fprintf( fp, "Blob-Flags: %04lX\n", n ); - keyblock_off = get32( buffer + 8 ); - keyblock_len = get32( buffer + 12 ); - fprintf( fp, "Keyblock-Offset: %lu\n", keyblock_off ); - fprintf( fp, "Keyblock-Length: %lu\n", keyblock_len ); - - nkeys = get16( buffer + 16 ); - fprintf( fp, "Key-Count: %lu\n", nkeys ); - keyinfolen = get16( buffer + 18 ); - fprintf( fp, "Key-Info-Length: %lu\n", keyinfolen ); - /* fixme: check bounds */ - p = buffer + 20; - for(n=0; n < nkeys; n++, p += keyinfolen ) { - int i; - ulong kidoff, kflags; - - fprintf( fp, "Key-%lu-Fpr: ", n ); - for(i=0; i < 20; i++ ) - fprintf( fp, "%02X", p[i] ); - kidoff = get32( p + 20 ); - fprintf( fp, "\nKey-%lu-Kid-Off: %lu\n", n, kidoff ); - fprintf( fp, "Key-%lu-Kid: ", n ); - /* fixme: check bounds */ - for(i=0; i < 8; i++ ) - fprintf( fp, "%02X", buffer[kidoff+i] ); - kflags = get16( p + 24 ); - fprintf( fp, "\nKey-%lu-Flags: %04lX\n", n, kflags ); - } - - - nuids = get16( p ); - fprintf( fp, "Uid-Count: %lu\n", nuids ); - uidinfolen = get16( p + 2 ); - fprintf( fp, "Uid-Info-Length: %lu\n", uidinfolen ); - /* fixme: check bounds */ - p += 4; - for(n=0; n < nuids; n++, p += uidinfolen ) { - ulong uidoff, uidlen, uflags; - - uidoff = get32( p ); - uidlen = get32( p+4 ); - fprintf( fp, "Uid-%lu-Off: %lu\n", n, uidoff ); - fprintf( fp, "Uid-%lu-Len: %lu\n", n, uidlen ); - fprintf( fp, "Uid-%lu: \"", n ); - print_string( fp, buffer+uidoff, uidlen, '\"' ); - fputs("\"\n", fp ); - uflags = get16( p + 8 ); - fprintf( fp, "Uid-%lu-Flags: %04lX\n", n, uflags ); - fprintf( fp, "Uid-%lu-Validity: %d\n", n, p[10] ); - } - - nsigs = get16( p ); - fprintf( fp, "Sig-Count: %lu\n", nsigs ); - siginfolen = get16( p + 2 ); - fprintf( fp, "Sig-Info-Length: %lu\n", siginfolen ); - /* fixme: check bounds */ - p += 4; - for(n=0; n < nsigs; n++, p += siginfolen ) { - ulong sflags; - - sflags = get32( p ); - fprintf( fp, "Sig-%lu-Expire: ", n ); - if( !sflags ) - fputs( "[not checked]", fp ); - else if( sflags == 1 ) - fputs( "[missing key]", fp ); - else if( sflags == 2 ) - fputs( "[bad signature]", fp ); - else if( sflags < 0x10000000 ) - fprintf( fp, "[bad flag %0lx]", sflags ); - else if( sflags == 0xffffffff ) - fputs( "0", fp ); - else - fputs( strtimestamp( sflags ), fp ); - putc('\n', fp ); - } - - fprintf( fp, "Ownertrust: %d\n", p[0] ); - fprintf( fp, "All-Validity: %d\n", p[1] ); - p += 4; - n = get32( p ); p += 4; - fprintf( fp, "Recheck-After: %s\n", n? strtimestamp(n) : "0" ); - n = get32( p ); p += 4; - fprintf( fp, "Latest-Timestamp: %s\n", strtimestamp(n) ); - n = get32( p ); p += 4; - fprintf( fp, "Created-At: %s\n", strtimestamp(n) ); - n = get32( p ); p += 4; - fprintf( fp, "Reserved-Space: %lu\n", n ); - - - /* check that the keyblock is at the correct offset and other bounds */ - - - fprintf( fp, "Blob-Checksum: [MD5-hash]\n" ); - return 0; -} - -/**************** - * Check whether the given fingerprint (20 bytes) is in the - * given keyblob. fpr is always 20 bytes. - * Return: 0 = found - * -1 = not found - other = error (fixme: do not always reurn gpgerr_general) - */ -int -kbx_blob_has_fpr ( KBXBLOB blob, const byte *fpr ) -{ - ulong n, nkeys, keyinfolen; - const byte *p, *pend; - byte *buffer = blob->blob; - size_t buflen = blob->bloblen; - - if ( buflen < 40 ) - return GPGERR_GENERAL; /* blob too short */ - n = get32( buffer ); - if ( n > buflen ) - return GPGERR_GENERAL; /* blob larger than announced length */ - buflen = n; /* ignore trailing stuff */ - pend = buffer + n - 1; - - if ( buffer[4] != 2 ) - return GPGERR_GENERAL; /* invalid blob type */ - if ( buffer[5] != 1 ) - return GPGERR_GENERAL; /* invalid blob format version */ - - nkeys = get16( buffer + 16 ); - keyinfolen = get16( buffer + 18 ); - p = buffer + 20; - for(n=0; n < nkeys; n++, p += keyinfolen ) { - if ( p+20 > pend ) - return GPGERR_GENERAL; /* blob shorter than required */ - if (!memcmp ( p, fpr, 20 ) ) - return 0; /* found */ - } - return -1; -} - -/**************** - * Check whether the given keyID (20 bytes) is in the - * given keyblob. - * Return: 0 = found - * -1 = not found - other = error (fixme: do not always return gpgerr_general) - */ -int -kbx_blob_has_kid ( KBXBLOB blob, const byte *keyidbuf, size_t keyidlen ) -{ - ulong n, nkeys, keyinfolen, off; - const byte *p, *pend; - byte *buffer = blob->blob; - size_t buflen = blob->bloblen; - - if ( buflen < 40 ) - return GPGERR_GENERAL; /* blob too short */ - n = get32( buffer ); - if ( n > buflen ) - return GPGERR_GENERAL; /* blob larger than announced length */ - buflen = n; /* ignore trailing stuff */ - pend = buffer + n - 1; - - if ( buffer[4] != 2 ) - return GPGERR_GENERAL; /* invalid blob type */ - if ( buffer[5] != 1 ) - return GPGERR_GENERAL; /* invalid blob format version */ - - nkeys = get16( buffer + 16 ); - keyinfolen = get16( buffer + 18 ); - p = buffer + 20; - for(n=0; n < nkeys; n++, p += keyinfolen ) { - if ( p+24 > pend ) - return GPGERR_GENERAL; /* blob shorter than required */ - off = get32 ( p + 20 ); - if (keyidlen < 8 ) /* actually keyidlen may either be 4 or 8 */ - off +=4; - if ( off+keyidlen > buflen ) - return GPGERR_GENERAL; /* offset out of bounds */ - if ( !memcmp ( buffer+off, keyidbuf, keyidlen ) ) - return 0; /* found */ - } - return -1; -} - - - -int -kbx_blob_has_uid ( KBXBLOB blob, - int (*cmp)(const byte *, size_t, void *), void *opaque ) -{ - ulong n, nuids, uidinfolen, off, len; - const byte *p, *pend; - byte *buffer = blob->blob; - size_t buflen = blob->bloblen; - - if ( buflen < 40 ) - return GPGERR_GENERAL; /* blob too short */ - n = get32( buffer ); - if ( n > buflen ) - return GPGERR_GENERAL; /* blob larger than announced length */ - buflen = n; /* ignore trailing stuff */ - pend = buffer + n - 1; - - if ( buffer[4] != 2 ) - return GPGERR_GENERAL; /* invalid blob type */ - if ( buffer[5] != 1 ) - return GPGERR_GENERAL; /* invalid blob format version */ - - p = buffer + 20 + get16( buffer + 16 ) * get16( buffer + 18 ); - if ( p+4 > pend ) - return GPGERR_GENERAL; /* blob shorter than required */ - - nuids = get16( p ); p+= 2; - uidinfolen = get16( p ); p+=2; - for(n=0; n < nuids; n++, p += uidinfolen ) { - if ( p+8 > pend ) - return GPGERR_GENERAL; /* blob shorter than required */ - off = get32 ( p ); - len = get32 ( p + 4 ); - if ( off+len > buflen ) - return GPGERR_GENERAL; /* offset out of bounds */ - if ( (*cmp) ( buffer+off, len, opaque ) ) - return 0; /* found */ - } - - return -1; -} - - diff --git a/g10/kbxfile.c b/g10/kbxfile.c deleted file mode 100644 index 94ef13f83..000000000 --- a/g10/kbxfile.c +++ /dev/null @@ -1,332 +0,0 @@ -/* kbxfile.c - KBX file handling - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This file is part of GnuPG. - * - * GnuPG is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GnuPG is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - -/**************** - * We will change the whole system to use only KBX. This file here - * will implement the methods needed to operate on plain KBXfiles. - * Most stuff from getkey and ringedit will be replaced by stuff here. - * To make things even more easier we will only allow one updateable kbxfile - * and optionally some read-only files. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "kbx.h" -#include "options.h" -#include "util.h" -#include "i18n.h" -#include "main.h" - -/**************** - * Read the blob at the current fileposition and return an allocated - * pointer nto the blob if it was found. - * Fixme: return a blob object. - */ -static int -do_search_by_fpr ( const char *filename, FILE *a, const char *fpr, - KBXBLOB *r_blob ) -{ - KBXBLOB blob; - int rc; - - *r_blob = NULL; - rc = kbx_read_blob ( &blob, a ); - if ( rc && rc != -1 ) { - log_error (_("file `%s': error reading blob\n"), filename ); - } - else if ( !rc ) { - rc = kbx_blob_has_fpr ( blob, fpr ); - } - else - log_info ("eof\n"); - - if ( !rc ) { - *r_blob = blob; - } - else { - kbx_release_blob ( blob ); - } - return rc; -} - -int -kbxfile_search_by_fpr( const char *filename, const byte *fpr ) -{ - FILE *fp; - KBXBLOB blob; - int rc; - - fp = fopen ( filename, "rb" ); - if( !fp ) { - log_error(_("can't open `%s': %s\n"), filename, strerror(errno) ); - return 1; - } - - while ( (rc=do_search_by_fpr ( filename, fp, fpr, &blob )) == -1 ) - ; - if ( !rc ) { - fputs ("FOUND\n", stderr ); - kbx_dump_blob ( stderr, blob ); - kbx_release_blob ( blob ); - } - - fclose (fp); - return -1; -} - - -/**************** - * Read the blob at the current fileposition and return an allocated - * pointer nto the blob if it was found. - * Fixme: return a blob object. - */ -static int -do_search_by_keyid ( const char *filename, FILE *a, - const byte *keyidbuf, size_t keyidlen, KBXBLOB *r_blob ) -{ - KBXBLOB blob; - int rc; - - *r_blob = NULL; - rc = kbx_read_blob ( &blob, a ); - if ( rc && rc != -1 ) { - log_error (_("file `%s': error reading blob\n"), filename ); - } - else if ( !rc ) { - rc = kbx_blob_has_kid ( blob, keyidbuf, keyidlen ); - } - else - rc = GPGERR_GENERAL; /* eof */ - - if ( !rc ) { - *r_blob = blob; - } - else { - kbx_release_blob ( blob ); - } - return rc; -} - -/**************** - * Look for a KBX described by an keyid. This function will in - * turn return each matching keyid because there may me duplicates - * (which can't happen for fingerprints) - * mode 10 = short keyid - * 11 = long keyid - */ -int -kbxfile_search_by_kid ( const char *filename, u32 *kid, int mode ) -{ - FILE *fp; - KBXBLOB blob; - int rc; - byte kbuf[8], *kbufptr; - int kbuflen; - - fp = fopen ( filename, "rb" ); - if( !fp ) { - log_error(_("can't open `%s': %s\n"), filename, strerror(errno) ); - return 1; - } - - kbuf[0] = kid[0] >> 24; - kbuf[1] = kid[0] >> 16; - kbuf[2] = kid[0] >> 8; - kbuf[3] = kid[0]; - kbuf[4] = kid[1] >> 24; - kbuf[5] = kid[1] >> 16; - kbuf[6] = kid[1] >> 8; - kbuf[7] = kid[1]; - if ( mode == 10 ) { - kbufptr=kbuf+4; - kbuflen = 4; - } - else if (mode == 11 ) { - kbufptr=kbuf; - kbuflen = 8; - } - else { - BUG(); - } - - do { - while ( (rc=do_search_by_keyid ( filename, fp, - kbufptr, kbuflen, &blob )) == -1 ) - ; - if ( !rc ) { - fputs ("FOUND:\n", stderr ); - kbx_dump_blob ( stderr, blob ); - kbx_release_blob ( blob ); - } - } while ( !rc ); - - fclose (fp); - return -1; -} - - -static int -do_search_by_uid ( const char *filename, FILE *a, - int (*cmpfnc)(const byte*,size_t,void*), void *cmpdata, - KBXBLOB *r_blob ) -{ - KBXBLOB blob; - int rc; - - *r_blob = NULL; - rc = kbx_read_blob ( &blob, a ); - if ( rc && rc != -1 ) { - log_error (_("file `%s': error reading blob\n"), filename ); - } - else if ( !rc ) { - rc = kbx_blob_has_uid ( blob, cmpfnc, cmpdata ); - } - else - rc = GPGERR_GENERAL; /* eof */ - - if ( !rc ) { - *r_blob = blob; - } - else { - kbx_release_blob ( blob ); - } - return rc; -} - - -static int -substr_compare ( const byte *buf, size_t buflen, void *opaque ) -{ - return !!memistr ( buf, buflen, opaque ); -} - - -int -kbxfile_search_by_uid ( const char *filename, const char *name ) -{ - FILE *fp; - KBXBLOB blob; - int rc; - byte kbuf[8], *kbufptr; - int kbuflen; - - fp = fopen ( filename, "rb" ); - if( !fp ) { - log_error(_("can't open `%s': %s\n"), filename, strerror(errno) ); - return 1; - } - - - do { - while ( (rc=do_search_by_uid ( filename, fp, - substr_compare, name, &blob )) == -1 ) - ; - if ( !rc ) { - fputs ("FOUND:\n", stderr ); - kbx_dump_blob ( stderr, blob ); - kbx_release_blob ( blob ); - } - } while ( !rc ); - - fclose ( fp ); - return -1; -} - - - -void -export_as_kbxfile(void) -{ - - KBPOS kbpos; - KBNODE keyblock = NULL; - int rc=0; - - rc = enum_keyblocks_begin( &kbpos, 0 ); - if( rc ) { - if( rc != -1 ) - log_error("enum_keyblocks(open) failed: %s\n", gpg_errstr(rc) ); - goto leave; - } - - while( !(rc = enum_keyblocks_next( kbpos, 1, &keyblock )) ) { - KBXBLOB blob; - const char *p; - size_t n; - - merge_keys_and_selfsig( keyblock ); - rc = kbx_create_blob ( &blob, keyblock ); - if( rc ) { - log_error("kbx_create_blob failed: %s\n", gpg_errstr(rc) ); - goto leave; - } - p = kbx_get_blob_image ( blob, &n ); - fwrite( p, n, 1, stdout ); - kbx_release_blob ( blob ); - } - - if( rc && rc != -1 ) - log_error("enum_keyblocks(read) failed: %s\n", gpg_errstr(rc)); - - leave: - enum_keyblocks_end( kbpos ); - release_kbnode( keyblock ); -} - - -static int -do_print_kbxfile( const char *filename, FILE *a ) -{ - KBXBLOB blob; - int rc; - - rc = kbx_read_blob ( &blob, a ); - if ( rc && rc != -1 ) { - log_error (_("file `%s': error reading blob\n"), filename ); - } - else if ( ! rc ) - kbx_dump_blob ( stdout, blob ); - kbx_release_blob ( blob ); - return rc; -} - -void -print_kbxfile( const char *filename ) -{ - FILE *fp; - - fp = fopen ( filename, "rb" ); - if( !fp ) { - log_error(_("can't open `%s': %s\n"), filename, strerror(errno) ); - return; - } - - while ( !do_print_kbxfile( filename, fp ) ) - ; - - fclose (fp); -} - diff --git a/g10/kbxio.c b/g10/kbxio.c deleted file mode 100644 index 6c4437bf8..000000000 --- a/g10/kbxio.c +++ /dev/null @@ -1,75 +0,0 @@ -/* kbxio.c - KBX I/O handling - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This file is part of GnuPG. - * - * GnuPG is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GnuPG is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - - -#include -#include -#include -#include -#include -#include -#include - -#include "iobuf.h" -#include "util.h" -#include "kbx.h" - - -int -kbx_read_blob ( KBXBLOB *r_blob, FILE *a ) -{ - char *image; - size_t imagelen = 0; - int c1, c2, c3, c4; - int rc; - - *r_blob = NULL; - if ( (c1 = getc ( a )) == EOF - || (c2 = getc ( a )) == EOF - || (c3 = getc ( a )) == EOF - || (c4 = getc ( a )) == EOF ) { - if ( c1 == EOF && !ferror ( a ) ) - return -1; - return GPGERR_GENERAL; - } - imagelen = (c1 << 24) | (c2 << 16) | (c3 << 8 ) | c4; - if ( imagelen > 500000 ) { /* sanity check:blob too large */ - return GPGERR_GENERAL; - } - else if ( imagelen < 4 ) { /* blobtoo short */ - return GPGERR_GENERAL; - } - image = gcry_malloc ( imagelen ); - if ( !image ) { - return GPGERR_GENERAL; - } - - image[0] = c1; image[1] = c2; image[2] = c3; image[3] = c4; - if ( fread ( image+4, imagelen-4, 1, a ) != 1 ) { - gcry_free ( image ); - return GPGERR_GENERAL; - } - - rc = kbx_new_blob ( r_blob, image, imagelen ); - return rc; -} - - - diff --git a/g10/kbxutil.c b/g10/kbxutil.c deleted file mode 100644 index 95fcb9cce..000000000 --- a/g10/kbxutil.c +++ /dev/null @@ -1,442 +0,0 @@ -/* gpg.c - The GnuPG utility (main for gpg) - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. - * - * This file is part of GnuPG. - * - * GnuPG is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GnuPG is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "packet.h" -#include "iobuf.h" -#include "util.h" -#include "main.h" -#include "options.h" -#include "keydb.h" -#include "filter.h" -#include "ttyio.h" -#include "i18n.h" -#include "gnupg-defs.h" -#include "kbx.h" - - -enum cmd_and_opt_values { aNull = 0, - oArmor = 'a', - aDetachedSign = 'b', - aSym = 'c', - aDecrypt = 'd', - aEncr = 'e', - oInteractive = 'i', - oKOption = 'k', - oDryRun = 'n', - oOutput = 'o', - oQuiet = 'q', - oRecipient = 'r', - aSign = 's', - oTextmodeShort= 't', - oUser = 'u', - oVerbose = 'v', - oCompress = 'z', - oNotation = 'N', - oBatch = 500, - aClearsign, - aStore, - aKeygen, - aSignEncr, - aSignKey, - aLSignKey, - aListPackets, - aEditKey, - aDeleteKey, - aDeleteSecretKey, - aKMode, - aKModeC, - aImport, - aFastImport, - aVerify, - aListKeys, - aListSigs, - aListSecretKeys, - aSendKeys, - aRecvKeys, - aExport, - aExportAll, - aExportSecret, - aCheckKeys, - aGenRevoke, - aPrimegen, - aPrintMD, - aPrintHMAC, - aPrintMDs, - aCheckTrustDB, - aUpdateTrustDB, - aFixTrustDB, - aListTrustDB, - aListTrustPath, - aExportOwnerTrust, - aImportOwnerTrust, - aDeArmor, - aEnArmor, - aGenRandom, - - oTextmode, - oFingerprint, - oWithFingerprint, - oAnswerYes, - oAnswerNo, - oKeyring, - oSecretKeyring, - oDefaultKey, - oDefRecipient, - oDefRecipientSelf, - oNoDefRecipient, - oOptions, - oDebug, - oDebugAll, - oStatusFD, - oNoComment, - oNoVersion, - oEmitVersion, - oCompletesNeeded, - oMarginalsNeeded, - oMaxCertDepth, - oLoadExtension, - oRFC1991, - oOpenPGP, - oCipherAlgo, - oDigestAlgo, - oCompressAlgo, - oPasswdFD, - oNoVerbose, - oTrustDBName, - oNoSecmemWarn, - oNoArmor, - oNoDefKeyring, - oNoGreeting, - oNoTTY, - oNoOptions, - oNoBatch, - oHomedir, - oWithColons, - oWithKeyData, - oSkipVerify, - oCompressKeys, - oCompressSigs, - oAlwaysTrust, - oEmuChecksumBug, - oRunAsShmCP, - oSetFilename, - oSetPolicyURL, - oUseEmbeddedFilename, - oComment, - oDefaultComment, - oThrowKeyid, - oForceV3Sigs, - oForceMDC, - oS2KMode, - oS2KDigest, - oS2KCipher, - oCharset, - oNotDashEscaped, - oEscapeFrom, - oLockOnce, - oLockMultiple, - oKeyServer, - oEncryptTo, - oNoEncryptTo, - oLoggerFD, - oUtf8Strings, - oNoUtf8Strings, - oDisableCipherAlgo, - oDisablePubkeyAlgo, - oAllowNonSelfsignedUID, - oNoLiteral, - oSetFilesize, - oEntropyDLLName, - - aFindByFpr, - aFindByKid, - aFindByUid, -aTest }; - - -static ARGPARSE_OPTS opts[] = { - - { 300, NULL, 0, N_("@Commands:\n ") }, - - { aFindByFpr, "find-by-fpr", 0, "|FPR| find key using it's fingerprnt" }, - { aFindByKid, "find-by-kid", 0, "|KID| find key using it's keyid" }, - { aFindByUid, "find-by-uid", 0, "|NAME| find key by user name" }, - - { 301, NULL, 0, N_("@\nOptions:\n ") }, - - { oArmor, "armor", 0, N_("create ascii armored output")}, - { oArmor, "armour", 0, "@" }, - { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") }, - { oOutput, "output", 2, N_("use as output file")}, - { oVerbose, "verbose", 0, N_("verbose") }, - { oQuiet, "quiet", 0, N_("be somewhat more quiet") }, - { oDryRun, "dry-run", 0, N_("do not make any changes") }, - { oOptions, "options" , 2, N_("read options from file")}, - - { oDebug, "debug" ,4|16, N_("set debugging flags")}, - { oDebugAll, "debug-all" ,0, N_("enable full debugging")}, - - -{0} }; - - - -int gpg_errors_seen = 0; - - -static const char * -my_strusage( int level ) -{ - const char *p; - switch( level ) { - case 11: p = "kbxutil (GnuPG)"; - break; - case 13: p = VERSION; break; - case 17: p = PRINTABLE_OS_NAME; break; - case 19: p = - _("Please report bugs to .\n"); - break; - case 1: - case 40: p = - _("Usage: kbxutil [options] [files] (-h for help)"); - break; - case 41: p = - _("Syntax: kbxutil [options] [files]\n" - "list, export, import KBX data\n"); - break; - - - default: p = NULL; - } - return p; -} - - -static void -i18n_init(void) -{ - #ifdef USE_SIMPLE_GETTEXT - set_gettext_file( PACKAGE ); - #else - #ifdef ENABLE_NLS - #ifdef HAVE_LC_MESSAGES - setlocale( LC_TIME, "" ); - setlocale( LC_MESSAGES, "" ); - #else - setlocale( LC_ALL, "" ); - #endif - bindtextdomain( PACKAGE, GNUPG_LOCALEDIR ); - textdomain( PACKAGE ); - #endif - #endif -} - - -static void -wrong_args( const char *text ) -{ - log_error("usage: kbxutil %s\n", text); - gpg_exit ( 1 ); -} - - -static int -hextobyte( const byte *s ) -{ - int c; - - if( *s >= '0' && *s <= '9' ) - c = 16 * (*s - '0'); - else if( *s >= 'A' && *s <= 'F' ) - c = 16 * (10 + *s - 'A'); - else if( *s >= 'a' && *s <= 'f' ) - c = 16 * (10 + *s - 'a'); - else - return -1; - s++; - if( *s >= '0' && *s <= '9' ) - c += *s - '0'; - else if( *s >= 'A' && *s <= 'F' ) - c += 10 + *s - 'A'; - else if( *s >= 'a' && *s <= 'f' ) - c += 10 + *s - 'a'; - else - return -1; - return c; -} - -static char * -format_fingerprint ( const char *s ) -{ - int i, c; - byte fpr[20]; - - for (i=0; i < 20 && *s; ) { - if ( *s == ' ' || *s == '\t' ) { - s++; - continue; - } - c = hextobyte(s); - if (c == -1) { - return NULL; - } - fpr[i++] = c; - s += 2; - } - return gcry_xstrdup ( fpr ); -} - -static int -format_keyid ( const char *s, u32 *kid ) -{ - char helpbuf[9]; - switch ( strlen ( s ) ) { - case 8: - kid[0] = 0; - kid[1] = strtoul( s, NULL, 16 ); - return 10; - - case 16: - mem2str( helpbuf, s, 9 ); - kid[0] = strtoul( helpbuf, NULL, 16 ); - kid[1] = strtoul( s+8, NULL, 16 ); - return 11; - } - return 0; /* error */ -} - - - -int -main( int argc, char **argv ) -{ - ARGPARSE_ARGS pargs; - enum cmd_and_opt_values cmd = 0; - - set_strusage( my_strusage ); - log_set_name("kbxutil"); - /* check that the libraries are suitable. Do it here because - * the option parse may need services of the library */ - if ( !gcry_check_version ( "1.1.0a" ) ) { - log_fatal(_("libgcrypt is too old (need %s, have %s)\n"), - VERSION, gcry_check_version(NULL) ); - } - - create_dotlock(NULL); /* register locking cleanup */ - i18n_init(); - - - pargs.argc = &argc; - pargs.argv = &argv; - pargs.flags= 1; /* do not remove the args */ - while( arg_parse( &pargs, opts) ) { - switch( pargs.r_opt ) { - case oVerbose: - opt.verbose++; - gcry_control( GCRYCTL_SET_VERBOSITY, (int)opt.verbose ); - break; - case oDebug: opt.debug |= pargs.r.ret_ulong; break; - case oDebugAll: opt.debug = ~0; break; - - case aFindByFpr: - case aFindByKid: - case aFindByUid: - cmd = pargs.r_opt; - break; - - default : pargs.err = 2; break; - } - } - if( log_get_errorcount(0) ) - gpg_exit(2); - - if ( !cmd ) { /* default is to list a KBX file */ - if( !argc ) { - print_kbxfile( NULL ); - } - else { - for ( ; argc; argc--, argv++ ) { - print_kbxfile( *argv ); - } - } - } - else if ( cmd == aFindByFpr ) { - char *fpr; - if ( argc != 2 ) - wrong_args ("kbxfile foingerprint"); - fpr = format_fingerprint ( argv[1] ); - if ( !fpr ) - log_error ("invalid formatted fingerprint\n"); - else { - kbxfile_search_by_fpr ( argv[0], fpr ); - gcry_free ( fpr ); - } - } - else if ( cmd == aFindByKid ) { - u32 kid[2]; - int mode; - - if ( argc != 2 ) - wrong_args ("kbxfile short-or-long-keyid"); - mode = format_keyid ( argv[1], kid ); - if ( !mode ) - log_error ("invalid formatted keyID\n"); - else { - kbxfile_search_by_kid ( argv[0], kid, mode ); - } - } - else if ( cmd == aFindByUid ) { - if ( argc != 2 ) - wrong_args ("kbxfile userID"); - kbxfile_search_by_uid ( argv[0], argv[1] ); - } - else - log_error ("unsupported action\n"); - - gpg_exit(0); - return 8; /*NEVER REACHED*/ -} - - -void -gpg_exit( int rc ) -{ - if( opt.debug & DBG_MEMSTAT_VALUE ) { - gcry_control( GCRYCTL_DUMP_MEMORY_STATS ); - gcry_control( GCRYCTL_DUMP_RANDOM_STATS ); - } - if( opt.debug ) - gcry_control( GCRYCTL_DUMP_SECMEM_STATS ); - rc = rc? rc : log_get_errorcount(0)? 2 : - gpg_errors_seen? 1 : 0; - exit(rc ); -} - - diff --git a/g10/keydb.c b/g10/keydb.c new file mode 100644 index 000000000..96d19105a --- /dev/null +++ b/g10/keydb.c @@ -0,0 +1,698 @@ +/* keydb.c - key database dispatcher + * Copyright (C) 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util.h" +#include "options.h" +#include "main.h" /*try_make_homedir ()*/ +#include "packet.h" +#include "keyring.h" +#include "keydb.h" +#include "i18n.h" + +static int active_handles; + +typedef enum { + KEYDB_RESOURCE_TYPE_NONE = 0, + KEYDB_RESOURCE_TYPE_KEYRING +} KeydbResourceType; +#define MAX_KEYDB_RESOURCES 20 + +struct resource_item { + KeydbResourceType type; + union { + KEYRING_HANDLE kr; + } u; + void *token; + int secret; +}; + +static struct resource_item all_resources[MAX_KEYDB_RESOURCES]; +static int used_resources; + +struct keydb_handle { + int locked; + int found; + int current; + int used; /* items in active */ + struct resource_item active[MAX_KEYDB_RESOURCES]; +}; + + +static int lock_all (KEYDB_HANDLE hd); +static void unlock_all (KEYDB_HANDLE hd); + + +/* + * Register a resource (which currently may only be a keyring file). + * The first keyring which is added by this function is + * created if it does not exist. + * Note: this function may be called before secure memory is + * available. + */ +int +keydb_add_resource (const char *url, int force, int secret) +{ + static int any_secret, any_public; + const char *resname = url; + IOBUF iobuf = NULL; + char *filename = NULL; + int rc = 0; + KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE; + void *token; + + /* Do we have an URL? + * gnupg-ring:filename := this is a plain keyring + * filename := See what is is, but create as plain keyring. + */ + if (strlen (resname) > 11) { + if (!strncmp( resname, "gnupg-ring:", 11) ) { + rt = KEYDB_RESOURCE_TYPE_KEYRING; + resname += 11; + } + #if !defined(HAVE_DRIVE_LETTERS) && !defined(__riscos__) + else if (strchr (resname, ':')) { + log_error ("invalid key resource URL `%s'\n", url ); + rc = G10ERR_GENERAL; + goto leave; + } + #endif /* !HAVE_DRIVE_LETTERS && !__riscos__ */ + } + + if (*resname != DIRSEP_C ) { /* do tilde expansion etc */ + if (strchr(resname, DIRSEP_C) ) + filename = make_filename (resname, NULL); + else + filename = make_filename (opt.homedir, resname, NULL); + } + else + filename = m_strdup (resname); + + check_permissions(filename,0,0); + + if (!force) + force = secret? !any_secret : !any_public; + + /* see whether we can determine the filetype */ + if (rt == KEYDB_RESOURCE_TYPE_NONE) { + FILE *fp = fopen( filename, "rb" ); + + if (fp) { + u32 magic; + + if (fread( &magic, 4, 1, fp) == 1 ) { + if (magic == 0x13579ace || magic == 0xce9a5713) + ; /* GDBM magic - no more support */ + else + rt = KEYDB_RESOURCE_TYPE_KEYRING; + } + else /* maybe empty: assume ring */ + rt = KEYDB_RESOURCE_TYPE_KEYRING; + fclose( fp ); + } + else /* no file yet: create ring */ + rt = KEYDB_RESOURCE_TYPE_KEYRING; + } + + switch (rt) { + case KEYDB_RESOURCE_TYPE_NONE: + log_error ("unknown type of key resource `%s'\n", url ); + rc = G10ERR_GENERAL; + goto leave; + + case KEYDB_RESOURCE_TYPE_KEYRING: + if (access(filename, F_OK)) + { /* file does not exist */ + char *last_slash_in_filename; + + if (!force) + { + rc = G10ERR_OPEN_FILE; + goto leave; + } + + last_slash_in_filename = strrchr (filename, DIRSEP_C); + *last_slash_in_filename = 0; + if (access(filename, F_OK)) + { /* on the first time we try to create the default + homedir and in this case the process will be + terminated, so that on the next invocation it can + read the options file in on startup */ + try_make_homedir (filename); + rc = G10ERR_OPEN_FILE; + *last_slash_in_filename = DIRSEP_C; + goto leave; + } + *last_slash_in_filename = DIRSEP_C; + + iobuf = iobuf_create (filename); + if (!iobuf) + { + log_error ( _("error creating keyring `%s': %s\n"), + filename, strerror(errno)); + rc = G10ERR_OPEN_FILE; + goto leave; + } + +#ifndef HAVE_DOSISH_SYSTEM + if (secret && !opt.preserve_permissions) + { + if (chmod (filename, S_IRUSR | S_IWUSR) ) + { + log_error (_("changing permission of " + " `%s' failed: %s\n"), + filename, strerror(errno) ); + rc = G10ERR_WRITE_FILE; + goto leave; + } + } +#endif + if (!opt.quiet) + log_info (_("keyring `%s' created\n"), filename); + iobuf_close (iobuf); + iobuf = NULL; + /* must invalidate that ugly cache */ + iobuf_ioctl (NULL, 2, 0, (char*)filename); + } /* end file creation */ + + token = keyring_register_filename (filename, secret); + if (!token) + ; /* already registered - ignore it */ + else if (used_resources >= MAX_KEYDB_RESOURCES) + rc = G10ERR_RESOURCE_LIMIT; + else + { + all_resources[used_resources].type = rt; + all_resources[used_resources].u.kr = NULL; /* Not used here */ + all_resources[used_resources].token = token; + all_resources[used_resources].secret = secret; + used_resources++; + } + break; + + default: + log_error ("resource type of `%s' not supported\n", url); + rc = G10ERR_GENERAL; + goto leave; + } + + /* fixme: check directory permissions and print a warning */ + + leave: + if (rc) + log_error ("keyblock resource `%s': %s\n", filename, g10_errstr(rc)); + else if (secret) + any_secret = 1; + else + any_public = 1; + m_free (filename); + return rc; +} + + + + +KEYDB_HANDLE +keydb_new (int secret) +{ + KEYDB_HANDLE hd; + int i, j; + + hd = m_alloc_clear (sizeof *hd); + hd->found = -1; + + assert (used_resources <= MAX_KEYDB_RESOURCES); + for (i=j=0; i < used_resources; i++) + { + if (!all_resources[i].secret != !secret) + continue; + switch (all_resources[i].type) + { + case KEYDB_RESOURCE_TYPE_NONE: /* ignore */ + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + hd->active[j].type = all_resources[i].type; + hd->active[j].token = all_resources[i].token; + hd->active[j].secret = all_resources[i].secret; + hd->active[j].u.kr = keyring_new (all_resources[i].token, secret); + if (!hd->active[j].u.kr) { + m_free (hd); + return NULL; /* fixme: release all previously allocated handles*/ + } + j++; + break; + } + } + hd->used = j; + + active_handles++; + return hd; +} + +void +keydb_release (KEYDB_HANDLE hd) +{ + int i; + + if (!hd) + return; + assert (active_handles > 0); + active_handles--; + + unlock_all (hd); + for (i=0; i < hd->used; i++) { + switch (hd->active[i].type) { + case KEYDB_RESOURCE_TYPE_NONE: + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + keyring_release (hd->active[i].u.kr); + break; + } + } + + m_free (hd); +} + + +/* + * Return the name of the current resource. This is function first + * looks for the last found found, then for the current search + * position, and last returns the first available resource. The + * returned string is only valid as long as the handle exists. This + * function does only return NULL if no handle is specified, in all + * other error cases an empty string is returned. + */ +const char * +keydb_get_resource_name (KEYDB_HANDLE hd) +{ + int idx; + const char *s = NULL; + + if (!hd) + return NULL; + + if ( hd->found >= 0 && hd->found < hd->used) + idx = hd->found; + else if ( hd->current >= 0 && hd->current < hd->used) + idx = hd->current; + else + idx = 0; + + switch (hd->active[idx].type) { + case KEYDB_RESOURCE_TYPE_NONE: + s = NULL; + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + s = keyring_get_resource_name (hd->active[idx].u.kr); + break; + } + + return s? s: ""; +} + + + +static int +lock_all (KEYDB_HANDLE hd) +{ + int i, rc = 0; + + for (i=0; !rc && i < hd->used; i++) { + switch (hd->active[i].type) { + case KEYDB_RESOURCE_TYPE_NONE: + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + rc = keyring_lock (hd->active[i].u.kr, 1); + break; + } + } + + if (rc) { + /* revert the already set locks */ + for (i--; i >= 0; i--) { + switch (hd->active[i].type) { + case KEYDB_RESOURCE_TYPE_NONE: + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + keyring_lock (hd->active[i].u.kr, 0); + break; + } + } + } + else + hd->locked = 1; + + return rc; +} + +static void +unlock_all (KEYDB_HANDLE hd) +{ + int i; + + if (!hd->locked) + return; + + for (i=hd->used-1; i >= 0; i--) { + switch (hd->active[i].type) { + case KEYDB_RESOURCE_TYPE_NONE: + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + keyring_lock (hd->active[i].u.kr, 0); + break; + } + } + hd->locked = 0; +} + + +/* + * Return the last found keyring. Caller must free it. + * The returned keyblock has the kbode flag bit 0 set for the node with + * the public key used to locate the keyblock or flag bit 1 set for + * the user ID node. + */ +int +keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb) +{ + int rc = 0; + + if (!hd) + return G10ERR_INV_ARG; + + if ( hd->found < 0 || hd->found >= hd->used) + return -1; /* nothing found */ + + switch (hd->active[hd->found].type) { + case KEYDB_RESOURCE_TYPE_NONE: + rc = G10ERR_GENERAL; /* oops */ + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + rc = keyring_get_keyblock (hd->active[hd->found].u.kr, ret_kb); + break; + } + + return rc; +} + +/* + * update the current keyblock with KB + */ +int +keydb_update_keyblock (KEYDB_HANDLE hd, KBNODE kb) +{ + int rc = 0; + + if (!hd) + return G10ERR_INV_ARG; + + if ( hd->found < 0 || hd->found >= hd->used) + return -1; /* nothing found */ + + if( opt.dry_run ) + return 0; + + rc = lock_all (hd); + if (rc) + return rc; + + switch (hd->active[hd->found].type) { + case KEYDB_RESOURCE_TYPE_NONE: + rc = G10ERR_GENERAL; /* oops */ + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + rc = keyring_update_keyblock (hd->active[hd->found].u.kr, kb); + break; + } + + unlock_all (hd); + return rc; +} + + +/* + * Insert a new KB into one of the resources. + */ +int +keydb_insert_keyblock (KEYDB_HANDLE hd, KBNODE kb) +{ + int rc = -1; + int idx; + + if (!hd) + return G10ERR_INV_ARG; + + if( opt.dry_run ) + return 0; + + if ( hd->found >= 0 && hd->found < hd->used) + idx = hd->found; + else if ( hd->current >= 0 && hd->current < hd->used) + idx = hd->current; + else + return G10ERR_GENERAL; + + rc = lock_all (hd); + if (rc) + return rc; + + switch (hd->active[idx].type) { + case KEYDB_RESOURCE_TYPE_NONE: + rc = G10ERR_GENERAL; /* oops */ + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + rc = keyring_insert_keyblock (hd->active[idx].u.kr, kb); + break; + } + + unlock_all (hd); + return rc; +} + + +/* + * The current keyblock will be deleted. + */ +int +keydb_delete_keyblock (KEYDB_HANDLE hd) +{ + int rc = -1; + + if (!hd) + return G10ERR_INV_ARG; + + if ( hd->found < 0 || hd->found >= hd->used) + return -1; /* nothing found */ + + if( opt.dry_run ) + return 0; + + rc = lock_all (hd); + if (rc) + return rc; + + switch (hd->active[hd->found].type) { + case KEYDB_RESOURCE_TYPE_NONE: + rc = G10ERR_GENERAL; /* oops */ + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + rc = keyring_delete_keyblock (hd->active[hd->found].u.kr); + break; + } + + unlock_all (hd); + return rc; +} + + +/* + * Locate the default writable key resource, so that the next + * operation (which is only relevant for inserts) will be done on this + * resource. + */ +int +keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved) +{ + int rc; + + if (!hd) + return G10ERR_INV_ARG; + + rc = keydb_search_reset (hd); /* this does reset hd->current */ + if (rc) + return rc; + + for ( ; hd->current >= 0 && hd->current < hd->used; hd->current++) + { + switch (hd->active[hd->current].type) + { + case KEYDB_RESOURCE_TYPE_NONE: + BUG(); + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + if (keyring_is_writable (hd->active[hd->current].token)) + return 0; /* found (hd->current is set to it) */ + break; + } + } + + return -1; +} + +/* + * Rebuild the caches of all key resources. + */ +void +keydb_rebuild_caches (void) +{ + int i, rc; + + for (i=0; i < used_resources; i++) + { + if (all_resources[i].secret) + continue; + switch (all_resources[i].type) + { + case KEYDB_RESOURCE_TYPE_NONE: /* ignore */ + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + rc = keyring_rebuild_cache (all_resources[i].token); + if (rc) + log_error (_("failed to rebuild keyring cache: %s\n"), + g10_errstr (rc)); + break; + } + } +} + + + +/* + * Start the next search on this handle right at the beginning + */ +int +keydb_search_reset (KEYDB_HANDLE hd) +{ + int i, rc = 0; + + if (!hd) + return G10ERR_INV_ARG; + + hd->current = 0; + hd->found = -1; + /* and reset all resources */ + for (i=0; !rc && i < hd->used; i++) { + switch (hd->active[i].type) { + case KEYDB_RESOURCE_TYPE_NONE: + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + rc = keyring_search_reset (hd->active[i].u.kr); + break; + } + } + return rc; +} + + +/* + * Search through all keydb resources, starting at the current position, + * for a keyblock which contains one of the keys described in the DESC array. + */ +int +keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc) +{ + int rc = -1; + + if (!hd) + return G10ERR_INV_ARG; + + while (rc == -1 && hd->current >= 0 && hd->current < hd->used) { + switch (hd->active[hd->current].type) { + case KEYDB_RESOURCE_TYPE_NONE: + BUG(); /* we should never see it here */ + break; + case KEYDB_RESOURCE_TYPE_KEYRING: + rc = keyring_search (hd->active[hd->current].u.kr, desc, ndesc); + break; + } + if (rc == -1) /* EOF -> switch to next resource */ + hd->current++; + else if (!rc) + hd->found = hd->current; + } + + return rc; +} + + +int +keydb_search_first (KEYDB_HANDLE hd) +{ + KEYDB_SEARCH_DESC desc; + + memset (&desc, 0, sizeof desc); + desc.mode = KEYDB_SEARCH_MODE_FIRST; + return keydb_search (hd, &desc, 1); +} + +int +keydb_search_next (KEYDB_HANDLE hd) +{ + KEYDB_SEARCH_DESC desc; + + memset (&desc, 0, sizeof desc); + desc.mode = KEYDB_SEARCH_MODE_NEXT; + return keydb_search (hd, &desc, 1); +} + +int +keydb_search_kid (KEYDB_HANDLE hd, u32 *kid) +{ + KEYDB_SEARCH_DESC desc; + + memset (&desc, 0, sizeof desc); + desc.mode = KEYDB_SEARCH_MODE_LONG_KID; + desc.u.kid[0] = kid[0]; + desc.u.kid[1] = kid[1]; + return keydb_search (hd, &desc, 1); +} + +int +keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr) +{ + KEYDB_SEARCH_DESC desc; + + memset (&desc, 0, sizeof desc); + desc.mode = KEYDB_SEARCH_MODE_FPR; + memcpy (desc.u.fpr, fpr, MAX_FINGERPRINT_LEN); + return keydb_search (hd, &desc, 1); +} + + + diff --git a/g10/keydb.h b/g10/keydb.h index c2131ada7..34d02d702 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -1,5 +1,5 @@ /* keydb.h - Key database - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -18,14 +18,18 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_KEYDB_H -#define GPG_KEYDB_H +#ifndef G10_KEYDB_H +#define G10_KEYDB_H #include "types.h" -#include "basicdefs.h" +#include "global.h" #include "packet.h" +#include "cipher.h" -#define MAX_FINGERPRINT_LEN 20 +/* What qualifies as a certification (rather than a signature?) */ +#define IS_SIG(s) (((s)->sig_class==0x00) || ((s)->sig_class==0x01) || \ + ((s)->sig_class==0x02) || ((s)->sig_class==0x40)) +#define IS_CERT(s) (!IS_SIG(s)) #define IS_KEY_SIG(s) ((s)->sig_class == 0x1f) #define IS_UID_SIG(s) (((s)->sig_class & ~3) == 0x10) @@ -35,7 +39,6 @@ #define IS_SUBKEY_REV(s) ((s)->sig_class == 0x28) - struct getkey_ctx_s; typedef struct getkey_ctx_s *GETKEY_CTX; @@ -47,7 +50,6 @@ typedef struct getkey_ctx_s *GETKEY_CTX; * This structure is also used to bind arbitrary packets together. */ -typedef struct kbnode_struct *KBNODE; struct kbnode_struct { KBNODE next; PACKET *pkt; @@ -62,19 +64,28 @@ struct kbnode_struct { enum resource_type { rt_UNKNOWN = 0, - rt_RING = 1, - rt_KBXF = 2 + rt_RING = 1 }; /**************** - * A data structure to hold information about the external position + * A data structre to hold information about the external position * of a keyblock. */ -struct keyblock_pos_struct; -typedef struct keyblock_pos_struct *KBPOS; +struct keyblock_pos_struct { + int resno; /* resource number */ + enum resource_type rt; + off_t offset; /* position information */ + unsigned count; /* length of the keyblock in packets */ + IOBUF fp; /* used by enum_keyblocks */ + int secret; /* working on a secret keyring */ + PACKET *pkt; /* ditto */ + int valid; +}; +typedef struct keyblock_pos_struct KBPOS; /* structure to hold a couple of public key certificates */ +typedef struct pk_list *PK_LIST; struct pk_list { PK_LIST next; PKT_public_key *pk; @@ -82,18 +93,82 @@ struct pk_list { }; /* structure to hold a couple of secret key certificates */ +typedef struct sk_list *SK_LIST; struct sk_list { SK_LIST next; PKT_secret_key *sk; int mark; }; +/* structure to collect all information which can be used to + * identify a public key */ +typedef struct pubkey_find_info *PUBKEY_FIND_INFO; +struct pubkey_find_info { + u32 keyid[2]; + unsigned nbits; + byte pubkey_algo; + byte fingerprint[MAX_FINGERPRINT_LEN]; + char userid[1]; +}; + + +typedef struct keydb_handle *KEYDB_HANDLE; + +typedef enum { + KEYDB_SEARCH_MODE_NONE, + KEYDB_SEARCH_MODE_EXACT, + KEYDB_SEARCH_MODE_SUBSTR, + KEYDB_SEARCH_MODE_MAIL, + KEYDB_SEARCH_MODE_MAILSUB, + KEYDB_SEARCH_MODE_MAILEND, + KEYDB_SEARCH_MODE_WORDS, + KEYDB_SEARCH_MODE_SHORT_KID, + KEYDB_SEARCH_MODE_LONG_KID, + KEYDB_SEARCH_MODE_FPR16, + KEYDB_SEARCH_MODE_FPR20, + KEYDB_SEARCH_MODE_FPR, + KEYDB_SEARCH_MODE_FIRST, + KEYDB_SEARCH_MODE_NEXT +} KeydbSearchMode; + +struct keydb_search_desc { + KeydbSearchMode mode; + int (*skipfnc)(void *,u32*); + void *skipfncvalue; + union { + const char *name; + char fpr[MAX_FINGERPRINT_LEN]; + u32 kid[2]; + } u; +}; + +/*-- keydb.c --*/ +int keydb_add_resource (const char *url, int force, int secret); +KEYDB_HANDLE keydb_new (int secret); +void keydb_release (KEYDB_HANDLE hd); +const char *keydb_get_resource_name (KEYDB_HANDLE hd); +int keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb); +int keydb_update_keyblock (KEYDB_HANDLE hd, KBNODE kb); +int keydb_insert_keyblock (KEYDB_HANDLE hd, KBNODE kb); +int keydb_delete_keyblock (KEYDB_HANDLE hd); +int keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved); +void keydb_rebuild_caches (void); +int keydb_search_reset (KEYDB_HANDLE hd); +int keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc); +int keydb_search_first (KEYDB_HANDLE hd); +int keydb_search_next (KEYDB_HANDLE hd); +int keydb_search_kid (KEYDB_HANDLE hd, u32 *kid); +int keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr); + /*-- pkclist.c --*/ +void show_revocation_reason( PKT_public_key *pk, int mode ); int check_signatures_trust( PKT_signature *sig ); void release_pk_list( PK_LIST pk_list ); -int build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ); -int select_algo_from_prefs( PK_LIST pk_list, int preftype ); +int build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use ); +int select_algo_from_prefs( PK_LIST pk_list, int preftype, + int request, void *hint ); +int select_mdc_from_pklist (PK_LIST pk_list); /*-- skclist.c --*/ void release_sk_list( SK_LIST sk_list ); @@ -105,18 +180,19 @@ int have_static_passphrase(void); void read_passphrase_from_fd( int fd ); void passphrase_clear_cache ( u32 *keyid, int algo ); DEK *passphrase_to_dek( u32 *keyid, int pubkey_algo, - int cipher_algo, STRING2KEY *s2k, int mode); + int cipher_algo, STRING2KEY *s2k, int mode, + const char *tryagain_text); void set_next_passphrase( const char *s ); char *get_last_passphrase(void); /*-- getkey.c --*/ -int classify_user_id( const char *name, u32 *keyid, byte *fprint, - const char **retstr, size_t *retlen ); +int classify_user_id( const char *name, KEYDB_SEARCH_DESC *desc); +void cache_public_key( PKT_public_key *pk ); void getkey_disable_caches(void); int get_pubkey( PKT_public_key *pk, u32 *keyid ); KBNODE get_pubkeyblock( u32 *keyid ); -int get_pubkey_byname( GETKEY_CTX *rx, PKT_public_key *pk, - const char *name, KBNODE *ret_keyblock ); +int get_pubkey_byname( PKT_public_key *pk, const char *name, + KBNODE *ret_keyblock, KEYDB_HANDLE *ret_kdbhd); int get_pubkey_bynames( GETKEY_CTX *rx, PKT_public_key *pk, STRLIST names, KBNODE *ret_keyblock ); int get_pubkey_next( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE *ret_keyblock ); @@ -129,25 +205,21 @@ int get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint, size_t fprint_len ); int get_keyblock_bylid( KBNODE *ret_keyblock, ulong lid ); int seckey_available( u32 *keyid ); -int get_seckey_byname( GETKEY_CTX *rx, - PKT_secret_key *sk, const char *name, int unlock, - KBNODE *retblock ); +int get_seckey_byname( PKT_secret_key *sk, const char *name, int unlock ); int get_seckey_bynames( GETKEY_CTX *rx, PKT_secret_key *sk, STRLIST names, KBNODE *ret_keyblock ); +int get_seckey_byfprint( PKT_secret_key *sk, + const byte *fprint, size_t fprint_len); int get_seckey_next( GETKEY_CTX ctx, PKT_secret_key *sk, KBNODE *ret_keyblock ); void get_seckey_end( GETKEY_CTX ctx ); -int find_keyblock_byname( KBNODE *retblock, const char *username ); -int find_secret_keyblock_byname( KBNODE *retblock, const char *username ); -int find_keyblock_bypk( KBNODE *retblock, PKT_public_key *pk ); -int find_keyblock_bysk( KBNODE *retblock, PKT_secret_key *sk ); - int enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys ); void merge_keys_and_selfsig( KBNODE keyblock ); -void merge_public_with_secret ( KBNODE pubblock, KBNODE secblock ); char*get_user_id_string( u32 *keyid ); char*get_user_id_string_native( u32 *keyid ); char*get_long_user_id_string( u32 *keyid ); char*get_user_id( u32 *keyid, size_t *rn ); +char*get_user_id_native( u32 *keyid ); +KEYDB_HANDLE get_ctx_handle(GETKEY_CTX ctx); /*-- keyid.c --*/ int pubkey_letter( int algo ); @@ -162,12 +234,16 @@ const char *datestr_from_sk( PKT_secret_key *sk ); const char *datestr_from_sig( PKT_signature *sig ); const char *expirestr_from_pk( PKT_public_key *pk ); const char *expirestr_from_sk( PKT_secret_key *sk ); +const char *expirestr_from_sig( PKT_signature *sig ); + +const char *colon_strtime (u32 t); +const char *colon_datestr_from_pk (PKT_public_key *pk); +const char *colon_datestr_from_sk (PKT_secret_key *sk); +const char *colon_datestr_from_sig (PKT_signature *sig); +const char *colon_expirestr_from_sig (PKT_signature *sig); + byte *fingerprint_from_sk( PKT_secret_key *sk, byte *buf, size_t *ret_len ); byte *fingerprint_from_pk( PKT_public_key *pk, byte *buf, size_t *ret_len ); -char *unified_fingerprint_from_pk( PKT_public_key *pk, - char *buffer, size_t bufsize ); -char *unified_fingerprint_from_sk( PKT_secret_key *sk, - char *buffer, size_t bufsize ); /*-- kbnode.c --*/ KBNODE new_kbnode( PACKET *pkt ); @@ -186,18 +262,4 @@ void clear_kbnode_flags( KBNODE n ); int commit_kbnode( KBNODE *root ); void dump_kbnode( KBNODE node ); -/*-- ringedit.c --*/ -const char *enum_keyblock_resources( int *sequence, int secret ); -int add_keyblock_resource( const char *resname, int force, int secret ); -const char *keyblock_resource_name( KBPOS kbpos ); -int get_keyblock_handle( const char *filename, int secret, KBPOS kbpos ); -char *get_writable_keyblock_file( int secret ); -int enum_keyblocks_begin( KBPOS *kbpos, int mode ); -int enum_keyblocks_next( KBPOS kbpos, int mode, KBNODE *ret_root ); -void enum_keyblocks_end( KBPOS kbpos ); -int insert_keyblock( KBNODE keyblock ); -int delete_keyblock( KBNODE keyblock ); -int update_keyblock( KBNODE keyblock ); - - -#endif /*GPG_KEYDB_H*/ +#endif /*G10_KEYDB_H*/ diff --git a/g10/keyedit.c b/g10/keyedit.c index 095e43baf..db811ac0c 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -1,5 +1,5 @@ /* keyedit.c - keyedit stuff - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -31,7 +31,8 @@ #include "errors.h" #include "iobuf.h" #include "keydb.h" -#include +#include "memory.h" +#include "photoid.h" #include "util.h" #include "main.h" #include "trustdb.h" @@ -40,26 +41,32 @@ #include "status.h" #include "i18n.h" -static void show_prefs( KBNODE keyblock, PKT_user_id *uid ); -static void show_key_with_all_names( KBNODE keyblock, - int only_marked, int with_fpr, int with_subkeys, int with_prefs ); +static void show_prefs( PKT_user_id *uid, int verbose ); +static void show_key_with_all_names( KBNODE keyblock, int only_marked, + int with_revoker, int with_fpr, int with_subkeys, int with_prefs ); static void show_key_and_fingerprint( KBNODE keyblock ); -static void show_fingerprint( PKT_public_key *pk ); -static int menu_adduid( KBNODE keyblock, KBNODE sec_keyblock ); +static int menu_adduid( KBNODE keyblock, KBNODE sec_keyblock, int photo ); static void menu_deluid( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_delsig( KBNODE pub_keyblock ); static void menu_delkey( KBNODE pub_keyblock, KBNODE sec_keyblock ); +static int menu_addrevoker( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock ); +static int menu_set_primary_uid( KBNODE pub_keyblock, KBNODE sec_keyblock ); +static int menu_set_preferences( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_select_uid( KBNODE keyblock, int idx ); static int menu_select_key( KBNODE keyblock, int idx ); static int count_uids( KBNODE keyblock ); static int count_uids_with_flag( KBNODE keyblock, unsigned flag ); static int count_keys_with_flag( KBNODE keyblock, unsigned flag ); static int count_selected_uids( KBNODE keyblock ); +static int real_uids_left( KBNODE keyblock ); static int count_selected_keys( KBNODE keyblock ); static int menu_revsig( KBNODE keyblock ); static int menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int enable_disable_key( KBNODE keyblock, int disable ); +static void menu_showphoto( KBNODE keyblock ); + +static int update_trust=0; #define CONTROL_D ('D' - 'A' + 1) @@ -68,41 +75,19 @@ static int enable_disable_key( KBNODE keyblock, int disable ); #define NODFLG_SIGERR (1<<2) /* other sig error */ #define NODFLG_MARK_A (1<<4) /* temporary mark */ +#define NODFLG_DELSIG (1<<5) /* to be deleted */ #define NODFLG_SELUID (1<<8) /* indicate the selected userid */ #define NODFLG_SELKEY (1<<9) /* indicate the selected key */ #define NODFLG_SELSIG (1<<10) /* indicate a selected signature */ - struct sign_attrib { - int non_exportable; + int non_exportable,non_revocable; struct revocation_reason_info *reason; }; - - - -static int -get_keyblock_byname( KBNODE *keyblock, KBPOS *kbpos, const char *username ) -{ - int rc; - - *keyblock = NULL; - /* search the userid */ - rc = find_keyblock_byname( keyblock, username ); - if( rc ) { - log_error(_("%s: user not found: %s\n"), username, gpg_errstr(rc) ); - return rc; - } - - merge_keys_and_selfsig( *keyblock ); - - return rc; -} - - /**************** - * Print information about a signature, chek it and return true + * Print information about a signature, check it and return true * if the signature is okay. NODE must be a signature packet. */ static int @@ -119,13 +104,14 @@ print_and_check_one_sig( KBNODE keyblock, KBNODE node, node->flag &= ~(NODFLG_BADSIG|NODFLG_NOKEY|NODFLG_SIGERR); sigrc = '!'; break; - case GPGERR_BAD_SIGN: + case G10ERR_BAD_SIGN: node->flag = NODFLG_BADSIG; sigrc = '-'; if( inv_sigs ) ++*inv_sigs; break; - case GPGERR_NO_PUBKEY: + case G10ERR_NO_PUBKEY: + case G10ERR_UNU_PUBKEY: node->flag = NODFLG_NOKEY; sigrc = '?'; if( no_key ) @@ -139,11 +125,18 @@ print_and_check_one_sig( KBNODE keyblock, KBNODE node, break; } if( sigrc != '?' || print_without_key ) { - tty_printf("%s%c %08lX %s ", - is_rev? "rev":"sig", - sigrc, sig->keyid[1], datestr_from_sig(sig)); + tty_printf("%s%c%c %c%c%c%c%c %08lX %s ", + is_rev? "rev":"sig",sigrc, + (sig->sig_class-0x10>0 && + sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ', + sig->flags.exportable?' ':'L', + sig->flags.revocable?' ':'R', + sig->flags.policy_url?'P':' ', + sig->flags.notation?'N':' ', + sig->flags.expired?'X':' ', + (ulong)sig->keyid[1], datestr_from_sig(sig)); if( sigrc == '%' ) - tty_printf("[%s] ", gpg_errstr(rc) ); + tty_printf("[%s] ", g10_errstr(rc) ); else if( sigrc == '?' ) ; else if( *is_selfsig ) { @@ -154,10 +147,17 @@ print_and_check_one_sig( KBNODE keyblock, KBNODE node, size_t n; char *p = get_user_id( sig->keyid, &n ); tty_print_utf8_string2( p, n, 40 ); - gcry_free(p); + m_free(p); } tty_printf("\n"); + + if(sig->flags.policy_url && opt.show_policy_url) + show_policy_url(sig,3); + + if(sig->flags.notation && opt.show_notation) + show_notation(sig,3); } + return (sigrc == '!'); } @@ -212,7 +212,7 @@ check_all_keysigs( KBNODE keyblock, int only_selected ) if( !has_selfsig ) mis_selfsig++; if( inv_sigs == 1 ) - tty_printf(_("1 bad signature\n"), inv_sigs ); + tty_printf(_("1 bad signature\n") ); else if( inv_sigs ) tty_printf(_("%d bad signatures\n"), inv_sigs ); if( no_key == 1 ) @@ -245,6 +245,12 @@ sign_mk_attrib( PKT_signature *sig, void *opaque ) buf[0] = 0; /* not exportable */ build_sig_subpkt( sig, SIGSUBPKT_EXPORTABLE, buf, 1 ); } + + if( attrib->non_revocable ) { + buf[0] = 0; /* not revocable */ + build_sig_subpkt( sig, SIGSUBPKT_REVOCABLE, buf, 1 ); + } + if( attrib->reason ) revocation_reason_build_cb( sig, attrib->reason ); @@ -259,7 +265,8 @@ sign_mk_attrib( PKT_signature *sig, void *opaque ) * if some user_ids are marked those will be signed. */ static int -sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified, int local ) +sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified, + int local , int nonrevocable ) { int rc = 0; SK_LIST sk_list = NULL; @@ -268,18 +275,40 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified, int local ) KBNODE node, uidnode; PKT_public_key *primary_pk=NULL; int select_all = !count_selected_uids(keyblock); - int upd_trust = 0; + int all_v3=1; - /* build a list of all signators */ - rc=build_sk_list( locusr, &sk_list, 0, 1 ); + /* Are there any non-v3 sigs on this key already? */ + if(opt.pgp2) + for(node=keyblock;node;node=node->next) + if(node->pkt->pkttype==PKT_SIGNATURE && + node->pkt->pkt.signature->version>3) + { + all_v3=0; + break; + } + + /* build a list of all signators. + * + * We use the CERT flag to request the primary which must always + * be one which is capable of signing keys. I can't see a reason + * why to sign keys using a subkey. Implementation of USAGE_CERT + * is just a hack in getkey.c and does not mean that a subkey + * marked as certification capable will be used */ + rc=build_sk_list( locusr, &sk_list, 0, PUBKEY_USAGE_SIG|PUBKEY_USAGE_CERT); if( rc ) goto leave; - /* loop over all signaturs */ + /* loop over all signators */ for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { - u32 sk_keyid[2]; + u32 sk_keyid[2],pk_keyid[2]; size_t n; char *p; + int force_v4=0,class=0,selfsig=0; + u32 duration=0,timestamp=0; + + if(local || nonrevocable || + opt.cert_policy_url || opt.cert_notation_data) + force_v4=1; /* we have to use a copy of the sk, because make_keysig_packet * may remove the protection from sk and if we did other @@ -299,18 +328,129 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified, int local ) /* reset mark for uids which are already signed */ uidnode = NULL; for( node=keyblock; node; node = node->next ) { - if( node->pkt->pkttype == PKT_USER_ID ) { + if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { + primary_pk=node->pkt->pkt.public_key; + keyid_from_pk( primary_pk, pk_keyid ); + + /* Is this a self-sig? */ + if(pk_keyid[0]==sk_keyid[0] && pk_keyid[1]==sk_keyid[1]) + { + selfsig=1; + /* Do not force a v4 sig here, otherwise it would + be difficult to remake a v3 selfsig. If this + is a v3->v4 promotion case, then we set + force_v4 later anyway. */ + force_v4=0; + } + } + else if( node->pkt->pkttype == PKT_USER_ID ) { uidnode = (node->flag & NODFLG_MARK_A)? node : NULL; + if(uidnode) + { + char *user=utf8_to_native(uidnode->pkt->pkt.user_id->name, + uidnode->pkt->pkt.user_id->len, + 0); + + if(uidnode->pkt->pkt.user_id->is_revoked) + { + tty_printf(_("User ID \"%s\" is revoked."),user); + + if(opt.expert) + { + tty_printf("\n"); + /* No, so remove the mark and continue */ + if(!cpr_get_answer_is_yes("sign_uid.revoke_okay", + _("Are you sure you " + "still want to sign " + "it? (y/N) "))) + uidnode->flag &= ~NODFLG_MARK_A; + } + else + { + uidnode->flag &= ~NODFLG_MARK_A; + tty_printf(_(" Unable to sign.\n")); + } + } + else if(!uidnode->pkt->pkt.user_id->created) + { + tty_printf(_("Warning: user ID \"%s\" is not " + "self-signed.\n"),user); + } + + m_free(user); + } } else if( uidnode && node->pkt->pkttype == PKT_SIGNATURE && (node->pkt->pkt.signature->sig_class&~3) == 0x10 ) { if( sk_keyid[0] == node->pkt->pkt.signature->keyid[0] && sk_keyid[1] == node->pkt->pkt.signature->keyid[1] ) { + char buf[50]; + char *user=utf8_to_native(uidnode->pkt->pkt.user_id->name, + uidnode->pkt->pkt.user_id->len, + 0); + + /* It's a v3 self-sig. Make it into a v4 self-sig? */ + if(node->pkt->pkt.signature->version<4 && selfsig) + { + tty_printf(_("The self-signature on \"%s\"\n" + "is a PGP 2.x-style signature.\n"),user); + + /* Note that the regular PGP2 warning below + still applies if there are no v4 sigs on + this key at all. */ + + if(opt.expert) + if(cpr_get_answer_is_yes("sign_uid.v4_promote_okay", + _("Do you want to promote " + "it to an OpenPGP self-" + "signature? (y/N) "))) + { + force_v4=1; + node->flag|=NODFLG_DELSIG; + continue; + } + } + + if(!node->pkt->pkt.signature->flags.exportable && !local) + { + /* It's a local sig, and we want to make a + exportable sig. */ + tty_printf(_("Your current signature on \"%s\"\n" + "is a local signature.\n"),user); + + if(cpr_get_answer_is_yes("sign_uid.local_promote_okay", + _("Do you want to promote " + "it to a full exportable " + "signature? (y/N) "))) + { + /* Mark these for later deletion. We + don't want to delete them here, just in + case the replacement signature doesn't + happen for some reason. We only delete + these after the replacement is already + in place. */ + + node->flag|=NODFLG_DELSIG; + continue; + } + } + /* Fixme: see whether there is a revocation in which * case we should allow to sign it again. */ - tty_printf(_("Already signed by key %08lX\n"), - (ulong)sk_keyid[1] ); + if (!node->pkt->pkt.signature->flags.exportable && local) + tty_printf(_( + "\"%s\" was already locally signed by key %08lX\n"), + user,(ulong)sk_keyid[1] ); + else + tty_printf(_( + "\"%s\" was already signed by key %08lX\n"), + user,(ulong)sk_keyid[1] ); + sprintf (buf, "%08lX%08lX", + (ulong)sk->keyid[0], (ulong)sk->keyid[1] ); + write_status_text (STATUS_ALREADY_SIGNED, buf); uidnode->flag &= ~NODFLG_MARK_A; /* remove mark */ + + m_free(user); } } } @@ -322,25 +462,186 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified, int local ) } /* Ask whether we really should sign these user id(s) */ tty_printf("\n"); - show_key_with_all_names( keyblock, 1, 1, 0, 0 ); + show_key_with_all_names( keyblock, 1, 0, 1, 0, 0 ); tty_printf("\n"); - tty_printf(_( - "Are you really sure that you want to sign this key\n" - "with your key: \"")); + + if(primary_pk->expiredate && !selfsig) + { + u32 now=make_timestamp(); + + if(primary_pk->expiredate<=now) + { + tty_printf(_("This key has expired!")); + + if(opt.expert) + { + tty_printf(" "); + if(!cpr_get_answer_is_yes("sign_uid.expired_okay", + _("Are you sure you still " + "want to sign it? (y/N) "))) + continue; + } + else + { + tty_printf(_(" Unable to sign.\n")); + continue; + } + } + else + { + char *answer; + + tty_printf(_("This key is due to expire on %s.\n"), + expirestr_from_pk(primary_pk)); + + answer=cpr_get("sign_uid.expire", + _("Do you want your signature to " + "expire at the same time? (Y/n) ")); + if(answer_is_yes_no_default(answer,1)) + { + /* This fixes the signature timestamp we're going + to make as now. This is so the expiration date + is exactly correct, and not a few seconds off + (due to the time it takes to answer the + questions, enter the passphrase, etc). */ + timestamp=now; + duration=primary_pk->expiredate-now; + force_v4=1; + } + + cpr_kill_prompt(); + m_free(answer); + } + } + + /* Only ask for duration if we haven't already set it to match + the expiration of the pk */ + if(opt.ask_cert_expire && !duration && !selfsig) + duration=ask_expire_interval(1); + + if(duration) + force_v4=1; + + /* Is --pgp2 on, it's a v3 key, all the sigs on the key are + currently v3 and we're about to sign it with a v4 sig? If + so, danger! */ + if(opt.pgp2 && all_v3 && + (sk->version>3 || force_v4) && primary_pk->version<=3) + { + tty_printf(_("You may not make an OpenPGP signature on a " + "PGP 2.x key while in --pgp2 mode.\n")); + tty_printf(_("This would make the key unusable in PGP 2.x.\n")); + + if(opt.expert) + { + if(!cpr_get_answer_is_yes("sign_uid.v4_on_v3_okay", + _("Are you sure you still " + "want to sign it? (y/N) "))) + continue; + + all_v3=0; + } + else + continue; + } + + if(selfsig) + ; + else if(opt.batch) + class=0x10+opt.def_cert_check_level; + else + { + char *answer; + + tty_printf(_("How carefully have you verified the key you are " + "about to sign actually belongs\nto the person named " + "above? If you don't know what to answer, enter \"0\".\n")); + tty_printf("\n"); + tty_printf(_(" (0) I will not answer.%s\n"), + opt.def_cert_check_level==0?" (default)":""); + tty_printf(_(" (1) I have not checked at all.%s\n"), + opt.def_cert_check_level==1?" (default)":""); + tty_printf(_(" (2) I have done casual checking.%s\n"), + opt.def_cert_check_level==2?" (default)":""); + tty_printf(_(" (3) I have done very careful checking.%s\n"), + opt.def_cert_check_level==3?" (default)":""); + tty_printf("\n"); + + while(class==0) + { + answer = cpr_get("sign_uid.class",_("Your selection? ")); + + if(answer[0]=='\0') + class=0x10+opt.def_cert_check_level; /* Default */ + else if(ascii_strcasecmp(answer,"0")==0) + class=0x10; /* Generic */ + else if(ascii_strcasecmp(answer,"1")==0) + class=0x11; /* Persona */ + else if(ascii_strcasecmp(answer,"2")==0) + class=0x12; /* Casual */ + else if(ascii_strcasecmp(answer,"3")==0) + class=0x13; /* Positive */ + else + tty_printf(_("Invalid selection.\n")); + + m_free(answer); + } + } + + tty_printf(_("Are you really sure that you want to sign this key\n" + "with your key: \"")); p = get_user_id( sk_keyid, &n ); tty_print_utf8_string( p, n ); - gcry_free(p); p = NULL; - tty_printf("\"\n\n"); + m_free(p); p = NULL; + tty_printf("\"\n"); - if( local ) - tty_printf( - _("The signature will be marked as non-exportable.\n\n")); + if(selfsig) + { + tty_printf(_("\nThis will be a self-signature.\n")); + if( local ) + tty_printf( + _("\nWarning: the signature will not be marked " + "as non-exportable.\n")); + + if( nonrevocable ) + tty_printf( + _("\nWarning: the signature will not be marked " + "as non-revocable.\n")); + } + else + { + if( local ) + tty_printf( + _("\nThe signature will be marked as non-exportable.\n")); + + if( nonrevocable ) + tty_printf( + _("\nThe signature will be marked as non-revocable.\n")); + + switch(class) + { + case 0x11: + tty_printf(_("\nI have not checked this key at all.\n")); + break; + + case 0x12: + tty_printf(_("\nI have checked this key casually.\n")); + break; + + case 0x13: + tty_printf(_("\nI have checked this key very carefully.\n")); + break; + } + } + + tty_printf("\n"); if( opt.batch && opt.answer_yes ) - ; + ; else if( !cpr_get_answer_is_yes("sign_uid.okay", _("Really sign? ")) ) continue; + /* now we can sign the user ids */ reloop: /* (must use this, because we are modifing the list) */ primary_pk = NULL; @@ -356,33 +657,50 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified, int local ) assert( primary_pk ); memset( &attrib, 0, sizeof attrib ); attrib.non_exportable = local; + attrib.non_revocable = nonrevocable; node->flag &= ~NODFLG_MARK_A; - rc = make_keysig_packet( &sig, primary_pk, - node->pkt->pkt.user_id, - NULL, - sk, - 0x10, 0, - sign_mk_attrib, - &attrib ); + + /* we force creation of a v4 signature for local + * signatures, otherwise we would not generate the + * subpacket with v3 keys and the signature becomes + * exportable */ + + if(selfsig) + rc = make_keysig_packet( &sig, primary_pk, + node->pkt->pkt.user_id, + NULL, + sk, + 0x13, 0, force_v4?4:0, 0, 0, + keygen_add_std_prefs, primary_pk); + else + rc = make_keysig_packet( &sig, primary_pk, + node->pkt->pkt.user_id, + NULL, + sk, + class, 0, force_v4?4:0, + timestamp, duration, + sign_mk_attrib, &attrib ); if( rc ) { - log_error(_("signing failed: %s\n"), gpg_errstr(rc)); + log_error(_("signing failed: %s\n"), g10_errstr(rc)); goto leave; } - *ret_modified = 1; /* we changed the keyblock */ - upd_trust = 1; - pkt = gcry_xcalloc( 1, sizeof *pkt ); + *ret_modified = 1; /* we changed the keyblock */ + update_trust = 1; + + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( node, new_kbnode(pkt), PKT_SIGNATURE ); goto reloop; } } - } /* end loop over signators */ - if( upd_trust && primary_pk ) { - rc = clear_trust_checked_flag( primary_pk ); - } + /* Delete any sigs that got promoted */ + for( node=keyblock; node; node = node->next ) + if( node->flag & NODFLG_DELSIG) + delete_kbnode(node); + } /* end loop over signators */ leave: release_sk_list( sk_list ); @@ -416,7 +734,7 @@ change_passphrase( KBNODE keyblock ) switch( is_secret_key_protected( sk ) ) { case -1: - rc = GPGERR_PUBKEY_ALGO; + rc = G10ERR_PUBKEY_ALGO; break; case 0: tty_printf(_("This key is not protected.\n")); @@ -447,10 +765,11 @@ change_passphrase( KBNODE keyblock ) } if( rc ) - tty_printf(_("Can't edit this key: %s\n"), gpg_errstr(rc)); + tty_printf(_("Can't edit this key: %s\n"), g10_errstr(rc)); else { DEK *dek = NULL; - STRING2KEY *s2k = gcry_xmalloc_secure( sizeof *s2k ); + STRING2KEY *s2k = m_alloc_secure( sizeof *s2k ); + const char *errtext = NULL; tty_printf(_("Enter the new passphrase for this secret key.\n\n") ); @@ -458,9 +777,11 @@ change_passphrase( KBNODE keyblock ) for(;;) { s2k->mode = opt.s2k_mode; s2k->hash_algo = opt.s2k_digest_algo; - dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2 ); + dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, + s2k, 2, errtext); if( !dek ) { - tty_printf(_("passphrase not correctly repeated; try again.\n")); + errtext = _("passphrase not correctly repeated; try again"); + tty_printf ("%s.\n", errtext); } else if( !dek->keylen ) { rc = 0; @@ -487,18 +808,18 @@ change_passphrase( KBNODE keyblock ) } } if( rc ) - log_error("protect_secret_key failed: %s\n", gpg_errstr(rc) ); + log_error("protect_secret_key failed: %s\n", g10_errstr(rc) ); else changed++; break; } } - gcry_free(s2k); - gcry_free(dek); + m_free(s2k); + m_free(dek); } leave: - gcry_free( passphrase ); + m_free( passphrase ); set_next_passphrase( NULL ); return changed && !rc; } @@ -560,11 +881,12 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, { enum cmdids { cmdNONE = 0, cmdQUIT, cmdHELP, cmdFPR, cmdLIST, cmdSELUID, cmdCHECK, cmdSIGN, - cmdLSIGN, cmdREVSIG, cmdREVKEY, cmdDELSIG, - cmdDEBUG, cmdSAVE, cmdADDUID, cmdDELUID, cmdADDKEY, cmdDELKEY, - cmdTOGGLE, cmdSELKEY, cmdPASSWD, cmdTRUST, cmdPREF, cmdEXPIRE, - cmdENABLEKEY, cmdDISABLEKEY, - cmdINVCMD, cmdNOP }; + cmdLSIGN, cmdNRSIGN, cmdNRLSIGN, cmdREVSIG, cmdREVKEY, cmdDELSIG, + cmdPRIMARY, cmdDEBUG, cmdSAVE, cmdADDUID, cmdADDPHOTO, cmdDELUID, + cmdADDKEY, cmdDELKEY, cmdADDREVOKER, cmdTOGGLE, cmdSELKEY, + cmdPASSWD, cmdTRUST, cmdPREF, cmdEXPIRE, cmdENABLEKEY, + cmdDISABLEKEY, cmdSHOWPREF, cmdSETPREF, cmdUPDPREF, cmdINVCMD, + cmdSHOWPHOTO, cmdUPDTRUST, cmdCHKTRUST, cmdNOP }; static struct { const char *name; enum cmdids id; int need_sk; @@ -587,30 +909,42 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, { N_("sign") , cmdSIGN , 0,1,1, N_("sign the key") }, { N_("s") , cmdSIGN , 0,1,1, NULL }, { N_("lsign") , cmdLSIGN , 0,1,1, N_("sign the key locally") }, + { N_("nrsign") , cmdNRSIGN , 0,1,1, N_("sign the key non-revocably") }, + { N_("nrlsign") , cmdNRLSIGN , 0,1,1, N_("sign the key locally and non-revocably") }, { N_("debug") , cmdDEBUG , 0,0,0, NULL }, { N_("adduid") , cmdADDUID , 1,1,0, N_("add a user ID") }, + { N_("addphoto"), cmdADDPHOTO , 1,1,0, N_("add a photo ID") }, { N_("deluid") , cmdDELUID , 0,1,0, N_("delete user ID") }, + /* delphoto is really deluid in disguise */ + { N_("delphoto"), cmdDELUID , 0,1,0, NULL }, { N_("addkey") , cmdADDKEY , 1,1,0, N_("add a secondary key") }, { N_("delkey") , cmdDELKEY , 0,1,0, N_("delete a secondary key") }, + { N_("addrevoker"),cmdADDREVOKER,1,1,0, N_("add a revocation key") }, { N_("delsig") , cmdDELSIG , 0,1,0, N_("delete signatures") }, { N_("expire") , cmdEXPIRE , 1,1,0, N_("change the expire date") }, + { N_("primary") , cmdPRIMARY , 1,1,0, N_("flag user ID as primary")}, { N_("toggle") , cmdTOGGLE , 1,0,0, N_("toggle between secret " "and public key listing") }, { N_("t" ) , cmdTOGGLE , 1,0,0, NULL }, - { N_("pref") , cmdPREF , 0,1,0, N_("list preferences") }, + { N_("pref") , cmdPREF , 0,1,0, N_("list preferences (expert)") }, + { N_("showpref"), cmdSHOWPREF , 0,1,0, N_("list preferences (verbose)") }, + { N_("setpref") , cmdSETPREF , 1,1,0, N_("set preference list") }, + { N_("updpref") , cmdUPDPREF , 1,1,0, N_("updated preferences") }, { N_("passwd") , cmdPASSWD , 1,1,0, N_("change the passphrase") }, { N_("trust") , cmdTRUST , 0,1,0, N_("change the ownertrust") }, { N_("revsig") , cmdREVSIG , 0,1,0, N_("revoke signatures") }, { N_("revkey") , cmdREVKEY , 1,1,0, N_("revoke a secondary key") }, { N_("disable") , cmdDISABLEKEY, 0,1,0, N_("disable a key") }, { N_("enable") , cmdENABLEKEY , 0,1,0, N_("enable a key") }, + { N_("showphoto"),cmdSHOWPHOTO , 0,0,0, N_("show photo ID") }, { NULL, cmdNONE } }; enum cmdids cmd = 0; int rc = 0; KBNODE keyblock = NULL; - KBPOS keyblockpos; + KEYDB_HANDLE kdbhd = NULL; KBNODE sec_keyblock = NULL; + KEYDB_HANDLE sec_kdbhd = NULL; KBNODE cur_keyblock; char *answer = NULL; int redisplay = 1; @@ -619,34 +953,23 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, int toggle; int have_commands = !!commands; - - if( opt.batch && !have_commands ) { + if ( opt.command_fd != -1 ) + ; + else if( opt.batch && !have_commands ) { log_error(_("can't do that in batchmode\n")); goto leave; } if( sign_mode ) { commands = NULL; - append_to_strlist( &commands, sign_mode == 1? "sign":"lsign" ); + append_to_strlist( &commands, sign_mode == 1? "sign": + sign_mode == 2?"lsign": + sign_mode == 3?"nrsign":"nrlsign"); have_commands = 1; } - - if( !sign_mode ) { - /* first try to locate it as secret key */ - rc = find_secret_keyblock_byname( &sec_keyblock, username ); - if( rc && rc != GPGERR_NO_SECKEY ) - log_debug("%s: secret keyblock read problem: %s\n", - username, gpg_errstr(rc)); - if( !rc ) { - merge_keys_and_selfsig( sec_keyblock ); - if( fix_keyblock( sec_keyblock ) ) - sec_modified++; - } - } - - /* and now get the public key */ - rc = get_keyblock_byname( &keyblock, &keyblockpos, username ); + /* get the public key */ + rc = get_pubkey_byname (NULL, username, &keyblock, &kdbhd); if( rc ) goto leave; if( fix_keyblock( keyblock ) ) @@ -654,44 +977,79 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, if( collapse_uids( &keyblock ) ) modified++; - if( sec_keyblock ) { /* check that they match */ - /* fixme: check that they both match */ + if( !sign_mode ) {/* see whether we have a matching secret key */ + PKT_public_key *pk = keyblock->pkt->pkt.public_key; + + sec_kdbhd = keydb_new (1); + { + byte afp[MAX_FINGERPRINT_LEN]; + size_t an; + + fingerprint_from_pk (pk, afp, &an); + while (an < MAX_FINGERPRINT_LEN) + afp[an++] = 0; + rc = keydb_search_fpr (sec_kdbhd, afp); + } + if (!rc) { + rc = keydb_get_keyblock (sec_kdbhd, &sec_keyblock); + if (rc) { + log_error (_("error reading secret keyblock `%s': %s\n"), + username, g10_errstr(rc)); + } + else { + merge_keys_and_selfsig( sec_keyblock ); + if( fix_keyblock( sec_keyblock ) ) + sec_modified++; + } + } + + if (rc) { + sec_keyblock = NULL; + keydb_release (sec_kdbhd); sec_kdbhd = NULL; + rc = 0; + } + } + + if( sec_keyblock ) { tty_printf(_("Secret key is available.\n")); } toggle = 0; cur_keyblock = keyblock; for(;;) { /* main loop */ - int i, arg_number; + int i, arg_number, photo; + const char *arg_string = ""; char *p; + PKT_public_key *pk=keyblock->pkt->pkt.public_key; tty_printf("\n"); if( redisplay ) { - show_key_with_all_names( cur_keyblock, 0, 0, 1, 0 ); + show_key_with_all_names( cur_keyblock, 0, 1, 0, 1, 0 ); tty_printf("\n"); redisplay = 0; } do { - gcry_free(answer); + m_free(answer); if( have_commands ) { if( commands ) { - answer = gcry_xstrdup( commands->d ); + answer = m_strdup( commands->d ); commands = commands->next; } else if( opt.batch ) { - answer = gcry_xstrdup("quit"); + answer = m_strdup("quit"); } else have_commands = 0; } if( !have_commands ) { - answer = cpr_get("keyedit.prompt", _("Command> ")); + answer = cpr_get_no_help("keyedit.prompt", _("Command> ")); cpr_kill_prompt(); } trim_spaces(answer); } while( *answer == '#' ); - arg_number = 0; /* Yes, here is the init which egcc complains about*/ + arg_number = 0; /* Yes, here is the init which egcc complains about */ + photo = 0; /* This too */ if( !*answer ) cmd = cmdLIST; else if( *answer == CONTROL_D ) @@ -706,10 +1064,11 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, trim_spaces(answer); trim_spaces(p); arg_number = atoi(p); + arg_string = p; } for(i=0; cmds[i].name; i++ ) { - if( !stricmp( answer, cmds[i].name ) ) + if( !ascii_strcasecmp( answer, cmds[i].name ) ) break; } if( sign_mode && !cmds[i].signmode ) @@ -764,6 +1123,27 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, case cmdSIGN: /* sign (only the public key) */ case cmdLSIGN: /* sign (only the public key) */ + case cmdNRSIGN: /* sign (only the public key) */ + case cmdNRLSIGN: /* sign (only the public key) */ + if( pk->is_revoked ) + { + tty_printf(_("Key is revoked.")); + + if(opt.expert) + { + tty_printf(" "); + if(!cpr_get_answer_is_yes("keyedit.sign_revoked.okay", + _("Are you sure you still want " + "to sign it? (y/N) "))) + break; + } + else + { + tty_printf(_(" Unable to sign.\n")); + break; + } + } + if( count_uids(keyblock) > 1 && !count_selected_uids(keyblock) ) { if( !cpr_get_answer_is_yes("keyedit.sign_all.okay", _("Really sign all user IDs? ")) ) { @@ -771,14 +1151,11 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, break; } } - if( !sign_uids( keyblock, locusr, &modified, cmd == cmdLSIGN ) + if( !sign_uids( keyblock, locusr, &modified, + (cmd == cmdLSIGN) || (cmd == cmdNRLSIGN), + (cmd == cmdNRSIGN) || (cmd==cmdNRLSIGN)) && sign_mode ) - goto do_cmd_save; - /* Actually we should do a update_trust_record() here so that - * the trust gets displayed correctly. however this is not possible - * because we would have to save the keyblock first - something - * we don't want to do without an explicit save command. - */ + goto do_cmd_save; break; case cmdDEBUG: @@ -791,18 +1168,23 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, redisplay = 1; break; + case cmdADDPHOTO: + if (opt.rfc2440 || opt.rfc1991 || opt.pgp2) + { + tty_printf( + _("This command is not allowed while in %s mode.\n"), + opt.rfc2440?"OpenPGP":opt.pgp2?"PGP2":"RFC-1991"); + break; + } + photo=1; + /* fall through */ + case cmdADDUID: - if( menu_adduid( keyblock, sec_keyblock ) ) { + if( menu_adduid( keyblock, sec_keyblock, photo ) ) { redisplay = 1; sec_modified = modified = 1; - /* must update the trustdb already here, so that preferences - * get listed correctly */ - rc = update_trust_record( keyblock, 0, NULL ); - if( rc ) { - log_error(_("update of trustdb failed: %s\n"), - gpg_errstr(rc) ); - rc = 0; - } + merge_keys_and_selfsig( sec_keyblock ); + merge_keys_and_selfsig( keyblock ); } break; @@ -811,7 +1193,7 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, if( !(n1=count_selected_uids(keyblock)) ) tty_printf(_("You must select at least one user ID.\n")); - else if( count_uids(keyblock) - n1 < 1 ) + else if( real_uids_left(keyblock) < 1 ) tty_printf(_("You can't delete the last user ID!\n")); else if( cpr_get_answer_is_yes( "keyedit.remove.uid.okay", @@ -844,6 +1226,8 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, if( generate_subkeypair( keyblock, sec_keyblock ) ) { redisplay = 1; sec_modified = modified = 1; + merge_keys_and_selfsig( sec_keyblock ); + merge_keys_and_selfsig( keyblock ); } break; @@ -870,6 +1254,15 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, } break; + case cmdADDREVOKER: + if( menu_addrevoker( keyblock, sec_keyblock ) ) { + redisplay = 1; + sec_modified = modified = 1; + merge_keys_and_selfsig( sec_keyblock ); + merge_keys_and_selfsig( keyblock ); + } + break; + case cmdREVKEY: { int n1; @@ -902,23 +1295,62 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, } break; + case cmdPRIMARY: + if( menu_set_primary_uid ( keyblock, sec_keyblock ) ) { + merge_keys_and_selfsig( keyblock ); + modified = 1; + redisplay = 1; + } + break; + case cmdPASSWD: if( change_passphrase( sec_keyblock ) ) sec_modified = 1; break; case cmdTRUST: - show_key_with_all_names( keyblock, 0, 0, 1, 0 ); + show_key_with_all_names( keyblock, 0, 0, 0, 1, 0 ); tty_printf("\n"); if( edit_ownertrust( find_kbnode( keyblock, - PKT_PUBLIC_KEY )->pkt->pkt.public_key->local_id, 1 ) ) + PKT_PUBLIC_KEY )->pkt->pkt.public_key, 1 ) ) { redisplay = 1; - /* we don't need to set modified here, as the trustvalues - * are updated immediately */ + /* No real need to set update_trust here as + edit_ownertrust() calls revalidation_mark() + anyway. */ + update_trust=1; + } break; case cmdPREF: - show_key_with_all_names( keyblock, 0, 0, 0, 1 ); + show_key_with_all_names( keyblock, 0, 0, 0, 0, 1 ); + break; + + case cmdSHOWPREF: + show_key_with_all_names( keyblock, 0, 0, 0, 0, 2 ); + break; + + case cmdSETPREF: + keygen_set_std_prefs ( !*arg_string? "default" : arg_string, 0); + break; + + case cmdUPDPREF: + { + p = keygen_get_std_prefs (); + tty_printf (("Current preference list: %s\n"), p); + m_free (p); + } + if (cpr_get_answer_is_yes ("keyedit.updpref.okay", + count_selected_uids (keyblock)? + _("Really update the preferences" + " for the selected user IDs? "): + _("Really update the preferences? "))){ + + if ( menu_set_preferences (keyblock, sec_keyblock) ) { + merge_keys_and_selfsig (keyblock); + modified = 1; + redisplay = 1; + } + } break; case cmdNOP: @@ -939,6 +1371,10 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, } break; + case cmdSHOWPHOTO: + menu_showphoto(keyblock); + break; + case cmdQUIT: if( have_commands ) goto leave; @@ -957,32 +1393,29 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, do_cmd_save: if( modified || sec_modified ) { if( modified ) { - rc = update_keyblock( keyblock ); + rc = keydb_update_keyblock (kdbhd, keyblock); if( rc ) { - log_error(_("update failed: %s\n"), gpg_errstr(rc) ); + log_error(_("update failed: %s\n"), g10_errstr(rc) ); break; } } if( sec_modified ) { - rc = update_keyblock( sec_keyblock ); + rc = keydb_update_keyblock (sec_kdbhd, sec_keyblock ); if( rc ) { - log_error(_("update secret failed: %s\n"), - gpg_errstr(rc) ); + log_error( _("update secret failed: %s\n"), + g10_errstr(rc) ); break; } } } else tty_printf(_("Key not changed so no update needed.\n")); - /* TODO: we should keep track whether we have changed - * something relevant to the trustdb */ - if( !modified && sign_mode ) - rc = 0; /* we can skip at least in this case */ - else - rc = update_trust_record( keyblock, 0, NULL ); - if( rc ) - log_error(_("update of trustdb failed: %s\n"), - gpg_errstr(rc) ); + + if( update_trust ) + { + revalidation_mark (); + update_trust=0; + } goto leave; case cmdINVCMD: @@ -996,7 +1429,8 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, leave: release_kbnode( keyblock ); release_kbnode( sec_keyblock ); - gcry_free(answer); + keydb_release (kdbhd); + m_free(answer); } @@ -1004,45 +1438,246 @@ keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, * show preferences of a public keyblock. */ static void -show_prefs( KBNODE keyblock, PKT_user_id *uid ) +show_prefs (PKT_user_id *uid, int verbose) { - KBNODE node = find_kbnode( keyblock, PKT_PUBLIC_KEY ); - PKT_public_key *pk; - byte *p; + const prefitem_t fake={0,0}; + const prefitem_t *prefs; int i; - size_t n; - byte namehash[20]; - if( !node ) - return; /* is a secret keyblock */ - pk = node->pkt->pkt.public_key; - if( !pk->local_id ) { - log_error("oops: no LID\n"); - return; - } + if( !uid ) + return; - if( uid->photo ) { - gcry_md_hash_buffer( GCRY_MD_RMD160, namehash, uid->photo, - uid->photolen ); + if( uid->prefs ) + prefs=uid->prefs; + else if(verbose) + prefs=&fake; + else + return; + + if (verbose) { + int any, des_seen=0, sha1_seen=0, uncomp_seen=0; + tty_printf (" Cipher: "); + for(i=any=0; prefs[i].type; i++ ) { + if( prefs[i].type == PREFTYPE_SYM ) { + const char *s = cipher_algo_to_string (prefs[i].value); + + if (any) + tty_printf (", "); + any = 1; + /* We don't want to display strings for experimental algos */ + if (s && prefs[i].value < 100 ) + tty_printf ("%s", s ); + else + tty_printf ("[%d]", prefs[i].value); + if (prefs[i].value == CIPHER_ALGO_3DES ) + des_seen = 1; + } + } + if (!des_seen) { + if (any) + tty_printf (", "); + tty_printf ("%s",cipher_algo_to_string(CIPHER_ALGO_3DES)); + } + tty_printf ("\n Hash: "); + for(i=any=0; prefs[i].type; i++ ) { + if( prefs[i].type == PREFTYPE_HASH ) { + const char *s = digest_algo_to_string (prefs[i].value); + + if (any) + tty_printf (", "); + any = 1; + /* We don't want to display strings for experimental algos */ + if (s && prefs[i].value < 100 ) + tty_printf ("%s", s ); + else + tty_printf ("[%d]", prefs[i].value); + if (prefs[i].value == DIGEST_ALGO_SHA1 ) + sha1_seen = 1; + } + } + if (!sha1_seen) { + if (any) + tty_printf (", "); + tty_printf ("%s",digest_algo_to_string(DIGEST_ALGO_SHA1)); + } + tty_printf ("\n Compression: "); + for(i=any=0; prefs[i].type; i++ ) { + if( prefs[i].type == PREFTYPE_ZIP ) { + const char *s=compress_algo_to_string(prefs[i].value); + + if (any) + tty_printf (", "); + any = 1; + /* We don't want to display strings for experimental algos */ + if (s && prefs[i].value < 100 ) + tty_printf ("%s", s ); + else + tty_printf ("[%d]", prefs[i].value); + if (prefs[i].value == 0 ) + uncomp_seen = 1; + } + } + if (!uncomp_seen) { + if (any) + tty_printf (", "); + else { + tty_printf ("%s",compress_algo_to_string(1)); + tty_printf (", "); + } + tty_printf ("%s",compress_algo_to_string(0)); + } + tty_printf ("\n Features: "); + if(uid->mdc_feature) + tty_printf ("MDC"); + tty_printf("\n"); } else { - gcry_md_hash_buffer( GCRY_MD_RMD160, namehash, uid->name, uid->len ); + tty_printf(" "); + for(i=0; prefs[i].type; i++ ) { + tty_printf( " %c%d", prefs[i].type == PREFTYPE_SYM ? 'S' : + prefs[i].type == PREFTYPE_HASH ? 'H' : + prefs[i].type == PREFTYPE_ZIP ? 'Z':'?', + prefs[i].value); + } + if (uid->mdc_feature) + tty_printf (" [mdc]"); + tty_printf("\n"); } +} - p = get_pref_data( pk->local_id, namehash, &n ); - if( !p ) - return; - tty_printf(" "); - for(i=0; i < n; i+=2 ) { - if( p[i] ) - tty_printf( " %c%d", p[i] == PREFTYPE_SYM ? 'S' : - p[i] == PREFTYPE_HASH ? 'H' : - p[i] == PREFTYPE_COMPR ? 'Z' : '?', p[i+1]); +/* This is the version of show_key_with_all_names used when + opt.with_colons is used. It prints all available data in a easy to + parse format and does not translate utf8 */ +static void +show_key_with_all_names_colon (KBNODE keyblock) +{ + KBNODE node; + int i, j; + byte pk_version=0; + + /* the keys */ + for ( node = keyblock; node; node = node->next ) + { + if (node->pkt->pkttype == PKT_PUBLIC_KEY + || (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) ) + { + PKT_public_key *pk = node->pkt->pkt.public_key; + int otrust=0, trust=0; + u32 keyid[2]; + + if (node->pkt->pkttype == PKT_PUBLIC_KEY) + { + trust = get_validity_info (pk, NULL); + otrust = get_ownertrust_info (pk); + pk_version = pk->version; + } + + keyid_from_pk (pk, keyid); + + fputs (node->pkt->pkttype == PKT_PUBLIC_KEY?"pub:":"sub:", stdout); + if (!pk->is_valid) + putchar ('i'); + else if (pk->is_revoked) + putchar ('r'); + else if (pk->has_expired) + putchar ('e'); + else + putchar (trust); + printf (":%u:%d:%08lX%08lX:%lu:%lu:", + nbits_from_pk (pk), + pk->pubkey_algo, + (ulong)keyid[0], (ulong)keyid[1], + (ulong)pk->timestamp, + (ulong)pk->expiredate ); + if (pk->local_id) + printf ("%lu", pk->local_id); + putchar (':'); + putchar (otrust); + putchar(':'); + putchar('\n'); + + print_fingerprint (pk, NULL, 0); + + /* print the revoker record */ + if( !pk->revkey && pk->numrevkeys ) + BUG(); + else + { + for (i=0; i < pk->numrevkeys; i++) + { + byte *p; + + printf ("rvk:::%d::::::", pk->revkey[i].algid); + p = pk->revkey[i].fpr; + for (j=0; j < 20; j++, p++ ) + printf ("%02X", *p); + printf (":%02x%c:\n", pk->revkey[i].class, + (pk->revkey[i].class&0x40)? 'l':'x'); + } + } + } } - tty_printf("\n"); + + /* the user ids */ + i = 0; + for (node = keyblock; node; node = node->next) + { + if ( node->pkt->pkttype == PKT_USER_ID ) + { + PKT_user_id *uid = node->pkt->pkt.user_id; + int trustletter = '?'; - gcry_free(p); + ++i; + if(uid->attrib_data) + { + printf ("uat:%c::::::::%u %lu", trustletter, + uid->numattribs,uid->attrib_len); + } + else + { + printf ("uid:%c::::::::", trustletter); + print_string (stdout, uid->name, uid->len, ':'); + } + putchar (':'); + /* signature class */ + putchar (':'); + /* capabilities */ + putchar (':'); + /* preferences */ + if (pk_version>3 || uid->selfsigversion>3) + { + const prefitem_t *prefs = uid->prefs; + + for (j=0; prefs && prefs[j].type; j++) + { + if (j) + putchar (' '); + printf ("%c%d", prefs[j].type == PREFTYPE_SYM ? 'S' : + prefs[j].type == PREFTYPE_HASH ? 'H' : + prefs[j].type == PREFTYPE_ZIP ? 'Z':'?', + prefs[j].value); + } + if (uid->mdc_feature) + printf (",mdc"); + } + putchar (':'); + /* flags */ + printf ("%d,", i); + if (uid->is_primary) + putchar ('p'); + if (uid->is_revoked) + putchar ('r'); + if (uid->is_expired) + putchar ('e'); + if ((node->flag & NODFLG_SELUID)) + putchar ('s'); + if ((node->flag & NODFLG_MARK_A)) + putchar ('m'); + putchar (':'); + putchar('\n'); + } + } } @@ -1051,11 +1686,19 @@ show_prefs( KBNODE keyblock, PKT_user_id *uid ) * so for user ids with mark A flag set and dont display the index number */ static void -show_key_with_all_names( KBNODE keyblock, int only_marked, +show_key_with_all_names( KBNODE keyblock, int only_marked, int with_revoker, int with_fpr, int with_subkeys, int with_prefs ) { KBNODE node; int i, rc; + int do_warn = 0; + byte pk_version=0; + + if (opt.with_colons) + { + show_key_with_all_names_colon (keyblock); + return; + } /* the keys */ for( node = keyblock; node; node = node->next ) { @@ -1067,10 +1710,43 @@ show_key_with_all_names( KBNODE keyblock, int only_marked, if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { /* do it here, so that debug messages don't clutter the * output */ - trust = query_trust_info(pk, NULL); - otrust = get_ownertrust_info( pk->local_id ); + static int did_warn = 0; + + trust = get_validity_info (pk, NULL); + otrust = get_ownertrust_info (pk); + + /* Show a warning once */ + if (!did_warn + && (get_validity (pk, NULL) & TRUST_FLAG_PENDING_CHECK)) { + did_warn = 1; + do_warn = 1; + } + + pk_version=pk->version; } + if(with_revoker) { + if( !pk->revkey && pk->numrevkeys ) + BUG(); + else + for(i=0;inumrevkeys;i++) { + u32 r_keyid[2]; + char *user; + + keyid_from_fingerprint(pk->revkey[i].fpr, + MAX_FINGERPRINT_LEN,r_keyid); + + user=get_user_id_string (r_keyid); + tty_printf (_("This key may be revoked by %s key "), + pubkey_algo_to_string (pk->revkey[i].algid)); + tty_print_utf8_string (user, strlen (user)); + if ((pk->revkey[i].class&0x40)) + tty_printf (_(" (sensitive)")); + tty_printf ("\n"); + m_free(user); + } + } + tty_printf(_("%s%c %4u%c/%08lX created: %s expires: %s"), node->pkt->pkttype == PKT_PUBLIC_KEY? "pub":"sub", (node->flag & NODFLG_SELKEY)? '*':' ', @@ -1082,14 +1758,14 @@ show_key_with_all_names( KBNODE keyblock, int only_marked, if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { tty_printf(_(" trust: %c/%c"), otrust, trust ); if( node->pkt->pkttype == PKT_PUBLIC_KEY - && (get_ownertrust( pk->local_id )&TRUST_FLAG_DISABLED)) { + && (get_ownertrust (pk)&TRUST_FLAG_DISABLED)) { tty_printf("\n*** "); tty_printf(_("This key has been disabled")); } if( with_fpr ) { tty_printf("\n"); - show_fingerprint( pk ); + print_fingerprint ( pk, NULL, 2 ); } } tty_printf("\n"); @@ -1115,11 +1791,11 @@ show_key_with_all_names( KBNODE keyblock, int only_marked, if( !rc ) tty_printf( _("rev! subkey has been revoked: %s\n"), datestr_from_sig( sig ) ); - else if( rc == GPGERR_BAD_SIGN ) + else if( rc == G10ERR_BAD_SIGN ) tty_printf( _("rev- faked revocation found\n") ); else if( rc ) tty_printf( _("rev? problem checking revocation: %s\n"), - gpg_errstr(rc) ); + g10_errstr(rc) ); } } /* the user ids */ @@ -1133,15 +1809,33 @@ show_key_with_all_names( KBNODE keyblock, int only_marked, tty_printf(" "); else if( node->flag & NODFLG_SELUID ) tty_printf("(%d)* ", i); + else if( uid->is_primary ) + tty_printf("(%d). ", i); else tty_printf("(%d) ", i); + if ( uid->is_revoked ) + tty_printf ("[revoked] "); + if ( uid->is_expired ) + tty_printf ("[expired] "); tty_print_utf8_string( uid->name, uid->len ); tty_printf("\n"); if( with_prefs ) - show_prefs( keyblock, uid ); + { + if(pk_version>3 || uid->selfsigversion>3) + show_prefs (uid, with_prefs == 2); + else + tty_printf(_("There are no preferences on a " + "PGP 2.x-style key.\n")); + } } } } + + if (do_warn) + tty_printf (_("Please note that the shown key validity " + "is not necessarily correct\n" + "unless you restart the program.\n")); + } static void @@ -1167,44 +1861,18 @@ show_key_and_fingerprint( KBNODE keyblock ) } tty_printf("\n"); if( pk ) - show_fingerprint( pk ); + print_fingerprint( pk, NULL, 2 ); } -static void -show_fingerprint( PKT_public_key *pk ) -{ - byte array[MAX_FINGERPRINT_LEN], *p; - size_t i, n; - - fingerprint_from_pk( pk, array, &n ); - p = array; - tty_printf(_(" Fingerprint:")); - if( n == 20 ) { - for(i=0; i < n ; i++, i++, p += 2 ) { - if( i == 10 ) - tty_printf(" "); - tty_printf(" %02X%02X", *p, p[1] ); - } - } - else { - for(i=0; i < n ; i++, p++ ) { - if( i && !(i%8) ) - tty_printf(" "); - tty_printf(" %02X", *p ); - } - } - tty_printf("\n"); -} - /**************** - * Ask for a new user id , do the selfsignature and put it into + * Ask for a new user id, do the selfsignature and put it into * both keyblocks. * Return true if there is a new user id */ static int -menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock ) +menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock, int photo) { PKT_user_id *uid; PKT_public_key *pk=NULL; @@ -1215,10 +1883,6 @@ menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock ) KBNODE pub_where=NULL, sec_where=NULL; int rc; - uid = generate_user_id(); - if( !uid ) - return 0; - for( node = pub_keyblock; node; pub_where = node, node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY ) pk = node->pkt->pkt.public_key; @@ -1235,27 +1899,69 @@ menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock ) } if( !node ) /* no subkey */ sec_where = NULL; - assert(pk && sk ); + assert(pk && sk); - rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, + if(photo) { + int hasattrib=0; + + for( node = pub_keyblock; node; node = node->next ) + if( node->pkt->pkttype == PKT_USER_ID && + node->pkt->pkt.user_id->attrib_data!=NULL) + { + hasattrib=1; + break; + } + + /* It is legal but bad for compatibility to add a photo ID to a + v3 key as it means that PGP2 will not be able to use that key + anymore. Don't bother to ask this if the key already has a + photo - any damage has already been done at that point. -dms */ + if(pk->version==3 && !hasattrib) + { + if(opt.expert) + { + tty_printf(_("WARNING: This is a PGP2-style key. " + "Adding a photo ID may cause some versions\n" + " of PGP to reject this key.\n")); + + if(!cpr_get_answer_is_yes("keyedit.v3_photo.okay", + _("Are you sure you still want " + "to add it? (y/N) "))) + return 0; + } + else + { + tty_printf(_("You may not add a photo ID to " + "a PGP2-style key.\n")); + return 0; + } + } + + uid = generate_photo_id(pk); + } else + uid = generate_user_id(); + if( !uid ) + return 0; + + rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, 0, 0, 0, keygen_add_std_prefs, pk ); free_secret_key( sk ); if( rc ) { - log_error("signing failed: %s\n", gpg_errstr(rc) ); + log_error("signing failed: %s\n", g10_errstr(rc) ); free_user_id(uid); return 0; } /* insert/append to secret keyblock */ - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_USER_ID; - pkt->pkt.user_id = copy_user_id(NULL, uid); + pkt->pkt.user_id = scopy_user_id(uid); node = new_kbnode(pkt); if( sec_where ) insert_kbnode( sec_where, node, 0 ); else add_kbnode( sec_keyblock, node ); - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = copy_signature(NULL, sig); if( sec_where ) @@ -1263,7 +1969,7 @@ menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock ) else add_kbnode( sec_keyblock, new_kbnode(pkt) ); /* insert/append to public keyblock */ - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_USER_ID; pkt->pkt.user_id = uid; node = new_kbnode(pkt); @@ -1271,7 +1977,7 @@ menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock ) insert_kbnode( pub_where, node, 0 ); else add_kbnode( pub_keyblock, node ); - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = copy_signature(NULL, sig); if( pub_where ) @@ -1295,6 +2001,10 @@ menu_deluid( KBNODE pub_keyblock, KBNODE sec_keyblock ) if( node->pkt->pkttype == PKT_USER_ID ) { selected = node->flag & NODFLG_SELUID; if( selected ) { + /* Only cause a trust update if we delete a + non-revoked user id */ + if(!node->pkt->pkt.user_id->is_revoked) + update_trust=1; delete_kbnode( node ); if( sec_keyblock ) { KBNODE snode; @@ -1353,10 +2063,16 @@ menu_delsig( KBNODE pub_keyblock ) &inv_sig, &no_key, &other_err, &selfsig, 1 ); - if( valid ) + if( valid ) { okay = cpr_get_answer_yes_no_quit( "keyedit.delsig.valid", _("Delete this good signature? (y/N/q)")); + + /* Only update trust if we delete a good signature. + The other two cases do not affect trust. */ + if(okay) + update_trust=1; + } else if( inv_sig || other_err ) okay = cpr_get_answer_yes_no_quit( "keyedit.delsig.invalid", @@ -1440,9 +2156,147 @@ menu_delkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) commit_kbnode( &pub_keyblock ); if( sec_keyblock ) commit_kbnode( &sec_keyblock ); + + /* No need to set update_trust here since signing keys no longer + are used to certify other keys, so there is no change in trust + when revoking/removing them */ } +/**************** + * Ask for a new revoker, do the selfsignature and put it into + * both keyblocks. + * Return true if there is a new revoker + */ +static int +menu_addrevoker( KBNODE pub_keyblock, KBNODE sec_keyblock ) +{ + PKT_public_key *pk=NULL,*revoker_pk=NULL; + PKT_secret_key *sk=NULL; + PKT_signature *sig=NULL; + PACKET *pkt; + struct revocation_key revkey; + size_t fprlen; + int rc; + + assert(pub_keyblock->pkt->pkttype==PKT_PUBLIC_KEY); + assert(sec_keyblock->pkt->pkttype==PKT_SECRET_KEY); + + pk=pub_keyblock->pkt->pkt.public_key; + sk=copy_secret_key(NULL,sec_keyblock->pkt->pkt.secret_key); + + for(;;) + { + char *answer; + u32 keyid[2]; + char *p; + size_t n; + + if(revoker_pk) + free_public_key(revoker_pk); + + revoker_pk=m_alloc_clear(sizeof(*revoker_pk)); + + tty_printf("\n"); + + answer=cpr_get_utf8("keyedit.add_revoker", + _("Enter the user ID of the designated revoker: ")); + if(answer[0]=='\0' || answer[0]=='\004') + goto fail; + + rc=get_pubkey_byname(revoker_pk,answer,NULL,NULL); + + if(rc) + { + log_error (_("key `%s' not found: %s\n"),answer,g10_errstr(rc)); + continue; + } + + fingerprint_from_pk(revoker_pk,revkey.fpr,&fprlen); + if(fprlen!=20) + { + log_error(_("cannot appoint a PGP 2.x style key as a " + "designated revoker\n")); + continue; + } + + if(cmp_public_keys(revoker_pk,pk)==0) + { + /* This actually causes no harm (after all, a key that + designates itself as a revoker is the same as a + regular key), but it's easy enough to check. */ + log_error(_("you cannot appoint a key as its own " + "designated revoker\n")); + continue; + } + + keyid_from_pk(revoker_pk,keyid); + + tty_printf("\npub %4u%c/%08lX %s ", + nbits_from_pk( revoker_pk ), + pubkey_letter( revoker_pk->pubkey_algo ), + (ulong)keyid[1], datestr_from_pk(pk) ); + + p = get_user_id( keyid, &n ); + tty_print_utf8_string( p, n ); + m_free(p); + tty_printf("\n"); + print_fingerprint(revoker_pk,NULL,2); + tty_printf("\n"); + + tty_printf("WARNING: appointing a key as a designated revoker " + "cannot be undone!\n"); + + tty_printf("\n"); + + if(!cpr_get_answer_is_yes("keyedit.add_revoker.okay", + "Are you sure you want to appoint this " + "key as a designated revoker? (y/N): ")) + continue; + + /* todo: handle 0x40 sensitive flag here */ + revkey.class=0x80; + revkey.algid=revoker_pk->pubkey_algo; + free_public_key(revoker_pk); + break; + } + + rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x1F, 0, 0, 0, 0, + keygen_add_revkey,&revkey ); + if( rc ) + { + log_error("signing failed: %s\n", g10_errstr(rc) ); + goto fail; + } + + free_secret_key(sk); + sk=NULL; + + /* insert into secret keyblock */ + pkt = m_alloc_clear( sizeof *pkt ); + pkt->pkttype = PKT_SIGNATURE; + pkt->pkt.signature = copy_signature(NULL, sig); + insert_kbnode( sec_keyblock, new_kbnode(pkt), PKT_SIGNATURE ); + + /* insert into public keyblock */ + pkt = m_alloc_clear( sizeof *pkt ); + pkt->pkttype = PKT_SIGNATURE; + pkt->pkt.signature = sig; + insert_kbnode( pub_keyblock, new_kbnode(pkt), PKT_SIGNATURE ); + + return 1; + + fail: + if(sk) + free_secret_key(sk); + if(sig) + free_seckey_enc(sig); + if(revoker_pk) + free_public_key(revoker_pk); + + return 0; +} + static int menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock ) @@ -1495,7 +2349,7 @@ menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock ) else if( node->pkt->pkttype == PKT_USER_ID ) uid = node->pkt->pkt.user_id; else if( main_pk && node->pkt->pkttype == PKT_SIGNATURE - && (mainkey || sub_pk ) ) { + && ( mainkey || sub_pk ) ) { PKT_signature *sig = node->pkt->pkt.signature; if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] && ( (mainkey && uid && (sig->sig_class&~3) == 0x10) @@ -1532,31 +2386,31 @@ menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock ) /* create new self signature */ if( mainkey ) rc = make_keysig_packet( &newsig, main_pk, uid, NULL, - sk, 0x13, 0, + sk, 0x13, 0, 0, 0, 0, keygen_add_std_prefs, main_pk ); else rc = make_keysig_packet( &newsig, main_pk, NULL, sub_pk, - sk, 0x18, 0, + sk, 0x18, 0, 0, 0, 0, keygen_add_key_expire, sub_pk ); if( rc ) { log_error("make_keysig_packet failed: %s\n", - gpg_errstr(rc)); + g10_errstr(rc)); free_secret_key( sk ); return 0; } /* replace the packet */ - newpkt = gcry_xcalloc( 1, sizeof *newpkt ); + newpkt = m_alloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = newsig; free_packet( node->pkt ); - gcry_free( node->pkt ); + m_free( node->pkt ); node->pkt = newpkt; if( sn ) { - newpkt = gcry_xcalloc( 1, sizeof *newpkt ); + newpkt = m_alloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = copy_signature( NULL, newsig ); free_packet( sn->pkt ); - gcry_free( sn->pkt ); + m_free( sn->pkt ); sn->pkt = newpkt; } sub_pk = NULL; @@ -1565,9 +2419,235 @@ menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock ) } free_secret_key( sk ); + update_trust=1; return 1; } +static int +change_primary_uid_cb ( PKT_signature *sig, void *opaque ) +{ + byte buf[1]; + + /* first clear all primary uid flags so that we are sure none are + * lingering around */ + delete_sig_subpkt (sig->hashed, SIGSUBPKT_PRIMARY_UID); + delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PRIMARY_UID); + + /* if opaque is set,we want to set the primary id */ + if (opaque) { + buf[0] = 1; + build_sig_subpkt (sig, SIGSUBPKT_PRIMARY_UID, buf, 1 ); + } + + return 0; +} + + +/* + * Set the primary uid flag for the selected UID. We will also reset + * all other primary uid flags. For this to work with have to update + * all the signature timestamps. If we would do this with the current + * time, we lose quite a lot of information, so we use a a kludge to + * do this: Just increment the timestamp by one second which is + * sufficient to updated a signature during import. + */ +static int +menu_set_primary_uid ( KBNODE pub_keyblock, KBNODE sec_keyblock ) +{ + PKT_secret_key *sk; /* copy of the main sk */ + PKT_public_key *main_pk; + PKT_user_id *uid; + KBNODE node; + u32 keyid[2]; + int selected; + int attribute = 0; + int modified = 0; + + if ( count_selected_uids (pub_keyblock) != 1 ) { + tty_printf(_("Please select exactly one user ID.\n")); + return 0; + } + + node = find_kbnode( sec_keyblock, PKT_SECRET_KEY ); + sk = copy_secret_key( NULL, node->pkt->pkt.secret_key); + + /* Now we can actually change the self signature(s) */ + main_pk = NULL; + uid = NULL; + selected = 0; + + /* Is our selected uid an attribute packet? */ + for ( node=pub_keyblock; node; node = node->next ) + if (node->pkt->pkttype == PKT_USER_ID && node->flag & NODFLG_SELUID) + attribute = (node->pkt->pkt.user_id->attrib_data!=NULL); + + for ( node=pub_keyblock; node; node = node->next ) { + if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) + break; /* ready */ + + if ( node->pkt->pkttype == PKT_PUBLIC_KEY ) { + main_pk = node->pkt->pkt.public_key; + keyid_from_pk( main_pk, keyid ); + } + else if ( node->pkt->pkttype == PKT_USER_ID ) { + uid = node->pkt->pkt.user_id; + selected = node->flag & NODFLG_SELUID; + } + else if ( main_pk && uid && node->pkt->pkttype == PKT_SIGNATURE ) { + PKT_signature *sig = node->pkt->pkt.signature; + if ( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] + && (uid && (sig->sig_class&~3) == 0x10) + && attribute == (uid->attrib_data!=NULL)) { + if(sig->version < 4) { + char *user=utf8_to_native(uid->name,strlen(uid->name),0); + + log_info(_("skipping v3 self-signature on user id \"%s\"\n"), + user); + m_free(user); + } + else { + /* This is a selfsignature which is to be replaced. + We can just ignore v3 signatures because they are + not able to carry the primary ID flag. We also + ignore self-sigs on user IDs that are not of the + same type that we are making primary. That is, if + we are making a user ID primary, we alter user IDs. + If we are making an attribute packet primary, we + alter attribute packets. */ + + /* FIXME: We must make sure that we only have one + self-signature per user ID here (not counting + revocations) */ + PKT_signature *newsig; + PACKET *newpkt; + const byte *p; + int action; + + /* see whether this signature has the primary UID flag */ + p = parse_sig_subpkt (sig->hashed, + SIGSUBPKT_PRIMARY_UID, NULL ); + if ( !p ) + p = parse_sig_subpkt (sig->unhashed, + SIGSUBPKT_PRIMARY_UID, NULL ); + if ( p && *p ) /* yes */ + action = selected? 0 : -1; + else /* no */ + action = selected? 1 : 0; + + if (action) { + int rc = update_keysig_packet (&newsig, sig, + main_pk, uid, + sk, + change_primary_uid_cb, + action > 0? "x":NULL ); + if( rc ) { + log_error ("update_keysig_packet failed: %s\n", + g10_errstr(rc)); + free_secret_key( sk ); + return 0; + } + /* replace the packet */ + newpkt = m_alloc_clear( sizeof *newpkt ); + newpkt->pkttype = PKT_SIGNATURE; + newpkt->pkt.signature = newsig; + free_packet( node->pkt ); + m_free( node->pkt ); + node->pkt = newpkt; + modified = 1; + } + } + } + } + } + + free_secret_key( sk ); + return modified; +} + + +/* + * Set preferences to new values for the selected user IDs + */ +static int +menu_set_preferences (KBNODE pub_keyblock, KBNODE sec_keyblock ) +{ + PKT_secret_key *sk; /* copy of the main sk */ + PKT_public_key *main_pk; + PKT_user_id *uid; + KBNODE node; + u32 keyid[2]; + int selected, select_all; + int modified = 0; + + select_all = !count_selected_uids (pub_keyblock); + + node = find_kbnode( sec_keyblock, PKT_SECRET_KEY ); + sk = copy_secret_key( NULL, node->pkt->pkt.secret_key); + + /* Now we can actually change the self signature(s) */ + main_pk = NULL; + uid = NULL; + selected = 0; + for ( node=pub_keyblock; node; node = node->next ) { + if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) + break; /* ready */ + + if ( node->pkt->pkttype == PKT_PUBLIC_KEY ) { + main_pk = node->pkt->pkt.public_key; + keyid_from_pk( main_pk, keyid ); + } + else if ( node->pkt->pkttype == PKT_USER_ID ) { + uid = node->pkt->pkt.user_id; + selected = select_all || (node->flag & NODFLG_SELUID); + } + else if ( main_pk && uid && selected + && node->pkt->pkttype == PKT_SIGNATURE ) { + PKT_signature *sig = node->pkt->pkt.signature; + if ( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] + && (uid && (sig->sig_class&~3) == 0x10) ) { + if( sig->version < 4 ) { + char *user=utf8_to_native(uid->name,strlen(uid->name),0); + + log_info(_("skipping v3 self-signature on user id \"%s\"\n"), + user); + m_free(user); + } + else { + /* This is a selfsignature which is to be replaced + * We have to ignore v3 signatures because they are + * not able to carry the preferences */ + PKT_signature *newsig; + PACKET *newpkt; + int rc; + + rc = update_keysig_packet (&newsig, sig, + main_pk, uid, + sk, + keygen_upd_std_prefs, + NULL ); + if( rc ) { + log_error ("update_keysig_packet failed: %s\n", + g10_errstr(rc)); + free_secret_key( sk ); + return 0; + } + /* replace the packet */ + newpkt = m_alloc_clear( sizeof *newpkt ); + newpkt->pkttype = PKT_SIGNATURE; + newpkt->pkt.signature = newsig; + free_packet( node->pkt ); + m_free( node->pkt ); + node->pkt = newpkt; + modified = 1; + } + } + } + } + + free_secret_key( sk ); + return modified; +} + /**************** * Select one user id or remove all selection if index is 0. @@ -1717,6 +2797,21 @@ count_selected_keys( KBNODE keyblock ) return count_keys_with_flag( keyblock, NODFLG_SELKEY); } +/* returns how many real (i.e. not attribute) uids are unmarked */ +static int +real_uids_left( KBNODE keyblock ) +{ + KBNODE node; + int real=0; + + for(node=keyblock;node;node=node->next) + if(node->pkt->pkttype==PKT_USER_ID && !(node->flag&NODFLG_SELUID) && + !node->pkt->pkt.user_id->attrib_data) + real++; + + return real; +} + /* * Ask whether the signature should be revoked. If the user commits this, * flag bit MARK_A is set on the signature and the user ID. @@ -1724,6 +2819,7 @@ count_selected_keys( KBNODE keyblock ) static void ask_revoke_sig( KBNODE keyblock, KBNODE node ) { + int doit=0; PKT_signature *sig = node->pkt->pkt.signature; KBNODE unode = find_prev_kbnode( keyblock, node, PKT_USER_ID ); @@ -1735,13 +2831,29 @@ ask_revoke_sig( KBNODE keyblock, KBNODE node ) tty_printf(_("user ID: \"")); tty_print_utf8_string( unode->pkt->pkt.user_id->name, unode->pkt->pkt.user_id->len ); - tty_printf(_("\"\nsigned with your key %08lX at %s\n"), - sig->keyid[1], datestr_from_sig(sig) ); - if( cpr_get_answer_is_yes("ask_revoke_sig.one", - _("Create a revocation certificate for this signature? (y/N)")) ) { - node->flag |= NODFLG_MARK_A; - unode->flag |= NODFLG_MARK_A; + if(sig->flags.exportable) + tty_printf(_("\"\nsigned with your key %08lX at %s\n"), + (ulong)sig->keyid[1], datestr_from_sig(sig) ); + else + tty_printf(_("\"\nlocally signed with your key %08lX at %s\n"), + (ulong)sig->keyid[1], datestr_from_sig(sig) ); + + if(sig->flags.expired) + { + tty_printf(_("This signature expired on %s.\n"), + expirestr_from_sig(sig)); + /* Use a different question so we can have different help text */ + doit=cpr_get_answer_is_yes("ask_revoke_sig.expired", + _("Are you sure you still want to revoke it? (y/N) ")); + } + else + doit=cpr_get_answer_is_yes("ask_revoke_sig.one", + _("Create a revocation certificate for this signature? (y/N) ")); + + if(doit) { + node->flag |= NODFLG_MARK_A; + unode->flag |= NODFLG_MARK_A; } } @@ -1758,7 +2870,6 @@ menu_revsig( KBNODE keyblock ) PKT_public_key *primary_pk; KBNODE node; int changed = 0; - int upd_trust = 0; int rc, any; struct revocation_reason_info *reason = NULL; @@ -1775,15 +2886,18 @@ menu_revsig( KBNODE keyblock ) } else if( node->pkt->pkttype == PKT_SIGNATURE && ((sig = node->pkt->pkt.signature), - !seckey_available( sig->keyid ) ) ) { + !seckey_available(sig->keyid) ) ) { if( (sig->sig_class&~3) == 0x10 ) { - tty_printf(_(" signed by %08lX at %s\n"), - sig->keyid[1], datestr_from_sig(sig) ); - node->flag |= NODFLG_SELSIG; + tty_printf(_(" signed by %08lX at %s%s%s\n"), + (ulong)sig->keyid[1], datestr_from_sig(sig), + sig->flags.exportable?"":" (non-exportable)", + sig->flags.revocable?"":" (non-revocable)"); + if(sig->flags.revocable) + node->flag |= NODFLG_SELSIG; } else if( sig->sig_class == 0x30 ) { tty_printf(_(" revoked by %08lX at %s\n"), - sig->keyid[1], datestr_from_sig(sig) ); + (ulong)sig->keyid[1], datestr_from_sig(sig) ); } } } @@ -1812,15 +2926,16 @@ menu_revsig( KBNODE keyblock ) } else if( node->pkt->pkttype == PKT_SIGNATURE ) { sig = node->pkt->pkt.signature; - tty_printf(_(" signed by %08lX at %s\n"), - sig->keyid[1], datestr_from_sig(sig) ); + tty_printf(_(" signed by %08lX at %s%s\n"), + (ulong)sig->keyid[1], datestr_from_sig(sig), + sig->flags.exportable?"":_(" (non-exportable)") ); } } if( !any ) return 0; /* none selected */ if( !cpr_get_answer_is_yes("ask_revoke_sig.okay", - _("Really create the revocation certificates? (y/N)")) ) + _("Really create the revocation certificates? (y/N) ")) ) return 0; /* forget it */ reason = ask_revocation_reason( 0, 1, 0 ); @@ -1845,9 +2960,10 @@ menu_revsig( KBNODE keyblock ) memset( &attrib, 0, sizeof attrib ); attrib.reason = reason; + attrib.non_exportable=!node->pkt->pkt.signature->flags.exportable; node->flag &= ~NODFLG_MARK_A; - sk = gcry_xcalloc_secure( 1, sizeof *sk ); + sk = m_alloc_secure_clear( sizeof *sk ); if( get_seckey( sk, node->pkt->pkt.signature->keyid ) ) { log_info(_("no secret key\n")); continue; @@ -1856,27 +2972,25 @@ menu_revsig( KBNODE keyblock ) unode->pkt->pkt.user_id, NULL, sk, - 0x30, 0, + 0x30, 0, 0, 0, 0, sign_mk_attrib, &attrib ); free_secret_key(sk); if( rc ) { - log_error(_("signing failed: %s\n"), gpg_errstr(rc)); + log_error(_("signing failed: %s\n"), g10_errstr(rc)); release_revocation_reason_info( reason ); return changed; } changed = 1; /* we changed the keyblock */ - upd_trust = 1; + update_trust = 1; - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( unode, new_kbnode(pkt), 0 ); goto reloop; } - if( upd_trust ) - clear_trust_checked_flag( primary_pk ); release_revocation_reason_info( reason ); return changed; } @@ -1892,7 +3006,6 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) PKT_public_key *mainpk; KBNODE node; int changed = 0; - int upd_trust = 0; int rc; struct revocation_reason_info *reason = NULL; @@ -1918,19 +3031,18 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) node->flag &= ~NODFLG_SELKEY; sk = copy_secret_key( NULL, sec_keyblock->pkt->pkt.secret_key ); - rc = make_keysig_packet( &sig, mainpk, NULL, subpk, sk, 0x28, 0, - sign_mk_attrib, - &attrib ); + rc = make_keysig_packet( &sig, mainpk, NULL, subpk, sk, + 0x28, 0, 0, 0, 0, + sign_mk_attrib, &attrib ); free_secret_key(sk); if( rc ) { - log_error(_("signing failed: %s\n"), gpg_errstr(rc)); + log_error(_("signing failed: %s\n"), g10_errstr(rc)); release_revocation_reason_info( reason ); return changed; } changed = 1; /* we changed the keyblock */ - upd_trust = 1; - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( node, new_kbnode(pkt), 0 ); @@ -1940,8 +3052,9 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) commit_kbnode( &pub_keyblock ); /*commit_kbnode( &sec_keyblock );*/ - if( upd_trust ) - clear_trust_checked_flag( mainpk ); + /* No need to set update_trust here since signing keys no longer + are used to certify other keys, so there is no change in trust + when revoking/removing them */ release_revocation_reason_info( reason ); return changed; @@ -1951,20 +3064,67 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) static int enable_disable_key( KBNODE keyblock, int disable ) { - ulong lid = find_kbnode( keyblock, PKT_PUBLIC_KEY ) - ->pkt->pkt.public_key->local_id; + PKT_public_key *pk = find_kbnode( keyblock, PKT_PUBLIC_KEY ) + ->pkt->pkt.public_key; unsigned int trust, newtrust; - /* Note: Because the keys have beed displayed, we have - * ensured that local_id has been set */ - trust = newtrust = get_ownertrust( lid ); + trust = newtrust = get_ownertrust (pk); newtrust &= ~TRUST_FLAG_DISABLED; if( disable ) newtrust |= TRUST_FLAG_DISABLED; if( trust == newtrust ) return 0; /* already in that state */ - if( !update_ownertrust( lid, newtrust ) ) - return 1; + update_ownertrust(pk, newtrust ); return 0; } + +static void +menu_showphoto( KBNODE keyblock ) +{ + KBNODE node; + int select_all = !count_selected_uids(keyblock); + int count=0; + PKT_public_key *pk=NULL; + u32 keyid[2]; + + /* Look for the public key first. We have to be really, really, + explicit as to which photo this is, and what key it is a UID on + since people may want to sign it. */ + + for( node = keyblock; node; node = node->next ) + { + if( node->pkt->pkttype == PKT_PUBLIC_KEY ) + { + pk = node->pkt->pkt.public_key; + keyid_from_pk(pk, keyid); + } + else if( node->pkt->pkttype == PKT_USER_ID ) + { + PKT_user_id *uid = node->pkt->pkt.user_id; + count++; + + if((select_all || (node->flag & NODFLG_SELUID)) && + uid->attribs!=NULL) + { + int i; + + for(i=0;inumattribs;i++) + { + byte type; + u32 size; + + if(uid->attribs[i].type==ATTRIB_IMAGE && + parse_image_header(&uid->attribs[i],&type,&size)) + { + tty_printf(_("Displaying %s photo ID of size %ld for " + "key 0x%08lX (uid %d)\n"), + image_type_to_string(type,1), + (ulong)size,(ulong)keyid[1],count); + show_photos(&uid->attribs[i],1,pk,NULL); + } + } + } + } + } +} diff --git a/g10/keygen.c b/g10/keygen.c index 1e2accd0c..b8398b88a 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -1,5 +1,5 @@ /* keygen.c - generate a key pair - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -26,23 +26,31 @@ #include #include #include "util.h" -#include #include "main.h" #include "packet.h" +#include "cipher.h" #include "ttyio.h" #include "options.h" #include "keydb.h" +#include "trustdb.h" #include "status.h" #include "i18n.h" +#define MAX_PREFS 30 + + enum para_name { pKEYTYPE, pKEYLENGTH, + pKEYUSAGE, pSUBKEYTYPE, pSUBKEYLENGTH, + pSUBKEYUSAGE, pNAMEREAL, pNAMEEMAIL, pNAMECOMMENT, + pPREFERENCES, + pREVOKER, pUSERID, pEXPIREDATE, pKEYEXPIRE, /* in n seconds */ @@ -57,10 +65,12 @@ struct para_data_s { int lnr; enum para_name key; union { - DEK *dek; - STRING2KEY *s2k; - u32 expire; - char value[1]; + DEK *dek; + STRING2KEY *s2k; + u32 expire; + unsigned int usage; + struct revocation_key revkey; + char value[1]; } u; }; @@ -83,6 +93,21 @@ struct output_control_s { }; +struct opaque_data_usage_and_pk { + unsigned int usage; + PKT_public_key *pk; +}; + + +static int prefs_initialized = 0; +static byte sym_prefs[MAX_PREFS]; +static int nsym_prefs; +static byte hash_prefs[MAX_PREFS]; +static int nhash_prefs; +static byte zip_prefs[MAX_PREFS]; +static int nzip_prefs; +static int mdc_available; + static void do_generate_keypair( struct para_data_s *para, struct output_control_s *outctrl ); static int write_keyblock( IOBUF out, KBNODE node ); @@ -91,16 +116,32 @@ static int write_keyblock( IOBUF out, KBNODE node ); static void write_uid( KBNODE root, const char *s ) { - PACKET *pkt = gcry_xcalloc( 1,sizeof *pkt ); + PACKET *pkt = m_alloc_clear(sizeof *pkt ); size_t n = strlen(s); pkt->pkttype = PKT_USER_ID; - pkt->pkt.user_id = gcry_xcalloc( 1, sizeof *pkt->pkt.user_id + n - 1 ); + pkt->pkt.user_id = m_alloc_clear( sizeof *pkt->pkt.user_id + n - 1 ); pkt->pkt.user_id->len = n; + pkt->pkt.user_id->ref = 1; strcpy(pkt->pkt.user_id->name, s); add_kbnode( root, new_kbnode( pkt ) ); } +static void +do_add_key_flags (PKT_signature *sig, unsigned int use) +{ + byte buf[1]; + + if (!use) + return; + + buf[0] = 0; + if (use & PUBKEY_USAGE_SIG) + buf[0] |= 0x01 | 0x02; + if (use & PUBKEY_USAGE_ENC) + buf[0] |= 0x04 | 0x08; + build_sig_subpkt (sig, SIGSUBPKT_KEY_FLAGS, buf, 1); +} int @@ -123,34 +164,318 @@ keygen_add_key_expire( PKT_signature *sig, void *opaque ) return 0; } +static int +keygen_add_key_flags_and_expire (PKT_signature *sig, void *opaque) +{ + struct opaque_data_usage_and_pk *oduap = opaque; + + do_add_key_flags (sig, oduap->usage); + return keygen_add_key_expire (sig, oduap->pk); +} + +static int +set_one_pref (ulong val, int type, int (*cf)(int), byte *buf, int *nbuf) +{ + int i; + + if (cf (val)) { + log_info (_("preference %c%lu is not valid\n"), type, val); + if(type=='S' && val==CIPHER_ALGO_IDEA) + idea_cipher_warn(1); + return -1; + } + for (i=0; i < *nbuf; i++ ) { + if (buf[i] == val) { + log_info (_("preference %c%lu duplicated\n"), type, val); + return -1; + } + } + if (*nbuf >= MAX_PREFS) { + log_info (_("too many `%c' preferences\n"), type); + return -1; + } + buf[(*nbuf)++] = val; + return 0; +} + + +/* + * Parse the supplied string and use it to set the standard preferences. + * The String is expected to be in a forma like the one printed by "prefs", + * something like: "S10 S3 H3 H2 Z2 Z1". Use NULL to set the default + * preferences. + * Returns: 0 = okay + */ +int +keygen_set_std_prefs (const char *string,int personal) +{ + byte sym[MAX_PREFS], hash[MAX_PREFS], zip[MAX_PREFS]; + int nsym=0, nhash=0, nzip=0, mdc=1; /* mdc defaults on */ + ulong val; + const char *s, *s2; + int rc = 0; + + if (!string || !ascii_strcasecmp (string, "default")) { + if (opt.def_preference_list) + string=opt.def_preference_list; + else if ( !check_cipher_algo(CIPHER_ALGO_IDEA) ) + string = "S7 S3 S2 S1 H2 H3 Z2 Z1"; + else + string = "S7 S3 S2 H2 H3 Z2 Z1"; + + /* If we have it, IDEA goes *after* 3DES so it won't be used + unless we're encrypting along with a V3 key. Ideally, we + would only put the S1 preference in if the key was RSA and + <=2048 bits, as that is what won't break PGP2, but that is + difficult with the current code, and not really worth + checking as a non-RSA <=2048 bit key wouldn't be usable by + PGP2 anyway -dms */ + } + else if (!ascii_strcasecmp (string, "none")) + string = ""; + + for (s=string; *s; s = s2) { + if ((*s=='s' || *s == 'S') && isdigit(s[1]) ) { + val = strtoul (++s, (char**)&s2, 10); + if (set_one_pref (val, 'S', check_cipher_algo, sym, &nsym)) + rc = -1; + } + else if ((*s=='h' || *s == 'H') && isdigit(s[1]) ) { + val = strtoul (++s, (char**)&s2, 10); + if (set_one_pref (val, 'H', check_digest_algo, hash, &nhash)) + rc = -1; + } + else if ((*s=='z' || *s == 'Z') && isdigit(s[1]) ) { + val = strtoul (++s, (char**)&s2, 10); + if (set_one_pref (val, 'Z', check_compress_algo, zip, &nzip)) + rc = -1; + } + else if (ascii_strcasecmp(s,"mdc")==0) { + mdc=1; + s2=s+3; + } + else if (ascii_strcasecmp(s,"no-mdc")==0) { + mdc=0; + s2=s+6; + } + else if (isspace (*s)) + s2 = s+1; + else { + log_info (_("invalid character in preference string\n")); + return -1; + } + } + + if (!rc) + { + if(personal) + { + if(personal==PREFTYPE_SYM) + { + m_free(opt.personal_cipher_prefs); + + if(nsym==0) + opt.personal_cipher_prefs=NULL; + else + { + int i; + + opt.personal_cipher_prefs= + m_alloc(sizeof(prefitem_t *)*(nsym+1)); + + for (i=0; ihashed, SIGSUBPKT_FEATURES, &n ); + /* Already set or cleared */ + if (s && n && + ((enabled && (s[0] & 0x01)) || (!enabled && !(s[0] & 0x01)))) + return; + + if (!s || !n) { /* create a new one */ + n = 1; + buf = m_alloc_clear (n); + } + else { + buf = m_alloc (n); + memcpy (buf, s, n); + } + + if(enabled) + buf[0] |= 0x01; /* MDC feature */ + else + buf[0] &= ~0x01; + + /* Are there any bits set? */ + for(i=0;ihashed, SIGSUBPKT_FEATURES); + else + build_sig_subpkt (sig, SIGSUBPKT_FEATURES, buf, n); + + m_free (buf); +} + +int +keygen_upd_std_prefs( PKT_signature *sig, void *opaque ) +{ + if (!prefs_initialized) + keygen_set_std_prefs (NULL, 0); + + if (nsym_prefs) + build_sig_subpkt (sig, SIGSUBPKT_PREF_SYM, sym_prefs, nsym_prefs); + else + { + delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_SYM); + delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_SYM); + } + + if (nhash_prefs) + build_sig_subpkt (sig, SIGSUBPKT_PREF_HASH, hash_prefs, nhash_prefs); + else + { + delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_HASH); + delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_HASH); + } + + if (nzip_prefs) + build_sig_subpkt (sig, SIGSUBPKT_PREF_COMPR, zip_prefs, nzip_prefs); + else + { + delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_COMPR); + delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_COMPR); + } + + /* Make sure that the MDC feature flag is set if needed */ + add_feature_mdc (sig,mdc_available); + + return 0; +} + /**************** * Add preference to the self signature packet. * This is only called for packets with version > 3. + */ int keygen_add_std_prefs( PKT_signature *sig, void *opaque ) { + PKT_public_key *pk = opaque; byte buf[8]; + do_add_key_flags (sig, pk->pubkey_usage); keygen_add_key_expire( sig, opaque ); - - buf[0] = GCRY_CIPHER_RIJNDAEL; - buf[1] = GCRY_CIPHER_TWOFISH; - buf[2] = GCRY_CIPHER_CAST5; - buf[3] = GCRY_CIPHER_BLOWFISH; - build_sig_subpkt( sig, SIGSUBPKT_PREF_SYM, buf, 4 ); - - buf[0] = GCRY_MD_RMD160; - buf[1] = GCRY_MD_SHA1; - build_sig_subpkt( sig, SIGSUBPKT_PREF_HASH, buf, 2 ); - - buf[0] = 2; - buf[1] = 1; - build_sig_subpkt( sig, SIGSUBPKT_PREF_COMPR, buf, 2 ); - - buf[0] = 1; /* supports MDC packets (15 + 16) */ - build_sig_subpkt( sig, SIGSUBPKT_FEATURES, buf, 1 ); + keygen_upd_std_prefs (sig, opaque); buf[0] = 0x80; /* no modify - It is reasonable that a key holder * has the possibility to reject signatures from users @@ -163,10 +488,69 @@ keygen_add_std_prefs( PKT_signature *sig, void *opaque ) return 0; } +int +keygen_add_revkey(PKT_signature *sig, void *opaque) +{ + struct revocation_key *revkey=opaque; + byte buf[2+MAX_FINGERPRINT_LEN]; + buf[0]=revkey->class; + buf[1]=revkey->algid; + memcpy(&buf[2],revkey->fpr,MAX_FINGERPRINT_LEN); + + build_sig_subpkt(sig,SIGSUBPKT_REV_KEY,buf,2+MAX_FINGERPRINT_LEN); + + /* All sigs with revocation keys set are nonrevocable */ + sig->flags.revocable=0; + buf[0] = 0; + build_sig_subpkt( sig, SIGSUBPKT_REVOCABLE, buf, 1 ); + + parse_revkeys(sig); + + return 0; +} static int -write_selfsig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) +write_direct_sig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk, + struct revocation_key *revkey ) +{ + PACKET *pkt; + PKT_signature *sig; + int rc=0; + KBNODE node; + PKT_public_key *pk; + + if( opt.verbose ) + log_info(_("writing direct signature\n")); + + /* get the pk packet from the pub_tree */ + node = find_kbnode( pub_root, PKT_PUBLIC_KEY ); + if( !node ) + BUG(); + pk = node->pkt->pkt.public_key; + + /* we have to cache the key, so that the verification of the signature + * creation is able to retrieve the public key */ + cache_public_key (pk); + + /* and make the signature */ + rc = make_keysig_packet(&sig,pk,NULL,NULL,sk,0x1F,0,0,0,0, + keygen_add_revkey,revkey); + if( rc ) { + log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); + return rc; + } + + pkt = m_alloc_clear( sizeof *pkt ); + pkt->pkttype = PKT_SIGNATURE; + pkt->pkt.signature = sig; + add_kbnode( root, new_kbnode( pkt ) ); + return rc; +} + +static int +write_selfsig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk, + unsigned int use ) { PACKET *pkt; PKT_signature *sig; @@ -188,16 +572,20 @@ write_selfsig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) if( !node ) BUG(); pk = node->pkt->pkt.public_key; + pk->pubkey_usage = use; + /* we have to cache the key, so that the verification of the signature + * creation is able to retrieve the public key */ + cache_public_key (pk); /* and make the signature */ - rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, - keygen_add_std_prefs, pk ); + rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, 0, 0, 0, + keygen_add_std_prefs, pk ); if( rc ) { - log_error("make_keysig_packet failed: %s\n", gpg_errstr(rc) ); + log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); return rc; } - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; add_kbnode( root, new_kbnode( pkt ) ); @@ -205,13 +593,15 @@ write_selfsig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) } static int -write_keybinding( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) +write_keybinding( KBNODE root, KBNODE pub_root, PKT_secret_key *sk, + unsigned int use ) { PACKET *pkt; PKT_signature *sig; int rc=0; KBNODE node; PKT_public_key *pk, *subpk; + struct opaque_data_usage_and_pk oduap; if( opt.verbose ) log_info(_("writing key binding signature\n")); @@ -221,6 +611,10 @@ write_keybinding( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) if( !node ) BUG(); pk = node->pkt->pkt.public_key; + /* we have to cache the key, so that the verification of the signature + * creation is able to retrieve the public key */ + cache_public_key (pk); + /* find the last subkey */ subpk = NULL; for(node=pub_root; node; node = node->next ) { @@ -231,14 +625,16 @@ write_keybinding( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) BUG(); /* and make the signature */ - rc = make_keysig_packet( &sig, pk, NULL, subpk, sk, 0x18, 0, - keygen_add_key_expire, subpk ); + oduap.usage = use; + oduap.pk = subpk; + rc = make_keysig_packet( &sig, pk, NULL, subpk, sk, 0x18, 0, 0, 0, 0, + keygen_add_key_flags_and_expire, &oduap ); if( rc ) { - log_error("make_keysig_packet failed: %s\n", gpg_errstr(rc) ); + log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); return rc; } - pkt = gcry_xcalloc( 1, sizeof *pkt ); + pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; add_kbnode( root, new_kbnode( pkt ) ); @@ -246,63 +642,17 @@ write_keybinding( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) } - -static int -key_from_sexp( GCRY_MPI *array, - GCRY_SEXP sexp, const char *topname, const char *elems ) -{ - GCRY_SEXP list, l2; - const char *s; - int i, idx; - - list = gcry_sexp_find_token( sexp, topname, 0 ); - if( !list ) - return GCRYERR_INV_OBJ; - l2 = gcry_sexp_cadr( list ); - gcry_sexp_release ( list ); - list = l2; - if( !list ) - return GCRYERR_NO_OBJ; - - idx = 0; - for(s=elems; *s; s++, idx++ ) { - l2 = gcry_sexp_find_token( list, s, 1 ); - if( !l2 ) { - for(i=0; itimestamp = pk->timestamp = make_timestamp(); sk->version = pk->version = 4; if( expireval ) { sk->expiredate = pk->expiredate = sk->timestamp + expireval; } sk->pubkey_algo = pk->pubkey_algo = algo; - - rc = key_from_sexp( pk->pkey, s_key, "public-key", "pgy" ); - if( rc ) { - log_error("key_from_sexp failed: rc=%d\n", rc ); - return rc; - } - rc = key_from_sexp( sk->skey, s_key, "private-key", "pgyx" ); - if( rc ) { - log_error("key_from_sexp failed: rc=%d\n", rc ); - return rc; - } - misc_key_info = gcry_sexp_find_token( s_key, "misc-key-info", 0 ); - gcry_sexp_release ( s_key ); - + pk->pkey[0] = mpi_copy( skey[0] ); + pk->pkey[1] = mpi_copy( skey[1] ); + pk->pkey[2] = mpi_copy( skey[2] ); + sk->skey[0] = skey[0]; + sk->skey[1] = skey[1]; + sk->skey[2] = skey[2]; + sk->skey[3] = skey[3]; sk->is_protected = 0; sk->protect.algo = 0; - sk->csum = checksum_mpi( sk->skey[3] ); + sk->csum = checksum_mpi_counted_nbits( sk->skey[3] ); if( ret_sk ) /* not a subkey: return an unprotected version of the sk */ *ret_sk = copy_secret_key( NULL, sk ); @@ -364,39 +699,27 @@ gen_elg(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, sk->protect.s2k = *s2k; rc = protect_secret_key( sk, dek ); if( rc ) { - log_error("protect_secret_key failed: %s\n", gpg_errstr(rc) ); + log_error("protect_secret_key failed: %s\n", g10_errstr(rc) ); free_public_key(pk); free_secret_key(sk); return rc; } } - pkt = gcry_xcalloc( 1,sizeof *pkt); + pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY; pkt->pkt.public_key = pk; add_kbnode(pub_root, new_kbnode( pkt )); /* don't know whether it makes sense to have the factors, so for now * we store them in the secret keyring (but they are not secret) */ - pkt = gcry_xcalloc( 1,sizeof *pkt); + pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); - if ( misc_key_info ) { - size_t n; - char *buf; - - n = gcry_sexp_sprint ( misc_key_info, 0, NULL, 0 ); - buf = gcry_xmalloc ( n+4 ); - strcpy ( buf, "#::" ); - n = gcry_sexp_sprint ( misc_key_info, 0, buf+3, n ); - if ( n ) { - n += 3; - add_kbnode( sec_root, make_comment_node_from_buffer( buf, n )); - } - gcry_free ( buf ); - gcry_sexp_release (misc_key_info); - } + for(i=0; factors[i]; i++ ) + add_kbnode( sec_root, + make_mpi_comment_node("#:ELG_factor:", factors[i] )); return 0; } @@ -410,11 +733,12 @@ gen_dsa(unsigned int nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 expireval ) { int rc; + int i; PACKET *pkt; PKT_secret_key *sk; PKT_public_key *pk; - GCRY_SEXP misc_key_info; - GCRY_SEXP s_parms, s_key; + MPI skey[5]; + MPI *factors; if( nbits > 1024 || nbits < 512 ) { nbits = 1024; @@ -426,44 +750,33 @@ gen_dsa(unsigned int nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, log_info(_("keysize rounded up to %u bits\n"), nbits ); } - if ( gcry_sexp_build ( &s_parms, NULL, - "(genkey(dsa(nbits %d)))", (int)nbits ) ) - BUG (); - - rc = gcry_pk_genkey( &s_key, s_parms ); - gcry_sexp_release( s_parms ); + rc = pubkey_generate( PUBKEY_ALGO_DSA, nbits, skey, &factors ); if( rc ) { - log_error("pk_genkey failed: %s\n", gpg_errstr(rc) ); + log_error("pubkey_generate failed: %s\n", g10_errstr(rc) ); return rc; } - - sk = gcry_xcalloc( 1, sizeof *sk ); - pk = gcry_xcalloc( 1, sizeof *pk ); + sk = m_alloc_clear( sizeof *sk ); + pk = m_alloc_clear( sizeof *pk ); sk->timestamp = pk->timestamp = make_timestamp(); sk->version = pk->version = 4; if( expireval ) { sk->expiredate = pk->expiredate = sk->timestamp + expireval; } - sk->pubkey_algo = pk->pubkey_algo = GCRY_PK_DSA; - - rc = key_from_sexp( pk->pkey, s_key, "public-key", "pqgy" ); - if( rc ) { - log_error("key_from_sexp failed: rc=%d\n", rc ); - return rc; - } - rc = key_from_sexp( sk->skey, s_key, "private-key", "pqgyx" ); - if( rc ) { - log_error("key_from_sexp failed: rc=%d\n", rc ); - return rc; - } - misc_key_info = gcry_sexp_find_token( s_key, "misc-key-info", 0 ); - gcry_sexp_release ( s_key ); - + sk->pubkey_algo = pk->pubkey_algo = PUBKEY_ALGO_DSA; + pk->pkey[0] = mpi_copy( skey[0] ); + pk->pkey[1] = mpi_copy( skey[1] ); + pk->pkey[2] = mpi_copy( skey[2] ); + pk->pkey[3] = mpi_copy( skey[3] ); + sk->skey[0] = skey[0]; + sk->skey[1] = skey[1]; + sk->skey[2] = skey[2]; + sk->skey[3] = skey[3]; + sk->skey[4] = skey[4]; sk->is_protected = 0; sk->protect.algo = 0; - sk->csum = checksum_mpi( sk->skey[4] ); + sk->csum = checksum_mpi_counted_nbits( sk->skey[4] ); if( ret_sk ) /* not a subkey: return an unprotected version of the sk */ *ret_sk = copy_secret_key( NULL, sk ); @@ -472,47 +785,39 @@ gen_dsa(unsigned int nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, sk->protect.s2k = *s2k; rc = protect_secret_key( sk, dek ); if( rc ) { - log_error("protect_secret_key failed: %s\n", gpg_errstr(rc) ); + log_error("protect_secret_key failed: %s\n", g10_errstr(rc) ); free_public_key(pk); free_secret_key(sk); - gcry_sexp_release (misc_key_info); return rc; } } - pkt = gcry_xcalloc( 1,sizeof *pkt); + pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY; pkt->pkt.public_key = pk; add_kbnode(pub_root, new_kbnode( pkt )); /* don't know whether it makes sense to have the factors, so for now * we store them in the secret keyring (but they are not secret) + * p = 2 * q * f1 * f2 * ... * fn + * We store only f1 to f_n-1; fn can be calculated because p and q + * are known. */ - pkt = gcry_xcalloc( 1,sizeof *pkt); + pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); - if ( misc_key_info ) { - size_t n; - char *buf; + for(i=1; factors[i]; i++ ) /* the first one is q */ + add_kbnode( sec_root, + make_mpi_comment_node("#:DSA_factor:", factors[i] )); - n = gcry_sexp_sprint ( misc_key_info, 0, NULL, 0 ); - buf = gcry_xmalloc ( n+4 ); - strcpy ( buf, "#::" ); - n = gcry_sexp_sprint ( misc_key_info, 0, buf+3, n ); - if ( n ) { - n += 3; - add_kbnode( sec_root, make_comment_node_from_buffer( buf, n )); - } - gcry_free ( buf ); - gcry_sexp_release (misc_key_info); - } - /* fixme: Merge this with the elg-generate function and release - * some more stuff (memory-leak) */ return 0; } -#if 0 + +/* + * Generate an RSA key. + */ static int gen_rsa(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 expireval ) @@ -521,7 +826,7 @@ gen_rsa(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, PACKET *pkt; PKT_secret_key *sk; PKT_public_key *pk; - MPI skey[4]; + MPI skey[6]; MPI *factors; assert( is_RSA(algo) ); @@ -538,12 +843,12 @@ gen_rsa(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, rc = pubkey_generate( algo, nbits, skey, &factors ); if( rc ) { - log_error("pubkey_generate failed: %s\n", gpg_errstr(rc) ); + log_error("pubkey_generate failed: %s\n", g10_errstr(rc) ); return rc; } - sk = gcry_xcalloc( 1, sizeof *sk ); - pk = gcry_xcalloc( 1, sizeof *pk ); + sk = m_alloc_clear( sizeof *sk ); + pk = m_alloc_clear( sizeof *pk ); sk->timestamp = pk->timestamp = make_timestamp(); sk->version = pk->version = 4; if( expireval ) { @@ -573,26 +878,25 @@ gen_rsa(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, sk->protect.s2k = *s2k; rc = protect_secret_key( sk, dek ); if( rc ) { - log_error("protect_secret_key failed: %s\n", gpg_errstr(rc) ); + log_error("protect_secret_key failed: %s\n", g10_errstr(rc) ); free_public_key(pk); free_secret_key(sk); return rc; } } - pkt = gcry_xcalloc( 1,sizeof *pkt); + pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY; pkt->pkt.public_key = pk; add_kbnode(pub_root, new_kbnode( pkt )); - pkt = gcry_xcalloc( 1,sizeof *pkt); + pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); return 0; } -#endif /**************** @@ -625,55 +929,69 @@ check_valid_days( const char *s ) /**************** * Returns: 0 to create both a DSA and a ElGamal key. + * and only if key flags are to be written the desired usage. */ static int -ask_algo( int addmode ) +ask_algo (int addmode, unsigned int *r_usage) { char *answer; int algo; + *r_usage = 0; tty_printf(_("Please select what kind of key you want:\n")); if( !addmode ) tty_printf(_(" (%d) DSA and ElGamal (default)\n"), 1 ); tty_printf( _(" (%d) DSA (sign only)\n"), 2 ); if( addmode ) tty_printf( _(" (%d) ElGamal (encrypt only)\n"), 3 ); - tty_printf( _(" (%d) ElGamal (sign and encrypt)\n"), 4 ); - #if 0 - tty_printf( _(" (%d) RSA (sign and encrypt)\n"), 5 ); - #endif + if (opt.expert) + tty_printf( _(" (%d) ElGamal (sign and encrypt)\n"), 4 ); + tty_printf( _(" (%d) RSA (sign only)\n"), 5 ); + if (addmode) + tty_printf( _(" (%d) RSA (encrypt only)\n"), 6 ); + if (opt.expert) + tty_printf( _(" (%d) RSA (sign and encrypt)\n"), 7 ); for(;;) { answer = cpr_get("keygen.algo",_("Your selection? ")); cpr_kill_prompt(); algo = *answer? atoi(answer): 1; - gcry_free(answer); + m_free(answer); if( algo == 1 && !addmode ) { algo = 0; /* create both keys */ break; } - #if 0 - else if( algo == 5 ) { - if( cpr_get_answer_is_yes("keygen.algo.rsa_se",_( - "Do you really want to create a sign and encrypt key? "))) { - algo = GCRY_PK_RSA; - break; - } + else if( algo == 7 && opt.expert ) { + if (cpr_get_answer_is_yes ("keygen.algo.rsa_se",_( + "The use of this algorithm is deprecated - create anyway? "))){ + algo = PUBKEY_ALGO_RSA; + *r_usage = PUBKEY_USAGE_ENC | PUBKEY_USAGE_SIG; + break; + } } - #endif - else if( algo == 4 ) { + else if( algo == 6 && addmode ) { + algo = PUBKEY_ALGO_RSA; + *r_usage = PUBKEY_USAGE_ENC; + break; + } + else if( algo == 5 ) { + algo = PUBKEY_ALGO_RSA; + *r_usage = PUBKEY_USAGE_SIG; + break; + } + else if( algo == 4 && opt.expert) { if( cpr_get_answer_is_yes("keygen.algo.elg_se",_( - "Do you really want to create a sign and encrypt key? "))) { - algo = GCRY_PK_ELG; + "The use of this algorithm is deprecated - create anyway? "))){ + algo = PUBKEY_ALGO_ELGAMAL; break; } } else if( algo == 3 && addmode ) { - algo = GCRY_PK_ELG_E; + algo = PUBKEY_ALGO_ELGAMAL_E; break; } else if( algo == 2 ) { - algo = GCRY_PK_DSA; + algo = PUBKEY_ALGO_DSA; break; } else @@ -689,24 +1007,28 @@ ask_keysize( int algo ) char *answer; unsigned nbits; - tty_printf(_("About to generate a new %s keypair.\n" - " minimum keysize is 768 bits\n" - " default keysize is 1024 bits\n" - " highest suggested keysize is 2048 bits\n"), - gcry_pk_algo_name(algo) ); + if (algo != PUBKEY_ALGO_DSA && algo != PUBKEY_ALGO_RSA) { + tty_printf (_("About to generate a new %s keypair.\n" + " minimum keysize is 768 bits\n" + " default keysize is 1024 bits\n" + " highest suggested keysize is 2048 bits\n"), + pubkey_algo_to_string(algo) ); + } + for(;;) { answer = cpr_get("keygen.size", _("What keysize do you want? (1024) ")); cpr_kill_prompt(); nbits = *answer? atoi(answer): 1024; - gcry_free(answer); - if( algo == GCRY_PK_DSA && (nbits < 512 || nbits > 1024) ) + m_free(answer); + if( algo == PUBKEY_ALGO_DSA && (nbits < 512 || nbits > 1024) ) tty_printf(_("DSA only allows keysizes from 512 to 1024\n")); - else if( nbits < 768 ) - tty_printf(_("keysize too small; 768 is smallest value allowed.\n")); - else if( algo == GCRY_PK_RSA && nbits < 1024 ) + else if( algo == PUBKEY_ALGO_RSA && nbits < 1024 ) tty_printf(_("keysize too small;" " 1024 is smallest value allowed for RSA.\n")); + else if( nbits < 768 ) + tty_printf(_("keysize too small;" + " 768 is smallest value allowed.\n")); else if( nbits > 4096 ) { /* It is ridiculous and an annoyance to use larger key sizes! * GnuPG can handle much larger sizes; but it takes an eternity @@ -731,16 +1053,11 @@ ask_keysize( int algo ) break; } } - else if( nbits > 1536 && !cpr_enabled() && algo != GCRY_PK_RSA ) { - if( cpr_get_answer_is_yes("keygen.size.large.okay",_( - "Do you really need such a large keysize? ")) ) - break; - } else break; } tty_printf(_("Requested keysize is %u bits\n"), nbits ); - if( algo == GCRY_PK_DSA && (nbits % 64) ) { + if( algo == PUBKEY_ALGO_DSA && (nbits % 64) ) { nbits = ((nbits + 63) / 64) * 64; tty_printf(_("rounded up to %u bits\n"), nbits ); } @@ -786,20 +1103,38 @@ parse_expire_string( const char *string ) return valid_days; } - -static u32 -ask_expire_interval(void) +/* object == 0 for a key, and 1 for a sig */ +u32 +ask_expire_interval(int object) { char *answer; int valid_days=0; u32 interval = 0; - tty_printf(_("Please specify how long the key should be valid.\n" - " 0 = key does not expire\n" - " = key expires in n days\n" - " w = key expires in n weeks\n" - " m = key expires in n months\n" - " y = key expires in n years\n")); + switch(object) + { + case 0: + tty_printf(_("Please specify how long the key should be valid.\n" + " 0 = key does not expire\n" + " = key expires in n days\n" + " w = key expires in n weeks\n" + " m = key expires in n months\n" + " y = key expires in n years\n")); + break; + + case 1: + tty_printf(_("Please specify how long the signature should be valid.\n" + " 0 = signature does not expire\n" + " = signature expires in n days\n" + " w = signature expires in n weeks\n" + " m = signature expires in n months\n" + " y = signature expires in n years\n")); + break; + + default: + BUG(); + } + /* Note: The elgamal subkey for DSA has no expiration date because * it must be signed with the DSA key and this one has the expiration * date */ @@ -808,8 +1143,11 @@ ask_expire_interval(void) for(;;) { u32 curtime=make_timestamp(); - gcry_free(answer); - answer = cpr_get("keygen.valid",_("Key is valid for? (0) ")); + m_free(answer); + if(object==0) + answer = cpr_get("keygen.valid",_("Key is valid for? (0) ")); + else + answer = cpr_get("siggen.valid",_("Signature is valid for? (0) ")); cpr_kill_prompt(); trim_spaces(answer); valid_days = parse_expire_string( answer ); @@ -819,14 +1157,18 @@ ask_expire_interval(void) } if( !valid_days ) { - tty_printf(_("Key does not expire at all\n")); + tty_printf(_("%s does not expire at all\n"), + object==0?"Key":"Signature"); interval = 0; } else { interval = valid_days * 86400L; /* print the date when the key expires */ - tty_printf(_("Key expires at %s\n"), + tty_printf(_("%s expires at %s\n"), + object==0?"Key":"Signature", asctimestamp((ulong)(curtime + interval) ) ); + /* FIXME: This check yields warning on alhas: + write a configure check and to this check here only for 32 bit machines */ if( (time_t)((ulong)(curtime+interval)) < 0 ) tty_printf(_("Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n")); @@ -836,14 +1178,14 @@ ask_expire_interval(void) _("Is this correct (y/n)? ")) ) break; } - gcry_free(answer); + m_free(answer); return interval; } u32 ask_expiredate() { - u32 x = ask_expire_interval(); + u32 x = ask_expire_interval(0); return x? make_timestamp() + x : 0; } @@ -887,7 +1229,7 @@ ask_user_id( int mode ) if( !aname ) { for(;;) { - gcry_free(aname); + m_free(aname); aname = cpr_get("keygen.name",_("Real name: ")); trim_spaces(aname); cpr_kill_prompt(); @@ -907,7 +1249,7 @@ ask_user_id( int mode ) } if( !amail ) { for(;;) { - gcry_free(amail); + m_free(amail); amail = cpr_get("keygen.email",_("Email address: ")); trim_spaces(amail); cpr_kill_prompt(); @@ -926,7 +1268,7 @@ ask_user_id( int mode ) } if( !acomment ) { for(;;) { - gcry_free(acomment); + m_free(acomment); acomment = cpr_get("keygen.comment",_("Comment: ")); trim_spaces(acomment); cpr_kill_prompt(); @@ -940,8 +1282,8 @@ ask_user_id( int mode ) } - gcry_free(uid); - uid = p = gcry_xmalloc(strlen(aname)+strlen(amail)+strlen(acomment)+12+10); + m_free(uid); + uid = p = m_alloc(strlen(aname)+strlen(amail)+strlen(acomment)+12+10); p = stpcpy(p, aname ); if( *acomment ) p = stpcpy(stpcpy(stpcpy(p," ("), acomment),")"); @@ -950,10 +1292,8 @@ ask_user_id( int mode ) /* append a warning if we do not have dev/random * or it is switched into quick testmode */ - #if 0 if( quick_random_gen(-1) ) strcpy(p, " (INSECURE!)" ); - #endif /* print a note in case that UTF8 mapping has to be done */ for(p=uid; *p; p++ ) { @@ -973,12 +1313,12 @@ ask_user_id( int mode ) } for(;;) { - char *ansstr = _("NnCcEeOoQq"); + const char *ansstr = _("NnCcEeOoQq"); if( strlen(ansstr) != 10 ) BUG(); if( cpr_enabled() ) { - answer = gcry_xstrdup(ansstr+6); + answer = m_strdup(ansstr+6); answer[1] = 0; } else { @@ -990,15 +1330,15 @@ ask_user_id( int mode ) if( strlen(answer) > 1 ) ; else if( *answer == ansstr[0] || *answer == ansstr[1] ) { - gcry_free(aname); aname = NULL; + m_free(aname); aname = NULL; break; } else if( *answer == ansstr[2] || *answer == ansstr[3] ) { - gcry_free(acomment); acomment = NULL; + m_free(acomment); acomment = NULL; break; } else if( *answer == ansstr[4] || *answer == ansstr[5] ) { - gcry_free(amail); amail = NULL; + m_free(amail); amail = NULL; break; } else if( *answer == ansstr[6] || *answer == ansstr[7] ) { @@ -1006,29 +1346,29 @@ ask_user_id( int mode ) tty_printf(_("Please correct the error first\n")); } else { - gcry_free(aname); aname = NULL; - gcry_free(acomment); acomment = NULL; - gcry_free(amail); amail = NULL; + m_free(aname); aname = NULL; + m_free(acomment); acomment = NULL; + m_free(amail); amail = NULL; break; } } else if( *answer == ansstr[8] || *answer == ansstr[9] ) { - gcry_free(aname); aname = NULL; - gcry_free(acomment); acomment = NULL; - gcry_free(amail); amail = NULL; - gcry_free(uid); uid = NULL; + m_free(aname); aname = NULL; + m_free(acomment); acomment = NULL; + m_free(amail); amail = NULL; + m_free(uid); uid = NULL; break; } - gcry_free(answer); + m_free(answer); } - gcry_free(answer); + m_free(answer); if( !amail && !acomment && !amail ) break; - gcry_free(uid); uid = NULL; + m_free(uid); uid = NULL; } if( uid ) { char *p = native_to_utf8( uid ); - gcry_free( uid ); + m_free( uid ); uid = p; } return uid; @@ -1040,20 +1380,22 @@ ask_passphrase( STRING2KEY **ret_s2k ) { DEK *dek = NULL; STRING2KEY *s2k; + const char *errtext = NULL; tty_printf(_("You need a Passphrase to protect your secret key.\n\n") ); - s2k = gcry_xmalloc_secure( sizeof *s2k ); + s2k = m_alloc_secure( sizeof *s2k ); for(;;) { s2k->mode = opt.s2k_mode; s2k->hash_algo = opt.s2k_digest_algo; - dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2 ); + dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k,2,errtext); if( !dek ) { - tty_printf(_("passphrase not correctly repeated; try again.\n")); + errtext = _("passphrase not correctly repeated; try again"); + tty_printf(_("%s.\n"), errtext); } else if( !dek->keylen ) { - gcry_free(dek); dek = NULL; - gcry_free(s2k); s2k = NULL; + m_free(dek); dek = NULL; + m_free(s2k); s2k = NULL; tty_printf(_( "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1069,7 +1411,7 @@ ask_passphrase( STRING2KEY **ret_s2k ) static int -do_create( int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, +do_create( int algo, unsigned int nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **sk, u32 expiredate ) { int rc=0; @@ -1081,14 +1423,12 @@ do_create( int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, "disks) during the prime generation; this gives the random number\n" "generator a better chance to gain enough entropy.\n") ); - if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) + if( algo == PUBKEY_ALGO_ELGAMAL || algo == PUBKEY_ALGO_ELGAMAL_E ) rc = gen_elg(algo, nbits, pub_root, sec_root, dek, s2k, sk, expiredate); - else if( algo == GCRY_PK_DSA ) + else if( algo == PUBKEY_ALGO_DSA ) rc = gen_dsa(nbits, pub_root, sec_root, dek, s2k, sk, expiredate); - #if 0 - else if( algo == GCRY_PK_RSA ) + else if( algo == PUBKEY_ALGO_RSA ) rc = gen_rsa(algo, nbits, pub_root, sec_root, dek, s2k, sk, expiredate); - #endif else BUG(); @@ -1120,9 +1460,10 @@ generate_user_id() if( !p ) return NULL; n = strlen(p); - uid = gcry_xcalloc( 1, sizeof *uid + n - 1 ); + uid = m_alloc_clear( sizeof *uid + n - 1 ); uid->len = n; strcpy(uid->name, p); + uid->ref = 1; return uid; } @@ -1135,11 +1476,11 @@ release_parameter_list( struct para_data_s *r ) for( ; r ; r = r2 ) { r2 = r->next; if( r->key == pPASSPHRASE_DEK ) - gcry_free( r->u.dek ); + m_free( r->u.dek ); else if( r->key == pPASSPHRASE_S2K ) - gcry_free( r->u.s2k ); + m_free( r->u.s2k ); - gcry_free(r); + m_free(r); } } @@ -1163,12 +1504,102 @@ get_parameter_value( struct para_data_s *para, enum para_name key ) static int get_parameter_algo( struct para_data_s *para, enum para_name key ) { + int i; struct para_data_s *r = get_parameter( para, key ); if( !r ) return -1; if( isdigit( *r->u.value ) ) - return atoi( r->u.value ); - return gcry_pk_map_name( r->u.value ); + i = atoi( r->u.value ); + else + i = string_to_pubkey_algo( r->u.value ); + if (i == PUBKEY_ALGO_RSA_E || i == PUBKEY_ALGO_RSA_S) + i = 0; /* we don't want to allow generation of these algorithms */ + return i; +} + +/* + * parse the usage parameter and set the keyflags. Return true on error. + */ +static int +parse_parameter_usage (const char *fname, + struct para_data_s *para, enum para_name key) +{ + struct para_data_s *r = get_parameter( para, key ); + char *p, *pn; + unsigned int use; + + if( !r ) + return 0; /* none (this is an optional parameter)*/ + + use = 0; + pn = r->u.value; + while ( (p = strsep (&pn, " \t,")) ) { + if ( !*p) + ; + else if ( !ascii_strcasecmp (p, "sign") ) + use |= PUBKEY_USAGE_SIG; + else if ( !ascii_strcasecmp (p, "encrypt") ) + use |= PUBKEY_USAGE_ENC; + else { + log_error("%s:%d: invalid usage list\n", fname, r->lnr ); + return -1; /* error */ + } + } + r->u.usage = use; + return 0; +} + +static int +parse_revocation_key (const char *fname, + struct para_data_s *para, enum para_name key) +{ + struct para_data_s *r = get_parameter( para, key ); + struct revocation_key revkey; + char *pn; + int i; + + if( !r ) + return 0; /* none (this is an optional parameter) */ + + pn = r->u.value; + + revkey.class=0x80; + revkey.algid=atoi(pn); + if(!revkey.algid) + goto fail; + + /* Skip to the fpr */ + while(*pn && *pn!=':') + pn++; + + if(*pn!=':') + goto fail; + + pn++; + + for(i=0;iu.revkey,&revkey,sizeof(struct revocation_key)); + + return 0; + + fail: + log_error("%s:%d: invalid revocation key\n", fname, r->lnr ); + return -1; /* error */ } @@ -1181,6 +1612,8 @@ get_parameter_u32( struct para_data_s *para, enum para_name key ) return 0; if( r->key == pKEYEXPIRE || r->key == pSUBKEYEXPIRE ) return r->u.expire; + if( r->key == pKEYUSAGE || r->key == pSUBKEYUSAGE ) + return r->u.usage; return (unsigned int)strtoul( r->u.value, NULL, 10 ); } @@ -1205,10 +1638,16 @@ get_parameter_s2k( struct para_data_s *para, enum para_name key ) return r? r->u.s2k : NULL; } +static struct revocation_key * +get_parameter_revkey( struct para_data_s *para, enum para_name key ) +{ + struct para_data_s *r = get_parameter( para, key ); + return r? &r->u.revkey : NULL; +} static int proc_parameter_file( struct para_data_s *para, const char *fname, - struct output_control_s *outctrl ) + struct output_control_s *outctrl ) { struct para_data_s *r; const char *s1, *s2, *s3; @@ -1219,18 +1658,24 @@ proc_parameter_file( struct para_data_s *para, const char *fname, /* check that we have all required parameters */ assert( get_parameter( para, pKEYTYPE ) ); i = get_parameter_algo( para, pKEYTYPE ); - if( i < 1 || openpgp_pk_test_algo( i, GCRY_PK_USAGE_SIGN ) ) { + if( i < 1 || check_pubkey_algo2( i, PUBKEY_USAGE_SIG ) ) { r = get_parameter( para, pKEYTYPE ); log_error("%s:%d: invalid algorithm\n", fname, r->lnr ); return -1; } + if (parse_parameter_usage (fname, para, pKEYUSAGE)) + return -1; + i = get_parameter_algo( para, pSUBKEYTYPE ); - if( i > 1 && openpgp_pk_test_algo( i, 0 ) ) { + if( i > 0 && check_pubkey_algo( i ) ) { r = get_parameter( para, pSUBKEYTYPE ); log_error("%s:%d: invalid algorithm\n", fname, r->lnr ); return -1; } + if (i > 0 && parse_parameter_usage (fname, para, pSUBKEYUSAGE)) + return -1; + if( !get_parameter_value( para, pUSERID ) ) { /* create the formatted user ID */ @@ -1239,7 +1684,7 @@ proc_parameter_file( struct para_data_s *para, const char *fname, s3 = get_parameter_value( para, pNAMEEMAIL ); if( s1 || s2 || s3 ) { n = (s1?strlen(s1):0) + (s2?strlen(s2):0) + (s3?strlen(s3):0); - r = gcry_xcalloc( 1, sizeof *r + n + 20 ); + r = m_alloc_clear( sizeof *r + n + 20 ); r->key = pUSERID; p = r->u.value; if( s1 ) @@ -1253,6 +1698,13 @@ proc_parameter_file( struct para_data_s *para, const char *fname, } } + /* Set preferences, if any. */ + keygen_set_std_prefs(get_parameter_value( para, pPREFERENCES ), 0); + + /* Set revoker, if any. */ + if (parse_revocation_key (fname, para, pREVOKER)) + return -1; + /* make DEK and S2K from the Passphrase */ r = get_parameter( para, pPASSPHRASE ); if( r && *r->u.value ) { @@ -1262,21 +1714,21 @@ proc_parameter_file( struct para_data_s *para, const char *fname, STRING2KEY *s2k; DEK *dek; - s2k = gcry_xmalloc_secure( sizeof *s2k ); + s2k = m_alloc_secure( sizeof *s2k ); s2k->mode = opt.s2k_mode; s2k->hash_algo = opt.s2k_digest_algo; set_next_passphrase( r->u.value ); - dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2 ); + dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2, NULL ); set_next_passphrase( NULL ); assert( dek ); memset( r->u.value, 0, strlen(r->u.value) ); - r = gcry_xcalloc( 1, sizeof *r ); + r = m_alloc_clear( sizeof *r ); r->key = pPASSPHRASE_S2K; r->u.s2k = s2k; r->next = para; para = r; - r = gcry_xcalloc( 1, sizeof *r ); + r = m_alloc_clear( sizeof *r ); r->key = pPASSPHRASE_DEK; r->u.dek = dek; r->next = para; @@ -1294,7 +1746,7 @@ proc_parameter_file( struct para_data_s *para, const char *fname, r->u.expire = i * 86400L; r->key = pKEYEXPIRE; /* change hat entry */ /* also set it for the subkey */ - r = gcry_xcalloc( 1, sizeof *r + 20 ); + r = m_alloc_clear( sizeof *r + 20 ); r->key = pSUBKEYEXPIRE; r->u.expire = i * 86400L; r->next = para; @@ -1324,13 +1776,17 @@ read_parameter_file( const char *fname ) } keywords[] = { { "Key-Type", pKEYTYPE}, { "Key-Length", pKEYLENGTH }, + { "Key-Usage", pKEYUSAGE }, { "Subkey-Type", pSUBKEYTYPE }, { "Subkey-Length", pSUBKEYLENGTH }, + { "Subkey-Usage", pSUBKEYUSAGE }, { "Name-Real", pNAMEREAL }, { "Name-Email", pNAMEEMAIL }, { "Name-Comment", pNAMECOMMENT }, { "Expire-Date", pEXPIREDATE }, { "Passphrase", pPASSPHRASE }, + { "Preferences", pPREFERENCES }, + { "Revoker", pREVOKER }, { NULL, 0 } }; FILE *fp; @@ -1366,45 +1822,45 @@ read_parameter_file( const char *fname ) err = "line too long"; break; } - for( p = line; isspace(*p); p++ ) + for( p = line; isspace(*(byte*)p); p++ ) ; if( !*p || *p == '#' ) continue; keyword = p; if( *keyword == '%' ) { - for( ; !isspace(*p); p++ ) + for( ; !isspace(*(byte*)p); p++ ) ; if( *p ) *p++ = 0; - for( ; isspace(*p); p++ ) + for( ; isspace(*(byte*)p); p++ ) ; value = p; trim_trailing_ws( value, strlen(value) ); - if( !stricmp( keyword, "%echo" ) ) + if( !ascii_strcasecmp( keyword, "%echo" ) ) log_info("%s\n", value ); - else if( !stricmp( keyword, "%dry-run" ) ) + else if( !ascii_strcasecmp( keyword, "%dry-run" ) ) outctrl.dryrun = 1; - else if( !stricmp( keyword, "%commit" ) ) { + else if( !ascii_strcasecmp( keyword, "%commit" ) ) { outctrl.lnr = lnr; proc_parameter_file( para, fname, &outctrl ); release_parameter_list( para ); para = NULL; } - else if( !stricmp( keyword, "%pubring" ) ) { + else if( !ascii_strcasecmp( keyword, "%pubring" ) ) { if( outctrl.pub.fname && !strcmp( outctrl.pub.fname, value ) ) ; /* still the same file - ignore it */ else { - gcry_free( outctrl.pub.newfname ); - outctrl.pub.newfname = gcry_xstrdup( value ); + m_free( outctrl.pub.newfname ); + outctrl.pub.newfname = m_strdup( value ); outctrl.use_files = 1; } } - else if( !stricmp( keyword, "%secring" ) ) { + else if( !ascii_strcasecmp( keyword, "%secring" ) ) { if( outctrl.sec.fname && !strcmp( outctrl.sec.fname, value ) ) ; /* still the same file - ignore it */ else { - gcry_free( outctrl.sec.newfname ); - outctrl.sec.newfname = gcry_xstrdup( value ); + m_free( outctrl.sec.newfname ); + outctrl.sec.newfname = m_strdup( value ); outctrl.use_files = 1; } } @@ -1422,7 +1878,7 @@ read_parameter_file( const char *fname ) } if( *p ) *p++ = 0; - for( ; isspace(*p); p++ ) + for( ; isspace(*(byte*)p); p++ ) ; if( !*p ) { err = "missing argument"; @@ -1432,7 +1888,7 @@ read_parameter_file( const char *fname ) trim_trailing_ws( value, strlen(value) ); for(i=0; keywords[i].name; i++ ) { - if( !stricmp( keywords[i].name, keyword ) ) + if( !ascii_strcasecmp( keywords[i].name, keyword ) ) break; } if( !keywords[i].name ) { @@ -1460,7 +1916,7 @@ read_parameter_file( const char *fname ) break; } } - r = gcry_xcalloc( 1, sizeof *r + strlen( value ) ); + r = m_alloc_clear( sizeof *r + strlen( value ) ); r->lnr = lnr; r->key = keywords[i].key; strcpy( r->u.value, value ); @@ -1480,10 +1936,10 @@ read_parameter_file( const char *fname ) if( outctrl.use_files ) { /* close open streams */ iobuf_close( outctrl.pub.stream ); iobuf_close( outctrl.sec.stream ); - gcry_free( outctrl.pub.fname ); - gcry_free( outctrl.pub.newfname ); - gcry_free( outctrl.sec.fname ); - gcry_free( outctrl.sec.newfname ); + m_free( outctrl.pub.fname ); + m_free( outctrl.pub.newfname ); + m_free( outctrl.sec.fname ); + m_free( outctrl.sec.newfname ); } release_parameter_list( para ); @@ -1504,6 +1960,7 @@ generate_keypair( const char *fname ) DEK *dek; STRING2KEY *s2k; int algo; + unsigned int use; int both = 0; u32 expire; struct para_data_s *para = NULL; @@ -1517,50 +1974,61 @@ generate_keypair( const char *fname ) return; } - algo = ask_algo( 0 ); + algo = ask_algo( 0, &use ); if( !algo ) { /* default: DSA with ElG subkey of the specified size */ both = 1; - r = gcry_xcalloc( 1, sizeof *r + 20 ); + r = m_alloc_clear( sizeof *r + 20 ); r->key = pKEYTYPE; - sprintf( r->u.value, "%d", GCRY_PK_DSA ); + sprintf( r->u.value, "%d", PUBKEY_ALGO_DSA ); r->next = para; para = r; tty_printf(_("DSA keypair will have 1024 bits.\n")); - r = gcry_xcalloc( 1, sizeof *r + 20 ); + r = m_alloc_clear( sizeof *r + 20 ); r->key = pKEYLENGTH; strcpy( r->u.value, "1024" ); r->next = para; para = r; - algo = GCRY_PK_ELG_E; - r = gcry_xcalloc( 1, sizeof *r + 20 ); + algo = PUBKEY_ALGO_ELGAMAL_E; + r = m_alloc_clear( sizeof *r + 20 ); r->key = pSUBKEYTYPE; sprintf( r->u.value, "%d", algo ); r->next = para; para = r; } else { - r = gcry_xcalloc( 1, sizeof *r + 20 ); + r = m_alloc_clear( sizeof *r + 20 ); r->key = pKEYTYPE; sprintf( r->u.value, "%d", algo ); r->next = para; para = r; + + if (use) { + r = m_alloc_clear( sizeof *r + 20 ); + r->key = pKEYUSAGE; + sprintf( r->u.value, "%s%s", + (use & PUBKEY_USAGE_SIG)? "sign ":"", + (use & PUBKEY_USAGE_ENC)? "encrypt ":"" ); + r->next = para; + para = r; + } + } nbits = ask_keysize( algo ); - r = gcry_xcalloc( 1, sizeof *r + 20 ); + r = m_alloc_clear( sizeof *r + 20 ); r->key = both? pSUBKEYLENGTH : pKEYLENGTH; sprintf( r->u.value, "%u", nbits); r->next = para; para = r; - expire = ask_expire_interval(); - r = gcry_xcalloc( 1, sizeof *r + 20 ); + expire = ask_expire_interval(0); + r = m_alloc_clear( sizeof *r + 20 ); r->key = pKEYEXPIRE; r->u.expire = expire; r->next = para; para = r; - r = gcry_xcalloc( 1, sizeof *r + 20 ); + r = m_alloc_clear( sizeof *r + 20 ); r->key = pSUBKEYEXPIRE; r->u.expire = expire; r->next = para; @@ -1572,7 +2040,7 @@ generate_keypair( const char *fname ) release_parameter_list( para ); return; } - r = gcry_xcalloc( 1, sizeof *r + strlen(uid) ); + r = m_alloc_clear( sizeof *r + strlen(uid) ); r->key = pUSERID; strcpy( r->u.value, uid ); r->next = para; @@ -1580,12 +2048,12 @@ generate_keypair( const char *fname ) dek = ask_passphrase( &s2k ); if( dek ) { - r = gcry_xcalloc( 1, sizeof *r ); + r = m_alloc_clear( sizeof *r ); r->key = pPASSPHRASE_DEK; r->u.dek = dek; r->next = para; para = r; - r = gcry_xcalloc( 1, sizeof *r ); + r = m_alloc_clear( sizeof *r ); r->key = pPASSPHRASE_S2K; r->u.s2k = s2k; r->next = para; @@ -1601,13 +2069,13 @@ static void do_generate_keypair( struct para_data_s *para, struct output_control_s *outctrl ) { - char *pub_fname = NULL; - char *sec_fname = NULL; KBNODE pub_root = NULL; KBNODE sec_root = NULL; PKT_secret_key *sk = NULL; const char *s; + struct revocation_key *revkey; int rc; + int did_sub = 0; if( outctrl->dryrun ) { log_info("dry-run mode - key generation skipped\n"); @@ -1619,7 +2087,7 @@ do_generate_keypair( struct para_data_s *para, if( outctrl->pub.newfname ) { iobuf_close(outctrl->pub.stream); outctrl->pub.stream = NULL; - gcry_free( outctrl->pub.fname ); + m_free( outctrl->pub.fname ); outctrl->pub.fname = outctrl->pub.newfname; outctrl->pub.newfname = NULL; @@ -1638,7 +2106,7 @@ do_generate_keypair( struct para_data_s *para, if( outctrl->sec.newfname ) { iobuf_close(outctrl->sec.stream); outctrl->sec.stream = NULL; - gcry_free( outctrl->sec.fname ); + m_free( outctrl->sec.fname ); outctrl->sec.fname = outctrl->sec.newfname; outctrl->sec.newfname = NULL; @@ -1654,20 +2122,14 @@ do_generate_keypair( struct para_data_s *para, &outctrl->sec.afx ); } } - pub_fname = outctrl->pub.fname; /* only for info output */ - sec_fname = outctrl->sec.fname; /* only for info output */ assert( outctrl->pub.stream ); assert( outctrl->sec.stream ); - } - else { - pub_fname = get_writable_keyblock_file( 0 ); - sec_fname = get_writable_keyblock_file( 1 ); + if( opt.verbose ) { + log_info(_("writing public key to `%s'\n"), outctrl->pub.fname ); + log_info(_("writing secret key to `%s'\n"), outctrl->sec.fname ); + } } - if( opt.verbose ) { - log_info(_("writing public key to `%s'\n"), pub_fname ); - log_info(_("writing secret key to `%s'\n"), sec_fname ); - } /* we create the packets as a tree of kbnodes. Because the structure * we create is known in advance we simply generate a linked list @@ -1684,14 +2146,24 @@ do_generate_keypair( struct para_data_s *para, get_parameter_s2k( para, pPASSPHRASE_S2K ), &sk, get_parameter_u32( para, pKEYEXPIRE ) ); + + if(!rc && (revkey=get_parameter_revkey(para,pREVOKER))) + { + rc=write_direct_sig(pub_root,pub_root,sk,revkey); + if(!rc) + write_direct_sig(sec_root,pub_root,sk,revkey); + } + if( !rc && (s=get_parameter_value(para, pUSERID)) ) { write_uid(pub_root, s ); if( !rc ) write_uid(sec_root, s ); if( !rc ) - rc = write_selfsig(pub_root, pub_root, sk); + rc = write_selfsig(pub_root, pub_root, sk, + get_parameter_uint (para, pKEYUSAGE)); if( !rc ) - rc = write_selfsig(sec_root, pub_root, sk); + rc = write_selfsig(sec_root, pub_root, sk, + get_parameter_uint (para, pKEYUSAGE)); } if( get_parameter( para, pSUBKEYTYPE ) ) { @@ -1703,64 +2175,90 @@ do_generate_keypair( struct para_data_s *para, NULL, get_parameter_u32( para, pSUBKEYEXPIRE ) ); if( !rc ) - rc = write_keybinding(pub_root, pub_root, sk); + rc = write_keybinding(pub_root, pub_root, sk, + get_parameter_uint (para, pSUBKEYUSAGE)); if( !rc ) - rc = write_keybinding(sec_root, pub_root, sk); + rc = write_keybinding(sec_root, pub_root, sk, + get_parameter_uint (para, pSUBKEYUSAGE)); + did_sub = 1; } if( !rc && outctrl->use_files ) { /* direct write to specified files */ rc = write_keyblock( outctrl->pub.stream, pub_root ); if( rc ) - log_error("can't write public key: %s\n", gpg_errstr(rc) ); + log_error("can't write public key: %s\n", g10_errstr(rc) ); if( !rc ) { rc = write_keyblock( outctrl->sec.stream, sec_root ); if( rc ) - log_error("can't write secret key: %s\n", gpg_errstr(rc) ); + log_error("can't write secret key: %s\n", g10_errstr(rc) ); } } else if( !rc ) { /* write to the standard keyrings */ - KBPOS pub_kbpos; - KBPOS sec_kbpos; - int rc1 = -1; - int rc2 = -1; + KEYDB_HANDLE pub_hd = keydb_new (0); + KEYDB_HANDLE sec_hd = keydb_new (1); - /* we can now write the certificates */ - if( get_keyblock_handle( pub_fname, 0, &pub_kbpos ) ) { - if( add_keyblock_resource( pub_fname, 1, 0 ) ) { - log_error("can add keyblock file `%s'\n", pub_fname ); - rc = GPGERR_CREATE_FILE; - } - else if( get_keyblock_handle( pub_fname, 0, &pub_kbpos ) ) { - log_error("can get keyblock handle for `%s'\n", pub_fname ); - rc = GPGERR_CREATE_FILE; - } - } - if( rc ) - ; - else if( get_keyblock_handle( sec_fname, 1, &sec_kbpos ) ) { - if( add_keyblock_resource( sec_fname, 1, 1 ) ) { - log_error("can add keyblock file `%s'\n", sec_fname ); - rc = GPGERR_CREATE_FILE; - } - else if( get_keyblock_handle( sec_fname, 1, &sec_kbpos ) ) { - log_error("can get keyblock handle for `%s'\n", sec_fname ); - rc = GPGERR_CREATE_FILE; - } - } + /* FIXME: we may have to create the keyring first */ + rc = keydb_locate_writable (pub_hd, NULL); + if (rc) + log_error (_("no writable public keyring found: %s\n"), + g10_errstr (rc)); + + if (!rc) { + rc = keydb_locate_writable (sec_hd, NULL); + if (rc) + log_error (_("no writable secret keyring found: %s\n"), + g10_errstr (rc)); + } + + if (!rc && opt.verbose) { + log_info(_("writing public key to `%s'\n"), + keydb_get_resource_name (pub_hd)); + log_info(_("writing secret key to `%s'\n"), + keydb_get_resource_name (sec_hd)); + } + + if (!rc) { + rc = keydb_insert_keyblock (pub_hd, pub_root); + if (rc) + log_error (_("error writing public keyring `%s': %s\n"), + keydb_get_resource_name (pub_hd), g10_errstr(rc)); + } + + if (!rc) { + rc = keydb_insert_keyblock (sec_hd, sec_root); + if (rc) + log_error (_("error writing secret keyring `%s': %s\n"), + keydb_get_resource_name (pub_hd), g10_errstr(rc)); + } + + keydb_release (pub_hd); + keydb_release (sec_hd); + + if (!rc) { + int no_enc_rsa = + get_parameter_algo(para, pKEYTYPE) == PUBKEY_ALGO_RSA + && get_parameter_uint( para, pKEYUSAGE ) + && !(get_parameter_uint( para,pKEYUSAGE) & PUBKEY_USAGE_ENC); + PKT_public_key *pk = find_kbnode (pub_root, + PKT_PUBLIC_KEY)->pkt->pkt.public_key; + + update_ownertrust (pk, + ((get_ownertrust (pk) & ~TRUST_MASK) + | TRUST_ULTIMATE )); + + if (!opt.batch) { + tty_printf(_("public and secret key created and signed.\n") ); + tty_printf(_("key marked as ultimately trusted.\n") ); + tty_printf("\n"); + list_keyblock(pub_root,0,1,NULL); + } + - if( rc ) - ; - else if( (rc=insert_keyblock( pub_root )) ) - log_error("can't write public key: %s\n", gpg_errstr(rc) ); - else if( (rc=insert_keyblock( sec_root )) ) - log_error("can't write secret key: %s\n", gpg_errstr(rc) ); - else { - if( !opt.batch ) - tty_printf(_("public and secret key created and signed.\n") ); if( !opt.batch - && get_parameter_algo( para, pKEYTYPE ) == GCRY_PK_DSA + && ( get_parameter_algo( para, pKEYTYPE ) == PUBKEY_ALGO_DSA + || no_enc_rsa ) && !get_parameter( para, pSUBKEYTYPE ) ) { tty_printf(_("Note that this key cannot be used for " @@ -1769,23 +2267,21 @@ do_generate_keypair( struct para_data_s *para, "secondary key for this purpose.\n") ); } } - } if( rc ) { if( opt.batch ) - log_error("key generation failed: %s\n", gpg_errstr(rc) ); + log_error("key generation failed: %s\n", g10_errstr(rc) ); else - tty_printf(_("Key generation failed: %s\n"), gpg_errstr(rc) ); + tty_printf(_("Key generation failed: %s\n"), g10_errstr(rc) ); + } + else { + write_status_text (STATUS_KEY_CREATED, did_sub? "B":"P"); } release_kbnode( pub_root ); release_kbnode( sec_root ); if( sk ) /* the unprotected secret key */ free_secret_key(sk); - if( !outctrl->use_files ) { - gcry_free(pub_fname); - gcry_free(sec_fname); - } } @@ -1800,6 +2296,7 @@ generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock ) KBNODE node; PKT_secret_key *sk = NULL; /* this is the primary sk */ int algo; + unsigned int use; u32 expire; unsigned nbits; char *passphrase = NULL; @@ -1825,16 +2322,21 @@ generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock ) : _("key has been created %lu seconds " "in future (time warp or clock problem)\n"), d ); if( !opt.ignore_time_conflict ) { - rc = GPGERR_TIME_CONFLICT; + rc = G10ERR_TIME_CONFLICT; goto leave; } } + if (sk->version < 4) { + log_info (_("NOTE: creating subkeys for v3 keys " + "is not OpenPGP compliant\n")); + goto leave; + } /* unprotect to get the passphrase */ switch( is_secret_key_protected( sk ) ) { case -1: - rc = GPGERR_PUBKEY_ALGO; + rc = G10ERR_PUBKEY_ALGO; break; case 0: tty_printf("This key is not protected.\n"); @@ -1850,37 +2352,39 @@ generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock ) goto leave; - algo = ask_algo( 1 ); + algo = ask_algo( 1, &use ); assert(algo); nbits = ask_keysize( algo ); - expire = ask_expire_interval(); + expire = ask_expire_interval(0); if( !cpr_enabled() && !cpr_get_answer_is_yes("keygen.sub.okay", _("Really create? ") ) ) goto leave; if( passphrase ) { - s2k = gcry_xmalloc_secure( sizeof *s2k ); + s2k = m_alloc_secure( sizeof *s2k ); s2k->mode = opt.s2k_mode; s2k->hash_algo = opt.s2k_digest_algo; set_next_passphrase( passphrase ); - dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2 ); + dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2, NULL ); } rc = do_create( algo, nbits, pub_keyblock, sec_keyblock, dek, s2k, NULL, expire ); if( !rc ) - rc = write_keybinding(pub_keyblock, pub_keyblock, sk); - if( !rc ) - rc = write_keybinding(sec_keyblock, pub_keyblock, sk); + rc = write_keybinding(pub_keyblock, pub_keyblock, sk, use); if( !rc ) + rc = write_keybinding(sec_keyblock, pub_keyblock, sk, use); + if( !rc ) { okay = 1; + write_status_text (STATUS_KEY_CREATED, "S"); + } leave: if( rc ) - log_error(_("Key generation failed: %s\n"), gpg_errstr(rc) ); - gcry_free( passphrase ); - gcry_free( dek ); - gcry_free( s2k ); + log_error(_("Key generation failed: %s\n"), g10_errstr(rc) ); + m_free( passphrase ); + m_free( dek ); + m_free( s2k ); if( sk ) /* release the copy of the (now unprotected) secret key */ free_secret_key(sk); set_next_passphrase( NULL ); @@ -1897,10 +2401,9 @@ write_keyblock( IOBUF out, KBNODE node ) int rc = build_packet( out, node->pkt ); if( rc ) { log_error("build_packet(%d) failed: %s\n", - node->pkt->pkttype, gpg_errstr(rc) ); - return GPGERR_WRITE_FILE; + node->pkt->pkttype, g10_errstr(rc) ); + return G10ERR_WRITE_FILE; } } return 0; } - diff --git a/g10/keyid.c b/g10/keyid.c index 0269a6bb0..43e531e3e 100644 --- a/g10/keyid.c +++ b/g10/keyid.c @@ -1,5 +1,5 @@ -/* keyid.c - jeyid and fingerprint handling - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* keyid.c - key ID and fingerprint handling + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,12 +25,11 @@ #include #include #include - -#include #include "util.h" #include "main.h" #include "packet.h" #include "options.h" +#include "mpi.h" #include "keydb.h" #include "i18n.h" @@ -39,58 +38,48 @@ int pubkey_letter( int algo ) { switch( algo ) { - case GCRY_PK_RSA: return 'R' ; - case GCRY_PK_RSA_E: return 'r' ; - case GCRY_PK_RSA_S: return 's' ; - case GCRY_PK_ELG_E: return 'g'; - case GCRY_PK_ELG: return 'G' ; - case GCRY_PK_DSA: return 'D' ; + case PUBKEY_ALGO_RSA: return 'R' ; + case PUBKEY_ALGO_RSA_E: return 'r' ; + case PUBKEY_ALGO_RSA_S: return 's' ; + case PUBKEY_ALGO_ELGAMAL_E: return 'g'; + case PUBKEY_ALGO_ELGAMAL: return 'G' ; + case PUBKEY_ALGO_DSA: return 'D' ; default: return '?'; } } - -static GCRY_MD_HD +static MD_HANDLE do_fingerprint_md( PKT_public_key *pk ) { - GCRY_MD_HD md; - unsigned int n; - unsigned int nn[GNUPG_MAX_NPKEY]; - byte *pp[GNUPG_MAX_NPKEY]; + MD_HANDLE md; + unsigned n; + unsigned nb[PUBKEY_MAX_NPKEY]; + unsigned nn[PUBKEY_MAX_NPKEY]; + byte *pp[PUBKEY_MAX_NPKEY]; int i; int npkey = pubkey_get_npkey( pk->pubkey_algo ); - md = gcry_md_open( pk->version < 4 ? GCRY_MD_RMD160 : GCRY_MD_SHA1, 0); - if( !md ) - BUG(); + md = md_open( pk->version < 4 ? DIGEST_ALGO_RMD160 : DIGEST_ALGO_SHA1, 0); n = pk->version < 4 ? 8 : 6; for(i=0; i < npkey; i++ ) { - int rc; - size_t nbytes; - - rc = gcry_mpi_print( GCRYMPI_FMT_PGP, NULL, &nbytes, pk->pkey[i] ); - assert( !rc ); - /* fixme: we should try to allocate a buffer on the stack */ - pp[i] = gcry_xmalloc(nbytes); - rc = gcry_mpi_print( GCRYMPI_FMT_PGP, pp[i], &nbytes, pk->pkey[i] ); - assert( !rc ); - nn[i] = nbytes; - n += nn[i]; + nb[i] = mpi_get_nbits(pk->pkey[i]); + pp[i] = mpi_get_buffer( pk->pkey[i], nn+i, NULL ); + n += 2 + nn[i]; } - gcry_md_putc( md, 0x99 ); /* ctb */ - gcry_md_putc( md, n >> 8 ); /* 2 byte length header */ - gcry_md_putc( md, n ); + md_putc( md, 0x99 ); /* ctb */ + md_putc( md, n >> 8 ); /* 2 byte length header */ + md_putc( md, n ); if( pk->version < 4 ) - gcry_md_putc( md, 3 ); + md_putc( md, 3 ); else - gcry_md_putc( md, 4 ); + md_putc( md, 4 ); { u32 a = pk->timestamp; - gcry_md_putc( md, a >> 24 ); - gcry_md_putc( md, a >> 16 ); - gcry_md_putc( md, a >> 8 ); - gcry_md_putc( md, a ); + md_putc( md, a >> 24 ); + md_putc( md, a >> 16 ); + md_putc( md, a >> 8 ); + md_putc( md, a ); } if( pk->version < 4 ) { u16 a; @@ -99,20 +88,22 @@ do_fingerprint_md( PKT_public_key *pk ) a = (u16)((pk->expiredate - pk->timestamp) / 86400L); else a = 0; - gcry_md_putc( md, a >> 8 ); - gcry_md_putc( md, a ); + md_putc( md, a >> 8 ); + md_putc( md, a ); } - gcry_md_putc( md, pk->pubkey_algo ); + md_putc( md, pk->pubkey_algo ); for(i=0; i < npkey; i++ ) { - gcry_md_write( md, pp[i], nn[i] ); - gcry_free(pp[i]); + md_putc( md, nb[i]>>8); + md_putc( md, nb[i] ); + md_write( md, pp[i], nn[i] ); + m_free(pp[i]); } - gcry_md_final( md ); + md_final( md ); return md; } -static GCRY_MD_HD +static MD_HANDLE do_fingerprint_md_sk( PKT_secret_key *sk ) { PKT_public_key pk; @@ -130,30 +121,6 @@ do_fingerprint_md_sk( PKT_secret_key *sk ) } -static void -v3_keyid( MPI a, u32 *ki ) -{ - int rc; - byte *buffer; - size_t nbytes; - - rc = gcry_mpi_print( GCRYMPI_FMT_USG, NULL, &nbytes, a ); - assert( !rc ); - /* fixme: allocate it on the stack */ - buffer = gcry_xmalloc(nbytes); - rc = gcry_mpi_print( GCRYMPI_FMT_USG, buffer, &nbytes, a ); - assert( !rc ); - if( nbytes < 8 ) { /* oops */ - ki[0] = ki[1] = 0; - } - else { - memcpy( ki+0, buffer+nbytes-8, 4); - memcpy( ki+1, buffer+nbytes-4, 4); - } - gcry_free( buffer ); -} - - /**************** * Get the keyid from the secret key and put it into keyid * if this is not NULL. Return the 32 low bits of the keyid. @@ -161,36 +128,28 @@ v3_keyid( MPI a, u32 *ki ) u32 keyid_from_sk( PKT_secret_key *sk, u32 *keyid ) { + u32 lowbits; u32 dummy_keyid[2]; if( !keyid ) keyid = dummy_keyid; - if( sk->keyid[0] || sk->keyid[1] ) { - keyid[0] = sk->keyid[0]; - keyid[1] = sk->keyid[1]; - } - else if( sk->version < 4 && is_RSA(sk->pubkey_algo) ) { - if( pubkey_get_npkey(sk->pubkey_algo) ) - v3_keyid( sk->skey[0], keyid ); /* take n */ - else - keyid[0] = keyid[1] = 0; - sk->keyid[0] = keyid[0]; - sk->keyid[1] = keyid[1]; + if( sk->version < 4 && is_RSA(sk->pubkey_algo) ) { + lowbits = pubkey_get_npkey(sk->pubkey_algo) ? + mpi_get_keyid( sk->skey[0], keyid ) : 0; /* take n */ } else { const byte *dp; - GCRY_MD_HD md; + MD_HANDLE md; md = do_fingerprint_md_sk(sk); - dp = gcry_md_read( md, 0 ); + dp = md_read( md, 0 ); keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ; keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ; - gcry_md_close(md); - sk->keyid[0] = keyid[0]; - sk->keyid[1] = keyid[1]; + lowbits = keyid[1]; + md_close(md); } - return keyid[1]; + return lowbits; } @@ -201,6 +160,7 @@ keyid_from_sk( PKT_secret_key *sk, u32 *keyid ) u32 keyid_from_pk( PKT_public_key *pk, u32 *keyid ) { + u32 lowbits; u32 dummy_keyid[2]; if( !keyid ) @@ -209,28 +169,28 @@ keyid_from_pk( PKT_public_key *pk, u32 *keyid ) if( pk->keyid[0] || pk->keyid[1] ) { keyid[0] = pk->keyid[0]; keyid[1] = pk->keyid[1]; + lowbits = keyid[1]; } else if( pk->version < 4 && is_RSA(pk->pubkey_algo) ) { - if( pubkey_get_npkey(pk->pubkey_algo) ) - v3_keyid( pk->pkey[0], keyid ); /* from n */ - else - keyid[0] = keyid[1] = 0; + lowbits = pubkey_get_npkey(pk->pubkey_algo) ? + mpi_get_keyid( pk->pkey[0], keyid ) : 0 ; /* from n */ pk->keyid[0] = keyid[0]; pk->keyid[1] = keyid[1]; } else { const byte *dp; - GCRY_MD_HD md; + MD_HANDLE md; md = do_fingerprint_md(pk); - dp = gcry_md_read( md, 0 ); + dp = md_read( md, 0 ); keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ; keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ; - gcry_md_close(md); + lowbits = keyid[1]; + md_close(md); pk->keyid[0] = keyid[0]; pk->keyid[1] = keyid[1]; } - return keyid[1]; + return lowbits; } @@ -299,6 +259,21 @@ nbits_from_sk( PKT_secret_key *sk ) return pubkey_nbits( sk->pubkey_algo, sk->skey ); } +static const char * +mk_datestr (char *buffer, time_t atime) +{ + struct tm *tp; + + if ( atime < 0 ) /* 32 bit time_t and after 2038-01-19 */ + strcpy (buffer, "????" "-??" "-??"); /* mark this as invalid */ + else { + tp = gmtime (&atime); + sprintf (buffer,"%04d-%02d-%02d", + 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); + } + return buffer; +} + /**************** * return a string with the creation date of the pk * Note: this is alloced in a static buffer. @@ -308,67 +283,122 @@ const char * datestr_from_pk( PKT_public_key *pk ) { static char buffer[11+5]; - struct tm *tp; time_t atime = pk->timestamp; - tp = gmtime( &atime ); - sprintf(buffer,"%04d-%02d-%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); - return buffer; + return mk_datestr (buffer, atime); } const char * datestr_from_sk( PKT_secret_key *sk ) { static char buffer[11+5]; - struct tm *tp; time_t atime = sk->timestamp; - tp = gmtime( &atime ); - sprintf(buffer,"%04d-%02d-%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); - return buffer; + return mk_datestr (buffer, atime); } const char * datestr_from_sig( PKT_signature *sig ) { static char buffer[11+5]; - struct tm *tp; time_t atime = sig->timestamp; - tp = gmtime( &atime ); - sprintf(buffer,"%04d-%02d-%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); - return buffer; + return mk_datestr (buffer, atime); } - const char * expirestr_from_pk( PKT_public_key *pk ) { static char buffer[11+5]; - struct tm *tp; time_t atime; if( !pk->expiredate ) return _("never "); atime = pk->expiredate; - tp = gmtime( &atime ); - sprintf(buffer,"%04d-%02d-%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); - return buffer; + return mk_datestr (buffer, atime); } const char * expirestr_from_sk( PKT_secret_key *sk ) { static char buffer[11+5]; - struct tm *tp; time_t atime; if( !sk->expiredate ) return _("never "); atime = sk->expiredate; - tp = gmtime( &atime ); - sprintf(buffer,"%04d-%02d-%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); - return buffer; + return mk_datestr (buffer, atime); +} + +const char * +expirestr_from_sig( PKT_signature *sig ) +{ + static char buffer[11+5]; + time_t atime; + + if(!sig->expiredate) + return _("never "); + atime=sig->expiredate; + return mk_datestr (buffer, atime); +} + +const char * +colon_strtime (u32 t) +{ + if (!t) + return ""; + if (opt.fixed_list_mode) { + static char buf[15]; + sprintf (buf, "%lu", (ulong)t); + return buf; + } + return strtimestamp(t); +} + +const char * +colon_datestr_from_pk (PKT_public_key *pk) +{ + if (opt.fixed_list_mode) { + static char buf[15]; + sprintf (buf, "%lu", (ulong)pk->timestamp); + return buf; + } + return datestr_from_pk (pk); +} + +const char * +colon_datestr_from_sk (PKT_secret_key *sk) +{ + if (opt.fixed_list_mode) { + static char buf[15]; + sprintf (buf, "%lu", (ulong)sk->timestamp); + return buf; + } + return datestr_from_sk (sk); +} + +const char * +colon_datestr_from_sig (PKT_signature *sig) +{ + if (opt.fixed_list_mode) { + static char buf[15]; + sprintf (buf, "%lu", (ulong)sig->timestamp); + return buf; + } + return datestr_from_sig (sig); +} + +const char * +colon_expirestr_from_sig (PKT_signature *sig) +{ + if(!sig->expiredate) + return ""; + if (opt.fixed_list_mode) { + static char buf[15]; + sprintf (buf, "%lu", (ulong)sig->expiredate); + return buf; + } + return expirestr_from_sig (sig); } @@ -381,184 +411,92 @@ expirestr_from_sk( PKT_secret_key *sk ) byte * fingerprint_from_pk( PKT_public_key *pk, byte *array, size_t *ret_len ) { - byte *buf; - const char *dp; + byte *p, *buf; + const byte *dp; size_t len; + unsigned int n; if( pk->version < 4 && is_RSA(pk->pubkey_algo) ) { /* RSA in version 3 packets is special */ - GCRY_MD_HD md; + MD_HANDLE md; - md = gcry_md_open( GCRY_MD_MD5, 0); - if( !md ) - BUG(); + md = md_open( DIGEST_ALGO_MD5, 0); if( pubkey_get_npkey( pk->pubkey_algo ) > 1 ) { - int rc; - size_t nbytes; - - rc = gcry_mpi_print( GCRYMPI_FMT_USG, NULL, &nbytes, pk->pkey[0] ); - assert( !rc ); - /* fixme: allocate it on the stack */ - buf = gcry_xmalloc(nbytes); - rc = gcry_mpi_print( GCRYMPI_FMT_USG, buf, &nbytes, pk->pkey[0] ); - assert( !rc ); - gcry_md_write( md, buf, nbytes ); - gcry_free(buf); - rc = gcry_mpi_print( GCRYMPI_FMT_USG, NULL, &nbytes, pk->pkey[1] ); - assert( !rc ); - /* fixme: allocate it on the stack */ - buf = gcry_xmalloc(nbytes); - rc = gcry_mpi_print( GCRYMPI_FMT_USG, buf, &nbytes, pk->pkey[1] ); - assert( !rc ); - gcry_md_write( md, buf, nbytes ); - gcry_free(buf); + p = buf = mpi_get_buffer( pk->pkey[0], &n, NULL ); + md_write( md, p, n ); + m_free(buf); + p = buf = mpi_get_buffer( pk->pkey[1], &n, NULL ); + md_write( md, p, n ); + m_free(buf); } - gcry_md_final(md); + md_final(md); if( !array ) - array = gcry_xmalloc( 16 ); + array = m_alloc( 16 ); len = 16; - memcpy(array, gcry_md_read(md, GCRY_MD_MD5), 16 ); - gcry_md_close(md); + memcpy(array, md_read(md, DIGEST_ALGO_MD5), 16 ); + md_close(md); } else { - GCRY_MD_HD md; + MD_HANDLE md; md = do_fingerprint_md(pk); - dp = gcry_md_read( md, 0 ); - len = gcry_md_get_algo_dlen( gcry_md_get_algo( md ) ); + dp = md_read( md, 0 ); + len = md_digest_length( md_get_algo( md ) ); assert( len <= MAX_FINGERPRINT_LEN ); if( !array ) - array = gcry_xmalloc( len ); + array = m_alloc( len ); memcpy(array, dp, len ); - gcry_md_close(md); + pk->keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ; + pk->keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ; + md_close(md); } *ret_len = len; return array; } - -/* Create a unified fingerprint, that is a printable fingerprint along - * wth some other information suitable to passto get_pubkye_byname. - * Pass NULL for buffer to let this function allocate the buffer. - * This function will truncate the buffer in a way that a valid C string - * is returnd (unless bufsize is 0) - * Returns: Supplied buffer or newly allocated buffer - */ -char * -unified_fingerprint_from_pk( PKT_public_key *pk, - char *buffer, size_t bufsize ) -{ - byte fpr[MAX_FINGERPRINT_LEN]; - size_t fprlen; - int i; - - fingerprint_from_pk( pk, fpr, &fprlen ); - if ( !buffer ) { - bufsize = 1+fprlen*2+1+4+1+1; - buffer = gcry_xmalloc( bufsize ); - } - if ( bufsize < 1+fprlen*2+1+4+1+1 ) { - /* Hmmm, that should be sufficiend also not very nice */ - if ( bufsize ) - *buffer = 0; - return buffer; - } - *buffer = ':'; - for (i=0; i < fprlen; i++ ) - sprintf( buffer+1+i*2, "%02X", fpr[i] ); - sprintf( buffer+1+i*2, ":%d:", (pk->pubkey_algo & 0xff) ); - return buffer; -} - byte * fingerprint_from_sk( PKT_secret_key *sk, byte *array, size_t *ret_len ) { - byte *buf; + byte *p, *buf; const char *dp; size_t len; + unsigned n; if( sk->version < 4 && is_RSA(sk->pubkey_algo) ) { /* RSA in version 3 packets is special */ - GCRY_MD_HD md; + MD_HANDLE md; - md = gcry_md_open( GCRY_MD_MD5, 0); - if( !md ) - BUG(); + md = md_open( DIGEST_ALGO_MD5, 0); if( pubkey_get_npkey( sk->pubkey_algo ) > 1 ) { - int rc; - size_t nbytes; - - /* FIXME: Why is the hash sequence for secret keys different */ - rc = gcry_mpi_print( GCRYMPI_FMT_USG, NULL, &nbytes, sk->skey[1] ); - assert( !rc ); - /* fixme: allocate it on the stack */ - buf = gcry_xmalloc(nbytes); - rc = gcry_mpi_print( GCRYMPI_FMT_USG, buf, &nbytes, sk->skey[1] ); - assert( !rc ); - gcry_md_write( md, buf, nbytes ); - gcry_free(buf); - rc = gcry_mpi_print( GCRYMPI_FMT_USG, NULL, &nbytes, sk->skey[0] ); - assert( !rc ); - /* fixme: allocate it on the stack */ - buf = gcry_xmalloc(nbytes); - rc = gcry_mpi_print( GCRYMPI_FMT_USG, buf, &nbytes, sk->skey[0] ); - assert( !rc ); - gcry_md_write( md, buf, nbytes ); - gcry_free(buf); + p = buf = mpi_get_buffer( sk->skey[0], &n, NULL ); + md_write( md, p, n ); + m_free(buf); + p = buf = mpi_get_buffer( sk->skey[1], &n, NULL ); + md_write( md, p, n ); + m_free(buf); } - gcry_md_final(md); + md_final(md); if( !array ) - array = gcry_xmalloc( 16 ); + array = m_alloc( 16 ); len = 16; - memcpy(array, gcry_md_read(md, GCRY_MD_MD5), 16 ); - gcry_md_close(md); + memcpy(array, md_read(md, DIGEST_ALGO_MD5), 16 ); + md_close(md); } else { - GCRY_MD_HD md; + MD_HANDLE md; md = do_fingerprint_md_sk(sk); - dp = gcry_md_read( md, 0 ); - len = gcry_md_get_algo_dlen( gcry_md_get_algo( md ) ); + dp = md_read( md, 0 ); + len = md_digest_length( md_get_algo( md ) ); assert( len <= MAX_FINGERPRINT_LEN ); if( !array ) - array = gcry_xmalloc( len ); + array = m_alloc( len ); memcpy(array, dp, len ); - gcry_md_close(md); + md_close(md); } *ret_len = len; return array; } -char * -unified_fingerprint_from_sk( PKT_secret_key *sk, - char *buffer, size_t bufsize ) -{ - byte fpr[MAX_FINGERPRINT_LEN]; - size_t fprlen; - int i; - - fingerprint_from_sk( sk, fpr, &fprlen ); - if ( !buffer ) { - bufsize = 1+fprlen*2+1+4+1+1; - buffer = gcry_xmalloc( bufsize ); - } - if ( bufsize < 1+fprlen*2+1+4+1+1 ) { - /* Hmmm, that should be sufficiend also not very nice */ - if ( bufsize ) - *buffer = 0; - return buffer; - } - *buffer = ':'; - for (i=0; i < fprlen; i++ ) - sprintf( buffer+1+i*2, "%02X", fpr[i] ); - sprintf( buffer+1+i*2, ":%d:", (sk->pubkey_algo & 0xff) ); - return buffer; -} - - - - - - diff --git a/g10/keylist.c b/g10/keylist.c index 89691873a..e226ee071 100644 --- a/g10/keylist.c +++ b/g10/keylist.c @@ -1,5 +1,5 @@ /* keylist.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -29,17 +29,26 @@ #include "packet.h" #include "errors.h" #include "keydb.h" -#include +#include "memory.h" +#include "photoid.h" #include "util.h" +#include "ttyio.h" #include "trustdb.h" #include "main.h" #include "i18n.h" +#include "status.h" static void list_all(int); static void list_one( STRLIST names, int secret); -static void list_keyblock( KBNODE keyblock, int secret ); -static void fingerprint( PKT_public_key *pk, PKT_secret_key *sk ); +struct sig_stats +{ + int inv_sigs; + int no_key; + int oth_err; +}; + +static FILE *attrib_fp=NULL; /**************** * List the keys @@ -63,123 +72,146 @@ secret_key_list( STRLIST list ) list_one( list, 1 ); } +void +show_policy_url(PKT_signature *sig,int indent) +{ + const byte *p; + size_t len; + int seq=0,crit; + + while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,&len,&seq,&crit))) + { + int i; + + for(i=0;ihashed,SIGSUBPKT_NOTATION,&len,&seq,&crit))) + if(len>=8) + { + int n1,n2,i; + + n1=(p[4]<<8)|p[5]; + n2=(p[6]<<8)|p[7]; + + if(8+n1+n2!=len) + { + log_info(_("WARNING: invalid notation data found\n")); + return; + } + + for(i=0;iinv_sigs == 1 ) + tty_printf(_("1 bad signature\n") ); + else if( s->inv_sigs ) + tty_printf(_("%d bad signatures\n"), s->inv_sigs ); + if( s->no_key == 1 ) + tty_printf(_("1 signature not checked due to a missing key\n") ); + else if( s->no_key ) + tty_printf(_("%d signatures not checked due to missing keys\n"),s->no_key); + if( s->oth_err == 1 ) + tty_printf(_("1 signature not checked due to an error\n") ); + else if( s->oth_err ) + tty_printf(_("%d signatures not checked due to errors\n"), s->oth_err ); +} static void list_all( int secret ) { - KBPOS kbpos; + KEYDB_HANDLE hd; KBNODE keyblock = NULL; int rc=0; - int lastresno; + const char *lastresname, *resname; + struct sig_stats stats; - rc = enum_keyblocks_begin( &kbpos, secret ); + memset(&stats,0,sizeof(stats)); + + hd = keydb_new (secret); + if (!hd) + rc = G10ERR_GENERAL; + else + rc = keydb_search_first (hd); if( rc ) { if( rc != -1 ) - log_error("enum_keyblocks(open) failed: %s\n", gpg_errstr(rc) ); + log_error("keydb_search_first failed: %s\n", g10_errstr(rc) ); goto leave; } - lastresno = -1; - while( !(rc = enum_keyblocks_next( kbpos, 1, &keyblock )) ) { - if( 1 /*lastresno != kbpos.resno FIXME!!! */ ) { - const char *s = "foo" /*keyblock_resource_name( &kbpos ) */; + lastresname = NULL; + do { + rc = keydb_get_keyblock (hd, &keyblock); + if (rc) { + log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); + goto leave; + } + resname = keydb_get_resource_name (hd); + if (lastresname != resname ) { int i; - /* FIXME lastresno = kbpos.resno*/ - printf("%s\n", s ); - for(i=strlen(s); i; i-- ) + printf("%s\n", resname ); + for(i=strlen(resname); i; i-- ) putchar('-'); putchar('\n'); + lastresname = resname; } - merge_keys_and_selfsig( keyblock ); - list_keyblock( keyblock, secret ); - release_kbnode( keyblock ); keyblock = NULL; - } - + merge_keys_and_selfsig( keyblock ); + list_keyblock( keyblock, secret, opt.fingerprint, + opt.check_sigs?&stats:NULL); + release_kbnode( keyblock ); + keyblock = NULL; + } while (!(rc = keydb_search_next (hd))); if( rc && rc != -1 ) - log_error("enum_keyblocks(read) failed: %s\n", gpg_errstr(rc)); + log_error ("keydb_search_next failed: %s\n", g10_errstr(rc)); + + if(opt.check_sigs && !opt.with_colons) + print_signature_stats(&stats); leave: - enum_keyblocks_end( kbpos ); - release_kbnode( keyblock ); -} - - -/**************** - * Check whether the user ID at NODE is valid; that is it has a - * valid self-signature but no later valid revocation. - * Caller has to pass the keyID of the primary in mainkey. - * Returns: NULL = valid - * string with the reason why it is invalid - */ -static const char * -is_uid_valid ( KBNODE keyblock, KBNODE uidnode, u32 *mainkid ) -{ - KBNODE node; - PKT_signature *selfsig = NULL; /* the latest valid self signature */ - - /* The key signature verify function can's handle secret keys yet and - * becuase we are not sure whether the duplication of user IDs and - * self-signatures should be kept on secret keys we are not going to fix - * it there. */ - if ( keyblock->pkt->pkttype == PKT_SECRET_KEY ) - return NULL; - - assert ( uidnode->pkt->pkttype == PKT_USER_ID - || uidnode->pkt->pkttype == PKT_PHOTO_ID ); - - /* first find out about the latest valid self-signature */ - for ( node = uidnode->next; node; node = node->next ) { - PKT_signature *sig; - - if ( node->pkt->pkttype == PKT_USER_ID - || node->pkt->pkttype == PKT_PHOTO_ID - || node->pkt->pkttype == PKT_PUBLIC_SUBKEY - || node->pkt->pkttype == PKT_SECRET_SUBKEY ) - break; - if ( node->pkt->pkttype != PKT_SIGNATURE ) - continue; - sig = node->pkt->pkt.signature; - if ( mainkid[0] != sig->keyid[0] || mainkid[1] != sig->keyid[1] ) - continue; /* we only care about self-signatures for now */ - - if ( (sig->sig_class&~3) == 0x10 ) { /* regular self signature */ - if ( !check_key_signature( keyblock, node, NULL ) ) { - if ( !selfsig ) - selfsig = sig; /* use the first valid sig */ - else if ( sig->timestamp > selfsig->timestamp - && sig->sig_class >= selfsig->sig_class ) - selfsig = sig; /* but this one is newer */ - } - } - } - - if ( !selfsig ) - return _("invalid"); /* no valid self signature */ - - /* watch out for a newer revocation */ - for ( node = uidnode->next; node; node = node->next ) { - PKT_signature *sig; - - if ( node->pkt->pkttype == PKT_USER_ID - || node->pkt->pkttype == PKT_PHOTO_ID - || node->pkt->pkttype == PKT_PUBLIC_SUBKEY - || node->pkt->pkttype == PKT_SECRET_SUBKEY ) - break; - if ( node->pkt->pkttype != PKT_SIGNATURE ) - continue; - sig = node->pkt->pkt.signature; - if ( mainkid[0] != sig->keyid[0] || mainkid[1] != sig->keyid[1] ) - continue; /* we only care about self-signatures for now */ - - if ( sig->sig_class == 0x30 - && sig->timestamp >= selfsig->timestamp ) { - if ( !check_key_signature( keyblock, node, NULL ) ) - return _("revoked"); - } - } - - return NULL; /* UID is valid */ + release_kbnode (keyblock); + keydb_release (hd); } @@ -189,17 +221,38 @@ list_one( STRLIST names, int secret ) int rc = 0; KBNODE keyblock = NULL; GETKEY_CTX ctx; + const char *resname; + char *keyring_str = N_("Keyring"); + int i; + struct sig_stats stats; + memset(&stats,0,sizeof(stats)); + + /* fixme: using the bynames function has the disadvantage that we + * don't know wether one of the names given was not found. OTOH, + * this function has the advantage to list the names in the + * sequence as defined by the keyDB and does not duplicate + * outputs. A solution could be do test whether all given have + * been listed (this needs a way to use the keyDB search + * functions) or to have the search function return indicators for + * found names. Yet another way is to use the keydb search + * facilities directly. */ if( secret ) { rc = get_seckey_bynames( &ctx, NULL, names, &keyblock ); if( rc ) { - log_error("error reading key: %s\n", gpg_errstr(rc) ); + log_error("error reading key: %s\n", g10_errstr(rc) ); get_seckey_end( ctx ); return; } do { - merge_keys_and_selfsig( keyblock ); - list_keyblock( keyblock, 1 ); + if (opt.show_keyring) { + resname = keydb_get_resource_name (get_ctx_handle(ctx)); + printf("%s: %s\n", keyring_str, resname); + for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- ) + putchar('-'); + putchar('\n'); + } + list_keyblock( keyblock, 1, opt.fingerprint, &stats ); release_kbnode( keyblock ); } while( !get_seckey_next( ctx, NULL, &keyblock ) ); get_seckey_end( ctx ); @@ -207,17 +260,27 @@ list_one( STRLIST names, int secret ) else { rc = get_pubkey_bynames( &ctx, NULL, names, &keyblock ); if( rc ) { - log_error("error reading key: %s\n", gpg_errstr(rc) ); + log_error("error reading key: %s\n", g10_errstr(rc) ); get_pubkey_end( ctx ); return; } do { - merge_keys_and_selfsig( keyblock ); - list_keyblock( keyblock, 0 ); + if (opt.show_keyring) { + resname = keydb_get_resource_name (get_ctx_handle(ctx)); + printf("%s: %s\n", keyring_str, resname); + for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- ) + putchar('-'); + putchar('\n'); + } + list_keyblock( keyblock, 0, opt.fingerprint, + opt.check_sigs?&stats:NULL ); release_kbnode( keyblock ); } while( !get_pubkey_next( ctx, NULL, &keyblock ) ); get_pubkey_end( ctx ); } + + if(opt.check_sigs && !opt.with_colons) + print_signature_stats(&stats); } static void @@ -227,16 +290,307 @@ print_key_data( PKT_public_key *pk, u32 *keyid ) int i; for(i=0; i < n; i++ ) { - printf("pkd:%d:%u:", i, gcry_mpi_get_nbits( pk->pkey[i] ) ); + printf("pkd:%d:%u:", i, mpi_get_nbits( pk->pkey[i] ) ); mpi_print(stdout, pk->pkey[i], 1 ); putchar(':'); putchar('\n'); } } +static void +print_capabilities (PKT_public_key *pk, PKT_secret_key *sk, KBNODE keyblock) +{ + unsigned int use = pk? pk->pubkey_usage : sk->pubkey_usage; + + if ( use & PUBKEY_USAGE_ENC ) { + putchar ('e'); + } + if ( use & PUBKEY_USAGE_SIG ) { + putchar ('s'); + putchar ('c'); + } + if ( keyblock ) { /* figure our the usable capabilities */ + KBNODE k; + int enc=0, sign=0, cert=0; + + for (k=keyblock; k; k = k->next ) { + if ( k->pkt->pkttype == PKT_PUBLIC_KEY + || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { + pk = k->pkt->pkt.public_key; + if ( pk->is_valid && !pk->is_revoked && !pk->has_expired ) { + if ( pk->pubkey_usage & PUBKEY_USAGE_ENC ) + enc = 1; + if ( pk->pubkey_usage & PUBKEY_USAGE_SIG ) + sign = cert = 1; + } + } + else if ( k->pkt->pkttype == PKT_SECRET_KEY + || k->pkt->pkttype == PKT_SECRET_SUBKEY ) { + sk = k->pkt->pkt.secret_key; + if ( sk->is_valid && !sk->is_revoked && !sk->has_expired ) { + if ( sk->pubkey_usage & PUBKEY_USAGE_ENC ) + enc = 1; + if ( sk->pubkey_usage & PUBKEY_USAGE_SIG ) + sign = cert = 1; + } + } + } + if (enc) + putchar ('E'); + if (sign) + putchar ('S'); + if (cert) + putchar ('C'); + } + putchar(':'); +} + +static void dump_attribs(const PKT_user_id *uid, + PKT_public_key *pk,PKT_secret_key *sk) +{ + int i; + + if(!attrib_fp) + BUG(); + + for(i=0;inumattribs;i++) + { + if(is_status_enabled()) + { + byte array[MAX_FINGERPRINT_LEN], *p; + char buf[(MAX_FINGERPRINT_LEN*2)+90]; + size_t j,n; + + if(pk) + fingerprint_from_pk( pk, array, &n ); + else if(sk) + fingerprint_from_sk( sk, array, &n ); + else + BUG(); + + p = array; + for(j=0; j < n ; j++, p++ ) + sprintf(buf+2*j, "%02X", *p ); + + sprintf(buf+strlen(buf)," %lu %u %u %u %lu %lu %u", + uid->attribs[i].len,uid->attribs[i].type,i+1, + uid->numattribs,(ulong)uid->created,(ulong)uid->expiredate, + ((uid->is_primary?0x01:0)| + (uid->is_revoked?0x02:0)| + (uid->is_expired?0x04:0))); + write_status_text(STATUS_ATTRIBUTE,buf); + } + + fwrite(uid->attribs[i].data,uid->attribs[i].len,1,attrib_fp); + } +} static void -list_keyblock( KBNODE keyblock, int secret ) +list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque ) +{ + int rc = 0; + KBNODE kbctx; + KBNODE node; + PKT_public_key *pk; + PKT_secret_key *sk; + u32 keyid[2]; + int any=0; + struct sig_stats *stats=opaque; + + /* get the keyid from the keyblock */ + node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY ); + if( !node ) { + log_error("Oops; key lost!\n"); + dump_kbnode( keyblock ); + return; + } + + if( secret ) { + pk = NULL; + sk = node->pkt->pkt.secret_key; + keyid_from_sk( sk, keyid ); + printf("sec %4u%c/%08lX %s ", nbits_from_sk( sk ), + pubkey_letter( sk->pubkey_algo ), + (ulong)keyid[1], + datestr_from_sk( sk ) ); + } + else { + pk = node->pkt->pkt.public_key; + sk = NULL; + keyid_from_pk( pk, keyid ); + printf("pub %4u%c/%08lX %s ", nbits_from_pk( pk ), + pubkey_letter( pk->pubkey_algo ), + (ulong)keyid[1], + datestr_from_pk( pk ) ); + } + + for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) { + if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) { + if(attrib_fp && node->pkt->pkt.user_id->attrib_data!=NULL) + dump_attribs(node->pkt->pkt.user_id,pk,sk); + /* don't list revoked UIDS unless we are in verbose mode and + * signature listing has not been requested */ + if ( !opt.verbose && !opt.list_sigs + && node->pkt->pkt.user_id->is_revoked ) + continue; + + if( any ) + printf("uid%*s", 28, ""); + + if ( node->pkt->pkt.user_id->is_revoked ) + fputs ("[revoked] ", stdout); + if ( node->pkt->pkt.user_id->is_expired ) + fputs ("[expired] ", stdout); + print_utf8_string( stdout, node->pkt->pkt.user_id->name, + node->pkt->pkt.user_id->len ); + putchar('\n'); + if( !any ) { + if( fpr ) + print_fingerprint( pk, sk, 0 ); + if( opt.with_key_data ) + print_key_data( pk, keyid ); + any = 1; + } + + if(opt.show_photos && node->pkt->pkt.user_id->attribs!=NULL) + show_photos(node->pkt->pkt.user_id->attribs, + node->pkt->pkt.user_id->numattribs,pk,sk); + } + else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { + u32 keyid2[2]; + PKT_public_key *pk2 = node->pkt->pkt.public_key; + + if( !any ) { + putchar('\n'); + if( fpr ) + print_fingerprint( pk, sk, 0 ); /* of the main key */ + any = 1; + } + + keyid_from_pk( pk2, keyid2 ); + printf("sub %4u%c/%08lX %s", nbits_from_pk( pk2 ), + pubkey_letter( pk2->pubkey_algo ), + (ulong)keyid2[1], + datestr_from_pk( pk2 ) ); + if( pk2->expiredate ) { + printf(_(" [expires: %s]"), expirestr_from_pk( pk2 ) ); + } + putchar('\n'); + if( fpr > 1 ) + print_fingerprint( pk2, NULL, 0 ); + if( opt.with_key_data ) + print_key_data( pk2, keyid2 ); + } + else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) { + u32 keyid2[2]; + PKT_secret_key *sk2 = node->pkt->pkt.secret_key; + + if( !any ) { + putchar('\n'); + if( fpr ) + print_fingerprint( pk, sk, 0 ); /* of the main key */ + any = 1; + } + + keyid_from_sk( sk2, keyid2 ); + printf("ssb %4u%c/%08lX %s\n", nbits_from_sk( sk2 ), + pubkey_letter( sk2->pubkey_algo ), + (ulong)keyid2[1], + datestr_from_sk( sk2 ) ); + if( fpr > 1 ) + print_fingerprint( NULL, sk2, 0 ); + } + else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) { + PKT_signature *sig = node->pkt->pkt.signature; + int sigrc; + char *sigstr; + + if( stats ) { + /*fflush(stdout);*/ + rc = check_key_signature( keyblock, node, NULL ); + switch( rc ) { + case 0: sigrc = '!'; break; + case G10ERR_BAD_SIGN: stats->inv_sigs++; sigrc = '-'; break; + case G10ERR_NO_PUBKEY: + case G10ERR_UNU_PUBKEY: stats->no_key++; continue; + default: stats->oth_err++; sigrc = '%'; break; + } + } + else { + rc = 0; + sigrc = ' '; + } + + if( !any ) { /* no user id, (maybe a revocation follows)*/ + /* Check if the pk is really revoked - there could be a + 0x20 sig packet there even if we are not revoked + (say, if a revocation key issued the packet, but the + revocation key isn't present to verify it.) */ + if( sig->sig_class == 0x20 && pk->is_revoked ) + puts("[revoked]"); + else if( sig->sig_class == 0x18 ) + puts("[key binding]"); + else if( sig->sig_class == 0x28 ) + puts("[subkey revoked]"); + else + putchar('\n'); + if( fpr ) + print_fingerprint( pk, sk, 0 ); + any=1; + } + + if( sig->sig_class == 0x20 || sig->sig_class == 0x28 + || sig->sig_class == 0x30 ) + sigstr = "rev"; + else if( (sig->sig_class&~3) == 0x10 ) + sigstr = "sig"; + else if( sig->sig_class == 0x18 ) + sigstr = "sig"; + else if( sig->sig_class == 0x1F ) + sigstr = "sig"; + else { + printf("sig " + "[unexpected signature class 0x%02x]\n",sig->sig_class ); + continue; + } + + fputs( sigstr, stdout ); + printf("%c%c %c%c%c%c%c %08lX %s ", + sigrc,(sig->sig_class-0x10>0 && + sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ', + sig->flags.exportable?' ':'L', + sig->flags.revocable?' ':'R', + sig->flags.policy_url?'P':' ', + sig->flags.notation?'N':' ', + sig->flags.expired?'X':' ', + (ulong)sig->keyid[1], datestr_from_sig(sig)); + if( sigrc == '%' ) + printf("[%s] ", g10_errstr(rc) ); + else if( sigrc == '?' ) + ; + else if ( !opt.fast_list_mode ) { + size_t n; + char *p = get_user_id( sig->keyid, &n ); + print_utf8_string( stdout, p, n ); + m_free(p); + } + putchar('\n'); + + if(sig->flags.policy_url && opt.show_policy_url) + show_policy_url(sig,3); + + if(sig->flags.notation && opt.show_notation) + show_notation(sig,3); + + /* fixme: check or list other sigs here */ + } + } + putchar('\n'); +} + + +static void +list_keyblock_colon( KBNODE keyblock, int secret, int fpr ) { int rc = 0; KBNODE kbctx; @@ -260,98 +614,113 @@ list_keyblock( KBNODE keyblock, int secret ) pk = NULL; sk = node->pkt->pkt.secret_key; keyid_from_sk( sk, keyid ); - if( opt.with_colons ) - printf("sec:u:%u:%d:%08lX%08lX:%s:%s:::", + printf("sec:u:%u:%d:%08lX%08lX:%s:%s:::", nbits_from_sk( sk ), sk->pubkey_algo, (ulong)keyid[0],(ulong)keyid[1], - datestr_from_sk( sk ), - sk->expiredate? strtimestamp(sk->expiredate):"" + colon_datestr_from_sk( sk ), + colon_strtime (sk->expiredate) /* fixme: add LID here */ ); - else - printf("sec %4u%c/%08lX %s ", nbits_from_sk( sk ), - pubkey_letter( sk->pubkey_algo ), - (ulong)keyid[1], - datestr_from_sk( sk ) ); } else { pk = node->pkt->pkt.public_key; sk = NULL; keyid_from_pk( pk, keyid ); - if( opt.with_colons ) { - if ( opt.fast_list_mode ) { - fputs( "pub::", stdout ); - trustletter = 0; - } - else { - trustletter = query_trust_info( pk, NULL ); - if( trustletter == 'u' ) - ulti_hack = 1; - printf("pub:%c:", trustletter ); - } - printf("%u:%d:%08lX%08lX:%s:%s:", + fputs( "pub:", stdout ); + trustletter = 0; + if ( !pk->is_valid ) + putchar ('i'); + else if ( pk->is_revoked ) + putchar ('r'); + else if ( pk->has_expired ) + putchar ('e'); + else if ( opt.fast_list_mode || opt.no_expensive_trust_checks ) + ; + else { + trustletter = get_validity_info ( pk, NULL ); + if( trustletter == 'u' ) + ulti_hack = 1; + putchar(trustletter); + } + printf(":%u:%d:%08lX%08lX:%s:%s:", nbits_from_pk( pk ), pk->pubkey_algo, (ulong)keyid[0],(ulong)keyid[1], - datestr_from_pk( pk ), - pk->expiredate? strtimestamp(pk->expiredate):"" ); - if( pk->local_id ) - printf("%lu", pk->local_id ); + colon_datestr_from_pk( pk ), + colon_strtime (pk->expiredate) ); + if( pk->local_id ) + printf("%lu", pk->local_id ); + putchar(':'); + if( !opt.fast_list_mode && !opt.no_expensive_trust_checks ) + putchar( get_ownertrust_info(pk) ); putchar(':'); - if( pk->local_id && !opt.fast_list_mode ) - putchar( get_ownertrust_info( pk->local_id ) ); - putchar(':'); - } - else - printf("pub %4u%c/%08lX %s ", nbits_from_pk( pk ), - pubkey_letter( pk->pubkey_algo ), - (ulong)keyid[1], - datestr_from_pk( pk ) ); } + + if (opt.fixed_list_mode) { + /* do not merge the first uid with the primary key */ + putchar(':'); + putchar(':'); + print_capabilities (pk, sk, keyblock); + putchar('\n'); + if( fpr ) + print_fingerprint( pk, sk, 0 ); + if( opt.with_key_data ) + print_key_data( pk, keyid ); + any = 1; + } + for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) { if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) { + if(attrib_fp && node->pkt->pkt.user_id->attrib_data!=NULL) + dump_attribs(node->pkt->pkt.user_id,pk,sk); + /* + * Fixme: We need a is_valid flag here too + */ if( any ) { - if ( opt.with_colons ) { + char *str=node->pkt->pkt.user_id->attrib_data?"uat":"uid"; + if ( node->pkt->pkt.user_id->is_revoked ) + printf("%s:r::::::::",str); + else if ( node->pkt->pkt.user_id->is_expired ) + printf("%s:e::::::::",str); + else if ( opt.no_expensive_trust_checks ) { + printf("%s:::::::::",str); + } + else { byte namehash[20]; if( pk && !ulti_hack ) { - if( node->pkt->pkt.user_id->photo ) { - gcry_md_hash_buffer( GCRY_MD_RMD160, namehash, + if( node->pkt->pkt.user_id->attrib_data ) + rmd160_hash_buffer( namehash, + node->pkt->pkt.user_id->attrib_data, + node->pkt->pkt.user_id->attrib_len); + else + rmd160_hash_buffer( namehash, node->pkt->pkt.user_id->name, node->pkt->pkt.user_id->len ); - } - else { - gcry_md_hash_buffer( GCRY_MD_RMD160, namehash, - node->pkt->pkt.user_id->name, - node->pkt->pkt.user_id->len ); - } - trustletter = query_trust_info( pk, namehash ); + trustletter = get_validity_info( pk, namehash ); } else trustletter = 'u'; - printf("uid:%c::::::::", trustletter); - } - else - printf("uid%*s", 28, ""); + printf("%s:%c::::::::",str,trustletter); + } } - if( opt.with_colons ) { - print_string( stdout, node->pkt->pkt.user_id->name, - node->pkt->pkt.user_id->len, ':' ); - putchar(':'); - } - else { - const char *s = is_uid_valid ( keyblock, node, keyid ); - if ( s ) - printf ("[%s] ", s ); - print_utf8_string( stdout, node->pkt->pkt.user_id->name, - node->pkt->pkt.user_id->len ); - } - - putchar('\n'); - if( !any ) { - if( opt.fingerprint ) - fingerprint( pk, sk ); + if(node->pkt->pkt.user_id->attrib_data) + printf("%u %lu", + node->pkt->pkt.user_id->numattribs, + node->pkt->pkt.user_id->attrib_len); + else + print_string( stdout, node->pkt->pkt.user_id->name, + node->pkt->pkt.user_id->len, ':' ); + putchar(':'); + if (any) + putchar('\n'); + else { + putchar(':'); + print_capabilities (pk, sk, keyblock); + putchar('\n'); + if( fpr ) + print_fingerprint( pk, sk, 0 ); if( opt.with_key_data ) print_key_data( pk, keyid ); any = 1; @@ -362,48 +731,46 @@ list_keyblock( KBNODE keyblock, int secret ) PKT_public_key *pk2 = node->pkt->pkt.public_key; if( !any ) { - putchar('\n'); - if( opt.fingerprint ) - fingerprint( pk, sk ); /* of the main key */ + putchar(':'); + putchar(':'); + print_capabilities (pk, sk, keyblock); + putchar('\n'); + if( fpr ) + print_fingerprint( pk, sk, 0 ); /* of the main key */ any = 1; } - - keyid_from_pk( pk2, keyid2 ); - if( opt.with_colons ) { - if ( opt.fast_list_mode ) { - fputs( "sub::", stdout ); - } - else { - printf("sub:%c:", trustletter ); - } - printf("%u:%d:%08lX%08lX:%s:%s:", + fputs ("sub:", stdout ); + if ( !pk2->is_valid ) + putchar ('i'); + else if ( pk2->is_revoked ) + putchar ('r'); + else if ( pk2->has_expired ) + putchar ('e'); + else if ( opt.fast_list_mode || opt.no_expensive_trust_checks ) + ; + else { + printf("%c", trustletter ); + } + printf(":%u:%d:%08lX%08lX:%s:%s:", nbits_from_pk( pk2 ), pk2->pubkey_algo, (ulong)keyid2[0],(ulong)keyid2[1], - datestr_from_pk( pk2 ), - pk2->expiredate? strtimestamp(pk2->expiredate):"" + colon_datestr_from_pk( pk2 ), + colon_strtime (pk2->expiredate) /* fixme: add LID and ownertrust here */ ); - if( pk->local_id ) /* use the local_id of the main key??? */ - printf("%lu", pk->local_id ); - putchar(':'); - putchar(':'); - putchar('\n'); - } - else { - printf("sub %4u%c/%08lX %s", nbits_from_pk( pk2 ), - pubkey_letter( pk2->pubkey_algo ), - (ulong)keyid2[1], - datestr_from_pk( pk2 ) ); - if( pk2->expiredate ) { - printf(_(" [expires: %s]"), expirestr_from_pk( pk2 ) ); - } - putchar('\n'); - } - if( opt.fingerprint > 1 ) - fingerprint( pk2, NULL ); + if( pk->local_id ) /* use the local_id of the main key??? */ + printf("%lu", pk->local_id ); + putchar(':'); + putchar(':'); + putchar(':'); + putchar(':'); + print_capabilities (pk2, NULL, NULL); + putchar('\n'); + if( fpr > 1 ) + print_fingerprint( pk2, NULL, 0 ); if( opt.with_key_data ) print_key_data( pk2, keyid2 ); } @@ -412,47 +779,47 @@ list_keyblock( KBNODE keyblock, int secret ) PKT_secret_key *sk2 = node->pkt->pkt.secret_key; if( !any ) { + putchar(':'); + putchar(':'); + print_capabilities (pk, sk, keyblock); putchar('\n'); - if( opt.fingerprint ) - fingerprint( pk, sk ); /* of the main key */ + if( fpr ) + print_fingerprint( pk, sk, 0 ); /* of the main key */ any = 1; } keyid_from_sk( sk2, keyid2 ); - if( opt.with_colons ) - printf("ssb::%u:%d:%08lX%08lX:%s:%s:::\n", + printf("ssb::%u:%d:%08lX%08lX:%s:%s:::::", nbits_from_sk( sk2 ), sk2->pubkey_algo, (ulong)keyid2[0],(ulong)keyid2[1], - datestr_from_sk( sk2 ), - sk2->expiredate? strtimestamp(sk2->expiredate):"" - /* fixme: add LID */ - ); - else - printf("ssb %4u%c/%08lX %s\n", nbits_from_sk( sk2 ), - pubkey_letter( sk2->pubkey_algo ), - (ulong)keyid2[1], - datestr_from_sk( sk2 ) ); - if( opt.fingerprint > 1 ) - fingerprint( NULL, sk2 ); - + colon_datestr_from_sk( sk2 ), + colon_strtime (sk2->expiredate) + /* fixme: add LID */ ); + print_capabilities (NULL, sk2, NULL); + putchar ('\n'); + if( fpr > 1 ) + print_fingerprint( NULL, sk2, 0 ); } else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; int sigrc; - char *sigstr; + char *sigstr; if( !any ) { /* no user id, (maybe a revocation follows)*/ if( sig->sig_class == 0x20 ) - puts("[revoked]"); + fputs("[revoked]:", stdout); else if( sig->sig_class == 0x18 ) - puts("[key binding]"); + fputs("[key binding]:", stdout); else if( sig->sig_class == 0x28 ) - puts("[subkey revoked]"); - else - putchar('\n'); - if( opt.fingerprint ) - fingerprint( pk, sk ); + fputs("[subkey revoked]:", stdout); + else + putchar (':'); + putchar(':'); + print_capabilities (pk, sk, keyblock); + putchar('\n'); + if( fpr ) + print_fingerprint( pk, sk, 0 ); any=1; } @@ -464,11 +831,8 @@ list_keyblock( KBNODE keyblock, int secret ) else if( sig->sig_class == 0x18 ) sigstr = "sig"; else { - if( opt.with_colons ) - printf("sig::::::::::%02x:\n",sig->sig_class ); - else - printf("sig " - "[unexpected signature class 0x%02x]\n",sig->sig_class ); + printf ("sig::::::::::%02x%c:\n", + sig->sig_class, sig->flags.exportable?'x':'l'); continue; } if( opt.check_sigs ) { @@ -476,8 +840,9 @@ list_keyblock( KBNODE keyblock, int secret ) rc = check_key_signature( keyblock, node, NULL ); switch( rc ) { case 0: sigrc = '!'; break; - case GPGERR_BAD_SIGN: sigrc = '-'; break; - case GPGERR_NO_PUBKEY: sigrc = '?'; break; + case G10ERR_BAD_SIGN: sigrc = '-'; break; + case G10ERR_NO_PUBKEY: + case G10ERR_UNU_PUBKEY: sigrc = '?'; break; default: sigrc = '%'; break; } } @@ -485,80 +850,191 @@ list_keyblock( KBNODE keyblock, int secret ) rc = 0; sigrc = ' '; } - fputs( sigstr, stdout ); - if( opt.with_colons ) { - putchar(':'); - if( sigrc != ' ' ) - putchar(sigrc); - printf("::%d:%08lX%08lX:%s::::", sig->pubkey_algo, + fputs( sigstr, stdout ); + putchar(':'); + if( sigrc != ' ' ) + putchar(sigrc); + printf("::%d:%08lX%08lX:%s:%s:::", sig->pubkey_algo, (ulong)sig->keyid[0], - (ulong)sig->keyid[1], datestr_from_sig(sig)); - } - else - printf("%c %08lX %s ", - sigrc, (ulong)sig->keyid[1], datestr_from_sig(sig)); + (ulong)sig->keyid[1], colon_datestr_from_sig(sig), + colon_expirestr_from_sig(sig)); if( sigrc == '%' ) - printf("[%s] ", gpg_errstr(rc) ); + printf("[%s] ", g10_errstr(rc) ); else if( sigrc == '?' ) ; else if ( !opt.fast_list_mode ) { size_t n; char *p = get_user_id( sig->keyid, &n ); - if( opt.with_colons ) - print_string( stdout, p, n, ':' ); - else - print_utf8_string( stdout, p, n ); - gcry_free(p); + print_string( stdout, p, n, ':' ); + m_free(p); } - if( opt.with_colons ) - printf(":%02x:", sig->sig_class ); - putchar('\n'); - /* FIXME: check or list other sigs here (subpkt PRIV_ADD_SIG)*/ + printf(":%02x%c:\n", sig->sig_class,sig->flags.exportable?'x':'l'); + /* fixme: check or list other sigs here */ } } if( !any ) {/* oops, no user id */ - if( opt.with_colons ) - putchar(':'); + putchar(':'); + putchar(':'); + print_capabilities (pk, sk, keyblock); putchar('\n'); } - else if( !opt.with_colons ) - putchar('\n'); /* separator line */ } - - +/* + * Reorder the keyblock so that the primary user ID (and not attribute + * packet) comes first. Fixme: Replace this by a generic sort + * function. */ static void -fingerprint( PKT_public_key *pk, PKT_secret_key *sk ) +reorder_keyblock (KBNODE keyblock) { - byte *array, *p; - size_t i, n; + KBNODE primary = NULL, primary0 = NULL, primary2 = NULL; + KBNODE last, node; - p = array = pk? fingerprint_from_pk( pk, NULL, &n ) - : fingerprint_from_sk( sk, NULL, &n ); - if( opt.with_colons ) { - printf("fpr:::::::::"); - for(i=0; i < n ; i++, p++ ) - printf("%02X", *p ); - putchar(':'); + for (node=keyblock; node; primary0=node, node = node->next) { + if( node->pkt->pkttype == PKT_USER_ID && + !node->pkt->pkt.user_id->attrib_data && + node->pkt->pkt.user_id->is_primary ) { + primary = primary2 = node; + for (node=node->next; node; primary2=node, node = node->next ) { + if( node->pkt->pkttype == PKT_USER_ID + || node->pkt->pkttype == PKT_PUBLIC_SUBKEY + || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { + break; + } + } + break; + } + } + if ( !primary ) + return; /* no primary key flag found (should not happen) */ + + for (last=NULL, node=keyblock; node; last = node, node = node->next) { + if( node->pkt->pkttype == PKT_USER_ID ) + break; + } + assert (node); + assert (last); /* the user ID is never the first packet */ + assert (primary0); /* ditto (this is the node before primary) */ + if ( node == primary ) + return; /* already the first one */ + + last->next = primary; + primary0->next = primary2->next; + primary2->next = node; +} + +void +list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque ) +{ + reorder_keyblock (keyblock); + if (opt.with_colons) + list_keyblock_colon (keyblock, secret, fpr ); + else + list_keyblock_print (keyblock, secret, fpr, opaque ); +} + +/* + * standard function to print the finperprint. + * mode 0: as used in key listings, opt.with_colons is honored + * 1: print using log_info () + * 2: direct use of tty + */ +void +print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode ) +{ + byte array[MAX_FINGERPRINT_LEN], *p; + size_t i, n; + FILE *fp; + const char *text; + + if (mode == 1) { + fp = log_stream (); + text = _("Fingerprint:"); + } + else if (mode == 2) { + fp = NULL; /* use tty */ + /* Translators: this should fit into 24 bytes to that the fingerprint + * data is properly aligned with the user ID */ + text = _(" Fingerprint:"); } else { - printf(" Key fingerprint ="); - if( n == 20 ) { - for(i=0; i < n ; i++, i++, p += 2 ) { - if( i == 10 ) - putchar(' '); - printf(" %02X%02X", *p, p[1] ); + fp = stdout; + text = _(" Key fingerprint ="); + } + + if (sk) + fingerprint_from_sk (sk, array, &n); + else + fingerprint_from_pk (pk, array, &n); + p = array; + if (opt.with_colons && !mode) { + fprintf (fp, "fpr:::::::::"); + for (i=0; i < n ; i++, p++ ) + fprintf (fp, "%02X", *p ); + putc(':', fp); + } + else { + if (fp) + fputs (text, fp); + else + tty_printf ("%s", text); + if (n == 20) { + for (i=0; i < n ; i++, i++, p += 2 ) { + if (fp) { + if (i == 10 ) + putc(' ', fp); + fprintf (fp, " %02X%02X", *p, p[1] ); + } + else { + if (i == 10 ) + tty_printf (" "); + tty_printf (" %02X%02X", *p, p[1]); + } } } else { - for(i=0; i < n ; i++, p++ ) { - if( i && !(i%8) ) - putchar(' '); - printf(" %02X", *p ); + for (i=0; i < n ; i++, p++ ) { + if (fp) { + if (i && !(i%8) ) + putc (' ', fp); + fprintf (fp, " %02X", *p ); + } + else { + if (i && !(i%8) ) + tty_printf (" "); + tty_printf (" %02X", *p ); + } } } } - putchar('\n'); - gcry_free(array); + if (fp) + putc ('\n', fp); + else + tty_printf ("\n"); } +void set_attrib_fd(int fd) +{ + static int last_fd=-1; + + if ( fd != -1 && last_fd == fd ) + return; + + if ( attrib_fp && attrib_fp != stdout && attrib_fp != stderr ) + fclose (attrib_fp); + attrib_fp = NULL; + if ( fd == -1 ) + return; + + if( fd == 1 ) + attrib_fp = stdout; + else if( fd == 2 ) + attrib_fp = stderr; + else + attrib_fp = fdopen( fd, "w" ); + if( !attrib_fp ) { + log_fatal("can't open fd %d for attribute output: %s\n", + fd, strerror(errno)); + } + last_fd = fd; +} diff --git a/g10/keyring.c b/g10/keyring.c new file mode 100644 index 000000000..f75a79dfe --- /dev/null +++ b/g10/keyring.c @@ -0,0 +1,1550 @@ +/* keyring.c - keyring file handling + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util.h" +#include "keyring.h" +#include "packet.h" +#include "keydb.h" +#include "options.h" +#include "main.h" /*for check_key_signature()*/ +#include "i18n.h" + +/* off_item is a funny named for an object used to keep track of known + * keys. The idea was to use the offset to seek to the known keyblock, but + * this is not possible if more than one process is using the keyring. + */ +struct off_item { + struct off_item *next; + u32 kid[2]; + /*off_t off;*/ +}; + +typedef struct off_item **OffsetHashTable; + + +typedef struct keyring_name *KR_NAME; +struct keyring_name { + struct keyring_name *next; + int secret; + DOTLOCK lockhd; + int is_locked; + int did_full_scan; + char fname[1]; +}; +typedef struct keyring_name const * CONST_KR_NAME; + +static KR_NAME kr_names; +static int active_handles; + +static OffsetHashTable kr_offtbl; +static int kr_offtbl_ready; + + +struct keyring_handle { + CONST_KR_NAME resource; + int secret; /* this is for a secret keyring */ + struct { + CONST_KR_NAME kr; + IOBUF iobuf; + int eof; + int error; + } current; + struct { + CONST_KR_NAME kr; + off_t offset; + size_t pk_no; + size_t uid_no; + unsigned int n_packets; /*used for delete and update*/ + } found; + struct { + char *name; + char *pattern; + } word_match; +}; + + + +static int do_copy (int mode, const char *fname, KBNODE root, int secret, + off_t start_offset, unsigned int n_packets ); + + + +static struct off_item * +new_offset_item (void) +{ + struct off_item *k; + + k = m_alloc_clear (sizeof *k); + return k; +} + +#if 0 +static void +release_offset_items (struct off_item *k) +{ + struct off_item *k2; + + for (; k; k = k2) + { + k2 = k->next; + m_free (k); + } +} +#endif + +static OffsetHashTable +new_offset_hash_table (void) +{ + struct off_item **tbl; + + tbl = m_alloc_clear (2048 * sizeof *tbl); + return tbl; +} + +#if 0 +static void +release_offset_hash_table (OffsetHashTable tbl) +{ + int i; + + if (!tbl) + return; + for (i=0; i < 2048; i++) + release_offset_items (tbl[i]); + m_free (tbl); +} +#endif + +static struct off_item * +lookup_offset_hash_table (OffsetHashTable tbl, u32 *kid) +{ + struct off_item *k; + + for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next) + if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) + return k; + return NULL; +} + +static void +update_offset_hash_table (OffsetHashTable tbl, u32 *kid, off_t off) +{ + struct off_item *k; + + for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next) + { + if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) + { + /*k->off = off;*/ + return; + } + } + + k = new_offset_item (); + k->kid[0] = kid[0]; + k->kid[1] = kid[1]; + /*k->off = off;*/ + k->next = tbl[(kid[1] & 0x07ff)]; + tbl[(kid[1] & 0x07ff)] = k; +} + +static void +update_offset_hash_table_from_kb (OffsetHashTable tbl, KBNODE node, off_t off) +{ + for (; node; node = node->next) + { + if (node->pkt->pkttype == PKT_PUBLIC_KEY + || node->pkt->pkttype == PKT_PUBLIC_SUBKEY) + { + u32 aki[2]; + keyid_from_pk (node->pkt->pkt.public_key, aki); + update_offset_hash_table (tbl, aki, off); + } + } +} + + + + +/* + * Register a filename for plain keyring files. Returns a pointer to + * be used to create a handles etc or NULL to indicate that it has + * already been registered */ +void * +keyring_register_filename (const char *fname, int secret) +{ + KR_NAME kr; + + if (active_handles) + BUG (); /* We don't allow that */ + + for (kr=kr_names; kr; kr = kr->next) { + if ( !compare_filenames (kr->fname, fname) ) + return NULL; /* already registered */ + } + + kr = m_alloc (sizeof *kr + strlen (fname)); + strcpy (kr->fname, fname); + kr->secret = !!secret; + kr->lockhd = NULL; + kr->is_locked = 0; + kr->did_full_scan = 0; + /* keep a list of all issued pointers */ + kr->next = kr_names; + kr_names = kr; + + /* create the offset table the first time a function here is used */ + if (!kr_offtbl) + kr_offtbl = new_offset_hash_table (); + + return kr; +} + +int +keyring_is_writable (void *token) +{ + KR_NAME r = token; + + return r? !access (r->fname, W_OK) : 0; +} + + + +/* Create a new handle for the resource associated with TOKEN. SECRET + is just just as a cross-check. + + The returned handle must be released using keyring_release (). */ +KEYRING_HANDLE +keyring_new (void *token, int secret) +{ + KEYRING_HANDLE hd; + KR_NAME resource = token; + + assert (resource && !resource->secret == !secret); + + hd = m_alloc_clear (sizeof *hd); + hd->resource = resource; + hd->secret = !!secret; + active_handles++; + return hd; +} + +void +keyring_release (KEYRING_HANDLE hd) +{ + if (!hd) + return; + assert (active_handles > 0); + active_handles--; + m_free (hd->word_match.name); + m_free (hd->word_match.pattern); + iobuf_close (hd->current.iobuf); + m_free (hd); +} + + +const char * +keyring_get_resource_name (KEYRING_HANDLE hd) +{ + if (!hd || !hd->resource) + return NULL; + return hd->resource->fname; +} + + +/* + * Lock the keyring with the given handle, or unlok if yes is false. + * We ignore the handle and lock all registered files. + */ +int +keyring_lock (KEYRING_HANDLE hd, int yes) +{ + KR_NAME kr; + int rc = 0; + + if (yes) { + /* first make sure the lock handles are created */ + for (kr=kr_names; kr; kr = kr->next) { + if (!keyring_is_writable(kr)) + continue; + if (!kr->lockhd) { + kr->lockhd = create_dotlock( kr->fname ); + if (!kr->lockhd) { + log_info ("can't allocate lock for `%s'\n", kr->fname ); + rc = G10ERR_GENERAL; + } + } + } + if (rc) + return rc; + + /* and now set the locks */ + for (kr=kr_names; kr; kr = kr->next) { + if (!keyring_is_writable(kr)) + continue; + if (kr->is_locked) + ; + else if (make_dotlock (kr->lockhd, -1) ) { + log_info ("can't lock `%s'\n", kr->fname ); + rc = G10ERR_GENERAL; + } + else + kr->is_locked = 1; + } + } + + if (rc || !yes) { + for (kr=kr_names; kr; kr = kr->next) { + if (!keyring_is_writable(kr)) + continue; + if (!kr->is_locked) + ; + else if (release_dotlock (kr->lockhd)) + log_info ("can't unlock `%s'\n", kr->fname ); + else + kr->is_locked = 0; + } + } + + return rc; +} + + + +/* + * Return the last found keyring. Caller must free it. + * The returned keyblock has the kbode flag bit 0 set for the node with + * the public key used to locate the keyblock or flag bit 1 set for + * the user ID node. + */ +int +keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb) +{ + PACKET *pkt; + int rc; + KBNODE keyblock = NULL, node, lastnode; + IOBUF a; + int in_cert = 0; + int pk_no = 0; + int uid_no = 0; + int save_mode; + + if (ret_kb) + *ret_kb = NULL; + + if (!hd->found.kr) + return -1; /* no successful search */ + + a = iobuf_open (hd->found.kr->fname); + if (!a) { + log_error ("can't open `%s'\n", hd->found.kr->fname); + return G10ERR_KEYRING_OPEN; + } + + if (iobuf_seek (a, hd->found.offset) ) { + log_error ("can't seek `%s'\n", hd->found.kr->fname); + iobuf_close(a); + return G10ERR_KEYRING_OPEN; + } + + pkt = m_alloc (sizeof *pkt); + init_packet (pkt); + hd->found.n_packets = 0;; + lastnode = NULL; + save_mode = set_packet_list_mode(0); + while ((rc=parse_packet (a, pkt)) != -1) { + hd->found.n_packets++; + if (rc == G10ERR_UNKNOWN_PACKET) { + free_packet (pkt); + init_packet (pkt); + continue; + } + if (rc) { + log_error ("keyring_get_keyblock: read error: %s\n", + g10_errstr(rc) ); + rc = G10ERR_INV_KEYRING; + break; + } + if (pkt->pkttype == PKT_COMPRESSED) { + log_error ("skipped compressed packet in keyring\n"); + free_packet(pkt); + init_packet(pkt); + continue; + } + + if (in_cert && (pkt->pkttype == PKT_PUBLIC_KEY + || pkt->pkttype == PKT_SECRET_KEY)) { + hd->found.n_packets--; /* fix counter */ + break; /* ready */ + } + + in_cert = 1; + if (pkt->pkttype == PKT_RING_TRUST) { + /*(this code is duplicated after the loop)*/ + if ( lastnode + && lastnode->pkt->pkttype == PKT_SIGNATURE + && (pkt->pkt.ring_trust->sigcache & 1) ) { + /* this is a ring trust packet with a checked signature + * status cache following directly a signature paket. + * Set the cache status into that signature packet */ + PKT_signature *sig = lastnode->pkt->pkt.signature; + + sig->flags.checked = 1; + sig->flags.valid = !!(pkt->pkt.ring_trust->sigcache & 2); + } + /* reset lastnode, so that we set the cache status only from + * the ring trust packet immediately folling a signature */ + lastnode = NULL; + } + else { + node = lastnode = new_kbnode (pkt); + if (!keyblock) + keyblock = node; + else + add_kbnode (keyblock, node); + + if ( pkt->pkttype == PKT_PUBLIC_KEY + || pkt->pkttype == PKT_PUBLIC_SUBKEY + || pkt->pkttype == PKT_SECRET_KEY + || pkt->pkttype == PKT_SECRET_SUBKEY) { + if (++pk_no == hd->found.pk_no) + node->flag |= 1; + } + else if ( pkt->pkttype == PKT_USER_ID) { + if (++uid_no == hd->found.uid_no) + node->flag |= 2; + } + } + + pkt = m_alloc (sizeof *pkt); + init_packet(pkt); + } + set_packet_list_mode(save_mode); + + if (rc == -1 && keyblock) + rc = 0; /* got the entire keyblock */ + + if (rc || !ret_kb) + release_kbnode (keyblock); + else { + /*(duplicated form the loop body)*/ + if ( pkt && pkt->pkttype == PKT_RING_TRUST + && lastnode + && lastnode->pkt->pkttype == PKT_SIGNATURE + && (pkt->pkt.ring_trust->sigcache & 1) ) { + PKT_signature *sig = lastnode->pkt->pkt.signature; + sig->flags.checked = 1; + sig->flags.valid = !!(pkt->pkt.ring_trust->sigcache & 2); + } + *ret_kb = keyblock; + } + free_packet (pkt); + m_free (pkt); + iobuf_close(a); + + /* Make sure that future search operations fail immediately when + * we know that we are working on a invalid keyring + */ + if (rc == G10ERR_INV_KEYRING) + hd->current.error = rc; + + return rc; +} + +int +keyring_update_keyblock (KEYRING_HANDLE hd, KBNODE kb) +{ + int rc; + + if (!hd->found.kr) + return -1; /* no successful prior search */ + + if (!hd->found.n_packets) { + /* need to know the number of packets - do a dummy get_keyblock*/ + rc = keyring_get_keyblock (hd, NULL); + if (rc) { + log_error ("re-reading keyblock failed: %s\n", g10_errstr (rc)); + return rc; + } + if (!hd->found.n_packets) + BUG (); + } + + /* The open iobuf isn't needed anymore and in fact is a problem when + it comes to renaming the keyring files on some operating systems, + so close it here */ + iobuf_close(hd->current.iobuf); + hd->current.iobuf = NULL; + + /* do the update */ + rc = do_copy (3, hd->found.kr->fname, kb, hd->secret, + hd->found.offset, hd->found.n_packets ); + if (!rc) { + if (!hd->secret && kr_offtbl) + { + update_offset_hash_table_from_kb (kr_offtbl, kb, 0); + } + /* better reset the found info */ + hd->found.kr = NULL; + hd->found.offset = 0; + } + return rc; +} + +int +keyring_insert_keyblock (KEYRING_HANDLE hd, KBNODE kb) +{ + int rc; + const char *fname; + + if (!hd) + fname = NULL; + else if (hd->found.kr) + fname = hd->found.kr->fname; + else if (hd->current.kr) + fname = hd->current.kr->fname; + else + fname = hd->resource? hd->resource->fname:NULL; + + if (!fname) + return G10ERR_GENERAL; + + /* close this one otherwise we will lose the position for + * a next search. Fixme: it would be better to adjust the position + * after the write opertions. + */ + iobuf_close (hd->current.iobuf); + hd->current.iobuf = NULL; + + /* do the insert */ + rc = do_copy (1, fname, kb, hd->secret, 0, 0 ); + if (!rc && !hd->secret && kr_offtbl) + { + update_offset_hash_table_from_kb (kr_offtbl, kb, 0); + } + + return rc; +} + + +int +keyring_delete_keyblock (KEYRING_HANDLE hd) +{ + int rc; + + if (!hd->found.kr) + return -1; /* no successful prior search */ + + if (!hd->found.n_packets) { + /* need to know the number of packets - do a dummy get_keyblock*/ + rc = keyring_get_keyblock (hd, NULL); + if (rc) { + log_error ("re-reading keyblock failed: %s\n", g10_errstr (rc)); + return rc; + } + if (!hd->found.n_packets) + BUG (); + } + + /* close this one otherwise we will lose the position for + * a next search. Fixme: it would be better to adjust the position + * after the write opertions. + */ + iobuf_close (hd->current.iobuf); + hd->current.iobuf = NULL; + + /* do the delete */ + rc = do_copy (2, hd->found.kr->fname, NULL, hd->secret, + hd->found.offset, hd->found.n_packets ); + if (!rc) { + /* better reset the found info */ + hd->found.kr = NULL; + hd->found.offset = 0; + /* Delete is a rare operations, so we don't remove the keys + * from the offset table */ + } + return rc; +} + + + +/* + * Start the next search on this handle right at the beginning + */ +int +keyring_search_reset (KEYRING_HANDLE hd) +{ + assert (hd); + + hd->current.kr = NULL; + iobuf_close (hd->current.iobuf); + hd->current.iobuf = NULL; + hd->current.eof = 0; + hd->current.error = 0; + + hd->found.kr = NULL; + hd->found.offset = 0; + return 0; +} + + +static int +prepare_search (KEYRING_HANDLE hd) +{ + if (hd->current.error) + return hd->current.error; /* still in error state */ + + if (hd->current.kr && !hd->current.eof) { + if ( !hd->current.iobuf ) + return G10ERR_GENERAL; /* position invalid after a modify */ + return 0; /* okay */ + } + + if (!hd->current.kr && hd->current.eof) + return -1; /* still EOF */ + + if (!hd->current.kr) { /* start search with first keyring */ + hd->current.kr = hd->resource; + if (!hd->current.kr) { + hd->current.eof = 1; + return -1; /* keyring not available */ + } + assert (!hd->current.iobuf); + } + else { /* EOF */ + iobuf_close (hd->current.iobuf); + hd->current.iobuf = NULL; + hd->current.kr = NULL; + hd->current.eof = 1; + return -1; + } + + hd->current.eof = 0; + hd->current.iobuf = iobuf_open (hd->current.kr->fname); + if (!hd->current.iobuf) { + log_error ("can't open `%s'\n", hd->current.kr->fname ); + return (hd->current.error = G10ERR_OPEN_FILE); + } + + return 0; +} + + +/* A map of the all characters valid used for word_match() + * Valid characters are in in this table converted to uppercase. + * because the upper 128 bytes have special meaning, we assume + * that they are all valid. + * Note: We must use numerical values here in case that this program + * will be converted to those little blue HAL9000s with their strange + * EBCDIC character set (user ids are UTF-8). + * wk 2000-04-13: Hmmm, does this really make sense, given the fact that + * we can run gpg now on a S/390 running GNU/Linux, where the code + * translation is done by the device drivers? + */ +static const byte word_match_chars[256] = { + /* 00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 08 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 18 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 28 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + /* 38 */ 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 40 */ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + /* 48 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + /* 50 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + /* 58 */ 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 60 */ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + /* 68 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + /* 70 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + /* 78 */ 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + /* 88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + /* 90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + /* 98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + /* a0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + /* a8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + /* b0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + /* b8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + /* c0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + /* c8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + /* d0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + /* d8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + /* e0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + /* e8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + /* f0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + /* f8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff +}; + +/**************** + * Do a word match (original user id starts with a '+'). + * The pattern is already tokenized to a more suitable format: + * There are only the real words in it delimited by one space + * and all converted to uppercase. + * + * Returns: 0 if all words match. + * + * Note: This algorithm is a straightforward one and not very + * fast. It works for UTF-8 strings. The uidlen should + * be removed but due to the fact that old versions of + * pgp don't use UTF-8 we still use the length; this should + * be fixed in parse-packet (and replace \0 by some special + * UTF-8 encoding) + */ +static int +word_match( const byte *uid, size_t uidlen, const byte *pattern ) +{ + size_t wlen, n; + const byte *p; + const byte *s; + + for( s=pattern; *s; ) { + do { + /* skip leading delimiters */ + while( uidlen && !word_match_chars[*uid] ) + uid++, uidlen--; + /* get length of the word */ + n = uidlen; p = uid; + while( n && word_match_chars[*p] ) + p++, n--; + wlen = p - uid; + /* and compare against the current word from pattern */ + for(n=0, p=uid; n < wlen && s[n] != ' ' && s[n] ; n++, p++ ) { + if( word_match_chars[*p] != s[n] ) + break; + } + if( n == wlen && (s[n] == ' ' || !s[n]) ) + break; /* found */ + uid += wlen; + uidlen -= wlen; + } while( uidlen ); + if( !uidlen ) + return -1; /* not found */ + + /* advance to next word in pattern */ + for(; *s != ' ' && *s ; s++ ) + ; + if( *s ) + s++ ; + } + return 0; /* found */ +} + +/**************** + * prepare word word_match; that is parse the name and + * build the pattern. + * caller has to free the returned pattern + */ +static char* +prepare_word_match (const byte *name) +{ + byte *pattern, *p; + int c; + + /* the original length is always enough for the pattern */ + p = pattern = m_alloc(strlen(name)+1); + do { + /* skip leading delimiters */ + while( *name && !word_match_chars[*name] ) + name++; + /* copy as long as we don't have a delimiter and convert + * to uppercase. + * fixme: how can we handle utf8 uppercasing */ + for( ; *name && (c=word_match_chars[*name]); name++ ) + *p++ = c; + *p++ = ' '; /* append pattern delimiter */ + } while( *name ); + p[-1] = 0; /* replace last pattern delimiter by EOS */ + + return pattern; +} + + + + +static int +compare_name (int mode, const char *name, const char *uid, size_t uidlen) +{ + int i; + const char *s, *se; + + if (mode == KEYDB_SEARCH_MODE_EXACT) { + for (i=0; name[i] && uidlen; i++, uidlen--) + if (uid[i] != name[i]) + break; + if (!uidlen && !name[i]) + return 0; /* found */ + } + else if (mode == KEYDB_SEARCH_MODE_SUBSTR) { + if (ascii_memistr( uid, uidlen, name )) + return 0; + } + else if ( mode == KEYDB_SEARCH_MODE_MAIL + || mode == KEYDB_SEARCH_MODE_MAILSUB + || mode == KEYDB_SEARCH_MODE_MAILEND) { + for (i=0, s= uid; i < uidlen && *s != '<'; s++, i++) + ; + if (i < uidlen) { + /* skip opening delim and one char and look for the closing one*/ + s++; i++; + for (se=s+1, i++; i < uidlen && *se != '>'; se++, i++) + ; + if (i < uidlen) { + i = se - s; + if (mode == KEYDB_SEARCH_MODE_MAIL) { + if( strlen(name)-2 == i + && !ascii_memcasecmp( s, name+1, i) ) + return 0; + } + else if (mode == KEYDB_SEARCH_MODE_MAILSUB) { + if( ascii_memistr( s, i, name ) ) + return 0; + } + else { /* email from end */ + /* nyi */ + } + } + } + } + else if (mode == KEYDB_SEARCH_MODE_WORDS) + return word_match (uid, uidlen, name); + else + BUG(); + + return -1; /* not found */ +} + + +/* + * Search through the keyring(s), starting at the current position, + * for a keyblock which contains one of the keys described in the DESC array. + */ +int +keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc) +{ + int rc; + PACKET pkt; + int save_mode; + off_t offset, main_offset; + size_t n; + int need_uid, need_words, need_keyid, need_fpr, any_skip; + int pk_no, uid_no; + int initial_skip; + int use_offtbl; + PKT_user_id *uid = NULL; + PKT_public_key *pk = NULL; + PKT_secret_key *sk = NULL; + + /* figure out what information we need */ + need_uid = need_words = need_keyid = need_fpr = any_skip = 0; + for (n=0; n < ndesc; n++) + { + switch (desc[n].mode) + { + case KEYDB_SEARCH_MODE_EXACT: + case KEYDB_SEARCH_MODE_SUBSTR: + case KEYDB_SEARCH_MODE_MAIL: + case KEYDB_SEARCH_MODE_MAILSUB: + case KEYDB_SEARCH_MODE_MAILEND: + need_uid = 1; + break; + case KEYDB_SEARCH_MODE_WORDS: + need_uid = 1; + need_words = 1; + break; + case KEYDB_SEARCH_MODE_SHORT_KID: + case KEYDB_SEARCH_MODE_LONG_KID: + need_keyid = 1; + break; + case KEYDB_SEARCH_MODE_FPR16: + case KEYDB_SEARCH_MODE_FPR20: + case KEYDB_SEARCH_MODE_FPR: + need_fpr = 1; + break; + case KEYDB_SEARCH_MODE_FIRST: + /* always restart the search in this mode */ + keyring_search_reset (hd); + break; + default: break; + } + if (desc[n].skipfnc) + { + any_skip = 1; + need_keyid = 1; + } + } + + rc = prepare_search (hd); + if (rc) + return rc; + + use_offtbl = !hd->secret && kr_offtbl; + if (!use_offtbl) + ; + else if (!kr_offtbl_ready) + need_keyid = 1; + else if (ndesc == 1 && desc[0].mode == KEYDB_SEARCH_MODE_LONG_KID) + { + struct off_item *oi; + + oi = lookup_offset_hash_table (kr_offtbl, desc[0].u.kid); + if (!oi) + { /* We know that we don't have this key */ + hd->found.kr = NULL; + hd->current.eof = 1; + return -1; + } + /* We could now create a positive search status and return. + * However the problem is that another instance of gpg may + * have changed the keyring so that the offsets are not valid + * anymore - therefore we don't do it + */ + } + + if (need_words) + { + const char *name = NULL; + + log_debug ("word search mode does not yet work\n"); + /* FIXME: here is a long standing bug in our function and in addition we + just use the first search description */ + for (n=0; n < ndesc && !name; n++) + { + if (desc[n].mode == KEYDB_SEARCH_MODE_WORDS) + name = desc[n].u.name; + } + assert (name); + if ( !hd->word_match.name || strcmp (hd->word_match.name, name) ) + { + /* name changed */ + m_free (hd->word_match.name); + m_free (hd->word_match.pattern); + hd->word_match.name = m_strdup (name); + hd->word_match.pattern = prepare_word_match (name); + } + name = hd->word_match.pattern; + } + + init_packet(&pkt); + save_mode = set_packet_list_mode(0); + + hd->found.kr = NULL; + main_offset = 0; + pk_no = uid_no = 0; + initial_skip = 1; /* skip until we see the start of a keyblock */ + while (!(rc=search_packet (hd->current.iobuf, &pkt, &offset, need_uid))) + { + byte afp[MAX_FINGERPRINT_LEN]; + size_t an; + u32 aki[2]; + + if (pkt.pkttype == PKT_PUBLIC_KEY || pkt.pkttype == PKT_SECRET_KEY) + { + main_offset = offset; + pk_no = uid_no = 0; + initial_skip = 0; + } + if (initial_skip) + { + free_packet (&pkt); + continue; + } + + pk = NULL; + sk = NULL; + uid = NULL; + if ( pkt.pkttype == PKT_PUBLIC_KEY + || pkt.pkttype == PKT_PUBLIC_SUBKEY) + { + pk = pkt.pkt.public_key; + ++pk_no; + + if (need_fpr) { + fingerprint_from_pk (pk, afp, &an); + while (an < 20) /* fill up to 20 bytes */ + afp[an++] = 0; + } + if (need_keyid) + keyid_from_pk (pk, aki); + + if (use_offtbl && !kr_offtbl_ready) + update_offset_hash_table (kr_offtbl, aki, main_offset); + } + else if (pkt.pkttype == PKT_USER_ID) + { + uid = pkt.pkt.user_id; + ++uid_no; + } + else if ( pkt.pkttype == PKT_SECRET_KEY + || pkt.pkttype == PKT_SECRET_SUBKEY) + { + sk = pkt.pkt.secret_key; + ++pk_no; + + if (need_fpr) { + fingerprint_from_sk (sk, afp, &an); + while (an < 20) /* fill up to 20 bytes */ + afp[an++] = 0; + } + if (need_keyid) + keyid_from_sk (sk, aki); + + } + + for (n=0; n < ndesc; n++) + { + switch (desc[n].mode) { + case KEYDB_SEARCH_MODE_NONE: + BUG (); + break; + case KEYDB_SEARCH_MODE_EXACT: + case KEYDB_SEARCH_MODE_SUBSTR: + case KEYDB_SEARCH_MODE_MAIL: + case KEYDB_SEARCH_MODE_MAILSUB: + case KEYDB_SEARCH_MODE_MAILEND: + case KEYDB_SEARCH_MODE_WORDS: + if ( uid && !compare_name (desc[n].mode, + desc[n].u.name, + uid->name, uid->len)) + goto found; + break; + + case KEYDB_SEARCH_MODE_SHORT_KID: + if ((pk||sk) && desc[n].u.kid[1] == aki[1]) + goto found; + break; + case KEYDB_SEARCH_MODE_LONG_KID: + if ((pk||sk) && desc[n].u.kid[0] == aki[0] + && desc[n].u.kid[1] == aki[1]) + goto found; + break; + case KEYDB_SEARCH_MODE_FPR16: + if ((pk||sk) && !memcmp (desc[n].u.fpr, afp, 16)) + goto found; + break; + case KEYDB_SEARCH_MODE_FPR20: + case KEYDB_SEARCH_MODE_FPR: + if ((pk||sk) && !memcmp (desc[n].u.fpr, afp, 20)) + goto found; + break; + case KEYDB_SEARCH_MODE_FIRST: + if (pk||sk) + goto found; + break; + case KEYDB_SEARCH_MODE_NEXT: + if (pk||sk) + goto found; + break; + default: + rc = G10ERR_INV_ARG; + goto found; + } + } + free_packet (&pkt); + continue; + found: + for (n=any_skip?0:ndesc; n < ndesc; n++) + { + if (desc[n].skipfnc + && desc[n].skipfnc (desc[n].skipfncvalue, aki)) + break; + } + if (n == ndesc) + goto real_found; + free_packet (&pkt); + } + real_found: + if (!rc) + { + hd->found.offset = main_offset; + hd->found.kr = hd->current.kr; + hd->found.pk_no = (pk||sk)? pk_no : 0; + hd->found.uid_no = uid? uid_no : 0; + } + else if (rc == -1) + { + hd->current.eof = 1; + /* if we scanned all keyrings, we are sure that + * all known key IDs are in our offtbl, mark that. */ + if (use_offtbl && !kr_offtbl_ready) + { + KR_NAME kr; + + /* First set the did_full_scan flag for this keyring (ignore + secret keyrings) */ + for (kr=kr_names; kr; kr = kr->next) + { + if (!kr->secret && hd->resource == kr) + { + kr->did_full_scan = 1; + break; + } + } + /* Then check whether all flags are set and if so, mark the + offtbl ready */ + for (kr=kr_names; kr; kr = kr->next) + { + if (!kr->secret && !kr->did_full_scan) + break; + } + if (!kr) + kr_offtbl_ready = 1; + } + } + else + hd->current.error = rc; + + free_packet(&pkt); + set_packet_list_mode(save_mode); + return rc; +} + + +static int +create_tmp_file (const char *template, + char **r_bakfname, char **r_tmpfname, IOBUF *r_fp) +{ + char *bakfname, *tmpfname; + + *r_bakfname = NULL; + *r_tmpfname = NULL; + +# ifdef USE_ONLY_8DOT3 + /* Here is another Windoze bug?: + * you cant rename("pubring.gpg.tmp", "pubring.gpg"); + * but rename("pubring.gpg.tmp", "pubring.aaa"); + * works. So we replace .gpg by .bak or .tmp + */ + if (strlen (template) > 4 + && !strcmp (template+strlen(template)-4, EXTSEP_S "gpg") ) + { + bakfname = m_alloc (strlen (template) + 1); + strcpy (bakfname, template); + strcpy (bakfname+strlen(template)-4, EXTSEP_S "bak"); + + tmpfname = m_alloc (strlen( template ) + 1 ); + strcpy (tmpfname,template); + strcpy (tmpfname+strlen(template)-4, EXTSEP_S "tmp"); + } + else + { /* file does not end with gpg; hmmm */ + bakfname = m_alloc (strlen( template ) + 5); + strcpy (stpcpy(bakfname, template), EXTSEP_S "bak"); + + tmpfname = m_alloc (strlen( template ) + 5); + strcpy (stpcpy(tmpfname, template), EXTSEP_S "tmp"); + } +# else /* Posix file names */ + bakfname = m_alloc (strlen( template ) + 2); + strcpy (stpcpy (bakfname,template),"~"); + + tmpfname = m_alloc (strlen( template ) + 5); + strcpy (stpcpy(tmpfname,template), EXTSEP_S "tmp"); +# endif /* Posix filename */ + + *r_fp = iobuf_create (tmpfname); + if (!*r_fp) { + log_error ("can't create `%s': %s\n", tmpfname, strerror(errno) ); + m_free (tmpfname); + m_free (bakfname); + return G10ERR_OPEN_FILE; + } + + *r_bakfname = bakfname; + *r_tmpfname = tmpfname; + return 0; +} + + +static int +rename_tmp_file (const char *bakfname, const char *tmpfname, + const char *fname, int secret ) +{ + int rc=0; + + /* restrict the permissions for secret keyrings */ +#ifndef HAVE_DOSISH_SYSTEM + if (secret && !opt.preserve_permissions) + { + if (chmod (tmpfname, S_IRUSR | S_IWUSR) ) + { + log_error ("chmod of `%s' failed: %s\n", + tmpfname, strerror(errno) ); + return G10ERR_WRITE_FILE; + } + } +#endif + + /* invalidate close caches*/ + iobuf_ioctl (NULL, 2, 0, (char*)tmpfname ); + iobuf_ioctl (NULL, 2, 0, (char*)bakfname ); + iobuf_ioctl (NULL, 2, 0, (char*)fname ); + + /* first make a backup file except for secret keyrings */ + if (!secret) + { +#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) + remove (bakfname); +#endif + if (rename (fname, bakfname) ) + { + log_error ("renaming `%s' to `%s' failed: %s\n", + fname, bakfname, strerror(errno) ); + return G10ERR_RENAME_FILE; + } + } + + /* then rename the file */ +#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) + remove( fname ); +#endif + if (rename (tmpfname, fname) ) + { + log_error ("renaming `%s' to `%s' failed: %s\n", + tmpfname, fname, strerror(errno) ); + rc = G10ERR_RENAME_FILE; + if (secret) + { + log_info(_("WARNING: 2 files with confidential" + " information exists.\n")); + log_info(_("%s is the unchanged one\n"), fname ); + log_info(_("%s is the new one\n"), tmpfname ); + log_info(_("Please fix this possible security flaw\n")); + } + return rc; + } + + return 0; +} + + +static int +write_keyblock (IOBUF fp, KBNODE keyblock) +{ + KBNODE kbctx = NULL, node; + int rc; + + while ( (node = walk_kbnode (keyblock, &kbctx, 0)) ) + { + if (node->pkt->pkttype == PKT_RING_TRUST) + continue; /* we write it later on our own */ + + if ( (rc = build_packet (fp, node->pkt) )) + { + log_error ("build_packet(%d) failed: %s\n", + node->pkt->pkttype, g10_errstr(rc) ); + return rc; + } + if (node->pkt->pkttype == PKT_SIGNATURE) + { /* always write a signature cache packet */ + PKT_signature *sig = node->pkt->pkt.signature; + unsigned int cacheval = 0; + + if (sig->flags.checked) + { + cacheval |= 1; + if (sig->flags.valid) + cacheval |= 2; + } + iobuf_put (fp, 0xb0); /* old style packet 12, 1 byte len*/ + iobuf_put (fp, 2); /* 2 bytes */ + iobuf_put (fp, 0); /* unused */ + if (iobuf_put (fp, cacheval)) { + log_error ("writing sigcache packet failed\n"); + return G10ERR_WRITE_FILE; + } + } + } + return 0; +} + +/* + * Walk over all public keyrings, check the signatures and replace the + * keyring with a new one where the signature cache is then updated. + * This is only done for the public keyrings. + */ +int +keyring_rebuild_cache (void *token) +{ + KEYRING_HANDLE hd; + KEYDB_SEARCH_DESC desc; + KBNODE keyblock = NULL, node; + const char *lastresname = NULL, *resname; + IOBUF tmpfp = NULL; + char *tmpfilename = NULL; + char *bakfilename = NULL; + int rc; + ulong count = 0, sigcount = 0; + + hd = keyring_new (token, 0); + memset (&desc, 0, sizeof desc); + desc.mode = KEYDB_SEARCH_MODE_FIRST; + + while ( !(rc = keyring_search (hd, &desc, 1)) ) + { + desc.mode = KEYDB_SEARCH_MODE_NEXT; + resname = keyring_get_resource_name (hd); + if (lastresname != resname ) + { /* we have switched to a new keyring - commit changes */ + if (tmpfp) + { + if (iobuf_close (tmpfp)) + { + log_error ("error closing `%s': %s\n", + tmpfilename, strerror (errno)); + rc = G10ERR_CLOSE_FILE; + goto leave; + } + /* because we have switched resources, we can be sure that + * the original file is closed */ + tmpfp = NULL; + } + rc = lastresname? rename_tmp_file (bakfilename, tmpfilename, + lastresname, 0) : 0; + m_free (tmpfilename); tmpfilename = NULL; + m_free (bakfilename); bakfilename = NULL; + if (rc) + goto leave; + lastresname = resname; + if (!opt.quiet) + log_info (_("checking keyring `%s'\n"), resname); + rc = create_tmp_file (resname, &bakfilename, &tmpfilename, &tmpfp); + if (rc) + goto leave; + } + + release_kbnode (keyblock); + rc = keyring_get_keyblock (hd, &keyblock); + if (rc) + { + log_error ("keyring_get_keyblock failed: %s\n", g10_errstr(rc)); + goto leave; + } + assert (keyblock->pkt->pkttype == PKT_PUBLIC_KEY); + + /* check all signature to set the signature's cache flags */ + for (node=keyblock; node; node=node->next) + { + if (node->pkt->pkttype == PKT_SIGNATURE) + { + check_key_signature (keyblock, node, NULL); + sigcount++; + } + } + + /* write the keyblock to the temporary file */ + rc = write_keyblock (tmpfp, keyblock); + if (rc) + goto leave; + + if ( !(++count % 50) && !opt.quiet) + log_info(_("%lu keys so far checked (%lu signatures)\n"), + count, sigcount ); + + } /* end main loop */ + if (rc == -1) + rc = 0; + if (rc) + { + log_error ("keyring_search failed: %s\n", g10_errstr(rc)); + goto leave; + } + log_info(_("%lu keys checked (%lu signatures)\n"), count, sigcount ); + if (tmpfp) + { + if (iobuf_close (tmpfp)) + { + log_error ("error closing `%s': %s\n", + tmpfilename, strerror (errno)); + rc = G10ERR_CLOSE_FILE; + goto leave; + } + /* because we have switched resources, we can be sure that + * the original file is closed */ + tmpfp = NULL; + } + rc = lastresname? rename_tmp_file (bakfilename, tmpfilename, + lastresname, 0) : 0; + m_free (tmpfilename); tmpfilename = NULL; + m_free (bakfilename); bakfilename = NULL; + + leave: + if (tmpfp) + iobuf_cancel (tmpfp); + m_free (tmpfilename); + m_free (bakfilename); + release_kbnode (keyblock); + keyring_release (hd); + return rc; +} + + +/**************** + * Perform insert/delete/update operation. + * mode 1 = insert + * 2 = delete + * 3 = update + */ +static int +do_copy (int mode, const char *fname, KBNODE root, int secret, + off_t start_offset, unsigned int n_packets ) +{ + IOBUF fp, newfp; + int rc=0; + char *bakfname = NULL; + char *tmpfname = NULL; + + /* Open the source file. Because we do a rname, we have to check the + permissions of the file */ + if (access (fname, W_OK)) + return G10ERR_WRITE_FILE; + + fp = iobuf_open (fname); + if (mode == 1 && !fp && errno == ENOENT) { + /* insert mode but file does not exist: create a new file */ + KBNODE kbctx, node; + + newfp = iobuf_create (fname); + if( !newfp ) { + log_error (_("%s: can't create: %s\n"), + fname, strerror(errno)); + return G10ERR_OPEN_FILE; + } + if( !opt.quiet ) + log_info(_("%s: keyring created\n"), fname ); + + kbctx=NULL; + while ( (node = walk_kbnode( root, &kbctx, 0 )) ) { + if( (rc = build_packet( newfp, node->pkt )) ) { + log_error("build_packet(%d) failed: %s\n", + node->pkt->pkttype, g10_errstr(rc) ); + iobuf_cancel(newfp); + return G10ERR_WRITE_FILE; + } + } + if( iobuf_close(newfp) ) { + log_error ("%s: close failed: %s\n", fname, strerror(errno)); + return G10ERR_CLOSE_FILE; + } + if (chmod( fname, S_IRUSR | S_IWUSR )) { + log_error("%s: chmod failed: %s\n", fname, strerror(errno) ); + return G10ERR_WRITE_FILE; + } + return 0; /* ready */ + } + + if( !fp ) { + log_error ("%s: can't open: %s\n", fname, strerror(errno) ); + rc = G10ERR_OPEN_FILE; + goto leave; + } + + /* create the new file */ + rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp); + if (rc) { + iobuf_close(fp); + goto leave; + } + if( mode == 1 ) { /* insert */ + /* copy everything to the new file */ + rc = copy_all_packets (fp, newfp); + if( rc != -1 ) { + log_error("%s: copy to `%s' failed: %s\n", + fname, tmpfname, g10_errstr(rc) ); + iobuf_close(fp); + iobuf_cancel(newfp); + goto leave; + } + rc = 0; + } + + if( mode == 2 || mode == 3 ) { /* delete or update */ + /* copy first part to the new file */ + rc = copy_some_packets( fp, newfp, start_offset ); + if( rc ) { /* should never get EOF here */ + log_error ("%s: copy to `%s' failed: %s\n", + fname, tmpfname, g10_errstr(rc) ); + iobuf_close(fp); + iobuf_cancel(newfp); + goto leave; + } + /* skip this keyblock */ + assert( n_packets ); + rc = skip_some_packets( fp, n_packets ); + if( rc ) { + log_error("%s: skipping %u packets failed: %s\n", + fname, n_packets, g10_errstr(rc)); + iobuf_close(fp); + iobuf_cancel(newfp); + goto leave; + } + } + + if( mode == 1 || mode == 3 ) { /* insert or update */ + rc = write_keyblock (newfp, root); + if (rc) { + iobuf_close(fp); + iobuf_cancel(newfp); + goto leave; + } + } + + if( mode == 2 || mode == 3 ) { /* delete or update */ + /* copy the rest */ + rc = copy_all_packets( fp, newfp ); + if( rc != -1 ) { + log_error("%s: copy to `%s' failed: %s\n", + fname, tmpfname, g10_errstr(rc) ); + iobuf_close(fp); + iobuf_cancel(newfp); + goto leave; + } + rc = 0; + } + + /* close both files */ + if( iobuf_close(fp) ) { + log_error("%s: close failed: %s\n", fname, strerror(errno) ); + rc = G10ERR_CLOSE_FILE; + goto leave; + } + if( iobuf_close(newfp) ) { + log_error("%s: close failed: %s\n", tmpfname, strerror(errno) ); + rc = G10ERR_CLOSE_FILE; + goto leave; + } + + rc = rename_tmp_file (bakfname, tmpfname, fname, secret); + + leave: + m_free(bakfname); + m_free(tmpfname); + return rc; +} diff --git a/g10/keyring.h b/g10/keyring.h new file mode 100644 index 000000000..cb8e404a4 --- /dev/null +++ b/g10/keyring.h @@ -0,0 +1,45 @@ +/* keyring.h - Keyring operations + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef GPG_KEYRING_H +#define GPG_KEYRING_H 1 + +#include "global.h" + + +typedef struct keyring_handle *KEYRING_HANDLE; + +void *keyring_register_filename (const char *fname, int secret); +int keyring_is_writable (void *token); + +KEYRING_HANDLE keyring_new (void *token, int secret); +void keyring_release (KEYRING_HANDLE hd); +const char *keyring_get_resource_name (KEYRING_HANDLE hd); +int keyring_lock (KEYRING_HANDLE hd, int yes); +int keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb); +int keyring_update_keyblock (KEYRING_HANDLE hd, KBNODE kb); +int keyring_insert_keyblock (KEYRING_HANDLE hd, KBNODE kb); +int keyring_locate_writable (KEYRING_HANDLE hd); +int keyring_delete_keyblock (KEYRING_HANDLE hd); +int keyring_search_reset (KEYRING_HANDLE hd); +int keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc); +int keyring_rebuild_cache (void *); + +#endif /*GPG_KEYRING_H*/ diff --git a/g10/keyserver-internal.h b/g10/keyserver-internal.h new file mode 100644 index 000000000..9f0d2e8c0 --- /dev/null +++ b/g10/keyserver-internal.h @@ -0,0 +1,22 @@ +/* Keyserver internals */ + +#ifndef _KEYSERVER_INTERNAL_H_ +#define _KEYSERVER_INTERNAL_H_ + +#include +#include "keyserver.h" +#include "iobuf.h" +#include "types.h" + +void parse_keyserver_options(char *options); +int parse_keyserver_uri(char *uri, + const char *configname,unsigned int configlineno); +int keyserver_export(STRLIST users); +int keyserver_import(STRLIST users); +int keyserver_import_fprint(const byte *fprint,size_t fprint_len); +int keyserver_import_keyid(u32 *keyid); +int keyserver_refresh(STRLIST users); +int keyserver_search(STRLIST tokens); +void keyserver_search_prompt(IOBUF buffer,int count,const char *searchstr); + +#endif /* !_KEYSERVER_INTERNAL_H_ */ diff --git a/g10/keyserver.c b/g10/keyserver.c new file mode 100644 index 000000000..9338bfbb7 --- /dev/null +++ b/g10/keyserver.c @@ -0,0 +1,1033 @@ +/* keyserver.c - generic keyserver code + * Copyright (C) 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include + +#include "filter.h" +#include "keydb.h" +#include "status.h" +#include "exec.h" +#include "main.h" +#include "i18n.h" +#include "hkp.h" +#include "iobuf.h" +#include "memory.h" +#include "options.h" +#include "packet.h" +#include "keyserver-internal.h" +#include "util.h" + +#define KEYSERVER_PROTO_VERSION 0 + +#define GET 0 +#define SEND 1 +#define SEARCH 2 + +struct kopts +{ + char *name; + int tell; /* tell remote process about this one */ + int *flag; +} keyserver_opts[]= +{ + {"include-revoked",1,&opt.keyserver_options.include_revoked}, + {"include-disabled",1,&opt.keyserver_options.include_disabled}, + {"include-subkeys",1,&opt.keyserver_options.include_subkeys}, + {"keep-temp-files",0,&opt.keyserver_options.keep_temp_files}, + {"honor-http-proxy",1,&opt.keyserver_options.honor_http_proxy}, + {"broken-http-proxy",1,&opt.keyserver_options.broken_http_proxy}, + {"refresh-add-fake-v3-keyids",0,&opt.keyserver_options.fake_v3_keyids}, + {"auto-key-retrieve",0,&opt.keyserver_options.auto_key_retrieve}, + {NULL} +}; + +void +parse_keyserver_options(char *options) +{ + char *tok=""; + + do + { + struct kopts *kopts=keyserver_opts; + int i,hit=0; + + for(i=0,kopts=keyserver_opts;kopts[i].name;i++) + { + if(ascii_strcasecmp(tok,kopts[i].name)==0) + { + *(kopts[i].flag)=1; + hit=1; + break; + } + else if(ascii_memcasecmp("no-",tok,3)==0 && strlen(tok)>3 && + ascii_strcasecmp(&tok[3],kopts[i].name)==0) + { + *(kopts[i].flag)=0; + hit=1; + break; + } + } + + /* These options need more than just a flag */ + if(!hit) + { + if(ascii_strcasecmp(tok,"verbose")==0) + opt.keyserver_options.verbose++; + else if(ascii_strcasecmp(tok,"no-verbose")==0) + opt.keyserver_options.verbose--; +#ifdef EXEC_TEMPFILE_ONLY + else if(ascii_strcasecmp(tok,"use-temp-files")==0 || + ascii_strcasecmp(tok,"no-use-temp-files")==0) + log_info(_("Warning: keyserver option \"%s\" is not used " + "on this platform\n"),tok); +#else + else if(ascii_strcasecmp(tok,"use-temp-files")==0) + opt.keyserver_options.use_temp_files=1; + else if(ascii_strcasecmp(tok,"no-use-temp-files")==0) + opt.keyserver_options.use_temp_files=0; +#endif + else if(strlen(tok)>0) + add_to_strlist(&opt.keyserver_options.other,tok); + } + + tok=strsep(&options," ,"); + } + while(tok!=NULL); +} + +int +parse_keyserver_uri(char *uri,const char *configname,unsigned int configlineno) +{ + /* Get the scheme */ + + opt.keyserver_scheme=strsep(&uri,":"); + if(uri==NULL) + { + uri=opt.keyserver_scheme; + opt.keyserver_scheme="hkp"; + } + + if(ascii_strcasecmp(opt.keyserver_scheme,"x-broken-hkp")==0) + { + deprecated_warning(configname,configlineno,"x-broken-hkp", + "--keyserver-options ","broken-http-proxy"); + opt.keyserver_scheme="hkp"; + opt.keyserver_options.broken_http_proxy=1; + } + else if(ascii_strcasecmp(opt.keyserver_scheme,"x-hkp")==0) + { + /* Canonicalize this to "hkp" so it works with both the internal + and external keyserver interface. */ + opt.keyserver_scheme="hkp"; + } + + /* Skip the "//", if any */ + if(strlen(uri)>2 && uri[0]=='/' && uri[1]=='/') + uri+=2; + + /* Get the host */ + opt.keyserver_host=strsep(&uri,":/"); + if(uri==NULL) + opt.keyserver_port="0"; + else + { + char *ch; + + /* Get the port */ + opt.keyserver_port=strsep(&uri,"/"); + + /* Ports are digits only */ + ch=opt.keyserver_port; + while(*ch!='\0') + { + if(!isdigit(*ch)) + return G10ERR_BAD_URI; + + ch++; + } + + if(strlen(opt.keyserver_port)==0 || + atoi(opt.keyserver_port)<1 || atoi(opt.keyserver_port)>65535) + return G10ERR_BAD_URI; + } + + /* (any path part of the URI is discarded for now as no keyserver + uses it) */ + + if(opt.keyserver_scheme[0]=='\0' || opt.keyserver_host[0]=='\0') + return G10ERR_BAD_URI; + + return 0; +} + +/* Unquote only the delimiter character and backslashes (\x5C) */ +static void +printunquoted(char *string,char delim) +{ + char *ch=string; + + while(*ch) + { + if(*ch=='\\') + { + int c; + + sscanf(ch,"\\x%02x",&c); + if(c==delim) + { + printf("%c",c); + ch+=3; + } + else if(c=='\\') + { + fputc('\\',stdout); + ch+=3; + } + else + fputc(*ch,stdout); + } + else + fputc(*ch,stdout); + + ch++; + } +} + +static int +print_keyinfo(int count,char *keystring,KEYDB_SEARCH_DESC *desc) +{ + char *certid,*userid,*keytype,*tok; + int flags,keysize=0; + time_t createtime=0,expiretime=0,modifytime=0; + + if((certid=strsep(&keystring,":"))==NULL) + return -1; + + classify_user_id (certid, desc); + if(desc->mode!=KEYDB_SEARCH_MODE_SHORT_KID && + desc->mode!=KEYDB_SEARCH_MODE_LONG_KID && + desc->mode!=KEYDB_SEARCH_MODE_FPR16 && + desc->mode!=KEYDB_SEARCH_MODE_FPR20) + return -1; + + if((tok=strsep(&keystring,":"))==NULL) + return -1; + + userid=utf8_to_native(tok,strlen(tok),0); + + if((tok=strsep(&keystring,":"))==NULL) + return -1; + + flags=atoi(tok); + + if((tok=strsep(&keystring,":"))==NULL) + return -1; + + createtime=atoi(tok); + + if((tok=strsep(&keystring,":"))==NULL) + return -1; + + expiretime=atoi(tok); + + if((tok=strsep(&keystring,":"))==NULL) + return -1; + + modifytime=atoi(tok); + + if((keytype=strsep(&keystring,":"))==NULL) + return -1; + + /* The last one */ + if(keystring!=NULL) + keysize=atoi(keystring); + + printf("(%d)\t",count); + + /* No need to check for control characters, as utf8_to_native does + this for us. */ + printunquoted(userid,':'); + + if(flags&1) + printf(" (revoked)"); + if(flags&2) + printf(" (disabled)"); + + if(keytype[0]) + printf(" %s",keytype); + + if(keysize>0) + printf(" %d",keysize); + + printf("\n\t created %s,",strtimestamp(createtime)); + + if(expiretime>0) + printf(" expires %s,",strtimestamp(expiretime)); + + printf(" key %s\n",certid); + + return 0; +} + +#define KEYSERVER_ARGS_KEEP " -o \"%O\" \"%I\"" +#define KEYSERVER_ARGS_NOKEEP " -o \"%o\" \"%i\"" + +static int +keyserver_spawn(int action,STRLIST list, + KEYDB_SEARCH_DESC *desc,int count,int *prog) +{ + int ret=0,i,gotversion=0,outofband=0; + STRLIST temp; + unsigned int maxlen=256,buflen; + char *command=NULL,*searchstr=NULL; + byte *line=NULL; + struct kopts *kopts; + struct exec_info *spawn; + +#ifdef EXEC_TEMPFILE_ONLY + opt.keyserver_options.use_temp_files=1; +#endif + + /* Build the filename for the helper to execute */ + + command=m_alloc(strlen("gpgkeys_")+strlen(opt.keyserver_scheme)+1); + strcpy(command,"gpgkeys_"); + strcat(command,opt.keyserver_scheme); + + if(opt.keyserver_options.use_temp_files) + { + if(opt.keyserver_options.keep_temp_files) + { + command=m_realloc(command,strlen(command)+ + strlen(KEYSERVER_ARGS_KEEP)+1); + strcat(command,KEYSERVER_ARGS_KEEP); + } + else + { + command=m_realloc(command,strlen(command)+ + strlen(KEYSERVER_ARGS_NOKEEP)+1); + strcat(command,KEYSERVER_ARGS_NOKEEP); + } + + ret=exec_write(&spawn,NULL,command,NULL,0,0); + } + else + ret=exec_write(&spawn,command,NULL,NULL,0,0); + + if(ret) + return ret; + + fprintf(spawn->tochild,"# This is a gpg keyserver communications file\n"); + fprintf(spawn->tochild,"VERSION %d\n",KEYSERVER_PROTO_VERSION); + fprintf(spawn->tochild,"PROGRAM %s\n",VERSION); + fprintf(spawn->tochild,"HOST %s\n",opt.keyserver_host); + + if(atoi(opt.keyserver_port)>0) + fprintf(spawn->tochild,"PORT %s\n",opt.keyserver_port); + + /* Write options */ + + for(i=0,kopts=keyserver_opts;kopts[i].name;i++) + if(*(kopts[i].flag) && kopts[i].tell) + fprintf(spawn->tochild,"OPTION %s\n",kopts[i].name); + + for(i=0;itochild,"OPTION verbose\n"); + + temp=opt.keyserver_options.other; + + for(;temp;temp=temp->next) + fprintf(spawn->tochild,"OPTION %s\n",temp->d); + + switch(action) + { + case GET: + { + fprintf(spawn->tochild,"COMMAND GET\n\n"); + + /* Which keys do we want? */ + + for(i=0;itochild,"0x"); + + for(f=0;ftochild,"%02X",(byte)desc[i].u.fpr[f]); + + fprintf(spawn->tochild,"\n"); + } + else if(desc[i].mode==KEYDB_SEARCH_MODE_FPR16) + { + int f; + + fprintf(spawn->tochild,"0x"); + + for(f=0;f<16;f++) + fprintf(spawn->tochild,"%02X",(byte)desc[i].u.fpr[f]); + + fprintf(spawn->tochild,"\n"); + } + else if(desc[i].mode==KEYDB_SEARCH_MODE_LONG_KID) + fprintf(spawn->tochild,"0x%08lX%08lX\n", + (ulong)desc[i].u.kid[0], + (ulong)desc[i].u.kid[1]); + else + fprintf(spawn->tochild,"0x%08lX\n", + (ulong)desc[i].u.kid[1]); + } + + fprintf(spawn->tochild,"\n"); + + break; + } + + case SEND: + { + STRLIST key; + + /* Note the extra \n here to send an empty keylist block */ + fprintf(spawn->tochild,"COMMAND SEND\n\n\n"); + + for(key=list;key!=NULL;key=key->next) + { + armor_filter_context_t afx; + IOBUF buffer=iobuf_temp(); + + temp=NULL; + add_to_strlist(&temp,key->d); + + memset(&afx,0,sizeof(afx)); + afx.what=1; + iobuf_push_filter(buffer,armor_filter,&afx); + + if(export_pubkeys_stream(buffer,temp,1)==-1) + iobuf_close(buffer); + else + { + iobuf_flush_temp(buffer); + + fprintf(spawn->tochild,"KEY %s BEGIN\n",key->d); + fwrite(iobuf_get_temp_buffer(buffer), + iobuf_get_temp_length(buffer),1,spawn->tochild); + fprintf(spawn->tochild,"KEY %s END\n",key->d); + + iobuf_close(buffer); + } + + free_strlist(temp); + } + + break; + } + + case SEARCH: + { + STRLIST key; + + fprintf(spawn->tochild,"COMMAND SEARCH\n\n"); + + /* Which keys do we want? Remember that the gpgkeys_ program + is going to lump these together into a search string. */ + + for(key=list;key!=NULL;key=key->next) + { + fprintf(spawn->tochild,"%s\n",key->d); + if(key!=list) + { + searchstr=m_realloc(searchstr, + strlen(searchstr)+strlen(key->d)+2); + strcat(searchstr," "); + } + else + { + searchstr=m_alloc(strlen(key->d)+1); + searchstr[0]='\0'; + } + + strcat(searchstr,key->d); + } + + fprintf(spawn->tochild,"\n"); + + break; + } + + default: + log_fatal(_("no keyserver action!\n")); + break; + } + + /* Done sending, so start reading. */ + ret=exec_read(spawn); + if(ret) + goto fail; + + /* Now handle the response */ + + for(;;) + { + char *ptr; + + if(iobuf_read_line(spawn->fromchild,&line,&buflen,&maxlen)==0) + { + ret=G10ERR_READ_FILE; + goto fail; /* i.e. EOF */ + } + + ptr=line; + + if(*ptr=='\r') + ptr++; + + if(*ptr=='\n') + ptr++; + + if(*ptr=='\0') + break; + + if(ascii_memcasecmp(ptr,"VERSION ",8)==0) + { + gotversion=1; + + if(atoi(&ptr[8])!=KEYSERVER_PROTO_VERSION) + { + log_error(_("invalid keyserver protocol (us %d!=handler %d)\n"), + KEYSERVER_PROTO_VERSION,atoi(&ptr[8])); + goto fail; + } + } + else if(ascii_memcasecmp(ptr,"PROGRAM ",8)==0) + { + if(ascii_memcasecmp(&ptr[8],VERSION,strlen(VERSION))!=0) + log_info(_("Warning: keyserver handler from a different " + "version of GnuPG (%s)\n"),&ptr[8]); + } + else if(ascii_memcasecmp(ptr,"OPTION OUTOFBAND",16)==0) + outofband=1; /* Currently the only OPTION */ + } + + m_free(line); + + if(!gotversion) + { + log_error(_("keyserver did not send VERSION\n")); + goto fail; + } + + if(!outofband) + switch(action) + { + case GET: + { + void *stats_handle; + + stats_handle=import_new_stats_handle(); + + /* Slurp up all the key data. In the future, it might be nice + to look for KEY foo OUTOFBAND and FAILED indicators. It's + harmless to ignore them, but ignoring them does make gpg + complain about "no valid OpenPGP data found". One way to + do this could be to continue parsing this line-by-line and + make a temp iobuf for each key. */ + + import_keys_stream(spawn->fromchild,0,stats_handle); + + import_print_stats(stats_handle); + import_release_stats_handle(stats_handle); + + break; + } + + /* Nothing to do here */ + case SEND: + break; + + case SEARCH: + { + line=NULL; + buflen = 0; + maxlen = 80; + /* Look for the COUNT line */ + do + { + if(iobuf_read_line(spawn->fromchild,&line,&buflen,&maxlen)==0) + { + ret=G10ERR_READ_FILE; + goto fail; /* i.e. EOF */ + } + } + while(sscanf(line,"COUNT %d\n",&i)!=1); + + keyserver_search_prompt(spawn->fromchild,i,searchstr); + + break; + } + + default: + log_fatal(_("no keyserver action!\n")); + break; + } + + fail: + *prog=exec_finish(spawn); + + return ret; +} + +static int +keyserver_work(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,int count) +{ + int rc=0,ret=0; + + if(opt.keyserver_scheme==NULL || + opt.keyserver_host==NULL || + opt.keyserver_port==NULL) + { + log_error(_("no keyserver known (use option --keyserver)\n")); + return G10ERR_BAD_URI; + } + +#ifndef USE_EXTERNAL_HKP + /* Use the internal HKP code */ + if(ascii_strcasecmp(opt.keyserver_scheme,"hkp")==0) + { + void *stats_handle = import_new_stats_handle (); + + switch(action) + { + case GET: + for(count--;count>=0;count--) + if(hkp_ask_import(&desc[count],stats_handle)) + log_inc_errorcount(); + break; + case SEND: + return hkp_export(list); + case SEARCH: + return hkp_search(list); + } + + import_print_stats (stats_handle); + import_release_stats_handle (stats_handle); + + return 0; + } +#endif + + /* It's not the internal HKP code, so try and spawn a handler for it */ + + rc=keyserver_spawn(action,list,desc,count,&ret); + if(ret) + { + switch(ret) + { + case KEYSERVER_SCHEME_NOT_FOUND: + log_error(_("no handler for keyserver scheme \"%s\"\n"), + opt.keyserver_scheme); + break; + + case KEYSERVER_NOT_SUPPORTED: + log_error(_("action \"%s\" not supported with keyserver " + "scheme \"%s\"\n"), + action==GET?"get":action==SEND?"send": + action==SEARCH?"search":"unknown", + opt.keyserver_scheme); + + case KEYSERVER_INTERNAL_ERROR: + default: + log_error(_("keyserver internal error\n")); + break; + } + + return G10ERR_KEYSERVER; + } + + if(rc) + { + log_error(_("keyserver communications error: %s\n"),g10_errstr(rc)); + + return rc; + } + + return 0; +} + +int +keyserver_export(STRLIST users) +{ + /* We better ask for confirmation when the user entered --send-keys + without arguments. Sending all keys might not be the thing he + intended to do */ + if (users || opt.batch || opt.answer_yes) + ; + else if ( !cpr_get_answer_is_yes + ("keyserver_export.send_all", + _("Do you really want to send all your " + "public keys to the keyserver? (y/N) "))) + return -1; + + return keyserver_work(SEND,users,NULL,0); +} + +int +keyserver_import(STRLIST users) +{ + KEYDB_SEARCH_DESC *desc; + int num=100,count=0; + int rc=0; + + /* Build a list of key ids */ + desc=m_alloc(sizeof(KEYDB_SEARCH_DESC)*num); + + for(;users;users=users->next) + { + classify_user_id (users->d, &desc[count]); + if(desc[count].mode!=KEYDB_SEARCH_MODE_SHORT_KID && + desc[count].mode!=KEYDB_SEARCH_MODE_LONG_KID && + desc[count].mode!=KEYDB_SEARCH_MODE_FPR16 && + desc[count].mode!=KEYDB_SEARCH_MODE_FPR20) + { + log_error(_("skipping invalid key ID \"%s\"\n"),users->d); + continue; + } + + count++; + if(count==num) + { + num+=100; + desc=m_realloc(desc,sizeof(KEYDB_SEARCH_DESC)*num); + } + } + + if(count>0) + rc=keyserver_work(GET,NULL,desc,count); + + m_free(desc); + + return rc; +} + +int +keyserver_import_fprint(const byte *fprint,size_t fprint_len) +{ + KEYDB_SEARCH_DESC desc; + + memset(&desc,0,sizeof(desc)); + + if(fprint_len==16) + desc.mode=KEYDB_SEARCH_MODE_FPR16; + else if(fprint_len==20) + desc.mode=KEYDB_SEARCH_MODE_FPR20; + else + return -1; + + memcpy(desc.u.fpr,fprint,fprint_len); + + return keyserver_work(GET,NULL,&desc,1); +} + +int +keyserver_import_keyid(u32 *keyid) +{ + KEYDB_SEARCH_DESC desc; + + memset(&desc,0,sizeof(desc)); + + desc.mode=KEYDB_SEARCH_MODE_LONG_KID; + desc.u.kid[0]=keyid[0]; + desc.u.kid[1]=keyid[1]; + + return keyserver_work(GET,NULL,&desc,1); +} + +/* code mostly stolen from do_export_stream */ +static int +keyidlist(STRLIST users,KEYDB_SEARCH_DESC **klist,int *count,int fakev3) +{ + int rc=0,ndesc,num=100; + KBNODE keyblock=NULL,node; + KEYDB_HANDLE kdbhd; + KEYDB_SEARCH_DESC *desc; + STRLIST sl; + + *count=0; + + *klist=m_alloc(sizeof(KEYDB_SEARCH_DESC)*num); + + kdbhd=keydb_new(0); + + if(!users) + { + ndesc = 1; + desc = m_alloc_clear ( ndesc * sizeof *desc); + desc[0].mode = KEYDB_SEARCH_MODE_FIRST; + } + else + { + for (ndesc=0, sl=users; sl; sl = sl->next, ndesc++) + ; + desc = m_alloc ( ndesc * sizeof *desc); + + for (ndesc=0, sl=users; sl; sl = sl->next) + { + if(classify_user_id (sl->d, desc+ndesc)) + ndesc++; + else + log_error (_("key `%s' not found: %s\n"), + sl->d, g10_errstr (G10ERR_INV_USER_ID)); + } + } + + while (!(rc = keydb_search (kdbhd, desc, ndesc))) + { + if (!users) + desc[0].mode = KEYDB_SEARCH_MODE_NEXT; + + /* read the keyblock */ + rc = keydb_get_keyblock (kdbhd, &keyblock ); + if( rc ) + { + log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); + goto leave; + } + + if((node=find_kbnode(keyblock,PKT_PUBLIC_KEY))) + { + /* This is to work around a bug in some keyservers (pksd and + OKS) that calculate v4 RSA keyids as if they were v3 RSA. + The answer is to refresh both the correct v4 keyid + (e.g. 99242560) and the fake v3 keyid (e.g. 68FDDBC7). + This only happens for key refresh using the HKP scheme + and if the refresh-add-fake-v3-keyids keyserver option is + set. */ + if(fakev3 && is_RSA(node->pkt->pkt.public_key->pubkey_algo) && + node->pkt->pkt.public_key->version>=4) + { + (*klist)[*count].mode=KEYDB_SEARCH_MODE_LONG_KID; + mpi_get_keyid(node->pkt->pkt.public_key->pkey[0], + (*klist)[*count].u.kid); + (*count)++; + + if(*count==num) + { + num+=100; + *klist=m_realloc(*klist,sizeof(KEYDB_SEARCH_DESC)*num); + } + } + + /* v4 keys get full fingerprints. v3 keys get long keyids. + This is because it's easy to calculate any sort of key id + from a v4 fingerprint, but not a v3 fingerprint. */ + + if(node->pkt->pkt.public_key->version<4) + { + (*klist)[*count].mode=KEYDB_SEARCH_MODE_LONG_KID; + keyid_from_pk(node->pkt->pkt.public_key, + (*klist)[*count].u.kid); + } + else + { + size_t dummy; + + (*klist)[*count].mode=KEYDB_SEARCH_MODE_FPR20; + fingerprint_from_pk(node->pkt->pkt.public_key, + (*klist)[*count].u.fpr,&dummy); + } + + (*count)++; + + if(*count==num) + { + num+=100; + *klist=m_realloc(*klist,sizeof(KEYDB_SEARCH_DESC)*num); + } + } + } + + if(rc==-1) + rc=0; + + leave: + m_free(desc); + keydb_release(kdbhd); + release_kbnode(keyblock); + + return rc; +} + +/* Note this is different than the original HKP refresh. It allows + usernames to refresh only part of the keyring. */ + +int +keyserver_refresh(STRLIST users) +{ + int rc,count,fakev3=0; + KEYDB_SEARCH_DESC *desc; + + /* We switch merge_only on during a refresh, as 'refresh' should + never import new keys, even if their keyids match. Is it worth + preserving the old merge_only value here? */ + opt.merge_only=1; + + /* If refresh_add_fake_v3_keyids is on and it's a HKP or MAILTO + scheme, then enable fake v3 keyid generation. */ + if(opt.keyserver_options.fake_v3_keyids && opt.keyserver_scheme && + (ascii_strcasecmp(opt.keyserver_scheme,"hkp")==0 || + ascii_strcasecmp(opt.keyserver_scheme,"mailto")==0)) + fakev3=1; + + rc=keyidlist(users,&desc,&count,fakev3); + if(rc) + return rc; + + if(count==1) + log_info(_("%d key to refresh\n"),count); + else + log_info(_("%d keys to refresh\n"),count); + + if(count>0) + rc=keyserver_work(GET,NULL,desc,count); + + m_free(desc); + + return 0; +} + +int +keyserver_search(STRLIST tokens) +{ + if(tokens) + return keyserver_work(SEARCH,tokens,NULL,0); + else + return 0; +} + +/* Count and searchstr are just for cosmetics. If the count is too + small, it will grow safely. If negative it disables the "Key x-y + of z" messages. */ +void +keyserver_search_prompt(IOBUF buffer,int count,const char *searchstr) +{ + int i=0,validcount=1; + unsigned int maxlen=256,buflen=0; + KEYDB_SEARCH_DESC *desc; + byte *line=NULL; + char *answer; + + if(count==0) + goto notfound; + + if(count<0) + { + validcount=0; + count=10; + } + + desc=m_alloc(count*sizeof(KEYDB_SEARCH_DESC)); + + /* Read each line and show it to the user */ + + for(;;) + { + int rl; + + if(validcount && i%10==0) + { + printf("Keys %d-%d of %d",i+1,(i+100) + { + if(print_keyinfo(i+1,line,&desc[i])==0) + { + i++; + + if(i==count) + { + count+=10; + desc=m_realloc(desc,count*sizeof(KEYDB_SEARCH_DESC)); + validcount=0; + } + } + else + continue; + } + + if(rl==0 && i==0) + { + count=0; + break; + } + + if(i%10==0 || rl==0) + { + answer=cpr_get_no_help("keysearch.prompt", + _("Enter number(s), N)ext, or Q)uit > ")); + /* control-d */ + if(answer[0]=='\x04') + { + printf("Q\n"); + answer[0]='q'; + } + + if(answer[0]=='q' || answer[0]=='Q') + { + m_free(answer); + break; + } + else if(atoi(answer)>=1 && atoi(answer)<=i) + { + char *split=answer,*num; + + while((num=strsep(&split," ,"))!=NULL) + if(atoi(num)>=1 && atoi(num)<=i) + keyserver_work(GET,NULL,&desc[atoi(num)-1],1); + + m_free(answer); + break; + } + } + } + + m_free(desc); + m_free(line); + + notfound: + if(count==0) + { + if(searchstr) + log_info(_("key \"%s\" not found on keyserver\n"),searchstr); + else + log_info(_("key not found on keyserver\n")); + return; + } +} diff --git a/g10/ks-proto.c b/g10/ks-proto.c index 43abf468a..aa7dc56e0 100644 --- a/g10/ks-proto.c +++ b/g10/ks-proto.c @@ -1,5 +1,5 @@ /* ks-proto.c keyserver protocol handling - * Copyright (C) 1998 Free Software Foundation, Inc. + * Copyright (C) 1998 Free Software Foundation, Inc. * * This file is part of GnuPG. * diff --git a/g10/ks-proto.h b/g10/ks-proto.h index 6e8bbad0b..cd55b47e2 100644 --- a/g10/ks-proto.h +++ b/g10/ks-proto.h @@ -1,5 +1,5 @@ /* ks-proto.h - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_KS_PROTO_H -#define GPG_KS_PROTO_H +#ifndef G10_KS_PROTO_H +#define G10_KS_PROTO_H -#endif /*GPG_KS_PROTO_H*/ +#endif /*G10_KS_PROTO_H*/ diff --git a/g10/main.h b/g10/main.h index d199c5484..e7153bd55 100644 --- a/g10/main.h +++ b/g10/main.h @@ -1,5 +1,5 @@ /* main.h - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -17,30 +17,39 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_MAIN_H -#define GPG_MAIN_H - -#include -#include "basicdefs.h" +#ifndef G10_MAIN_H +#define G10_MAIN_H +#include "types.h" #include "iobuf.h" +#include "mpi.h" +#include "cipher.h" #include "keydb.h" -#define DEFAULT_CIPHER_ALGO GCRY_CIPHER_BLOWFISH -#define DEFAULT_PUBKEY_ALGO GCRY_PUBKEY_ELGAMAL -#define DEFAULT_DIGEST_ALGO GCRY_MD_RMD160 +#define DEFAULT_CIPHER_ALGO CIPHER_ALGO_CAST5 +#define DEFAULT_PUBKEY_ALGO PUBKEY_ALGO_ELGAMAL +#define DEFAULT_DIGEST_ALGO DIGEST_ALGO_SHA1 +#define DEFAULT_COMPRESS_ALGO 1 -#define is_RSA(a) ((a)==GCRY_PK_RSA || (a)==GCRY_PK_RSA_E \ - || (a)==GCRY_PK_RSA_S ) -#define is_ELGAMAL(a) ((a)==GCRY_PK_ELG || (a)==GCRY_PK_ELG_E) +typedef struct { + int header_okay; + PK_LIST pk_list; + cipher_filter_context_t cfx; +} encrypt_filter_context_t; +struct groupitem +{ + char *name; + STRLIST values; + struct groupitem *next; +}; -/*-- gpg.c --*/ -extern int gpg_errors_seen; +/*-- g10.c --*/ +extern int g10_errors_seen; #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) - void gpg_exit(int rc) __attribute__ ((noreturn)); + void g10_exit(int rc) __attribute__ ((noreturn)); #else - void gpg_exit(int rc); + void g10_exit(int rc); #endif void print_pubkey_algo_note( int algo ); void print_cipher_algo_note( int algo ); @@ -55,24 +64,29 @@ int disable_core_dumps(void); u16 checksum_u16( unsigned n ); u16 checksum( byte *p, unsigned n ); u16 checksum_mpi( MPI a ); +u16 checksum_mpi_counted_nbits( MPI a ); u32 buffer_to_u32( const byte *buffer ); - -int mpi_write( IOBUF out, GCRY_MPI a ); -int mpi_write_opaque( IOBUF out, MPI a ); -GCRY_MPI mpi_read(IOBUF inp, unsigned int *ret_nread, int secure ); -GCRY_MPI mpi_read_opaque(IOBUF inp, unsigned int *ret_nread ); -int mpi_print( FILE *fp, MPI a, int mode ); - +const byte *get_session_marker( size_t *rlen ); int openpgp_cipher_test_algo( int algo ); int openpgp_pk_test_algo( int algo, unsigned int usage_flags ); int openpgp_pk_algo_usage ( int algo ); int openpgp_md_test_algo( int algo ); +int check_permissions(const char *path,int extension,int checkonly); +void idea_cipher_warn( int show ); -int pubkey_get_npkey( int algo ); -int pubkey_get_nskey( int algo ); -int pubkey_get_nsig( int algo ); -int pubkey_get_nenc( int algo ); -unsigned int pubkey_nbits( int algo, MPI *pkey ); +struct expando_args +{ + PKT_public_key *pk; + PKT_secret_key *sk; + byte imagetype; +}; + +char *pct_expando(const char *string,struct expando_args *args); +int hextobyte( const char *s ); +void deprecated_warning(const char *configname,unsigned int configlineno, + const char *option,const char *repl1,const char *repl2); +const char *compress_algo_to_string(int algo); +int check_compress_algo(int algo); /*-- helptext.c --*/ void display_online_help( const char *keyword ); @@ -81,15 +95,17 @@ void display_online_help( const char *keyword ); int encode_symmetric( const char *filename ); int encode_store( const char *filename ); int encode_crypt( const char *filename, STRLIST remusr ); +void encode_crypt_files(int nfiles, char **files, STRLIST remusr); int encrypt_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); /*-- sign.c --*/ -int complete_sig( PKT_signature *sig, PKT_secret_key *sk, GCRY_MD_HD md ); +int complete_sig( PKT_signature *sig, PKT_secret_key *sk, MD_HANDLE md ); int sign_file( STRLIST filenames, int detached, STRLIST locusr, int do_encrypt, STRLIST remusr, const char *outfile ); int clearsign_file( const char *fname, STRLIST locusr, const char *outfile ); +int sign_symencrypt_file (const char *fname, STRLIST locusr); /*-- sig-check.c --*/ int check_key_signature( KBNODE root, KBNODE node, int *is_selfsig ); @@ -97,17 +113,22 @@ int check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig, u32 *r_expiredate, int *r_expired ); /*-- delkey.c --*/ -int delete_key( const char *username, int secure ); +int delete_keys( STRLIST names, int secret, int allow_both ); /*-- keyedit.c --*/ void keyedit_menu( const char *username, STRLIST locusr, STRLIST cmds, int sign_mode ); /*-- keygen.c --*/ +u32 ask_expire_interval(int object); u32 ask_expiredate(void); void generate_keypair( const char *fname ); +int keygen_set_std_prefs (const char *string,int personal); +char *keygen_get_std_prefs (void); int keygen_add_key_expire( PKT_signature *sig, void *opaque ); int keygen_add_std_prefs( PKT_signature *sig, void *opaque ); +int keygen_upd_std_prefs( PKT_signature *sig, void *opaque ); +int keygen_add_revkey(PKT_signature *sig, void *opaque); int generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock ); /*-- openfile.c --*/ @@ -121,16 +142,20 @@ void try_make_homedir( const char *fname ); /*-- seskey.c --*/ void make_session_key( DEK *dek ); MPI encode_session_key( DEK *dek, unsigned nbits ); -MPI encode_md_value( int pubkey_algo, GCRY_MD_HD md, +MPI encode_md_value( int pubkey_algo, MD_HANDLE md, int hash_algo, unsigned nbits, int v3compathack ); /*-- comment.c --*/ -KBNODE make_comment_node_from_buffer( const char *s, size_t n ); KBNODE make_comment_node( const char *s ); +KBNODE make_mpi_comment_node( const char *s, MPI a ); /*-- import.c --*/ -void import_keys( char **fnames, int nnames, int fast ); -int import_keys_stream( IOBUF inp, int fast ); +void import_keys( char **fnames, int nnames, int fast, void *stats_hd ); +int import_keys_stream( IOBUF inp, int fast, void *stats_hd ); +void *import_new_stats_handle (void); +void import_release_stats_handle (void *p); +void import_print_stats (void *hd); + int collapse_uids( KBNODE *keyblock ); /*-- export.c --*/ @@ -146,6 +171,7 @@ int enarmor_file( const char *fname ); /*-- revoke.c --*/ struct revocation_reason_info; int gen_revoke( const char *uname ); +int gen_desig_revoke( const char *uname ); int revocation_reason_build_cb( PKT_signature *sig, void *opaque ); struct revocation_reason_info * ask_revocation_reason( int key_rev, int cert_rev, int hint ); @@ -154,22 +180,32 @@ void release_revocation_reason_info( struct revocation_reason_info *reason ); /*-- keylist.c --*/ void public_key_list( STRLIST list ); void secret_key_list( STRLIST list ); +void list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque ); +void print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode); +void show_policy_url(PKT_signature *sig,int indent); +void show_notation(PKT_signature *sig,int indent); +void set_attrib_fd(int fd); /*-- verify.c --*/ +void print_file_status( int status, const char *name, int what ); int verify_signatures( int nfiles, char **files ); int verify_files( int nfiles, char **files ); /*-- decrypt.c --*/ int decrypt_message( const char *filename ); +void decrypt_messages(int nfiles, char **files); /*-- plaintext.c --*/ -int hash_datafiles( GCRY_MD_HD md, GCRY_MD_HD md2, +int hash_datafiles( MD_HANDLE md, MD_HANDLE md2, STRLIST files, const char *sigfilename, int textmode ); +/*-- pipemode.c --*/ +void run_in_pipemode (void); + /*-- signal.c --*/ void init_signals(void); void pause_on_sigusr( int which ); void block_all_signals(void); void unblock_all_signals(void); -#endif /*GPG_MAIN_H*/ +#endif /*G10_MAIN_H*/ diff --git a/g10/mainproc.c b/g10/mainproc.c index 7b04b3e6f..bcd1c1c01 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -1,5 +1,5 @@ /* mainproc.c - handle packets - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,18 +25,19 @@ #include #include -#include #include "packet.h" #include "iobuf.h" +#include "memory.h" #include "options.h" #include "util.h" +#include "cipher.h" #include "keydb.h" #include "filter.h" #include "main.h" #include "status.h" #include "i18n.h" #include "trustdb.h" -#include "hkp.h" +#include "keyserver-internal.h" struct kidlist_item { @@ -69,8 +70,11 @@ struct mainproc_context { IOBUF iobuf; /* used to get the filename etc. */ int trustletter; /* temp usage in list_node */ ulong local_id; /* ditto */ - struct kidlist_item *failed_pkenc; /* list of packets for which - we do not have a secret key */ + struct kidlist_item *pkenc_list; /* list of encryption packets */ + struct { + int op; + int stop_now; + } pipemode; }; @@ -87,13 +91,18 @@ release_list( CTX c ) return; proc_tree(c, c->list ); release_kbnode( c->list ); - while( c->failed_pkenc ) { - struct kidlist_item *tmp = c->failed_pkenc->next; - gcry_free( c->failed_pkenc ); - c->failed_pkenc = tmp; + while( c->pkenc_list ) { + struct kidlist_item *tmp = c->pkenc_list->next; + m_free( c->pkenc_list ); + c->pkenc_list = tmp; } - c->failed_pkenc = NULL; + c->pkenc_list = NULL; c->list = NULL; + c->have_data = 0; + c->last_was_session_key = 0; + c->pipemode.op = 0; + c->pipemode.stop_now = 0; + m_free(c->dek); c->dek = NULL; } @@ -103,8 +112,14 @@ add_onepass_sig( CTX c, PACKET *pkt ) KBNODE node; if( c->list ) { /* add another packet */ - if( c->list->pkt->pkttype != PKT_ONEPASS_SIG ) { - log_error("add_onepass_sig: another packet is in the way\n"); + /* We can only append another onepass packet if the list + * does contain only onepass packets */ + for( node=c->list; node && node->pkt->pkttype == PKT_ONEPASS_SIG; + node = node->next ) + ; + if( node ) { + /* this is not the case, so we flush the current thing and + * allow this packet to start a new verification thing */ release_list( c ); c->list = new_kbnode( pkt ); } @@ -118,6 +133,48 @@ add_onepass_sig( CTX c, PACKET *pkt ) } +static int +add_gpg_control( CTX c, PACKET *pkt ) +{ + if ( pkt->pkt.gpg_control->control == CTRLPKT_CLEARSIGN_START ) { + /* New clear text signature. + * Process the last one and reset everything */ + release_list(c); + } + else if ( pkt->pkt.gpg_control->control == CTRLPKT_PIPEMODE ) { + /* Pipemode control packet */ + if ( pkt->pkt.gpg_control->datalen < 2 ) + log_fatal ("invalid pipemode control packet length\n"); + if (pkt->pkt.gpg_control->data[0] == 1) { + /* start the whole thing */ + assert ( !c->list ); /* we should be in a pretty virgin state */ + assert ( !c->pipemode.op ); + c->pipemode.op = pkt->pkt.gpg_control->data[1]; + } + else if (pkt->pkt.gpg_control->data[0] == 2) { + /* the signed material follows in a plaintext packet */ + assert ( c->pipemode.op == 'B' ); + } + else if (pkt->pkt.gpg_control->data[0] == 3) { + assert ( c->pipemode.op == 'B' ); + release_list (c); + /* and tell the outer loop to terminate */ + c->pipemode.stop_now = 1; + } + else + log_fatal ("invalid pipemode control packet code\n"); + return 0; /* no need to store the packet */ + } + + if( c->list ) /* add another packet */ + add_kbnode( c->list, new_kbnode( pkt )); + else /* insert the first one */ + c->list = new_kbnode( pkt ); + + return 1; +} + + static int add_user_id( CTX c, PACKET *pkt ) @@ -180,6 +237,32 @@ add_signature( CTX c, PACKET *pkt ) return 1; } +static void +symkey_decrypt_sesskey( DEK *dek, byte *sesskey, size_t slen ) +{ + CIPHER_HANDLE hd; + + if ( slen < 17 || slen > 33 ) { + log_error( "weird size for an encrypted session key (%d)\n", slen ); + return; + } + hd = cipher_open( dek->algo, CIPHER_MODE_CFB, 1 ); + cipher_setkey( hd, dek->key, dek->keylen ); + cipher_setiv( hd, NULL, 0 ); + cipher_decrypt( hd, sesskey, sesskey, slen ); + cipher_close( hd ); + /* check first byte (the cipher algo) */ + if ( sesskey[0] > 10 ) { + log_error( "invalid symkey algorithm detected (%d)\n", sesskey[0] ); + return; + } + /* now we replace the dek components with the real session key + to decrypt the contents of the sequencing packet. */ + dek->keylen = cipher_get_keylen( sesskey[0] ) / 8; + dek->algo = sesskey[0]; + memcpy( dek->key, sesskey + 1, dek->keylen ); + /*log_hexdump( "thekey", dek->key, dek->keylen );*/ +} static void proc_symkey_enc( CTX c, PACKET *pkt ) @@ -187,12 +270,28 @@ proc_symkey_enc( CTX c, PACKET *pkt ) PKT_symkey_enc *enc; enc = pkt->pkt.symkey_enc; - if( enc->seskeylen ) - log_error( "symkey_enc packet with session keys are not supported!\n"); + if (!enc) + log_error ("invalid symkey encrypted packet\n"); else { + int algo = enc->cipher_algo; + const char *s; + + s = cipher_algo_to_string (algo); + if( s ) + log_info(_("%s encrypted data\n"), s ); + else + log_info(_("encrypted with unknown algorithm %d\n"), algo ); + c->last_was_session_key = 2; - c->dek = passphrase_to_dek( NULL, 0, enc->cipher_algo, &enc->s2k, 0 ); + if ( opt.list_only ) + goto leave; + c->dek = passphrase_to_dek( NULL, 0, algo, &enc->s2k, 0, NULL ); + if (c->dek) + c->dek->algo_info_printed = 1; + if ( c->dek && enc->seskeylen ) + symkey_decrypt_sesskey( c->dek, enc->seskey, enc->seskeylen ); } +leave: free_packet(pkt); } @@ -218,42 +317,64 @@ proc_pubkey_enc( CTX c, PACKET *pkt ) write_status_text( STATUS_ENC_TO, buf ); } - - if( is_ELGAMAL(enc->pubkey_algo) - || enc->pubkey_algo == GCRY_PK_DSA + if( !opt.list_only && opt.override_session_key ) { + /* It does not make much sense to store the session key in + * secure memory because it has already been passed on the + * command line and the GCHQ knows about it */ + c->dek = m_alloc_clear( sizeof *c->dek ); + result = get_override_session_key ( c->dek, opt.override_session_key ); + if ( result ) { + m_free(c->dek); c->dek = NULL; + } + } + else if( is_ELGAMAL(enc->pubkey_algo) + || enc->pubkey_algo == PUBKEY_ALGO_DSA || is_RSA(enc->pubkey_algo) ) { if ( !c->dek && ((!enc->keyid[0] && !enc->keyid[1]) + || opt.try_all_secrets || !seckey_available( enc->keyid )) ) { if( opt.list_only ) result = -1; else { - c->dek = gcry_xmalloc_secure( sizeof *c->dek ); + c->dek = m_alloc_secure_clear( sizeof *c->dek ); if( (result = get_session_key( enc, c->dek )) ) { /* error: delete the DEK */ - gcry_free(c->dek); c->dek = NULL; + m_free(c->dek); c->dek = NULL; } } } else - result = GPGERR_NO_SECKEY; + result = G10ERR_NO_SECKEY; } else - result = GPGERR_PUBKEY_ALGO; + result = G10ERR_PUBKEY_ALGO; if( result == -1 ) ; - else if( !result ) { - if( opt.verbose > 1 ) - log_info( _("public key encrypted data: good DEK\n") ); - } - else { /* store it for later display */ - struct kidlist_item *x = gcry_xmalloc( sizeof *x ); - x->kid[0] = enc->keyid[0]; - x->kid[1] = enc->keyid[1]; - x->pubkey_algo = enc->pubkey_algo; - x->reason = result; - x->next = c->failed_pkenc; - c->failed_pkenc = x; + else { + if( !result ) { + if( opt.verbose > 1 ) + log_info( _("public key encrypted data: good DEK\n") ); + if ( opt.show_session_key ) { + int i; + char *buf = m_alloc ( c->dek->keylen*2 + 20 ); + sprintf ( buf, "%d:", c->dek->algo ); + for(i=0; i < c->dek->keylen; i++ ) + sprintf(buf+strlen(buf), "%02X", c->dek->key[i] ); + log_info( "session key: \"%s\"\n", buf ); + write_status_text ( STATUS_SESSION_KEY, buf ); + } + } + /* store it for later display */ + { + struct kidlist_item *x = m_alloc( sizeof *x ); + x->kid[0] = enc->keyid[0]; + x->kid[1] = enc->keyid[1]; + x->pubkey_algo = enc->pubkey_algo; + x->reason = result; + x->next = c->pkenc_list; + c->pkenc_list = x; + } } free_packet(pkt); } @@ -265,11 +386,19 @@ proc_pubkey_enc( CTX c, PACKET *pkt ) * not decrypt. */ static void -print_failed_pkenc( struct kidlist_item *list ) +print_pkenc_list( struct kidlist_item *list, int failed ) { for( ; list; list = list->next ) { - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - const char *algstr = gcry_pk_algo_name( list->pubkey_algo ); + PKT_public_key *pk; + const char *algstr; + + if ( failed && !list->reason ) + continue; + if ( !failed && list->reason ) + continue; + + algstr = pubkey_algo_to_string( list->pubkey_algo ); + pk = m_alloc_clear( sizeof *pk ); if( !algstr ) algstr = "[?]"; @@ -282,8 +411,8 @@ print_failed_pkenc( struct kidlist_item *list ) strtimestamp(pk->timestamp) ); fputs(" \"", log_stream() ); p = get_user_id( list->kid, &n ); - print_string( log_stream(), p, n, '"' ); - gcry_free(p); + print_utf8_string2 ( log_stream(), p, n, '"' ); + m_free(p); fputs("\"\n", log_stream() ); } else { @@ -292,8 +421,7 @@ print_failed_pkenc( struct kidlist_item *list ) } free_public_key( pk ); - if( list->reason == GPGERR_NO_SECKEY ) { - log_info(_("no secret key for decryption available\n")); + if( list->reason == G10ERR_NO_SECKEY ) { if( is_status_enabled() ) { char buf[20]; sprintf(buf,"%08lX%08lX", (ulong)list->kid[0], @@ -301,9 +429,9 @@ print_failed_pkenc( struct kidlist_item *list ) write_status_text( STATUS_NO_SECKEY, buf ); } } - else + else if (list->reason) log_error(_("public key decryption failed: %s\n"), - gpg_errstr(list->reason)); + g10_errstr(list->reason)); } } @@ -313,7 +441,10 @@ proc_encrypted( CTX c, PACKET *pkt ) { int result = 0; - print_failed_pkenc( c->failed_pkenc ); + if (!opt.quiet) { + print_pkenc_list ( c->pkenc_list, 1 ); + print_pkenc_list ( c->pkenc_list, 0 ); + } write_status( STATUS_BEGIN_DECRYPTION ); @@ -321,19 +452,43 @@ proc_encrypted( CTX c, PACKET *pkt ) if( opt.list_only ) result = -1; else if( !c->dek && !c->last_was_session_key ) { - /* assume this is old conventional encrypted data - * Actually we should use IDEA and MD5 in this case, but because - * IDEA is patented we can't do so */ - c->dek = passphrase_to_dek( NULL, 0, - opt.def_cipher_algo ? opt.def_cipher_algo - : DEFAULT_CIPHER_ALGO, NULL, 0 ); + int algo; + STRING2KEY s2kbuf, *s2k = NULL; + + /* assume this is old style conventional encrypted data */ + if ( (algo = opt.def_cipher_algo)) + log_info (_("assuming %s encrypted data\n"), + cipher_algo_to_string(algo)); + else if ( check_cipher_algo(CIPHER_ALGO_IDEA) ) { + algo = opt.def_cipher_algo; + if (!algo) + algo = opt.s2k_cipher_algo; + idea_cipher_warn(1); + log_info (_("IDEA cipher unavailable, " + "optimistically attempting to use %s instead\n"), + cipher_algo_to_string(algo)); + } + else { + algo = CIPHER_ALGO_IDEA; + if (!opt.def_digest_algo) { + /* If no digest is given we assume MD5 */ + s2kbuf.mode = 0; + s2kbuf.hash_algo = DIGEST_ALGO_MD5; + s2k = &s2kbuf; + } + log_info (_("assuming %s encrypted data\n"), "IDEA"); + } + + c->dek = passphrase_to_dek ( NULL, 0, algo, s2k, 0, NULL ); + if (c->dek) + c->dek->algo_info_printed = 1; } else if( !c->dek ) - result = GPGERR_NO_SECKEY; + result = G10ERR_NO_SECKEY; if( !result ) result = decrypt_data( c, pkt->pkt.encrypted, c->dek ); - gcry_free(c->dek); c->dek = NULL; + m_free(c->dek); c->dek = NULL; if( result == -1 ) ; else if( !result ) { @@ -343,13 +498,13 @@ proc_encrypted( CTX c, PACKET *pkt ) if( pkt->pkt.encrypted->mdc_method ) write_status( STATUS_GOODMDC ); } - else if( result == GPGERR_BAD_SIGN ) { + else if( result == G10ERR_BAD_SIGN ) { log_error(_("WARNING: encrypted message has been manipulated!\n")); write_status( STATUS_BADMDC ); } else { write_status( STATUS_DECRYPTION_FAILED ); - log_error(_("decryption failed: %s\n"), gpg_errstr(result)); + log_error(_("decryption failed: %s\n"), g10_errstr(result)); /* Hmmm: does this work when we have encrypted using multiple * ways to specify the session key (symmmetric and PK)*/ } @@ -372,9 +527,7 @@ proc_plaintext( CTX c, PACKET *pkt ) else if( opt.verbose ) log_info(_("original file name='%.*s'\n"), pt->namelen, pt->name); free_md_filter_context( &c->mfx ); - c->mfx.md = gcry_md_open( 0, 0); - if( !c->mfx.md ) - BUG(); + c->mfx.md = md_open( 0, 0); /* fixme: we may need to push the textfilter if we have sigclass 1 * and no armoring - Not yet tested * Hmmm, why don't we need it at all if we have sigclass 1 @@ -385,9 +538,9 @@ proc_plaintext( CTX c, PACKET *pkt ) for(n=c->list; n; n = n->next ) { if( n->pkt->pkttype == PKT_ONEPASS_SIG ) { if( n->pkt->pkt.onepass_sig->digest_algo ) { - gcry_md_enable( c->mfx.md, n->pkt->pkt.onepass_sig->digest_algo ); + md_enable( c->mfx.md, n->pkt->pkt.onepass_sig->digest_algo ); if( !any && n->pkt->pkt.onepass_sig->digest_algo - == GCRY_MD_MD5 ) + == DIGEST_ALGO_MD5 ) only_md5 = 1; else only_md5 = 0; @@ -395,27 +548,31 @@ proc_plaintext( CTX c, PACKET *pkt ) } if( n->pkt->pkt.onepass_sig->sig_class != 0x01 ) only_md5 = 0; - - /* Check whether this is a cleartext signature. We assume that - * we have one if the sig_class is 1 and the keyid is 0, that - * are the faked packets produced by armor.c. There is a - * possibility that this fails, but there is no other easy way - * to do it. (We could use a special packet type to indicate - * this, but this may also be faked - it simply can't be verified - * and is _no_ security issue) - */ - if( n->pkt->pkt.onepass_sig->sig_class == 0x01 - && !n->pkt->pkt.onepass_sig->keyid[0] - && !n->pkt->pkt.onepass_sig->keyid[1] ) - clearsig = 1; } + else if( n->pkt->pkttype == PKT_GPG_CONTROL + && n->pkt->pkt.gpg_control->control + == CTRLPKT_CLEARSIGN_START ) { + size_t datalen = n->pkt->pkt.gpg_control->datalen; + const byte *data = n->pkt->pkt.gpg_control->data; + + /* check that we have at least the sigclass and one hash */ + if ( datalen < 2 ) + log_fatal("invalid control packet CTRLPKT_CLEARSIGN_START\n"); + /* Note that we don't set the clearsig flag for not-dash-escaped + * documents */ + clearsig = (*data == 0x01); + for( data++, datalen--; datalen; datalen--, data++ ) + md_enable( c->mfx.md, *data ); + any = 1; + break; /* no pass signature pakets are expected */ + } } if( !any && !opt.skip_verify ) { /* no onepass sig packet: enable all standard algos */ - gcry_md_enable( c->mfx.md, GCRY_MD_RMD160 ); - gcry_md_enable( c->mfx.md, GCRY_MD_SHA1 ); - gcry_md_enable( c->mfx.md, GCRY_MD_MD5 ); + md_enable( c->mfx.md, DIGEST_ALGO_RMD160 ); + md_enable( c->mfx.md, DIGEST_ALGO_SHA1 ); + md_enable( c->mfx.md, DIGEST_ALGO_MD5 ); } if( opt.pgp2_workarounds && only_md5 && !opt.skip_verify ) { /* This is a kludge to work around a bug in pgp2. It does only @@ -423,25 +580,36 @@ proc_plaintext( CTX c, PACKET *pkt ) * pgp mails we could see whether there is the signature packet * in front of the plaintext. If someone needs this, send me a patch. */ - c->mfx.md2 = gcry_md_open( GCRY_MD_MD5, 0); - if( !c->mfx.md2 ) - BUG(); + c->mfx.md2 = md_open( DIGEST_ALGO_MD5, 0); } if ( DBG_HASHING ) { - gcry_md_start_debug( c->mfx.md, "verify" ); + md_start_debug( c->mfx.md, "verify" ); if ( c->mfx.md2 ) - gcry_md_start_debug( c->mfx.md2, "verify2" ); + md_start_debug( c->mfx.md2, "verify2" ); } - rc = handle_plaintext( pt, &c->mfx, c->sigs_only, clearsig ); - if( rc == GPGERR_CREATE_FILE && !c->sigs_only) { - /* can't write output but we hash it anyway to - * check the signature */ - rc = handle_plaintext( pt, &c->mfx, 1, clearsig ); + if ( c->pipemode.op == 'B' ) + rc = handle_plaintext( pt, &c->mfx, 1, 0 ); + else { + rc = handle_plaintext( pt, &c->mfx, c->sigs_only, clearsig ); + if( rc == G10ERR_CREATE_FILE && !c->sigs_only) { + /* can't write output but we hash it anyway to + * check the signature */ + rc = handle_plaintext( pt, &c->mfx, 1, clearsig ); + } } if( rc ) - log_error( "handle plaintext failed: %s\n", gpg_errstr(rc)); + log_error( "handle plaintext failed: %s\n", g10_errstr(rc)); free_packet(pkt); c->last_was_session_key = 0; + + /* We add a marker control packet instead of the plaintext packet. + * This is so that we can later detect invalid packet sequences. + */ + n = new_kbnode (create_gpg_control (CTRLPKT_PLAINTEXT_MARK, NULL, 0)); + if (c->list) + add_kbnode (c->list, n); + else + c->list = n; } @@ -472,7 +640,7 @@ proc_compressed( CTX c, PACKET *pkt ) else rc = handle_compressed( c, zd, NULL, NULL ); if( rc ) - log_error("uncompressing failed: %s\n", gpg_errstr(rc)); + log_error("uncompressing failed: %s\n", g10_errstr(rc)); free_packet(pkt); c->last_was_session_key = 0; } @@ -482,11 +650,15 @@ proc_compressed( CTX c, PACKET *pkt ) * Returns: 0 = valid signature or an error code */ static int -do_check_sig( CTX c, KBNODE node, int *is_selfsig ) +do_check_sig( CTX c, KBNODE node, int *is_selfsig, int *is_expkey ) { PKT_signature *sig; - GCRY_MD_HD md = NULL, md2 = NULL; - int algo, rc; + MD_HANDLE md = NULL, md2 = NULL; + int algo, rc, dum2; + u32 dummy; + + if(!is_expkey) + is_expkey=&dum2; assert( node->pkt->pkttype == PKT_SIGNATURE ); if( is_selfsig ) @@ -494,42 +666,35 @@ do_check_sig( CTX c, KBNODE node, int *is_selfsig ) sig = node->pkt->pkt.signature; algo = sig->digest_algo; - if( (rc=openpgp_md_test_algo(algo)) ) + if( (rc=check_digest_algo(algo)) ) return rc; if( sig->sig_class == 0x00 ) { if( c->mfx.md ) - md = gcry_md_copy( c->mfx.md ); + md = md_copy( c->mfx.md ); else /* detached signature */ - md = gcry_md_open( 0, 0 ); /* signature_check() will enable the md*/ - if( !md ) - BUG(); + md = md_open( 0, 0 ); /* signature_check() will enable the md*/ } else if( sig->sig_class == 0x01 ) { /* how do we know that we have to hash the (already hashed) text * in canonical mode ??? (calculating both modes???) */ if( c->mfx.md ) { - md = gcry_md_copy( c->mfx.md ); - if( !md ) - BUG(); - if( c->mfx.md2 ) { - md2 = gcry_md_copy( c->mfx.md2 ); - if( !md2 ) - BUG(); - } + md = md_copy( c->mfx.md ); + if( c->mfx.md2 ) + md2 = md_copy( c->mfx.md2 ); } else { /* detached signature */ - log_debug("Do we really need this here?"); - md = gcry_md_open( 0, 0 ); /* signature_check() will enable the md*/ - md2 = gcry_md_open( 0, 0 ); - if( !md || !md2 ) - BUG(); + log_debug("Do we really need this here?"); + md = md_open( 0, 0 ); /* signature_check() will enable the md*/ + md2 = md_open( 0, 0 ); } } else if( (sig->sig_class&~3) == 0x10 || sig->sig_class == 0x18 + || sig->sig_class == 0x1f || sig->sig_class == 0x20 - || sig->sig_class == 0x30 ) { /* classes 0x10..0x17,0x20,0x30 */ + || sig->sig_class == 0x28 + || sig->sig_class == 0x30 ) { if( c->list->pkt->pkttype == PKT_PUBLIC_KEY || c->list->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { return check_key_signature( c->list, node, is_selfsig ); @@ -537,21 +702,21 @@ do_check_sig( CTX c, KBNODE node, int *is_selfsig ) else if( sig->sig_class == 0x20 ) { log_info(_("standalone revocation - " "use \"gpg --import\" to apply\n")); - return GPGERR_NOT_PROCESSED; + return G10ERR_NOT_PROCESSED; } else { log_error("invalid root packet for sigclass %02x\n", sig->sig_class); - return GPGERR_SIG_CLASS; + return G10ERR_SIG_CLASS; } } else - return GPGERR_SIG_CLASS; - rc = signature_check( sig, md ); - if( rc == GPGERR_BAD_SIGN && md2 ) - rc = signature_check( sig, md2 ); - gcry_md_close(md); - gcry_md_close(md2); + return G10ERR_SIG_CLASS; + rc = signature_check2( sig, md, &dummy, is_expkey ); + if( rc == G10ERR_BAD_SIGN && md2 ) + rc = signature_check2( sig, md2, &dummy, is_expkey ); + md_close(md); + md_close(md2); return rc; } @@ -567,51 +732,21 @@ print_userid( PACKET *pkt ) return; } if( opt.with_colons ) - print_string( stdout, pkt->pkt.user_id->name, - pkt->pkt.user_id->len, ':'); + { + if(pkt->pkt.user_id->attrib_data) + printf("%u %lu", + pkt->pkt.user_id->numattribs, + pkt->pkt.user_id->attrib_len); + else + print_string( stdout, pkt->pkt.user_id->name, + pkt->pkt.user_id->len, ':'); + } else print_utf8_string( stdout, pkt->pkt.user_id->name, pkt->pkt.user_id->len ); } -static void -print_fingerprint( PKT_public_key *pk, PKT_secret_key *sk ) -{ - byte array[MAX_FINGERPRINT_LEN], *p; - size_t i, n; - - if( sk ) - fingerprint_from_sk( sk, array, &n ); - else - fingerprint_from_pk( pk, array, &n ); - p = array; - if( opt.with_colons ) { - printf("fpr:::::::::"); - for(i=0; i < n ; i++, p++ ) - printf("%02X", *p ); - putchar(':'); - } - else { - printf(" Key fingerprint ="); - if( n == 20 ) { - for(i=0; i < n ; i++, i++, p += 2 ) { - if( i == 10 ) - putchar(' '); - printf(" %02X%02X", *p, p[1] ); - } - } - else { - for(i=0; i < n ; i++, p++ ) { - if( i && !(i%8) ) - putchar(' '); - printf(" %02X", *p ); - } - } - } - putchar('\n'); -} - static void print_notation_data( PKT_signature *sig ) { @@ -619,8 +754,7 @@ print_notation_data( PKT_signature *sig ) const byte *p; int seq = 0; - while( (p = enum_sig_subpkt( sig->hashed_data, SIGSUBPKT_NOTATION, - &n, &seq )) ) { + while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,&n,&seq,NULL))) { if( n < 8 ) { log_info(_("WARNING: invalid notation data found\n")); return; @@ -639,14 +773,20 @@ print_notation_data( PKT_signature *sig ) putc( '=', log_stream() ); print_string( log_stream(), p+n1, n2, 0 ); putc( '\n', log_stream() ); + write_status_buffer ( STATUS_NOTATION_NAME, p , n1, 0 ); + write_status_buffer ( STATUS_NOTATION_DATA, p+n1, n2, 50 ); } - if( (p = parse_sig_subpkt( sig->hashed_data, SIGSUBPKT_POLICY, &n ) )) { + + seq=0; + + while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,&n,&seq,NULL))) { log_info(_("Policy: ") ); print_string( log_stream(), p, n, 0 ); putc( '\n', log_stream() ); + write_status_buffer ( STATUS_POLICY_URL, p, n, 0 ); } - /* Now check wheter the key of this signature has some + /* Now check whether the key of this signature has some * notation data */ /* TODO */ @@ -675,7 +815,7 @@ list_node( CTX c, KBNODE node ) if( mainkey ) { c->local_id = pk->local_id; c->trustletter = opt.fast_list_mode? - 0 : query_trust_info( pk, NULL ); + 0 : get_validity_info( pk, NULL ); } printf("%s:", mainkey? "pub":"sub" ); if( c->trustletter ) @@ -684,18 +824,18 @@ list_node( CTX c, KBNODE node ) nbits_from_pk( pk ), pk->pubkey_algo, (ulong)keyid[0],(ulong)keyid[1], - datestr_from_pk( pk ), - pk->expiredate? strtimestamp(pk->expiredate):"" ); + colon_datestr_from_pk( pk ), + colon_strtime (pk->expiredate) ); if( c->local_id ) printf("%lu", c->local_id ); putchar(':'); - if( c->local_id && !opt.fast_list_mode ) - putchar( get_ownertrust_info( c->local_id ) ); + if( mainkey && !opt.fast_list_mode ) + putchar( get_ownertrust_info (pk) ); putchar(':'); if( node->next && node->next->pkt->pkttype == PKT_RING_TRUST) { putchar('\n'); any=1; if( opt.fingerprint ) - print_fingerprint( pk, NULL ); + print_fingerprint( pk, NULL, 0 ); printf("rtv:1:%u:\n", node->next->pkt->pkt.ring_trust->trustval ); } @@ -724,7 +864,8 @@ list_node( CTX c, KBNODE node ) else if( node->pkt->pkttype == PKT_USER_ID ) { if( any ) { if( opt.with_colons ) - printf("uid:::::::::"); + printf("%s:::::::::", + node->pkt->pkt.user_id->attrib_data?"uat":"uid"); else printf( "uid%*s", 28, "" ); } @@ -733,7 +874,7 @@ list_node( CTX c, KBNODE node ) putchar(':'); putchar('\n'); if( opt.fingerprint && !any ) - print_fingerprint( pk, NULL ); + print_fingerprint( pk, NULL, 0 ); if( node->next && node->next->pkt->pkttype == PKT_RING_TRUST ) { printf("rtv:2:%u:\n", @@ -757,7 +898,7 @@ list_node( CTX c, KBNODE node ) if( !any ) putchar('\n'); if( !mainkey && opt.fingerprint > 1 ) - print_fingerprint( pk, NULL ); + print_fingerprint( pk, NULL, 0 ); } else if( (mainkey = (node->pkt->pkttype == PKT_SECRET_KEY) ) || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { @@ -771,8 +912,8 @@ list_node( CTX c, KBNODE node ) nbits_from_sk( sk ), sk->pubkey_algo, (ulong)keyid[0],(ulong)keyid[1], - datestr_from_sk( sk ), - sk->expiredate? strtimestamp(sk->expiredate):"" + colon_datestr_from_sk( sk ), + colon_strtime (sk->expiredate) /* fixme: add LID */ ); } else @@ -798,7 +939,8 @@ list_node( CTX c, KBNODE node ) else if( node->pkt->pkttype == PKT_USER_ID ) { if( any ) { if( opt.with_colons ) - printf("uid:::::::::"); + printf("%s:::::::::", + node->pkt->pkt.user_id->attrib_data?"uat":"uid"); else printf( "uid%*s", 28, "" ); } @@ -807,7 +949,7 @@ list_node( CTX c, KBNODE node ) putchar(':'); putchar('\n'); if( opt.fingerprint && !any ) - print_fingerprint( NULL, sk ); + print_fingerprint( NULL, sk, 0 ); any=1; } else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) { @@ -822,7 +964,7 @@ list_node( CTX c, KBNODE node ) if( !any ) putchar('\n'); if( !mainkey && opt.fingerprint > 1 ) - print_fingerprint( NULL, sk ); + print_fingerprint( NULL, sk, 0 ); } else if( node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; @@ -841,10 +983,11 @@ list_node( CTX c, KBNODE node ) fputs("sig", stdout); if( opt.check_sigs ) { fflush(stdout); - switch( (rc2=do_check_sig( c, node, &is_selfsig )) ) { + switch( (rc2=do_check_sig( c, node, &is_selfsig, NULL )) ) { case 0: sigrc = '!'; break; - case GPGERR_BAD_SIGN: sigrc = '-'; break; - case GPGERR_NO_PUBKEY: sigrc = '?'; break; + case G10ERR_BAD_SIGN: sigrc = '-'; break; + case G10ERR_NO_PUBKEY: + case G10ERR_UNU_PUBKEY: sigrc = '?'; break; default: sigrc = '%'; break; } } @@ -868,13 +1011,13 @@ list_node( CTX c, KBNODE node ) putchar(sigrc); printf("::%d:%08lX%08lX:%s::::", sig->pubkey_algo, (ulong)sig->keyid[0], - (ulong)sig->keyid[1], datestr_from_sig(sig)); + (ulong)sig->keyid[1], colon_datestr_from_sig(sig)); } else printf("%c %08lX %s ", sigrc, (ulong)sig->keyid[1], datestr_from_sig(sig)); if( sigrc == '%' ) - printf("[%s] ", gpg_errstr(rc2) ); + printf("[%s] ", g10_errstr(rc2) ); else if( sigrc == '?' ) ; else if( is_selfsig ) { @@ -887,10 +1030,10 @@ list_node( CTX c, KBNODE node ) else if( !opt.fast_list_mode ) { p = get_user_id( sig->keyid, &n ); print_string( stdout, p, n, opt.with_colons ); - gcry_free(p); + m_free(p); } if( opt.with_colons ) - printf(":%02x:", sig->sig_class ); + printf(":%02x%c:", sig->sig_class, sig->flags.exportable?'x':'l'); putchar('\n'); } else @@ -903,11 +1046,11 @@ int proc_packets( void *anchor, IOBUF a ) { int rc; - CTX c = gcry_xcalloc( 1, sizeof *c ); + CTX c = m_alloc_clear( sizeof *c ); c->anchor = anchor; rc = do_proc_packets( c, a ); - gcry_free( c ); + m_free( c ); return rc; } @@ -917,7 +1060,7 @@ int proc_signature_packets( void *anchor, IOBUF a, STRLIST signedfiles, const char *sigfilename ) { - CTX c = gcry_xcalloc( 1, sizeof *c ); + CTX c = m_alloc_clear( sizeof *c ); int rc; c->anchor = anchor; @@ -925,20 +1068,20 @@ proc_signature_packets( void *anchor, IOBUF a, c->signed_data = signedfiles; c->sigfilename = sigfilename; rc = do_proc_packets( c, a ); - gcry_free( c ); + m_free( c ); return rc; } int proc_encryption_packets( void *anchor, IOBUF a ) { - CTX c = gcry_xcalloc( 1, sizeof *c ); + CTX c = m_alloc_clear( sizeof *c ); int rc; c->anchor = anchor; c->encrypt_only = 1; rc = do_proc_packets( c, a ); - gcry_free( c ); + m_free( c ); return rc; } @@ -946,18 +1089,20 @@ proc_encryption_packets( void *anchor, IOBUF a ) int do_proc_packets( CTX c, IOBUF a ) { - PACKET *pkt = gcry_xmalloc( sizeof *pkt ); + PACKET *pkt = m_alloc( sizeof *pkt ); int rc=0; int any_data=0; int newpkt; c->iobuf = a; init_packet(pkt); - while( (rc=parse_packet(a, pkt, NULL)) != -1 ) { + while( (rc=parse_packet(a, pkt)) != -1 ) { any_data = 1; if( rc ) { free_packet(pkt); - if( rc == GPGERR_INVALID_PACKET ) + /* stop processing hwne an invalid packet has been encountered + * but don't do so when we are doing a --list-packet. */ + if( rc == G10ERR_INVALID_PACKET && opt.list_packets != 2 ) break; continue; } @@ -981,12 +1126,14 @@ do_proc_packets( CTX c, IOBUF a ) case PKT_PUBKEY_ENC: case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: - rc = GPGERR_UNEXPECTED; + write_status_text( STATUS_UNEXPECTED, "0" ); + rc = G10ERR_UNEXPECTED; goto leave; case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break; case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break; case PKT_COMPRESSED: proc_compressed( c, pkt ); break; case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break; + case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break; default: newpkt = 0; break; } } @@ -995,7 +1142,8 @@ do_proc_packets( CTX c, IOBUF a ) case PKT_PUBLIC_KEY: case PKT_SECRET_KEY: case PKT_USER_ID: - rc = GPGERR_UNEXPECTED; + write_status_text( STATUS_UNEXPECTED, "0" ); + rc = G10ERR_UNEXPECTED; goto leave; case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break; case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break; @@ -1005,6 +1153,7 @@ do_proc_packets( CTX c, IOBUF a ) case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break; case PKT_COMPRESSED: proc_compressed( c, pkt ); break; case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break; + case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break; default: newpkt = 0; break; } } @@ -1029,23 +1178,38 @@ do_proc_packets( CTX c, IOBUF a ) case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break; case PKT_COMPRESSED: proc_compressed( c, pkt ); break; case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break; + case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break; case PKT_RING_TRUST: newpkt = add_ring_trust( c, pkt ); break; default: newpkt = 0; break; } } - if( pkt->pkttype != PKT_SIGNATURE ) + /* This is a very ugly construct and frankly, I don't remember why + * I used it. Adding the MDC check here is a hack. + * The right solution is to initiate another context for encrypted + * packet and not to reuse the current one ... It works right + * when there is a compression packet inbetween which adds just + * an extra layer. + * Hmmm: Rewrite this whole module here?? + */ + if( pkt->pkttype != PKT_SIGNATURE && pkt->pkttype != PKT_MDC ) c->have_data = pkt->pkttype == PKT_PLAINTEXT; if( newpkt == -1 ) ; else if( newpkt ) { - pkt = gcry_xmalloc( sizeof *pkt ); + pkt = m_alloc( sizeof *pkt ); init_packet(pkt); } else free_packet(pkt); + if ( c->pipemode.stop_now ) { + /* we won't get an EOF in pipemode, so we have to + * break the loop here */ + rc = -1; + break; + } } - if( rc == GPGERR_INVALID_PACKET ) + if( rc == G10ERR_INVALID_PACKET ) write_status_text( STATUS_NODATA, "3" ); if( any_data ) rc = 0; @@ -1055,9 +1219,9 @@ do_proc_packets( CTX c, IOBUF a ) leave: release_list( c ); - gcry_free(c->dek); + m_free(c->dek); free_packet( pkt ); - gcry_free( pkt ); + m_free( pkt ); free_md_filter_context( &c->mfx ); return rc; } @@ -1068,76 +1232,190 @@ check_sig_and_print( CTX c, KBNODE node ) { PKT_signature *sig = node->pkt->pkt.signature; const char *astr, *tstr; - int rc; + int rc, is_expkey=0; if( opt.skip_verify ) { log_info(_("signature verification suppressed\n")); return 0; } + /* It is not in all cases possible to check multiple signatures: + * PGP 2 (which is also allowed by OpenPGP), does use the packet + * sequence: sig+data, OpenPGP does use onepas+data=sig and GnuPG + * sometimes uses (because I did'nt read the specs right) data+sig. + * Because it is possible to create multiple signatures with + * different packet sequence (e.g. data+sig and sig+data) it might + * not be possible to get it right: let's say we have: + * data+sig, sig+data,sig+data and we have not yet encountered the last + * data, we could also see this a one data with 2 signatures and then + * data+sig. + * To protect against this we check that all signatures follow + * without any intermediate packets. Note, that we won't get this + * error when we use onepass packets or cleartext signatures because + * we reset the list every time + * + * FIXME: Now that we have these marker packets, we should create a + * real grammar and check against this. + */ + { + KBNODE n; + int n_sig=0; + + for (n=c->list; n; n=n->next ) { + if ( n->pkt->pkttype == PKT_SIGNATURE ) + n_sig++; + } + if (n_sig > 1) { /* more than one signature - check sequence */ + int tmp, onepass; + + for (tmp=onepass=0,n=c->list; n; n=n->next ) { + if (n->pkt->pkttype == PKT_ONEPASS_SIG) + onepass++; + else if (n->pkt->pkttype == PKT_GPG_CONTROL + && n->pkt->pkt.gpg_control->control + == CTRLPKT_CLEARSIGN_START ) { + onepass++; /* handle the same way as a onepass */ + } + else if ( (tmp && n->pkt->pkttype != PKT_SIGNATURE) ) { + log_error(_("can't handle these multiple signatures\n")); + return 0; + } + else if ( n->pkt->pkttype == PKT_SIGNATURE ) + tmp = 1; + else if (!tmp && !onepass + && n->pkt->pkttype == PKT_GPG_CONTROL + && n->pkt->pkt.gpg_control->control + == CTRLPKT_PLAINTEXT_MARK ) { + /* plaintext before signatures but no one-pass packets*/ + log_error(_("can't handle these multiple signatures\n")); + return 0; + } + } + } + } + + + tstr = asctimestamp(sig->timestamp); - astr = gcry_pk_algo_name( sig->pubkey_algo ); + astr = pubkey_algo_to_string( sig->pubkey_algo ); log_info(_("Signature made %.*s using %s key ID %08lX\n"), (int)strlen(tstr), tstr, astr? astr: "?", (ulong)sig->keyid[1] ); - rc = do_check_sig(c, node, NULL ); - if( rc == GPGERR_NO_PUBKEY && opt.keyserver_name && opt.auto_key_retrieve) { - if( !hkp_ask_import( sig->keyid ) ) - rc = do_check_sig(c, node, NULL ); + rc = do_check_sig(c, node, NULL, &is_expkey ); + if( rc == G10ERR_NO_PUBKEY && opt.keyserver_scheme && opt.keyserver_options.auto_key_retrieve) { + if( keyserver_import_keyid ( sig->keyid )==0 ) + rc = do_check_sig(c, node, NULL, &is_expkey ); } - if( !rc || rc == GPGERR_BAD_SIGN ) { + if( !rc || rc == G10ERR_BAD_SIGN ) { KBNODE un, keyblock; - char *us; - int count=0; + int count=0, statno; + char keyid_str[50]; + + if(rc) + statno=STATUS_BADSIG; + else if(sig->flags.expired) + statno=STATUS_EXPSIG; + else if(is_expkey) + statno=STATUS_EXPKEYSIG; + else + statno=STATUS_GOODSIG; keyblock = get_pubkeyblock( sig->keyid ); - us = get_long_user_id_string( sig->keyid ); - write_status_text( rc? STATUS_BADSIG : STATUS_GOODSIG, us ); - gcry_free(us); + sprintf (keyid_str, "%08lX%08lX [uncertain] ", + (ulong)sig->keyid[0], (ulong)sig->keyid[1]); - /* fixme: list only user ids which are valid and add information - * about the trustworthiness of each user id, sort them. - * Integrate this with check_signatures_trust(). */ + /* find and print the primary user ID */ for( un=keyblock; un; un = un->next ) { if( un->pkt->pkttype != PKT_USER_ID ) continue; - if( !count++ ) - log_info(rc? _("BAD signature from \"") - : _("Good signature from \"")); - else - log_info( _(" aka \"")); + if ( !un->pkt->pkt.user_id->created ) + continue; + if ( un->pkt->pkt.user_id->is_revoked ) + continue; + if ( !un->pkt->pkt.user_id->is_primary ) + continue; + + keyid_str[17] = 0; /* cut off the "[uncertain]" part */ + write_status_text_and_buffer (statno, keyid_str, + un->pkt->pkt.user_id->name, + un->pkt->pkt.user_id->len, + -1 ); + + log_info(rc? _("BAD signature from \"") + : sig->flags.expired ? _("Expired signature from \"") + : _("Good signature from \"")); print_utf8_string( log_stream(), un->pkt->pkt.user_id->name, un->pkt->pkt.user_id->len ); fputs("\"\n", log_stream() ); - if( rc ) - break; /* print only one id in this case */ + count++; } if( !count ) { /* just in case that we have no userid */ - log_info(rc? _("BAD signature from \"") + for( un=keyblock; un; un = un->next ) { + if( un->pkt->pkttype == PKT_USER_ID ) + break; + } + + if (opt.always_trust || !un) + keyid_str[17] = 0; /* cut off the "[uncertain]" part */ + + write_status_text_and_buffer (statno, keyid_str, + un? un->pkt->pkt.user_id->name:"[?]", + un? un->pkt->pkt.user_id->len:3, + -1 ); + + log_info(rc? _("BAD signature from \"") + : sig->flags.expired ? _("Expired signature from \"") : _("Good signature from \"")); - fputs("[?]\"\n", log_stream() ); + if (!opt.always_trust && un) { + fputs(_("[uncertain]"), log_stream() ); + putc(' ', log_stream() ); + } + print_utf8_string( log_stream(), + un? un->pkt->pkt.user_id->name:"[?]", + un? un->pkt->pkt.user_id->len:3 ); + fputs("\"\n", log_stream() ); + } + + /* If we have a good signature and already printed + * the primary user ID, print all the other user IDs */ + if ( count && !rc ) { + for( un=keyblock; un; un = un->next ) { + if( un->pkt->pkttype != PKT_USER_ID ) + continue; + if ( un->pkt->pkt.user_id->is_revoked ) + continue; + if ( un->pkt->pkt.user_id->is_primary ) + continue; + + log_info( _(" aka \"")); + print_utf8_string( log_stream(), un->pkt->pkt.user_id->name, + un->pkt->pkt.user_id->len ); + fputs("\"\n", log_stream() ); + } } release_kbnode( keyblock ); + if( !rc ) print_notation_data( sig ); if( !rc && is_status_enabled() ) { /* print a status response with the fingerprint */ - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); + PKT_public_key *pk = m_alloc_clear( sizeof *pk ); if( !get_pubkey( pk, sig->keyid ) ) { byte array[MAX_FINGERPRINT_LEN], *p; - char buf[MAX_FINGERPRINT_LEN*2+61]; + char buf[MAX_FINGERPRINT_LEN*2+72]; size_t i, n; fingerprint_from_pk( pk, array, &n ); p = array; for(i=0; i < n ; i++, p++ ) sprintf(buf+2*i, "%02X", *p ); - sprintf(buf+strlen(buf), " %s %lu", + sprintf(buf+strlen(buf), " %s %lu %lu", strtimestamp( sig->timestamp ), - (ulong)sig->timestamp ); + (ulong)sig->timestamp, + (ulong)sig->expiredate ); write_status_text( STATUS_VALIDSIG, buf ); } free_public_key( pk ); @@ -1145,10 +1423,19 @@ check_sig_and_print( CTX c, KBNODE node ) if( !rc ) rc = check_signatures_trust( sig ); + + if(sig->flags.expired) + { + log_info("Signature expired %s\n",asctimestamp(sig->expiredate)); + rc=G10ERR_GENERAL; /* need a better error here? */ + } + else if(sig->expiredate) + log_info("Signature expires %s\n",asctimestamp(sig->expiredate)); + if( rc ) - gpg_errors_seen = 1; + g10_errors_seen = 1; if( opt.batch && rc ) - gpg_exit(1); + g10_exit(1); } else { char buf[50]; @@ -1157,12 +1444,12 @@ check_sig_and_print( CTX c, KBNODE node ) sig->pubkey_algo, sig->digest_algo, sig->sig_class, (ulong)sig->timestamp, rc ); write_status_text( STATUS_ERRSIG, buf ); - if( rc == GPGERR_NO_PUBKEY ) { + if( rc == G10ERR_NO_PUBKEY ) { buf[16] = 0; write_status_text( STATUS_NO_PUBKEY, buf ); } - if( rc != GPGERR_NOT_PROCESSED ) - log_error(_("Can't check signature: %s\n"), gpg_errstr(rc) ); + if( rc != G10ERR_NOT_PROCESSED ) + log_error(_("Can't check signature: %s\n"), g10_errstr(rc) ); } return rc; } @@ -1180,6 +1467,18 @@ proc_tree( CTX c, KBNODE node ) if( opt.list_packets || opt.list_only ) return; + /* we must skip our special plaintext marker packets here becuase + they may be the root packet. These packets are only used in + addionla checks and skipping them here doesn't matter */ + while ( node + && node->pkt->pkttype == PKT_GPG_CONTROL + && node->pkt->pkt.gpg_control->control + == CTRLPKT_PLAINTEXT_MARK ) { + node = node->next; + } + if (!node) + return; + c->local_id = 0; c->trustletter = ' '; if( node->pkt->pkttype == PKT_PUBLIC_KEY @@ -1196,12 +1495,11 @@ proc_tree( CTX c, KBNODE node ) if( !c->have_data ) { free_md_filter_context( &c->mfx ); /* prepare to create all requested message digests */ - if ( !(c->mfx.md = gcry_md_open(0, 0)) ) - BUG(); + c->mfx.md = md_open(0, 0); /* fixme: why looking for the signature packet and not 1passpacket*/ for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); ) { - gcry_md_enable( c->mfx.md, n1->pkt->pkt.signature->digest_algo); + md_enable( c->mfx.md, n1->pkt->pkt.signature->digest_algo); } /* ask for file and hash it */ if( c->sigs_only ) { @@ -1211,18 +1509,38 @@ proc_tree( CTX c, KBNODE node ) } else { rc = ask_for_detached_datafile( c->mfx.md, c->mfx.md2, - iobuf_get_fname(c->iobuf), + iobuf_get_real_fname(c->iobuf), n1? (n1->pkt->pkt.onepass_sig->sig_class == 0x01):0 ); } if( rc ) { - log_error("can't hash datafile: %s\n", gpg_errstr(rc)); + log_error("can't hash datafile: %s\n", g10_errstr(rc)); return; } } + else if ( c->signed_data ) { + log_error (_("not a detached signature\n") ); + return; + } for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); ) check_sig_and_print( c, n1 ); } + else if( node->pkt->pkttype == PKT_GPG_CONTROL + && node->pkt->pkt.gpg_control->control + == CTRLPKT_CLEARSIGN_START ) { + /* clear text signed message */ + if( !c->have_data ) { + log_error("cleartext signature without data\n" ); + return; + } + else if ( c->signed_data ) { + log_error (_("not a detached signature\n") ); + return; + } + + for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); ) + check_sig_and_print( c, n1 ); + } else if( node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; @@ -1232,26 +1550,20 @@ proc_tree( CTX c, KBNODE node ) else if( !c->have_data ) { /* detached signature */ free_md_filter_context( &c->mfx ); - c->mfx.md = gcry_md_open(sig->digest_algo, 0); - if ( !c->mfx.md ) - BUG(); + c->mfx.md = md_open(sig->digest_algo, 0); if( !opt.pgp2_workarounds ) ; - else if( sig->digest_algo == GCRY_MD_MD5 + else if( sig->digest_algo == DIGEST_ALGO_MD5 && is_RSA( sig->pubkey_algo ) ) { /* enable a workaround for a pgp2 bug */ - c->mfx.md2 = gcry_md_open( GCRY_MD_MD5, 0 ); - if ( !c->mfx.md2 ) - BUG(); + c->mfx.md2 = md_open( DIGEST_ALGO_MD5, 0 ); } - else if( sig->digest_algo == GCRY_MD_SHA1 - && sig->pubkey_algo == GCRY_PK_DSA + else if( sig->digest_algo == DIGEST_ALGO_SHA1 + && sig->pubkey_algo == PUBKEY_ALGO_DSA && sig->sig_class == 0x01 ) { /* enable the workaround also for pgp5 when the detached * signature has been created in textmode */ - c->mfx.md2 = gcry_md_open( sig->digest_algo, 0 ); - if ( !c->mfx.md2 ) - BUG(); + c->mfx.md2 = md_open( sig->digest_algo, 0 ); } #if 0 /* workaround disabled */ /* Here we have another hack to work around a pgp 2 bug @@ -1263,6 +1575,11 @@ proc_tree( CTX c, KBNODE node ) */ /* c->mfx.md2? 0 :(sig->sig_class == 0x01) */ #endif + if ( DBG_HASHING ) { + md_start_debug( c->mfx.md, "verify" ); + if ( c->mfx.md2 ) + md_start_debug( c->mfx.md2, "verify2" ); + } if( c->sigs_only ) { rc = hash_datafiles( c->mfx.md, c->mfx.md2, c->signed_data, c->sigfilename, @@ -1270,23 +1587,33 @@ proc_tree( CTX c, KBNODE node ) } else { rc = ask_for_detached_datafile( c->mfx.md, c->mfx.md2, - iobuf_get_fname(c->iobuf), + iobuf_get_real_fname(c->iobuf), (sig->sig_class == 0x01) ); } if( rc ) { - log_error("can't hash datafile: %s\n", gpg_errstr(rc)); + log_error("can't hash datafile: %s\n", g10_errstr(rc)); return; } } - else + else if ( c->signed_data ) { + log_error (_("not a detached signature\n") ); + return; + } + else if ( c->pipemode.op == 'B' ) + ; /* this is a detached signature trough the pipemode handler */ + else if (!opt.quiet) log_info(_("old style (PGP 2.x) signature\n")); - check_sig_and_print( c, node ); + for( n1 = node; n1; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )) ) + check_sig_and_print( c, n1 ); } - else + else { + dump_kbnode (c->list); log_error(_("invalid root packet detected in proc_tree()\n")); - + dump_kbnode (node); + } } + diff --git a/g10/mdfilter.c b/g10/mdfilter.c index c41ad857e..d6ccacecf 100644 --- a/g10/mdfilter.c +++ b/g10/mdfilter.c @@ -1,5 +1,5 @@ /* mdfilter.c - filter data and calculate a message digest - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,9 +25,9 @@ #include #include -#include #include "errors.h" #include "iobuf.h" +#include "memory.h" #include "util.h" #include "filter.h" @@ -50,9 +50,9 @@ md_filter( void *opaque, int control, i = iobuf_read( a, buf, size ); if( i == -1 ) i = 0; if( i ) { - gcry_md_write(mfx->md, buf, i ); + md_write(mfx->md, buf, i ); if( mfx->md2 ) - gcry_md_write(mfx->md2, buf, i ); + md_write(mfx->md2, buf, i ); } else rc = -1; /* eof */ @@ -67,8 +67,8 @@ md_filter( void *opaque, int control, void free_md_filter_context( md_filter_context_t *mfx ) { - gcry_md_close(mfx->md); - gcry_md_close(mfx->md2); + md_close(mfx->md); + md_close(mfx->md2); mfx->md = NULL; mfx->md2 = NULL; mfx->maxbuf_size = 0; diff --git a/g10/misc.c b/g10/misc.c index 2348e46f0..c2330d959 100644 --- a/g10/misc.c +++ b/g10/misc.c @@ -1,5 +1,5 @@ /* misc.c - miscellaneous functions - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -22,28 +22,44 @@ #include #include #include +#include #include +#ifdef HAVE_STAT +#include +#endif #if defined(__linux__) && defined(__alpha__) && __GLIBC__ < 2 #include #include #endif #ifdef HAVE_SETRLIMIT + #include #include #include #endif -#include - -#include #include "util.h" #include "main.h" +#include "photoid.h" #include "options.h" #include "i18n.h" -#define MAX_EXTERN_MPI_BITS 16384 +const char *g10m_revision_string(int); +const char *g10c_revision_string(int); +const char *g10u_revision_string(int); + +#ifdef __GNUC__ +volatile +#endif + void +pull_in_libs(void) +{ + g10m_revision_string(0); + g10c_revision_string(0); + g10u_revision_string(0); +} + #if defined(__linux__) && defined(__alpha__) && __GLIBC__ < 2 -#warning using trap_unaligned static int setsysinfo(unsigned long op, void *buffer, unsigned long size, int *start, void *arg, unsigned long flag) @@ -68,7 +84,6 @@ trap_unaligned(void) #endif - int disable_core_dumps() { @@ -91,169 +106,26 @@ disable_core_dumps() -/**************** - * write an mpi to out. - */ -int -mpi_write( IOBUF out, MPI a ) -{ - char buffer[(MAX_EXTERN_MPI_BITS+7)/8]; - size_t nbytes; - int rc; - - nbytes = (MAX_EXTERN_MPI_BITS+7)/8; - rc = gcry_mpi_print( GCRYMPI_FMT_PGP, buffer, &nbytes, a ); - if( !rc ) - rc = iobuf_write( out, buffer, nbytes ); - - return rc; -} - -/**************** - * Writye a MPI to out, but in this case it is an opaque one, - * s used vor v3 protected keys. - */ -int -mpi_write_opaque( IOBUF out, MPI a ) -{ - size_t nbytes, nbits; - int rc; - char *p; - - assert( gcry_mpi_get_flag( a, GCRYMPI_FLAG_OPAQUE ) ); - p = gcry_mpi_get_opaque( a, &nbits ); - nbytes = (nbits+7) / 8; - iobuf_put( out, nbits >> 8 ); - iobuf_put( out, nbits ); - rc = iobuf_write( out, p, nbytes ); - return rc; -} - - -/**************** - * Read an external representation of an mpi and return the MPI - * The external format is a 16 bit unsigned value stored in network byte order, - * giving the number of bits for the following integer. The integer is stored - * with MSB first (left padded with zeroes to align on a byte boundary). - */ -MPI -mpi_read(IOBUF inp, unsigned int *ret_nread, int secure) -{ - int c, c1, c2, i; - unsigned int nbits, nbytes, nread=0; - MPI a = NULL; - byte *buf = NULL; - byte *p; - - if( (c = c1 = iobuf_get(inp)) == -1 ) - goto leave; - nbits = c << 8; - if( (c = c2 = iobuf_get(inp)) == -1 ) - goto leave; - nbits |= c; - if( nbits > MAX_EXTERN_MPI_BITS ) { - log_error("mpi too large (%u bits)\n", nbits); - goto leave; - } - nread = 2; - nbytes = (nbits+7) / 8; - buf = secure? gcry_xmalloc_secure( nbytes+2 ) : gcry_xmalloc( nbytes+2 ); - p = buf; - p[0] = c1; - p[1] = c2; - for( i=0 ; i < nbytes; i++ ) { - p[i+2] = iobuf_get(inp) & 0xff; - nread++; - } - nread += nbytes; - if( gcry_mpi_scan( &a, GCRYMPI_FMT_PGP, buf, &nread ) ) - a = NULL; - - leave: - gcry_free(buf); - if( nread > *ret_nread ) - log_bug("mpi larger than packet"); - else - *ret_nread = nread; - return a; -} - -/**************** - * Same as mpi_read but the value is stored as an opaque MPI. - * This function is used to read encrypted MPI of v3 packets. - */ -GCRY_MPI -mpi_read_opaque(IOBUF inp, unsigned *ret_nread ) -{ - int c, c1, c2, i; - unsigned nbits, nbytes, nread=0; - GCRY_MPI a = NULL; - byte *buf = NULL; - byte *p; - - if( (c = c1 = iobuf_get(inp)) == -1 ) - goto leave; - nbits = c << 8; - if( (c = c2 = iobuf_get(inp)) == -1 ) - goto leave; - nbits |= c; - if( nbits > MAX_EXTERN_MPI_BITS ) { - log_error("mpi too large (%u bits)\n", nbits); - goto leave; - } - nread = 2; - nbytes = (nbits+7) / 8; - buf = gcry_xmalloc( nbytes ); - p = buf; - for( i=0 ; i < nbytes; i++ ) { - p[i] = iobuf_get(inp) & 0xff; - } - nread += nbytes; - a = gcry_mpi_set_opaque(NULL, buf, nbits ); - buf = NULL; - - leave: - gcry_free(buf); - if( nread > *ret_nread ) - log_bug("mpi larger than packet"); - else - *ret_nread = nread; - return a; -} - - -int -mpi_print( FILE *fp, MPI a, int mode ) -{ - int n=0; - - if( !a ) - return fprintf(fp, "[MPI_NULL]"); - if( !mode ) { - unsigned int n1; - n1 = gcry_mpi_get_nbits(a); - n += fprintf(fp, "[%u bits]", n1); - } - else { - int rc; - char *buffer; - - rc = gcry_mpi_aprint( GCRYMPI_FMT_HEX, (void **)&buffer, NULL, a ); - assert( !rc ); - fputs( buffer, fp ); - n += strlen(buffer); - gcry_free( buffer ); - } - return n; -} - - - u16 checksum_u16( unsigned n ) { u16 a; + a = (n >> 8) & 0xff; + if( opt.emulate_bugs & EMUBUG_GPGCHKSUM ) { + a |= n & 0xff; + log_debug("csum_u16 emulated for n=%u\n", n); + } + else + a += n & 0xff; + return a; +} + +static u16 +checksum_u16_nobug( unsigned n ) +{ + u16 a; + a = (n >> 8) & 0xff; a += n & 0xff; return a; @@ -272,22 +144,47 @@ checksum( byte *p, unsigned n ) u16 checksum_mpi( MPI a ) { - int rc; u16 csum; byte *buffer; - size_t nbytes; + unsigned nbytes; + unsigned nbits; - rc = gcry_mpi_print( GCRYMPI_FMT_PGP, NULL, &nbytes, a ); - assert( !rc ); - /* fixme: for numbers not in the suecre memory we - * should use a stack based buffer and only allocate - * a larger one when the mpi_print return an error + buffer = mpi_get_buffer( a, &nbytes, NULL ); + /* some versions of gpg encode wrong values for the length of an mpi + * so that mpi_get_nbits() which counts the mpi yields another (shorter) + * value than the one store with the mpi. mpi_get_nbit_info() returns + * this stored value if it is still available. */ - buffer = gcry_is_secure(a)? gcry_xmalloc_secure(nbytes) : gcry_xmalloc(nbytes); - rc = gcry_mpi_print( GCRYMPI_FMT_PGP, buffer, &nbytes, a ); - assert( !rc ); - csum = checksum( buffer, nbytes ); - gcry_free( buffer ); + + if( opt.emulate_bugs & EMUBUG_GPGCHKSUM ) + nbits = 0; + else + nbits = mpi_get_nbit_info(a); + if( !nbits ) + nbits = mpi_get_nbits(a); + csum = checksum_u16( nbits ); + csum += checksum( buffer, nbytes ); + m_free( buffer ); + return csum; +} + +/**************** + * This is the correct function + */ +u16 +checksum_mpi_counted_nbits( MPI a ) +{ + u16 csum; + byte *buffer; + unsigned nbytes; + unsigned nbits; + + buffer = mpi_get_buffer( a, &nbytes, NULL ); + nbits = mpi_get_nbits(a); + mpi_set_nbit_info(a,nbits); + csum = checksum_u16_nobug( nbits ); + csum += checksum( buffer, nbytes ); + m_free( buffer ); return csum; } @@ -327,11 +224,13 @@ print_cipher_algo_note( int algo ) { if( algo >= 100 && algo <= 110 ) no_exp_algo(); - else if( algo == GCRY_CIPHER_3DES - || algo == GCRY_CIPHER_CAST5 - || algo == GCRY_CIPHER_BLOWFISH - || algo == GCRY_CIPHER_RIJNDAEL - || algo == GCRY_CIPHER_TWOFISH + else if( algo == CIPHER_ALGO_3DES + || algo == CIPHER_ALGO_CAST5 + || algo == CIPHER_ALGO_BLOWFISH + || algo == CIPHER_ALGO_TWOFISH + || algo == CIPHER_ALGO_RIJNDAEL + || algo == CIPHER_ALGO_RIJNDAEL192 + || algo == CIPHER_ALGO_RIJNDAEL256 ) ; else { @@ -339,7 +238,7 @@ print_cipher_algo_note( int algo ) if( !did_note ) { did_note = 1; - log_info(_("this cipher algorithm is depreciated; " + log_info(_("this cipher algorithm is deprecated; " "please use a more standard one!\n")); } } @@ -353,6 +252,32 @@ print_digest_algo_note( int algo ) } +/* Return a string which is used as a kind of process ID */ +const byte * +get_session_marker( size_t *rlen ) +{ + static byte marker[SIZEOF_UNSIGNED_LONG*2]; + static int initialized; + + if ( !initialized ) { + volatile ulong aa, bb; /* we really want the uninitialized value */ + ulong a, b; + + initialized = 1; + /* also this marker is guessable it is not easy to use this + * for a faked control packet because an attacker does not + * have enough control about the time the verification does + * take place. Of course, we can add just more random but + * than we need the random generator even for verification + * tasks - which does not make sense. */ + a = aa ^ (ulong)getpid(); + b = bb ^ (ulong)time(NULL); + memcpy( marker, &a, SIZEOF_UNSIGNED_LONG ); + memcpy( marker+SIZEOF_UNSIGNED_LONG, &b, SIZEOF_UNSIGNED_LONG ); + } + *rlen = sizeof(marker); + return marker; +} /**************** * Wrapper around the libgcrypt function with addional checks on @@ -362,122 +287,405 @@ int openpgp_cipher_test_algo( int algo ) { if( algo < 0 || algo > 110 ) - return GCRYERR_INV_CIPHER_ALGO; - return gcry_cipher_test_algo(algo); + return G10ERR_CIPHER_ALGO; + return check_cipher_algo(algo); } int openpgp_pk_test_algo( int algo, unsigned int usage_flags ) { - size_t n = usage_flags; - if( algo < 0 || algo > 110 ) - return GCRYERR_INV_PK_ALGO; - return gcry_pk_algo_info( algo, GCRYCTL_TEST_ALGO, NULL, &n ); + return G10ERR_PUBKEY_ALGO; + return check_pubkey_algo2( algo, usage_flags ); } int openpgp_pk_algo_usage ( int algo ) { - int usage = 0; + int use = 0; - /* some are hardwired */ + /* they are hardwired in gpg 1.0 */ switch ( algo ) { - case GCRY_PK_RSA: - usage = GCRY_PK_USAGE_SIGN | GCRY_PK_USAGE_ENCR; + case PUBKEY_ALGO_RSA: + use = PUBKEY_USAGE_SIG | PUBKEY_USAGE_ENC; break; - case GCRY_PK_RSA_E: - usage = GCRY_PK_USAGE_ENCR; + case PUBKEY_ALGO_RSA_E: + use = PUBKEY_USAGE_ENC; break; - case GCRY_PK_RSA_S: - usage = GCRY_PK_USAGE_SIGN; + case PUBKEY_ALGO_RSA_S: + use = PUBKEY_USAGE_SIG; break; - case GCRY_PK_ELG_E: - usage = GCRY_PK_USAGE_ENCR; + case PUBKEY_ALGO_ELGAMAL_E: + use = PUBKEY_USAGE_ENC; break; - case GCRY_PK_DSA: - usage = GCRY_PK_USAGE_SIGN; + case PUBKEY_ALGO_DSA: + use = PUBKEY_USAGE_SIG; break; - case GCRY_PK_ELG: - usage = GCRY_PK_USAGE_SIGN | GCRY_PK_USAGE_ENCR; + case PUBKEY_ALGO_ELGAMAL: + use = PUBKEY_USAGE_SIG | PUBKEY_USAGE_ENC; break; default: - usage = gcry_pk_algo_info ( algo, GCRYCTL_GET_ALGO_USAGE, - NULL, NULL); + break; } - return usage; - + return use; } - - int openpgp_md_test_algo( int algo ) { if( algo < 0 || algo > 110 ) - return GCRYERR_INV_MD_ALGO; - return gcry_md_test_algo(algo); -} - - -int -pubkey_get_npkey( int algo ) -{ - int n = gcry_pk_algo_info( algo, GCRYCTL_GET_ALGO_NPKEY, NULL, 0 ); - return n > 0? n : 0; + return G10ERR_DIGEST_ALGO; + return check_digest_algo(algo); } int -pubkey_get_nskey( int algo ) +check_permissions(const char *path,int extension,int checkonly) { - int n = gcry_pk_algo_info( algo, GCRYCTL_GET_ALGO_NSKEY, NULL, 0 ); - return n > 0? n : 0; -} +#if defined(HAVE_STAT) && !defined(HAVE_DOSISH_SYSTEM) + char *tmppath; + struct stat statbuf; + int ret=1; + int isdir=0; -int -pubkey_get_nsig( int algo ) -{ - int n = gcry_pk_algo_info( algo, GCRYCTL_GET_ALGO_NSIGN, NULL, 0 ); - return n > 0? n : 0; -} + if(opt.no_perm_warn) + return 0; -int -pubkey_get_nenc( int algo ) -{ - int n = gcry_pk_algo_info( algo, GCRYCTL_GET_ALGO_NENCR, NULL, 0 ); - return n > 0? n : 0; -} - - -unsigned int -pubkey_nbits( int algo, MPI *key ) -{ - int rc, nbits; - GCRY_SEXP sexp; - - if( algo == GCRY_PK_DSA ) { - rc = gcry_sexp_build ( &sexp, NULL, - "(public-key(dsa(p%m)(q%m)(g%m)(y%m)))", - key[0], key[1], key[2], key[3] ); + if(extension && path[0]!=DIRSEP_C) + { + if(strchr(path,DIRSEP_C)) + tmppath=make_filename(path,NULL); + else + tmppath=make_filename(GNUPG_LIBDIR,path,NULL); } - else if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) { - rc = gcry_sexp_build ( &sexp, NULL, - "(public-key(elg(p%m)(g%m)(y%m)))", - key[0], key[1], key[2] ); + else + tmppath=m_strdup(path); + + /* It's okay if the file doesn't exist */ + if(stat(tmppath,&statbuf)!=0) + { + ret=0; + goto end; } - else if( algo == GCRY_PK_RSA ) { - rc = gcry_sexp_build ( &sexp, NULL, - "(public-key(rsa(n%m)(e%m)))", - key[0], key[1] ); + + isdir=S_ISDIR(statbuf.st_mode); + + /* We may have to revisit this if we start piping keyrings to gpg + over a named pipe or keyserver character device :) */ + if(!isdir && !S_ISREG(statbuf.st_mode)) + { + ret=0; + goto end; } + + /* Per-user files must be owned by the user. Extensions must be + owned by the user or root. */ + if((!extension && statbuf.st_uid != getuid()) || + (extension && statbuf.st_uid!=0 && statbuf.st_uid!=getuid())) + { + if(!checkonly) + log_info(_("Warning: unsafe ownership on %s \"%s\"\n"), + isdir?"directory":extension?"extension":"file",path); + goto end; + } + + /* This works for both directories and files - basically, we don't + care what the owner permissions are, so long as the group and + other permissions are 0 for per-user files, and non-writable for + extensions. */ + if((extension && (statbuf.st_mode & (S_IWGRP|S_IWOTH)) !=0) || + (!extension && (statbuf.st_mode & (S_IRWXG|S_IRWXO)) != 0)) + { + char *dir; + + /* However, if the directory the directory/file is in is owned + by the user and is 700, then this is not a problem. + Theoretically, we could walk this test up to the root + directory /, but for the sake of sanity, I'm stopping at one + level down. */ + + dir=make_dirname(tmppath); + if(stat(dir,&statbuf)==0 && statbuf.st_uid==getuid() && + S_ISDIR(statbuf.st_mode) && (statbuf.st_mode & (S_IRWXG|S_IRWXO))==0) + { + m_free(dir); + ret=0; + goto end; + } + + m_free(dir); + + if(!checkonly) + log_info(_("Warning: unsafe permissions on %s \"%s\"\n"), + isdir?"directory":extension?"extension":"file",path); + goto end; + } + + ret=0; + + end: + m_free(tmppath); + + return ret; + +#endif /* HAVE_STAT && !HAVE_DOSISH_SYSTEM */ + + return 0; +} + +/* Special warning for the IDEA cipher */ +void +idea_cipher_warn(int show) +{ + static int warned=0; + + if(!warned || show) + { + log_info(_("the IDEA cipher plugin is not present\n")); + log_info(_("please see http://www.gnupg.org/why-not-idea.html " + "for more information\n")); + warned=1; + } +} + +/* Expand %-strings. Returns a string which must be m_freed. Returns + NULL if the string cannot be expanded (too large). */ +char * +pct_expando(const char *string,struct expando_args *args) +{ + const char *ch=string; + int idx=0,maxlen=0,done=0; + u32 pk_keyid[2]={0,0},sk_keyid[2]={0,0}; + char *ret=NULL; + + if(args->pk) + keyid_from_pk(args->pk,pk_keyid); + + if(args->sk) + keyid_from_sk(args->sk,sk_keyid); + + if(!args->pk && args->sk) + keyid_from_sk(args->sk,pk_keyid); + + while(*ch!='\0') + { + char *str=NULL; + + if(!done) + { + /* 8192 is way bigger than we'll need here */ + if(maxlen>=8192) + goto fail; + + maxlen+=1024; + ret=m_realloc(ret,maxlen); + } + + done=0; + + if(*ch=='%') + { + switch(*(ch+1)) + { + case 's': /* short key id */ + if(idx+8pk) + fingerprint_from_pk(args->pk,array,&len); + else + memset(array,0,MAX_FINGERPRINT_LEN); + + if(idx+(len*2)imagetype,0); + /* fall through */ + + case 'T': /* e.g. "image/jpeg" */ + if(str==NULL) + str=image_type_to_string(args->imagetype,2); + + if(idx+strlen(str)= '0' && *s <= '9' ) + c = 16 * (*s - '0'); + else if( *s >= 'A' && *s <= 'F' ) + c = 16 * (10 + *s - 'A'); + else if( *s >= 'a' && *s <= 'f' ) + c = 16 * (10 + *s - 'a'); else - return 0; - - if ( rc ) - BUG (); - - nbits = gcry_pk_get_nbits( sexp ); - gcry_sexp_release( sexp ); - return nbits; + return -1; + s++; + if( *s >= '0' && *s <= '9' ) + c += *s - '0'; + else if( *s >= 'A' && *s <= 'F' ) + c += 10 + *s - 'A'; + else if( *s >= 'a' && *s <= 'f' ) + c += 10 + *s - 'a'; + else + return -1; + return c; } +void +deprecated_warning(const char *configname,unsigned int configlineno, + const char *option,const char *repl1,const char *repl2) +{ + if(configname) + { + if(strncmp("--",option,2)==0) + option+=2; + + if(strncmp("--",repl1,2)==0) + repl1+=2; + + log_info(_("%s:%d: deprecated option \"%s\"\n"), + configname,configlineno,option); + } + else + log_info(_("WARNING: \"%s\" is a deprecated option\n"),option); + + log_info(_("please use \"%s%s\" instead\n"),repl1,repl2); +} + +const char * +compress_algo_to_string(int algo) +{ + const char *s="?"; + + switch(algo) + { + case 0: + s="Uncompressed"; + break; + + case 1: + s="ZIP"; + break; + + case 2: + s="ZLIB"; + break; + } + + return s; +} + +int +check_compress_algo(int algo) +{ + if(algo>=0 && algo<=2) + return 0; + + return G10ERR_COMPR_ALGO; +} diff --git a/g10/mkdtemp.c b/g10/mkdtemp.c new file mode 100644 index 000000000..0323486a3 --- /dev/null +++ b/g10/mkdtemp.c @@ -0,0 +1,98 @@ +/* mkdtemp.c - libc replacement function + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* This is a replacement function for mkdtemp in case the platform + we're building on (like mine!) doesn't have it. */ + +#include +#include +#include +#include +#include +#include +#include +#include "types.h" +#include "cipher.h" + +#ifdef MKDIR_TAKES_ONE_ARG +# undef mkdir +# define mkdir(a,b) mkdir(a) +#endif + +char *mkdtemp(char *template) +{ + int attempts,idx,count=0; + byte *ch; + + idx=strlen(template); + + /* Walk backwards to count all the Xes */ + while(idx>0 && template[idx-1]=='X') + { + count++; + idx--; + } + + if(count==0) + { + errno=EINVAL; + return NULL; + } + + ch=&template[idx]; + + /* Try 4 times to make the temp directory */ + for(attempts=0;attempts<4;attempts++) + { + int remaining=count; + char *marker=ch; + byte *randombits; + + idx=0; + + /* Using really random bits is probably overkill here. The + worst thing that can happen with a directory name collision + is that the function will return an error. */ + + randombits=get_random_bits(4*remaining,0,0); + + while(remaining>1) + { + sprintf(marker,"%02X",randombits[idx++]); + marker+=2; + remaining-=2; + } + + /* Any leftover Xes? get_random_bits rounds up to full bytes, + so this is safe. */ + if(remaining>0) + sprintf(marker,"%X",randombits[idx]&0xF); + + m_free(randombits); + + if(mkdir(template,0700)==0) + break; + } + + if(attempts==4) + return NULL; /* keeps the errno from mkdir, whatever it is */ + + return template; +} diff --git a/g10/openfile.c b/g10/openfile.c index 340cfd6fa..1bc4cf04c 100644 --- a/g10/openfile.c +++ b/g10/openfile.c @@ -1,5 +1,5 @@ /* openfile.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -29,7 +29,7 @@ #include #include #include "util.h" -#include +#include "memory.h" #include "ttyio.h" #include "options.h" #include "main.h" @@ -39,11 +39,11 @@ #ifdef USE_ONLY_8DOT3 #define SKELEXT ".skl" #else - #define SKELEXT ".skel" + #define SKELEXT EXTSEP_S "skel" #endif -#ifdef HAVE_DRIVE_LETTERS - #define CMP_FILENAME(a,b) stricmp( (a), (b) ) +#if defined (HAVE_DRIVE_LETTERS) || defined (__riscos__) + #define CMP_FILENAME(a,b) ascii_strcasecmp( (a), (b) ) #else #define CMP_FILENAME(a,b) strcmp( (a), (b) ) #endif @@ -99,24 +99,23 @@ make_outfile_name( const char *iname ) size_t n; if( (!iname || (*iname=='-' && !iname[1]) )) - return gcry_xstrdup("-"); + return m_strdup("-"); n = strlen(iname); - if( n > 4 && ( !CMP_FILENAME(iname+n-4,".gpg") - || !CMP_FILENAME(iname+n-4,".pgp") - || !CMP_FILENAME(iname+n-4,".sig") - || !CMP_FILENAME(iname+n-4,".asc") ) ) { - char *buf = gcry_xstrdup( iname ); + if( n > 4 && ( !CMP_FILENAME(iname+n-4, EXTSEP_S "gpg") + || !CMP_FILENAME(iname+n-4, EXTSEP_S "pgp") + || !CMP_FILENAME(iname+n-4, EXTSEP_S "sig") + || !CMP_FILENAME(iname+n-4, EXTSEP_S "asc") ) ) { + char *buf = m_strdup( iname ); buf[n-4] = 0; return buf; } - else if( n > 5 && !CMP_FILENAME(iname+n-5,".sign") ) { - char *buf = gcry_xstrdup( iname ); + else if( n > 5 && !CMP_FILENAME(iname+n-5, EXTSEP_S "sign") ) { + char *buf = m_strdup( iname ); buf[n-5] = 0; return buf; } - log_info(_("%s: unknown suffix\n"), iname ); return NULL; } @@ -143,19 +142,21 @@ ask_outfile_name( const char *name, size_t namelen ) n = strlen(s) + namelen + 10; defname = name && namelen? make_printable_string( name, namelen, 0): NULL; - prompt = gcry_xmalloc(n); + prompt = m_alloc(n); if( defname ) sprintf(prompt, "%s [%s]: ", s, defname ); else sprintf(prompt, "%s: ", s ); fname = cpr_get("openfile.askoutname", prompt ); cpr_kill_prompt(); - gcry_free(prompt); + m_free(prompt); if( !*fname ) { - gcry_free( fname ); fname = NULL; + m_free( fname ); fname = NULL; fname = defname; defname = NULL; } - gcry_free(defname); + m_free(defname); + if (fname) + trim_spaces (fname); return fname; } @@ -177,7 +178,7 @@ open_outfile( const char *iname, int mode, IOBUF *a ) if( (!iname || (*iname=='-' && !iname[1])) && !opt.outfile ) { if( !(*a = iobuf_create(NULL)) ) { log_error(_("%s: can't open: %s\n"), "[stdout]", strerror(errno) ); - rc = GPGERR_CREATE_FILE; + rc = G10ERR_CREATE_FILE; } else if( opt.verbose ) log_info(_("writing to stdout\n")); @@ -203,7 +204,7 @@ open_outfile( const char *iname, int mode, IOBUF *a ) const char *newsfx = mode==1 ? ".asc" : mode==2 ? ".sig" : ".gpg"; - buf = gcry_xmalloc(strlen(iname)+4+1); + buf = m_alloc(strlen(iname)+4+1); strcpy(buf,iname); dot = strchr(buf, '.' ); if( dot && dot > buf && dot[1] && strlen(dot) <= 4 @@ -215,24 +216,34 @@ open_outfile( const char *iname, int mode, IOBUF *a ) else strcat( buf, newsfx ); #else - buf = gcry_xmalloc(strlen(iname)+4+1); - strcpy(stpcpy(buf,iname), mode==1 ? ".asc" : - mode==2 ? ".sig" : ".gpg"); + buf = m_alloc(strlen(iname)+4+1); + strcpy(stpcpy(buf,iname), mode==1 ? EXTSEP_S "asc" : + mode==2 ? EXTSEP_S "sig" : EXTSEP_S "gpg"); #endif name = buf; } - if( overwrite_filep( name ) ) { + rc = 0; + while( !overwrite_filep (name) ) { + char *tmp = ask_outfile_name (NULL, 0); + if ( !tmp || !*tmp ) { + m_free (tmp); + rc = G10ERR_FILE_EXISTS; + break; + } + m_free (buf); + name = buf = tmp; + } + + if( !rc ) { if( !(*a = iobuf_create( name )) ) { log_error(_("%s: can't create: %s\n"), name, strerror(errno) ); - rc = GPGERR_CREATE_FILE; + rc = G10ERR_CREATE_FILE; } else if( opt.verbose ) log_info(_("writing to `%s'\n"), name ); } - else - rc = GPGERR_FILE_EXISTS; - gcry_free(buf); + m_free(buf); } return rc; } @@ -251,16 +262,16 @@ open_sigfile( const char *iname ) if( iname && !(*iname == '-' && !iname[1]) ) { len = strlen(iname); - if( len > 4 && ( !strcmp(iname + len - 4, ".sig") - || ( len > 5 && !strcmp(iname + len - 5, ".sign") ) - || !strcmp(iname + len - 4, ".asc")) ) { + if( len > 4 && ( !strcmp(iname + len - 4, EXTSEP_S "sig") + || ( len > 5 && !strcmp(iname + len - 5, EXTSEP_S "sign") ) + || !strcmp(iname + len - 4, EXTSEP_S "asc")) ) { char *buf; - buf = gcry_xstrdup(iname); - buf[len-4] = 0 ; + buf = m_strdup(iname); + buf[len-(buf[len-1]=='n'?5:4)] = 0 ; a = iobuf_open( buf ); - if( opt.verbose ) + if( a && opt.verbose ) log_info(_("assuming signed data in `%s'\n"), buf ); - gcry_free(buf); + m_free(buf); } } return a; @@ -282,20 +293,20 @@ copy_options_file( const char *destdir ) if( opt.dry_run ) return; - fname = gcry_xmalloc( strlen(datadir) + strlen(destdir) + 15 ); - strcpy(stpcpy(fname, datadir), "/options" SKELEXT ); + fname = m_alloc( strlen(datadir) + strlen(destdir) + 15 ); + strcpy(stpcpy(fname, datadir), DIRSEP_S "options" SKELEXT ); src = fopen( fname, "r" ); if( !src ) { log_error(_("%s: can't open: %s\n"), fname, strerror(errno) ); - gcry_free(fname); + m_free(fname); return; } - strcpy(stpcpy(fname, destdir), "/options" ); + strcpy(stpcpy(fname, destdir), DIRSEP_S "options" ); dst = fopen( fname, "w" ); if( !dst ) { log_error(_("%s: can't create: %s\n"), fname, strerror(errno) ); fclose( src ); - gcry_free(fname); + m_free(fname); return; } @@ -310,7 +321,7 @@ copy_options_file( const char *destdir ) fclose( dst ); fclose( src ); log_info(_("%s: new options file created\n"), fname ); - gcry_free(fname); + m_free(fname); } @@ -325,12 +336,12 @@ try_make_homedir( const char *fname ) * To cope with HOME, we do compare only the suffix if we see that * the default homedir does start with a tilde. */ - if( opt.dry_run ) + if( opt.dry_run || opt.no_homedir_creation ) return; if ( ( *defhome == '~' && ( strlen(fname) >= strlen (defhome+1) - && !strcmp(fname+strlen(defhome+1)-strlen(defhome+1), + && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) )) || ( *defhome != '~' && !compare_filenames( fname, defhome ) ) @@ -343,9 +354,6 @@ try_make_homedir( const char *fname ) copy_options_file( fname ); log_info(_("you have to start GnuPG again, " "so it can read the new options file\n") ); - gpg_exit(1); + g10_exit(1); } } - - - diff --git a/g10/options.h b/g10/options.h index b7ef09fe7..74cebe575 100644 --- a/g10/options.h +++ b/g10/options.h @@ -1,5 +1,5 @@ /* options.h - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -17,52 +17,82 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_OPTIONS_H -#define GPG_OPTIONS_H +#ifndef G10_OPTIONS_H +#define G10_OPTIONS_H #include +#include "main.h" +#include "packet.h" #undef ENABLE_COMMENT_PACKETS /* don't create comment packets */ +#ifndef EXTERN_UNLESS_MAIN_MODULE +/* Norcraft can't cope with common symbols */ + #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) + #define EXTERN_UNLESS_MAIN_MODULE extern + #else + #define EXTERN_UNLESS_MAIN_MODULE + #endif +#endif +EXTERN_UNLESS_MAIN_MODULE struct { int verbose; int quiet; - unsigned int debug; + unsigned debug; int armor; int compress; char *outfile; int dry_run; int list_only; int textmode; + int expert; + int ask_sig_expire; + int ask_cert_expire; int batch; /* run in batch mode */ int answer_yes; /* answer yes on most questions */ int answer_no; /* answer no on most questions */ int check_sigs; /* check key signatures */ int with_colons; int with_key_data; + int with_fingerprint; /* opt --with-fingerprint active */ int fingerprint; /* list fingerprints */ int list_sigs; /* list signatures */ int no_armor; - int list_packets; /* list-packets mode */ + int list_packets; /* list-packets mode: 1=normal, 2=invoked by command*/ int def_cipher_algo; int force_v3_sigs; + int force_v4_certs; int force_mdc; + int disable_mdc; int def_digest_algo; + int cert_digest_algo; int def_compress_algo; const char *def_secret_key; char *def_recipient; int def_recipient_self; - int no_comment; + int def_cert_check_level; + int sk_comments; int no_version; int marginals_needed; int completes_needed; int max_cert_depth; const char *homedir; + + char *display; /* 5 options to be passed to the gpg-agent */ + char *ttyname; + char *ttytype; + char *lc_ctype; + char *lc_messages; + int skip_verify; int compress_keys; int compress_sigs; int always_trust; + int pgp2; + int pgp6; + int pgp7; /* if we get any more of these, it's time to look at a + special emulate_pgp variable... */ int rfc1991; int rfc2440; int pgp2_workarounds; @@ -71,33 +101,77 @@ struct { const char *set_filename; const char *comment_string; int throw_keyid; + int show_photos; + const char *photo_viewer; int s2k_mode; int s2k_digest_algo; int s2k_cipher_algo; + int simple_sk_checksum; /* create the deprecated rfc2440 secret + key protection*/ int not_dash_escaped; int escape_from; int lock_once; - const char *keyserver_name; + char *keyserver_scheme; + char *keyserver_host; + char *keyserver_port; + struct + { + int verbose; + int include_revoked; + int include_disabled; + int include_subkeys; + int honor_http_proxy; + int broken_http_proxy; + int use_temp_files; + int keep_temp_files; + int fake_v3_keyids; + int auto_key_retrieve; + STRLIST other; + } keyserver_options; + int exec_disable; + char *def_preference_list; + prefitem_t *personal_cipher_prefs, + *personal_digest_prefs, + *personal_compress_prefs; + int no_perm_warn; + char *temp_dir; int no_encrypt_to; int interactive; - STRLIST notation_data; - const char *set_policy_url; + STRLIST sig_notation_data; + STRLIST cert_notation_data; + int show_notation; + STRLIST sig_policy_url; + STRLIST cert_policy_url; + int show_policy_url; int use_embedded_filename; int allow_non_selfsigned_uid; int allow_freeform_uid; int no_literal; ulong set_filesize; - int honor_http_proxy; int fast_list_mode; + int fixed_list_mode; int ignore_time_conflict; + int ignore_valid_from; + int ignore_crc_error; int command_fd; - int auto_key_retrieve; + const char *override_session_key; + int show_session_key; int use_agent; + const char *gpg_agent_info; int merge_only; int try_all_secrets; + int no_expensive_trust_checks; + int no_sig_cache; + int no_sig_create_check; + int no_auto_check_trustdb; + int preserve_permissions; + int no_homedir_creation; + int show_keyring; + struct groupitem *grouplist; } opt; +#define EMUBUG_GPGCHKSUM 1 #define EMUBUG_3DESS2K 2 #define EMUBUG_MDENCODE 4 @@ -112,14 +186,15 @@ struct { #define DBG_MEMSTAT_VALUE 128 /* show memory statistics */ #define DBG_TRUST_VALUE 256 /* debug the trustdb */ #define DBG_HASHING_VALUE 512 /* debug hashing operations */ +#define DBG_EXTPROG_VALUE 1024 /* debug external program calls */ #define DBG_PACKET (opt.debug & DBG_PACKET_VALUE) #define DBG_FILTER (opt.debug & DBG_FILTER_VALUE) -#define DBG_MEMORY (opt.debug & DBG_MEMORY_VALUE) #define DBG_CACHE (opt.debug & DBG_CACHE_VALUE) #define DBG_TRUST (opt.debug & DBG_TRUST_VALUE) -#define DBG_CIPHER (opt.debug & DBG_CIPHER_VALUE) #define DBG_HASHING (opt.debug & DBG_HASHING_VALUE) +#define DBG_EXTPROG (opt.debug & DBG_EXTPROG_VALUE) -#endif /*GPG_OPTIONS_H*/ + +#endif /*G10_OPTIONS_H*/ diff --git a/g10/options.skel b/g10/options.skel index 646e0152b..93bcfcd57 100644 --- a/g10/options.skel +++ b/g10/options.skel @@ -2,6 +2,15 @@ These first three lines are not copied to the options file in the users home directory. $Id$ # Options for GnuPG +# Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Unless you you specify which option file to use (with the # commandline option "--options filename"), GnuPG uses the @@ -22,6 +31,7 @@ $Id$ #default-key 621CC013 + # If you do not pass a recipient to gpg, it will ask for one. # Using this option you can encrypt to a default key. key validation # will not be done in this case. @@ -30,31 +40,32 @@ $Id$ #default-recipient some-user-id #default-recipient-self - -# The next option is enabled because this one is needed for interoperation -# with PGP 5 users. To enable full OpenPGP compliance you have to remove -# this option. - -force-v3-sigs +# By default GnuPG creates version 3 signatures for data files. This +# is not OpenPGP compliant but PGP 6 requires them. To disable it, +# you may use this option or --openpgp. +#no-force-v3-sigs # Because some mailers change lines starting with "From " to ">From " # it is good to handle such lines in a special way when creating -# cleartext signatures; all other PGP versions it this way too. -# To enable full OpenPGP compliance you have to remove this option. +# cleartext signatures; all other PGP versions do it this way too. +# To enable full OpenPGP compliance you may want to use this option. +#no-escape-from-lines -escape-from-lines +# If you do not use the Latin-1 (ISO-8859-1) charset, you should tell +# GnuPG which is the native character set. Please check the man page +# for supported character sets. This character set is only used for +# Meta data and not for the actual message which does not undergo any +# translation. Note that future version of GnuPG will change to UTF-8 +# as default character set. +#charset utf-8 -# If you do not use the Latin-1 (ISO-8859-1) charset, you should -# tell GnuPG which is the native character set. Please check -# the man page for supported character sets. -#charset koi8-r - - -# You may define aliases like this: -# alias mynames -u 0x12345678 -u 0x456789ab -z 9 -# everytime you use --mynames, it will be expanded to the options -# in the above defintion. The name of the alias may not be abbreviated. -# NOTE: This is not yet implemented +# Group names may be defined like this: +# group mynames paige 0x12345678 joe patti +# +# Any time "mynames" is a receipient (-r or --recipient), it will be +# expanded to the names "paige", "joe", and "patti", and the key ID +# "0x12345678". Note there is only one level of expansion - you +# cannot make an group that points to another group. # lock the file only once for the lifetime of a process. # if you do not define this, the lock will be obtained and released @@ -70,17 +81,122 @@ lock-once #load-extension rndunix #load-extension rndegd +# GnuPG can send and receive keys to and from a keyserver. These +# servers can be HKP, email, or LDAP (if GnuPG is built with LDAP +# support). +# +# Example HKP keyserver: +# x-hkp://keyserver.cryptnet.net +# +# Example email keyserver: +# mailto:pgp-public-keys@keys.nl.pgp.net +# +# Example LDAP keyserver: +# ldap://pgp.surfnet.nl:11370 +# +# Regular URL syntax applies, and you can set an alternate port +# through the usual method: +# x-hkp://keyserver.example.net:22742 +# +# If you have problems connecting to a HKP server through a buggy http +# proxy, you can use keyserver option broken-http-proxy (see below), +# but first you should make sure that you have read the man page +# regarding proxies (keyserver option honor-http-proxy) +# +# Most users just set the name and type of their preferred keyserver. +# Most servers do synchronize with each other and DNS round-robin may +# give you a quasi-random server each time. -# GnuPG can import a key from a HKP keyerver if one is missing -# for sercain operations. Is you set this option to a keyserver -# you will be asked in such a case whether GnuPG should try to -# import the key from that server (server do syncronize with each -# others and DNS Round-Robin may give you a random server each time). -# Use "host -l pgp.net | grep www" to figure out a keyserver. -#keyserver wwwkeys.eu.pgp.net +#keyserver x-hkp://keyserver.cryptnet.net +#keyserver mailto:pgp-public-keys@keys.nl.pgp.net +#keyserver ldap://pgp.surfnet.nl:11370 -# The environment variable http_proxy is only used when the -# this option is set. +# Options for keyserver functions +# +# include-disabled = when searching, include keys marked as "disabled" +# on the keyserver (not all keyservers support this). +# +# include-revoked = when searching, include keys marked as "revoked" +# on the keyserver. +# +# verbose = show more information as the keys are fetched. +# Can be used more than once to increase the amount +# of information shown. +# +# use-temp-files = use temporary files instead of a pipe to talk to the +# keyserver. Some platforms (Win32 for one) always +# have this on. +# +# keep-temp-files = do not delete temporary files after using them +# (really only useful for debugging) +# +# honor-http-proxy = if the keyserver uses HTTP, honor the http_proxy +# environment variable +# +# broken-http-proxy = try to work around a buggy HTTP proxy +# +# auto-key-retrieve = automatically fetch keys as needed from the +# keyserver when verifying signatures or when importing +# keys that have been revoked by a revocation key that +# is not present on the keyring. -honor-http-proxy +#keyserver-options auto-key-retrieve include-disabled include-revoked +# Uncomment this line to display photo user IDs in key listings +#show-photos + +# Use this program to display photo user IDs +# +# %i is expanded to a temporary file that contains the photo. +# %I is the same as %i, but the file isn't deleted afterwards by GnuPG. +# %k is expanded to the key ID of the key. +# %K is expanded to the long OpenPGP key ID of the key. +# %t is expanded to the extension of the image (e.g. "jpg"). +# %T is expanded to the MIME type of the image (e.g. "image/jpeg"). +# %f is expanded to the fingerprint of the key. +# %% is %, of course. +# +# If %i or %I are not present, then the photo is supplied to the +# viewer on standard input. If your platform supports it, standard +# input is the best way to do this as it avoids the time and effort in +# generating and then cleaning up a secure temp file. +# +# The default program is "xloadimage -fork -quiet -title 'KeyID 0x%k' stdin" +# +# Some other viewers: +# photo-viewer "qiv %i" +# photo-viewer "ee %i" +# photo-viewer "display -title 'KeyID 0x%k'" +# +# This one saves a copy of the photo ID in your home directory: +# photo-viewer "cat > ~/photoid-for-key-%k.%t" +# +# Use your MIME handler to view photos: +# photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG" +# +# Use the Win32 registry to pick a viewer for you: +# On Win95/98/Me (also the default on Win32): +# photo-viewer "start /w" +# On NT/2k/XP: +# photo-viewer "cmd /c start /w" + + +# Passphrase agent +# +# We support the old experimental passphrase agent protocol as well +# as the new Assuan based one (currently available in the "newpg" package +# at ftp.gnupg.org/gcrypt/alpha/aegypten/). To make use of the agent, you have +# to run an agent as daemon and use the option +# +# use-agent +# +# which tries to use the agent but will fallback to the regular mode +# if there is a problem connecting to the agent. The normal way to +# locate the agent is by looking at the environment variable +# GPG_AGENT_INFO which should have been set during gpg-agent startup. +# In certain situations the use of this variable is not possible, thus +# the option +# +# --gpg-agent-info=::1 +# +# may be used to override it. diff --git a/g10/packet.h b/g10/packet.h index 2f7f16f8c..023680b9e 100644 --- a/g10/packet.h +++ b/g10/packet.h @@ -1,5 +1,5 @@ -/* packet.h - packet read/write stuff - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* packet.h - packet definitions + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -18,22 +18,15 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_PACKET_H -#define GPG_PACKET_H +#ifndef G10_PACKET_H +#define G10_PACKET_H #include "types.h" #include "iobuf.h" +#include "mpi.h" +#include "cipher.h" #include "filter.h" - -#ifndef DID_MPI_TYPEDEF - typedef struct gcry_mpi *MPI; - #define DID_MPI_TYPEDEF -#endif - -#define GNUPG_MAX_NPKEY 4 -#define GNUPG_MAX_NSKEY 6 -#define GNUPG_MAX_NSIG 2 -#define GNUPG_MAX_NENC 2 +#include "global.h" #define DEBUG_PARSE_PACKET 1 @@ -54,14 +47,34 @@ typedef enum { PKT_USER_ID =13, /* user id packet */ PKT_PUBLIC_SUBKEY =14, /* public subkey (OpenPGP) */ PKT_OLD_COMMENT =16, /* comment packet from an OpenPGP draft */ - PKT_PHOTO_ID =17, /* PGP's photo ID */ + PKT_ATTRIBUTE =17, /* PGP's attribute packet */ PKT_ENCRYPTED_MDC =18, /* integrity protected encrypted data */ PKT_MDC =19, /* manipulaion detection code packet */ PKT_COMMENT =61, /* new comment packet (private) */ + PKT_GPG_CONTROL =63 /* internal control packet */ } pkttype_t; typedef struct packet_struct PACKET; +/* PKT_GPG_CONTROL types */ +typedef enum { + CTRLPKT_CLEARSIGN_START = 1, + CTRLPKT_PIPEMODE = 2, + CTRLPKT_PLAINTEXT_MARK =3 +} ctrlpkttype_t; + +typedef enum { + PREFTYPE_NONE = 0, + PREFTYPE_SYM = 1, + PREFTYPE_HASH = 2, + PREFTYPE_ZIP = 3 +} preftype_t; + +typedef struct { + byte type; + byte value; +} prefitem_t; + typedef struct { int mode; byte hash_algo; @@ -82,7 +95,7 @@ typedef struct { byte version; byte pubkey_algo; /* algorithm used for public key scheme */ byte throw_keyid; - MPI data[GNUPG_MAX_NENC]; + MPI data[PUBKEY_MAX_NENC]; } PKT_pubkey_enc; @@ -95,26 +108,75 @@ typedef struct { } PKT_onepass_sig; +typedef struct { + size_t size; /* allocated */ + size_t len; /* used */ + byte data[1]; +} subpktarea_t; + +struct revocation_key { + byte class; + byte algid; + byte fpr[MAX_FINGERPRINT_LEN]; +}; + typedef struct { ulong local_id; /* internal use, valid if > 0 */ struct { unsigned checked:1; /* signature has been checked */ unsigned valid:1; /* signature is good (if checked is set) */ unsigned unknown_critical:1; + unsigned exportable:1; + unsigned revocable:1; + unsigned policy_url:1; /* Policy URL is present */ + unsigned notation:1; /* At least one notation is present */ + unsigned expired:1; } flags; u32 keyid[2]; /* 64 bit keyid */ u32 timestamp; /* signature made */ + u32 expiredate; /* expires at this date or 0 if not at all */ byte version; byte sig_class; /* sig classification, append for MD calculation*/ byte pubkey_algo; /* algorithm used for public key scheme */ - /* (GCRY_PK_xxx) */ - byte digest_algo; /* algorithm used for digest (DIGEST_ALGO_xxxx) */ - byte *hashed_data; /* all subpackets with hashed data (v4 only) */ - byte *unhashed_data; /* ditto for unhashed data */ + /* (PUBKEY_ALGO_xxx) */ + byte digest_algo; /* algorithm used for digest (DIGEST_ALGO_xxxx) */ + struct revocation_key **revkey; + int numrevkeys; + subpktarea_t *hashed; /* all subpackets with hashed data (v4 only) */ + subpktarea_t *unhashed; /* ditto for unhashed data */ byte digest_start[2]; /* first 2 bytes of the digest */ - MPI data[GNUPG_MAX_NSIG]; + MPI data[PUBKEY_MAX_NSIG]; } PKT_signature; +#define ATTRIB_IMAGE 1 + +/* This is the cooked form of attributes */ +struct user_attribute { + byte type; + const byte *data; + unsigned long len; +}; + +typedef struct { + int ref; /* reference counter */ + int len; /* length of the name */ + struct user_attribute *attribs; + int numattribs; + byte *attrib_data; /* if this is not NULL, the packet is an attribute */ + unsigned long attrib_len; + int help_key_usage; + u32 help_key_expire; + int is_primary; + int is_revoked; + int is_expired; + u32 expiredate; /* expires at this date or 0 if not at all */ + prefitem_t *prefs; /* list of preferences (may be NULL)*/ + int mdc_feature; + u32 created; /* according to the self-signature */ + byte selfsigversion; + char name[1]; +} PKT_user_id; + /**************** * Note about the pkey/skey elements: We assume that the secret keys @@ -125,31 +187,38 @@ typedef struct { typedef struct { u32 timestamp; /* key made */ u32 expiredate; /* expires at this date or 0 if not at all */ + u32 max_expiredate; /* must not expire past this date */ byte hdrbytes; /* number of header bytes */ byte version; + byte selfsigversion; /* highest version of all of the self-sigs */ byte pubkey_algo; /* algorithm used for public key scheme */ - byte pubkey_usage; /* the actual allowed usage as set by getkey() */ - u32 created; /* according to the self-signature */ + byte pubkey_usage; /* for now only used to pass it to getkey() */ byte req_usage; /* hack to pass a request to getkey() */ byte req_algo; /* Ditto */ u32 has_expired; /* set to the expiration date if expired */ int is_revoked; /* key has been revoked */ int is_valid; /* key (especially subkey) is valid */ + int dont_cache; /* do not cache this */ ulong local_id; /* internal use, valid if > 0 */ u32 main_keyid[2]; /* keyid of the primary key */ u32 keyid[2]; /* calculated by keyid_from_pk() */ + prefitem_t *prefs; /* list of preferences (may be NULL) */ + int mdc_feature; /* mdc feature set */ byte *namehash; /* if != NULL: found by this name */ - MPI pkey[GNUPG_MAX_NPKEY]; + PKT_user_id *user_id; /* if != NULL: found by that uid */ + struct revocation_key *revkey; + int numrevkeys; + MPI pkey[PUBKEY_MAX_NPKEY]; } PKT_public_key; typedef struct { u32 timestamp; /* key made */ u32 expiredate; /* expires at this date or 0 if not at all */ + u32 max_expiredate; /* must not expire past this date */ byte hdrbytes; /* number of header bytes */ byte version; byte pubkey_algo; /* algorithm used for public key scheme */ byte pubkey_usage; - u32 created; /* according to the self-signature */ byte req_usage; byte req_algo; u32 has_expired; /* set to the expiration date if expired */ @@ -164,11 +233,12 @@ typedef struct { /* and should never be passed to a mpi_xxx() */ struct { byte algo; /* cipher used to protect the secret information*/ + byte sha1chk; /* SHA1 is used instead of a 16 bit checksum */ STRING2KEY s2k; byte ivlen; /* used length of the iv */ byte iv[16]; /* initialization vector for CFB mode */ } protect; - MPI skey[GNUPG_MAX_NSKEY]; + MPI skey[PUBKEY_MAX_NSKEY]; u16 csum; /* checksum */ } PKT_secret_key; @@ -178,19 +248,6 @@ typedef struct { char data[1]; } PKT_comment; -typedef struct { - ulong stored_at; /* the stream offset where it was stored - * by build-packet */ - int len; /* length of the name */ - char *photo; /* if this is not NULL, the packet is a photo ID */ - int photolen; /* and the length of the photo */ - int help_key_usage; - u32 help_key_expire; - int is_primary; - u32 created; /* according to the self-signature */ - char name[1]; -} PKT_user_id; - typedef struct { u32 len; /* reserved */ byte new_ctb; @@ -200,6 +257,7 @@ typedef struct { typedef struct { u32 len; /* length of encrypted data */ + int extralen; /* this is (blocksize+2) */ byte new_ctb; /* uses a new CTB */ byte mdc_method; /* > 0: integrity protected encrypted data packet */ IOBUF buf; /* IOBUF reference */ @@ -211,18 +269,25 @@ typedef struct { typedef struct { unsigned int trustval; + unsigned int sigcache; } PKT_ring_trust; typedef struct { u32 len; /* length of encrypted data */ IOBUF buf; /* IOBUF reference */ byte new_ctb; + byte is_partial; /* partial length encoded */ int mode; u32 timestamp; int namelen; char name[1]; } PKT_plaintext; +typedef struct { + int control; + size_t datalen; + char data[1]; +} PKT_gpg_control; /* combine all packets into a union */ struct packet_struct { @@ -242,6 +307,7 @@ struct packet_struct { PKT_mdc *mdc; /* PKT_MDC */ PKT_ring_trust *ring_trust; /* PKT_RING_TRUST */ PKT_plaintext *plaintext; /* PKT_PLAINTEXT */ + PKT_gpg_control *gpg_control; /* PKT_GPG_CONTROL */ } pkt; }; @@ -276,7 +342,7 @@ typedef enum { SIGSUBPKT_SIGNERS_UID =28, /* signer's user id */ SIGSUBPKT_REVOC_REASON =29, /* reason for revocation */ SIGSUBPKT_FEATURES =30, /* feature flags */ - SIGSUBPKT_PRIV_ADD_SIG =101,/* signatur is also valid for this uid */ + SIGSUBPKT_PRIV_VERIFY_CACHE =101, /* cache verification result (obsolete)*/ SIGSUBPKT_FLAG_CRITICAL=128 } sigsubpkttype_t; @@ -293,39 +359,62 @@ int list_packets( IOBUF a ); int set_packet_list_mode( int mode ); #if DEBUG_PARSE_PACKET -int dbg_search_packet( IOBUF inp, PACKET *pkt, int pkttype, ulong *retpos, const char* file, int lineno ); -int dbg_parse_packet( IOBUF inp, PACKET *ret_pkt, ulong *pos, +int dbg_search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid, + const char* file, int lineno ); +int dbg_parse_packet( IOBUF inp, PACKET *ret_pkt, const char* file, int lineno ); -int dbg_copy_all_packets( IOBUF inp, IOBUF out, const char* file, int lineno ); -int dbg_copy_some_packets( IOBUF inp, IOBUF out, ulong stopoff, const char* file, int lineno ); -int dbg_skip_some_packets( IOBUF inp, unsigned n, const char* file, int lineno ); -#define search_packet( a,b,c,d ) dbg_search_packet( (a), (b), (c), (d), __FILE__, __LINE__ ) -#define parse_packet( a, b, c ) dbg_parse_packet( (a), (b), (c), __FILE__, __LINE__ ) -#define copy_all_packets( a,b ) dbg_copy_all_packets((a),(b), __FILE__, __LINE__ ) -#define copy_some_packets( a,b,c ) dbg_copy_some_packets((a),(b),(c), __FILE__, __LINE__ ) -#define skip_some_packets( a,b ) dbg_skip_some_packets((a),(b), __FILE__, __LINE__ ) +int dbg_copy_all_packets( IOBUF inp, IOBUF out, + const char* file, int lineno ); +int dbg_copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff, + const char* file, int lineno ); +int dbg_skip_some_packets( IOBUF inp, unsigned n, + const char* file, int lineno ); +#define search_packet( a,b,c,d ) \ + dbg_search_packet( (a), (b), (c), (d), __FILE__, __LINE__ ) +#define parse_packet( a, b ) \ + dbg_parse_packet( (a), (b), __FILE__, __LINE__ ) +#define copy_all_packets( a,b ) \ + dbg_copy_all_packets((a),(b), __FILE__, __LINE__ ) +#define copy_some_packets( a,b,c ) \ + dbg_copy_some_packets((a),(b),(c), __FILE__, __LINE__ ) +#define skip_some_packets( a,b ) \ + dbg_skip_some_packets((a),(b), __FILE__, __LINE__ ) #else -int search_packet( IOBUF inp, PACKET *pkt, int pkttype, ulong *retpos ); -int parse_packet( IOBUF inp, PACKET *ret_pkt, ulong *retpos); +int search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid ); +int parse_packet( IOBUF inp, PACKET *ret_pkt); int copy_all_packets( IOBUF inp, IOBUF out ); -int copy_some_packets( IOBUF inp, IOBUF out, ulong stopoff ); +int copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff ); int skip_some_packets( IOBUF inp, unsigned n ); #endif -const byte *enum_sig_subpkt( const byte *buffer, sigsubpkttype_t reqtype, - size_t *ret_n, int *start ); -const byte *parse_sig_subpkt( const byte *buffer, sigsubpkttype_t reqtype, - size_t *ret_n ); -const byte *parse_sig_subpkt2( PKT_signature *sig, - sigsubpkttype_t reqtype, size_t *ret_n ); +const byte *enum_sig_subpkt ( const subpktarea_t *subpkts, + sigsubpkttype_t reqtype, + size_t *ret_n, int *start, int *critical ); +const byte *parse_sig_subpkt ( const subpktarea_t *buffer, + sigsubpkttype_t reqtype, + size_t *ret_n ); +const byte *parse_sig_subpkt2 ( PKT_signature *sig, + sigsubpkttype_t reqtype, + size_t *ret_n ); +int parse_one_sig_subpkt( const byte *buffer, size_t n, int type ); +void parse_revkeys(PKT_signature *sig); +int parse_attribute_subpkts(PKT_user_id *uid); +void make_attribute_uidname(PKT_user_id *uid); +PACKET *create_gpg_control ( ctrlpkttype_t type, + const byte *data, + size_t datalen ); /*-- build-packet.c --*/ int build_packet( IOBUF inp, PACKET *pkt ); u32 calc_packet_length( PACKET *pkt ); -void hash_public_key( GCRY_MD_HD md, PKT_public_key *pk ); +void hash_public_key( MD_HANDLE md, PKT_public_key *pk ); void build_sig_subpkt( PKT_signature *sig, sigsubpkttype_t type, const byte *buffer, size_t buflen ); void build_sig_subpkt_from_sig( PKT_signature *sig ); +int delete_sig_subpkt(subpktarea_t *buffer, sigsubpkttype_t type ); +void build_attribute_subpkt(PKT_user_id *uid,byte type, + const void *buf,int buflen, + const void *header,int headerlen); /*-- free-packet.c --*/ void free_symkey_enc( PKT_symkey_enc *enc ); @@ -336,18 +425,16 @@ void release_public_key_parts( PKT_public_key *pk ); void free_public_key( PKT_public_key *key ); void release_secret_key_parts( PKT_secret_key *sk ); void free_secret_key( PKT_secret_key *sk ); +void free_attributes(PKT_user_id *uid); void free_user_id( PKT_user_id *uid ); void free_comment( PKT_comment *rem ); void free_packet( PACKET *pkt ); +prefitem_t *copy_prefs (const prefitem_t *prefs); PKT_public_key *copy_public_key( PKT_public_key *d, PKT_public_key *s ); -PKT_public_key *copy_public_key_new_namehash( PKT_public_key *d, - PKT_public_key *s, - const byte *namehash ); -void copy_public_parts_to_secret_key( PKT_public_key *pk, - PKT_secret_key *sk ); +void copy_public_parts_to_secret_key( PKT_public_key *pk, PKT_secret_key *sk ); PKT_secret_key *copy_secret_key( PKT_secret_key *d, PKT_secret_key *s ); PKT_signature *copy_signature( PKT_signature *d, PKT_signature *s ); -PKT_user_id *copy_user_id( PKT_user_id *d, PKT_user_id *s ); +PKT_user_id *scopy_user_id (PKT_user_id *sd ); int cmp_public_keys( PKT_public_key *a, PKT_public_key *b ); int cmp_secret_keys( PKT_secret_key *a, PKT_secret_key *b ); int cmp_signatures( PKT_signature *a, PKT_signature *b ); @@ -356,7 +443,9 @@ int cmp_user_ids( PKT_user_id *a, PKT_user_id *b ); /*-- sig-check.c --*/ -int signature_check( PKT_signature *sig, GCRY_MD_HD digest ); +int signature_check( PKT_signature *sig, MD_HANDLE digest ); +int signature_check2( PKT_signature *sig, MD_HANDLE digest, + u32 *r_expiredate, int *r_expired ); /*-- seckey-cert.c --*/ int is_secret_key_protected( PKT_secret_key *sk ); @@ -365,6 +454,7 @@ int protect_secret_key( PKT_secret_key *sk, DEK *dek ); /*-- pubkey-enc.c --*/ int get_session_key( PKT_pubkey_enc *k, DEK *dek ); +int get_override_session_key( DEK *dek, const char *string ); /*-- compress.c --*/ int handle_compressed( void *ctx, PKT_compressed *cd, @@ -376,7 +466,7 @@ int decrypt_data( void *ctx, PKT_encrypted *ed, DEK *dek ); /*-- plaintext.c --*/ int handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, int nooutput, int clearsig ); -int ask_for_detached_datafile( GCRY_MD_HD md, GCRY_MD_HD md2, +int ask_for_detached_datafile( MD_HANDLE md, MD_HANDLE md2, const char *inname, int textmode ); /*-- comment.c --*/ @@ -385,12 +475,19 @@ int write_comment( IOBUF out, const char *s ); /*-- sign.c --*/ int make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk, PKT_user_id *uid, PKT_public_key *subpk, - PKT_secret_key *sk, - int sigclass, int digest_algo, + PKT_secret_key *sk, int sigclass, int digest_algo, + int sigversion, u32 timestamp, u32 duration, int (*mksubpkt)(PKT_signature *, void *), void *opaque ); +int update_keysig_packet( PKT_signature **ret_sig, + PKT_signature *orig_sig, + PKT_public_key *pk, + PKT_user_id *uid, + PKT_secret_key *sk, + int (*mksubpkt)(PKT_signature *, void *), + void *opaque ); /*-- keygen.c --*/ PKT_user_id *generate_user_id(void); -#endif /*GPG_PACKET_H*/ +#endif /*G10_PACKET_H*/ diff --git a/g10/parse-packet.c b/g10/parse-packet.c index 691be6662..d57659b6b 100644 --- a/g10/parse-packet.c +++ b/g10/parse-packet.c @@ -1,5 +1,5 @@ /* parse-packet.c - read packets - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,11 +24,14 @@ #include #include -#include #include "packet.h" #include "iobuf.h" +#include "mpi.h" #include "util.h" +#include "cipher.h" +#include "memory.h" #include "filter.h" +#include "photoid.h" #include "options.h" #include "main.h" #include "i18n.h" @@ -36,8 +39,8 @@ static int mpi_print_mode = 0; static int list_mode = 0; -static int parse( IOBUF inp, PACKET *pkt, int reqtype, - ulong *retpos, int *skip, IOBUF out, int do_skip +static int parse( IOBUF inp, PACKET *pkt, int onlykeypkts, + off_t *retpos, int *skip, IOBUF out, int do_skip #ifdef DEBUG_PARSE_PACKET ,const char *dbg_w, const char *dbg_f, int dbg_l #endif @@ -59,7 +62,7 @@ static int parse_key( IOBUF inp, int pkttype, unsigned long pktlen, byte *hdr, int hdrlen, PACKET *packet ); static int parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); -static int parse_photo_id( IOBUF inp, int pkttype, unsigned long pktlen, +static int parse_attribute( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); static int parse_comment( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); @@ -73,6 +76,8 @@ static int parse_encrypted( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet, int new_ctb); static int parse_mdc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet, int new_ctb); +static int parse_gpg_control( IOBUF inp, int pkttype, unsigned long pktlen, + PACKET *packet ); static unsigned short read_16(IOBUF inp) @@ -100,7 +105,7 @@ set_packet_list_mode( int mode ) { int old = list_mode; list_mode = mode; - mpi_print_mode = (opt.debug & DBG_MPI_VALUE); + mpi_print_mode = DBG_MPI; return old; } @@ -127,53 +132,51 @@ unknown_pubkey_warning( int algo ) */ #ifdef DEBUG_PARSE_PACKET int -dbg_parse_packet( IOBUF inp, PACKET *pkt, ulong *retpos, - const char *dbg_f, int dbg_l ) +dbg_parse_packet( IOBUF inp, PACKET *pkt, const char *dbg_f, int dbg_l ) { int skip, rc; do { - rc = parse( inp, pkt, 0, retpos, - &skip, NULL, 0, "parse", dbg_f, dbg_l ); + rc = parse( inp, pkt, 0, NULL, &skip, NULL, 0, "parse", dbg_f, dbg_l ); } while( skip ); return rc; } #else int -parse_packet( IOBUF inp, PACKET *pkt, ulong *retpos ) +parse_packet( IOBUF inp, PACKET *pkt ) { int skip, rc; do { - rc = parse( inp, pkt, 0, retpos, &skip, NULL, 0 ); + rc = parse( inp, pkt, 0, NULL, &skip, NULL, 0 ); } while( skip ); return rc; } #endif /**************** - * Like parse packet, but only return packets of the given type. + * Like parse packet, but only return secret or public (sub)key packets. */ #ifdef DEBUG_PARSE_PACKET int -dbg_search_packet( IOBUF inp, PACKET *pkt, int pkttype, ulong *retpos, +dbg_search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid, const char *dbg_f, int dbg_l ) { int skip, rc; do { - rc = parse( inp, pkt, pkttype, retpos, &skip, NULL, 0, "search", dbg_f, dbg_l ); + rc = parse( inp, pkt, with_uid?2:1, retpos, &skip, NULL, 0, "search", dbg_f, dbg_l ); } while( skip ); return rc; } #else int -search_packet( IOBUF inp, PACKET *pkt, int pkttype, ulong *retpos ) +search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid ) { int skip, rc; do { - rc = parse( inp, pkt, pkttype, retpos, &skip, NULL, 0 ); + rc = parse( inp, pkt, with_uid?2:1, retpos, &skip, NULL, 0 ); } while( skip ); return rc; } @@ -213,7 +216,7 @@ copy_all_packets( IOBUF inp, IOBUF out ) */ #ifdef DEBUG_PARSE_PACKET int -dbg_copy_some_packets( IOBUF inp, IOBUF out, ulong stopoff, +dbg_copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff, const char *dbg_f, int dbg_l ) { PACKET pkt; @@ -228,7 +231,7 @@ dbg_copy_some_packets( IOBUF inp, IOBUF out, ulong stopoff, } #else int -copy_some_packets( IOBUF inp, IOBUF out, ulong stopoff ) +copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff ) { PACKET pkt; int skip, rc=0; @@ -275,14 +278,14 @@ skip_some_packets( IOBUF inp, unsigned n ) /**************** - * Parse packet. Set the variable skip points to to 1 if the packet - * should be skipped; this is the case if either there is a - * requested packet type and the parsed packet doesn't match or the + * Parse packet. Set the variable skip points to 1 if the packet + * should be skipped; this is the case if either ONLYKEYPKTS is set + * and the parsed packet isn't one or the * packet-type is 0, indicating deleted stuff. * if OUT is not NULL, a special copymode is used. */ static int -parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, +parse( IOBUF inp, PACKET *pkt, int onlykeypkts, off_t *retpos, int *skip, IOBUF out, int do_skip #ifdef DEBUG_PARSE_PACKET ,const char *dbg_w, const char *dbg_f, int dbg_l @@ -294,6 +297,7 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, byte hdr[8]; int hdrlen; int new_ctb = 0; + int with_uid = (onlykeypkts == 2); *skip = 0; assert( !pkt->pkt.generic ); @@ -307,9 +311,8 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, hdrlen=0; hdr[hdrlen++] = ctb; if( !(ctb & 0x80) ) { - log_error("%s: invalid packet (ctb=%02x) near %lu\n", - iobuf_where(inp), ctb, iobuf_tell(inp) ); - rc = GPGERR_INVALID_PACKET; + log_error("%s: invalid packet (ctb=%02x)\n", iobuf_where(inp), ctb ); + rc = G10ERR_INVALID_PACKET; goto leave; } pktlen = 0; @@ -318,7 +321,7 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, pkttype = ctb & 0x3f; if( (c = iobuf_get(inp)) == -1 ) { log_error("%s: 1st length byte missing\n", iobuf_where(inp) ); - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } hdr[hdrlen++] = c; @@ -328,7 +331,7 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, pktlen = (c - 192) * 256; if( (c = iobuf_get(inp)) == -1 ) { log_error("%s: 2nd length byte missing\n", iobuf_where(inp) ); - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } hdr[hdrlen++] = c; @@ -340,7 +343,7 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, pktlen |= (hdr[hdrlen++] = iobuf_get_noeof(inp)) << 8; if( (c = iobuf_get(inp)) == -1 ) { log_error("%s: 4 byte length invalid\n", iobuf_where(inp) ); - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } pktlen |= (hdr[hdrlen++] = c ); @@ -366,15 +369,30 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, } } + if (pktlen == 0xffffffff) { + /* with a some probability this is caused by a problem in the + * the uncompressing layer - in some error cases it just loops + * and spits out 0xff bytes. */ + log_error ("%s: garbled packet detected\n", iobuf_where(inp) ); + g10_exit (2); + } + if( out && pkttype ) { if( iobuf_write( out, hdr, hdrlen ) == -1 ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; else rc = copy_packet(inp, out, pkttype, pktlen ); goto leave; } - if( do_skip || !pkttype || (reqtype && pkttype != reqtype) ) { + if (with_uid && pkttype == PKT_USER_ID) + ; + else if( do_skip + || !pkttype + || (onlykeypkts && pkttype != PKT_PUBLIC_SUBKEY + && pkttype != PKT_PUBLIC_KEY + && pkttype != PKT_SECRET_SUBKEY + && pkttype != PKT_SECRET_KEY ) ) { skip_rest(inp, pktlen); *skip = 1; rc = 0; @@ -392,16 +410,16 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, #endif } pkt->pkttype = pkttype; - rc = GPGERR_UNKNOWN_PACKET; /* default error */ + rc = G10ERR_UNKNOWN_PACKET; /* default error */ switch( pkttype ) { case PKT_PUBLIC_KEY: case PKT_PUBLIC_SUBKEY: - pkt->pkt.public_key = gcry_xcalloc( 1,sizeof *pkt->pkt.public_key ); + pkt->pkt.public_key = m_alloc_clear(sizeof *pkt->pkt.public_key ); rc = parse_key(inp, pkttype, pktlen, hdr, hdrlen, pkt ); break; case PKT_SECRET_KEY: case PKT_SECRET_SUBKEY: - pkt->pkt.secret_key = gcry_xcalloc( 1,sizeof *pkt->pkt.secret_key ); + pkt->pkt.secret_key = m_alloc_clear(sizeof *pkt->pkt.secret_key ); rc = parse_key(inp, pkttype, pktlen, hdr, hdrlen, pkt ); break; case PKT_SYMKEY_ENC: @@ -411,19 +429,19 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, rc = parse_pubkeyenc(inp, pkttype, pktlen, pkt ); break; case PKT_SIGNATURE: - pkt->pkt.signature = gcry_xcalloc( 1,sizeof *pkt->pkt.signature ); + pkt->pkt.signature = m_alloc_clear(sizeof *pkt->pkt.signature ); rc = parse_signature(inp, pkttype, pktlen, pkt->pkt.signature ); break; case PKT_ONEPASS_SIG: - pkt->pkt.onepass_sig = gcry_xcalloc( 1,sizeof *pkt->pkt.onepass_sig ); + pkt->pkt.onepass_sig = m_alloc_clear(sizeof *pkt->pkt.onepass_sig ); rc = parse_onepass_sig(inp, pkttype, pktlen, pkt->pkt.onepass_sig ); break; case PKT_USER_ID: rc = parse_user_id(inp, pkttype, pktlen, pkt ); break; - case PKT_PHOTO_ID: - pkt->pkttype = pkttype = PKT_USER_ID; /* must fix it */ - rc = parse_photo_id(inp, pkttype, pktlen, pkt); + case PKT_ATTRIBUTE: + pkt->pkttype = pkttype = PKT_USER_ID; /* we store it in the userID */ + rc = parse_attribute(inp, pkttype, pktlen, pkt); break; case PKT_OLD_COMMENT: case PKT_COMMENT: @@ -446,6 +464,9 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, case PKT_MDC: rc = parse_mdc(inp, pkttype, pktlen, pkt, new_ctb ); break; + case PKT_GPG_CONTROL: + rc = parse_gpg_control(inp, pkttype, pktlen, pkt ); + break; default: skip_packet(inp, pkttype, pktlen); break; @@ -453,7 +474,7 @@ parse( IOBUF inp, PACKET *pkt, int reqtype, ulong *retpos, leave: if( !rc && iobuf_error(inp) ) - rc = GPGERR_INV_KEYRING; + rc = G10ERR_INV_KEYRING; return rc; } @@ -483,23 +504,23 @@ copy_packet( IOBUF inp, IOBUF out, int pkttype, unsigned long pktlen ) if( iobuf_in_block_mode(inp) ) { while( (n = iobuf_read( inp, buf, 100 )) != -1 ) if( iobuf_write(out, buf, n ) ) - return GPGERR_WRITE_FILE; /* write error */ + return G10ERR_WRITE_FILE; /* write error */ } else if( !pktlen && pkttype == PKT_COMPRESSED ) { log_debug("copy_packet: compressed!\n"); /* compressed packet, copy till EOF */ while( (n = iobuf_read( inp, buf, 100 )) != -1 ) if( iobuf_write(out, buf, n ) ) - return GPGERR_WRITE_FILE; /* write error */ + return G10ERR_WRITE_FILE; /* write error */ } else { for( ; pktlen; pktlen -= n ) { n = pktlen > 100 ? 100 : pktlen; n = iobuf_read( inp, buf, n ); if( n == -1 ) - return GPGERR_READ_FILE; + return G10ERR_READ_FILE; if( iobuf_write(out, buf, n ) ) - return GPGERR_WRITE_FILE; /* write error */ + return G10ERR_WRITE_FILE; /* write error */ } } return 0; @@ -559,7 +580,7 @@ read_rest( IOBUF inp, size_t pktlen ) p = NULL; } else { - p = gcry_xmalloc( pktlen ); + p = m_alloc( pktlen ); for(i=0; pktlen; pktlen--, i++ ) p[i] = iobuf_get(inp); } @@ -572,19 +593,23 @@ static int parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { PKT_symkey_enc *k; + int rc = 0; int i, version, s2kmode, cipher_algo, hash_algo, seskeylen, minlen; if( pktlen < 4 ) { log_error("packet(%d) too short\n", pkttype); + rc = G10ERR_INVALID_PACKET; goto leave; } version = iobuf_get_noeof(inp); pktlen--; if( version != 4 ) { log_error("packet(%d) with unknown version %d\n", pkttype, version); + rc = G10ERR_INVALID_PACKET; goto leave; } if( pktlen > 200 ) { /* (we encode the seskeylen in a byte) */ log_error("packet(%d) too large\n", pkttype); + rc = G10ERR_INVALID_PACKET; goto leave; } cipher_algo = iobuf_get_noeof(inp); pktlen--; @@ -606,10 +631,11 @@ parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) } if( minlen > pktlen ) { log_error("packet with S2K %d too short\n", s2kmode ); + rc = G10ERR_INVALID_PACKET; goto leave; } seskeylen = pktlen - minlen; - k = packet->pkt.symkey_enc = gcry_xcalloc( 1, sizeof *packet->pkt.symkey_enc + k = packet->pkt.symkey_enc = m_alloc_clear( sizeof *packet->pkt.symkey_enc + seskeylen - 1 ); k->version = version; k->cipher_algo = cipher_algo; @@ -642,24 +668,27 @@ parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) leave: skip_rest(inp, pktlen); - return 0; + return rc; } static int parse_pubkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { - unsigned n; + unsigned int n; + int rc = 0; int i, ndata; PKT_pubkey_enc *k; - k = packet->pkt.pubkey_enc = gcry_xcalloc( 1,sizeof *packet->pkt.pubkey_enc); + k = packet->pkt.pubkey_enc = m_alloc_clear(sizeof *packet->pkt.pubkey_enc); if( pktlen < 12 ) { log_error("packet(%d) too short\n", pkttype); + rc = G10ERR_INVALID_PACKET; goto leave; } k->version = iobuf_get_noeof(inp); pktlen--; if( k->version != 2 && k->version != 3 ) { log_error("packet(%d) with unknown version %d\n", pkttype, k->version); + rc = G10ERR_INVALID_PACKET; goto leave; } k->keyid[0] = read_32(inp); pktlen -= 4; @@ -686,12 +715,14 @@ parse_pubkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) mpi_print(stdout, k->data[i], mpi_print_mode ); putchar('\n'); } + if (!k->data[i]) + rc = G10ERR_INVALID_PACKET; } } leave: skip_rest(inp, pktlen); - return 0; + return rc; } @@ -713,6 +744,7 @@ dump_sig_subpkt( int hashed, int type, int critical, type, (unsigned)length ); } + printf("\t%s%ssubpkt %d len %u (", /*)*/ critical ? "critical ":"", hashed ? "hashed ":"", type, (unsigned)length ); @@ -737,13 +769,20 @@ dump_sig_subpkt( int hashed, int type, int critical, printf("%sexportable", *buffer? "":"not "); break; case SIGSUBPKT_TRUST: - p = "trust signature"; + if(length!=2) + p="[invalid trust signature]"; + else + printf("trust signature of level %d, amount %d",buffer[0],buffer[1]); break; case SIGSUBPKT_REGEXP: - p = "regular expression"; + if(!length) + p="[invalid regexp]"; + else + printf("regular expression: \"%s\"",buffer); break; case SIGSUBPKT_REVOCABLE: - p = "revocable"; + if( length ) + printf("%srevocable", *buffer? "":"not "); break; case SIGSUBPKT_KEY_EXPIRE: if( length >= 4 ) @@ -806,7 +845,9 @@ dump_sig_subpkt( int hashed, int type, int critical, printf(" %d", buffer[i] ); break; case SIGSUBPKT_KS_FLAGS: - p = "key server preferences"; + fputs("key server preferences:",stdout); + for(i=0;i + * where mode == 1: valid data, stat == 0: invalid signature + * stat == 1: valid signature + * (because we use private data, we check our marker) */ + if( n < 6 ) break; - if( buffer[0] != 'G' || buffer[1] != 'P' || buffer[2] != 'G' ) + if( buffer[0] != 'G' || buffer[1] != 'P' + || buffer[2] != 'G' || buffer[3] ) return -2; - return 3; + return 4; default: return -1; } return -3; @@ -927,15 +979,18 @@ can_handle_critical( const byte *buffer, size_t n, int type ) case SIGSUBPKT_SIG_EXPIRE: case SIGSUBPKT_KEY_EXPIRE: case SIGSUBPKT_EXPORTABLE: + case SIGSUBPKT_REVOCABLE: + case SIGSUBPKT_REV_KEY: case SIGSUBPKT_ISSUER:/* issuer key ID */ case SIGSUBPKT_PREF_SYM: case SIGSUBPKT_PREF_HASH: case SIGSUBPKT_PREF_COMPR: - case SIGSUBPKT_FEATURES: case SIGSUBPKT_KEY_FLAGS: + case SIGSUBPKT_PRIMARY_UID: + case SIGSUBPKT_FEATURES: + case SIGSUBPKT_POLICY: /* Is it enough to show the policy? */ return 1; - case SIGSUBPKT_POLICY: /* Is it enough to show the policy? */ default: return 0; } @@ -943,37 +998,40 @@ can_handle_critical( const byte *buffer, size_t n, int type ) const byte * -enum_sig_subpkt( const byte *buffer, sigsubpkttype_t reqtype, - size_t *ret_n, int *start ) +enum_sig_subpkt( const subpktarea_t *pktbuf, sigsubpkttype_t reqtype, + size_t *ret_n, int *start, int *critical ) { + const byte *buffer; int buflen; int type; - int critical; + int critical_dummy; int offset; size_t n; int seq = 0; int reqseq = start? *start: 0; - if( !buffer || reqseq == -1 ) { + if(!critical) + critical=&critical_dummy; + + if( !pktbuf || reqseq == -1 ) { /* return some value different from NULL to indicate that - * there is no crtitical bit we do not understand. The caller + * there is no critical bit we do not understand. The caller * will never use the value. Yes I know, it is an ugly hack */ - return reqtype == SIGSUBPKT_TEST_CRITICAL? (const byte*)&buffer : NULL; + return reqtype == SIGSUBPKT_TEST_CRITICAL? (const byte*)&pktbuf : NULL; } - buflen = (*buffer << 8) | buffer[1]; - buffer += 2; + buffer = pktbuf->data; + buflen = pktbuf->len; while( buflen ) { n = *buffer++; buflen--; - if( n == 255 ) { + if( n == 255 ) { /* 4 byte length header */ if( buflen < 4 ) goto too_short; n = (buffer[0] << 24) | (buffer[1] << 16) - | (buffer[2] << 8) | buffer[3]; + | (buffer[2] << 8) | buffer[3]; buffer += 4; buflen -= 4; - } - else if( n >= 192 ) { + else if( n >= 192 ) { /* 2 byte special encoded length header */ if( buflen < 2 ) goto too_short; n = (( n - 192 ) << 8) + *buffer + 192; @@ -985,14 +1043,14 @@ enum_sig_subpkt( const byte *buffer, sigsubpkttype_t reqtype, type = *buffer; if( type & 0x80 ) { type &= 0x7f; - critical = 1; + *critical = 1; } else - critical = 0; + *critical = 0; if( !(++seq > reqseq) ) ; else if( reqtype == SIGSUBPKT_TEST_CRITICAL ) { - if( critical ) { + if( *critical ) { if( n-1 > buflen+1 ) goto too_short; if( !can_handle_critical(buffer+1, n-1, type ) ) { @@ -1006,7 +1064,7 @@ enum_sig_subpkt( const byte *buffer, sigsubpkttype_t reqtype, } else if( reqtype < 0 ) /* list packets */ dump_sig_subpkt( reqtype == SIGSUBPKT_LIST_HASHED, - type, critical, buffer, buflen, n ); + type, *critical, buffer, buflen, n ); else if( type == reqtype ) { /* found */ buffer++; n--; @@ -1048,23 +1106,49 @@ enum_sig_subpkt( const byte *buffer, sigsubpkttype_t reqtype, const byte * -parse_sig_subpkt( const byte *buffer, sigsubpkttype_t reqtype, size_t *ret_n ) +parse_sig_subpkt (const subpktarea_t *buffer, sigsubpkttype_t reqtype, + size_t *ret_n) { - return enum_sig_subpkt( buffer, reqtype, ret_n, NULL ); + return enum_sig_subpkt( buffer, reqtype, ret_n, NULL, NULL ); } const byte * -parse_sig_subpkt2( PKT_signature *sig, sigsubpkttype_t reqtype, size_t *ret_n ) +parse_sig_subpkt2 (PKT_signature *sig, sigsubpkttype_t reqtype, + size_t *ret_n ) { const byte *p; - p = parse_sig_subpkt( sig->hashed_data, reqtype, ret_n ); + p = parse_sig_subpkt (sig->hashed, reqtype, ret_n ); if( !p ) - p = parse_sig_subpkt( sig->unhashed_data, reqtype, ret_n ); + p = parse_sig_subpkt (sig->unhashed, reqtype, ret_n ); return p; } +/* Find all revocation keys. Look in hashed area only. */ +void parse_revkeys(PKT_signature *sig) +{ + struct revocation_key *revkey; + int seq=0; + size_t len; + if(sig->sig_class!=0x1F) + return; + + while((revkey= + (struct revocation_key *)enum_sig_subpkt(sig->hashed, + SIGSUBPKT_REV_KEY, + &len,&seq,NULL))) + { + if(len==sizeof(struct revocation_key) && + (revkey->class&0x80)) /* 0x80 bit must be set */ + { + sig->revkey=m_realloc(sig->revkey, + sizeof(struct revocation_key *)*(sig->numrevkeys+1)); + sig->revkey[sig->numrevkeys]=revkey; + sig->numrevkeys++; + } + } +} static int parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, @@ -1085,6 +1169,7 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, is_v4=1; else if( sig->version != 2 && sig->version != 3 ) { log_error("packet(%d) with unknown version %d\n", pkttype, sig->version); + rc = G10ERR_INVALID_PACKET; goto leave; } @@ -1099,19 +1184,22 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, } sig->pubkey_algo = iobuf_get_noeof(inp); pktlen--; sig->digest_algo = iobuf_get_noeof(inp); pktlen--; + sig->flags.exportable=1; + sig->flags.revocable=1; if( is_v4 ) { /* read subpackets */ n = read_16(inp); pktlen -= 2; /* length of hashed data */ if( n > 10000 ) { log_error("signature packet: hashed data too long\n"); - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } if( n ) { - sig->hashed_data = gcry_xmalloc( n + 2 ); - sig->hashed_data[0] = n >> 8; - sig->hashed_data[1] = n; - if( iobuf_read(inp, sig->hashed_data+2, n ) != n ) { - log_error("premature eof while reading hashed signature data\n"); + sig->hashed = m_alloc (sizeof (*sig->hashed) + n - 1 ); + sig->hashed->size = n; + sig->hashed->len = n; + if( iobuf_read (inp, sig->hashed->data, n ) != n ) { + log_error ("premature eof while reading " + "hashed signature data\n"); rc = -1; goto leave; } @@ -1120,15 +1208,19 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, n = read_16(inp); pktlen -= 2; /* length of unhashed data */ if( n > 10000 ) { log_error("signature packet: unhashed data too long\n"); - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } if( n ) { - sig->unhashed_data = gcry_xmalloc( n + 2 ); - sig->unhashed_data[0] = n >> 8; - sig->unhashed_data[1] = n; - if( iobuf_read(inp, sig->unhashed_data+2, n ) != n ) { - log_error("premature eof while reading unhashed signature data\n"); + /* we add 8 extra bytes so that we have space for the signature + * status cache. Well we are wastin this if there is a cache + * packet already, but in the other case it avoids an realloc */ + sig->unhashed = m_alloc (sizeof(*sig->unhashed) + n + 8 - 1 ); + sig->unhashed->size = n + 8; + sig->unhashed->len = n; + if( iobuf_read(inp, sig->unhashed->data, n ) != n ) { + log_error("premature eof while reading " + "unhashed signature data\n"); rc = -1; goto leave; } @@ -1138,7 +1230,7 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, if( pktlen < 5 ) { /* sanity check */ log_error("packet(%d) too short\n", pkttype); - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } @@ -1150,14 +1242,14 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, /* set sig->flags.unknown_critical if there is a * critical bit set for packets which we do not understand */ - if( !parse_sig_subpkt( sig->hashed_data, SIGSUBPKT_TEST_CRITICAL, NULL) - || !parse_sig_subpkt( sig->unhashed_data, SIGSUBPKT_TEST_CRITICAL, + if( !parse_sig_subpkt (sig->hashed, SIGSUBPKT_TEST_CRITICAL, NULL) + || !parse_sig_subpkt (sig->unhashed, SIGSUBPKT_TEST_CRITICAL, NULL) ) { sig->flags.unknown_critical = 1; } - p = parse_sig_subpkt( sig->hashed_data, SIGSUBPKT_SIG_CREATED, NULL ); + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_SIG_CREATED, NULL ); if( !p ) log_error("signature packet without timestamp\n"); else @@ -1169,6 +1261,37 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, sig->keyid[0] = buffer_to_u32(p); sig->keyid[1] = buffer_to_u32(p+4); } + + p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_SIG_EXPIRE,NULL); + if(p) + sig->expiredate=sig->timestamp+buffer_to_u32(p); + if(sig->expiredate && sig->expiredate<=make_timestamp()) + sig->flags.expired=1; + + p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,NULL); + if(p) + sig->flags.policy_url=1; + + p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,NULL); + if(p) + sig->flags.notation=1; + + p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_REVOCABLE,NULL); + if(p && *p==0) + sig->flags.revocable=0; + + /* We accept the exportable subpacket from either the hashed + or unhashed areas as older versions of gpg put it in the + unhashed area. In theory, anyway, we should never see this + packet off of a local keyring. */ + + p=parse_sig_subpkt2(sig,SIGSUBPKT_EXPORTABLE,NULL); + if(p && *p==0) + sig->flags.exportable=0; + + /* Find all revocation keys. */ + if(sig->sig_class==0x1F) + parse_revkeys(sig); } if( list_mode ) { @@ -1181,8 +1304,8 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, sig->digest_algo, sig->digest_start[0], sig->digest_start[1] ); if( is_v4 ) { - parse_sig_subpkt( sig->hashed_data, SIGSUBPKT_LIST_HASHED, NULL ); - parse_sig_subpkt( sig->unhashed_data,SIGSUBPKT_LIST_UNHASHED, NULL); + parse_sig_subpkt (sig->hashed, SIGSUBPKT_LIST_HASHED, NULL ); + parse_sig_subpkt (sig->unhashed, SIGSUBPKT_LIST_UNHASHED, NULL); } } @@ -1206,6 +1329,8 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, mpi_print(stdout, sig->data[i], mpi_print_mode ); putchar('\n'); } + if (!sig->data[i]) + rc = G10ERR_INVALID_PACKET; } } @@ -1220,14 +1345,17 @@ parse_onepass_sig( IOBUF inp, int pkttype, unsigned long pktlen, PKT_onepass_sig *ops ) { int version; + int rc = 0; if( pktlen < 13 ) { log_error("packet(%d) too short\n", pkttype); + rc = G10ERR_INVALID_PACKET; goto leave; } version = iobuf_get_noeof(inp); pktlen--; if( version != 3 ) { log_error("onepass_sig with unknown version %d\n", version); + rc = G10ERR_INVALID_PACKET; goto leave; } ops->sig_class = iobuf_get_noeof(inp); pktlen--; @@ -1246,7 +1374,7 @@ parse_onepass_sig( IOBUF inp, int pkttype, unsigned long pktlen, leave: skip_rest(inp, pktlen); - return 0; + return rc; } @@ -1258,14 +1386,14 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, { int i, version, algorithm; unsigned n; - unsigned long timestamp, expiredate; + unsigned long timestamp, expiredate, max_expiredate; int npkey, nskey; int is_v4=0; int rc=0; version = iobuf_get_noeof(inp); pktlen--; if( pkttype == PKT_PUBLIC_SUBKEY && version == '#' ) { - /* early versions of gpg use old PGP comments packets; + /* early versions of G10 use old PGP comments packets; * luckily all those comments are started by a hash */ if( list_mode ) { printf(":rfc1991 comment packet: \"" ); @@ -1286,17 +1414,21 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, is_v4=1; else if( version != 2 && version != 3 ) { log_error("packet(%d) with unknown version %d\n", pkttype, version); + rc = G10ERR_INVALID_PACKET; goto leave; } if( pktlen < 11 ) { log_error("packet(%d) too short\n", pkttype); + rc = G10ERR_INVALID_PACKET; goto leave; } timestamp = read_32(inp); pktlen -= 4; - if( is_v4 ) + if( is_v4 ) { expiredate = 0; /* have to get it from the selfsignature */ + max_expiredate = 0; + } else { unsigned short ndays; ndays = read_16(inp); pktlen -= 2; @@ -1304,6 +1436,8 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, expiredate = timestamp + ndays * 86400L; else expiredate = 0; + + max_expiredate=expiredate; } algorithm = iobuf_get_noeof(inp); pktlen--; if( list_mode ) @@ -1320,23 +1454,25 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, sk->timestamp = timestamp; sk->expiredate = expiredate; + sk->max_expiredate = max_expiredate; sk->hdrbytes = hdrlen; sk->version = version; sk->is_primary = pkttype == PKT_SECRET_KEY; sk->pubkey_algo = algorithm; sk->req_usage = 0; - sk->pubkey_usage = 0; /* will be set by getkey functions */ + sk->pubkey_usage = 0; /* not yet used */ } else { PKT_public_key *pk = pkt->pkt.public_key; pk->timestamp = timestamp; pk->expiredate = expiredate; + pk->max_expiredate = max_expiredate; pk->hdrbytes = hdrlen; pk->version = version; pk->pubkey_algo = algorithm; - pk->req_usage = 0; - pk->pubkey_usage = 0; /* will be set bey getkey functions */ + pk->req_usage = 0; + pk->pubkey_usage = 0; /* not yet used */ pk->is_revoked = 0; pk->keyid[0] = 0; pk->keyid[1] = 0; @@ -1355,8 +1491,8 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, byte temp[16]; if( !npkey ) { - sk->skey[0] = gcry_mpi_set_opaque( NULL, - read_rest(inp, pktlen), pktlen*8 ); + sk->skey[0] = mpi_set_opaque( NULL, + read_rest(inp, pktlen), pktlen ); pktlen = 0; goto leave; } @@ -1368,16 +1504,22 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, mpi_print(stdout, sk->skey[i], mpi_print_mode ); putchar('\n'); } + if (!sk->skey[i]) + rc = G10ERR_INVALID_PACKET; } + if (rc) /* one of the MPIs were bad */ + goto leave; sk->protect.algo = iobuf_get_noeof(inp); pktlen--; + sk->protect.sha1chk = 0; if( sk->protect.algo ) { sk->is_protected = 1; sk->protect.s2k.count = 0; - if( sk->protect.algo == 255 ) { + if( sk->protect.algo == 254 || sk->protect.algo == 255 ) { if( pktlen < 3 ) { - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } + sk->protect.sha1chk = (sk->protect.algo == 254); sk->protect.algo = iobuf_get_noeof(inp); pktlen--; sk->protect.s2k.mode = iobuf_get_noeof(inp); pktlen--; sk->protect.s2k.hash_algo = iobuf_get_noeof(inp); pktlen--; @@ -1389,7 +1531,7 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, if( list_mode ) printf( "\tunknown S2K %d\n", sk->protect.s2k.mode ); - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } /* here we know that it is a gnu extension @@ -1421,13 +1563,15 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, printf( "\tunknown %sS2K %d\n", sk->protect.s2k.mode < 1000? "":"GNU ", sk->protect.s2k.mode ); - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } if( list_mode ) { - printf(", algo: %d, hash: %d", + printf(", algo: %d,%s hash: %d", sk->protect.algo, + sk->protect.sha1chk?" SHA1 protection," + :" simple checksum,", sk->protect.s2k.hash_algo ); if( sk->protect.s2k.mode == 1 || sk->protect.s2k.mode == 3 ) { @@ -1440,7 +1584,7 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, if( sk->protect.s2k.mode == 3 ) { if( pktlen < 1 ) { - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } sk->protect.s2k.count = iobuf_get(inp); @@ -1452,7 +1596,7 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, } else { /* old version; no S2K, so we set mode to 0, hash MD5 */ sk->protect.s2k.mode = 0; - sk->protect.s2k.hash_algo = GCRY_MD_MD5; + sk->protect.s2k.hash_algo = DIGEST_ALGO_MD5; if( list_mode ) printf( "\tprotect algo: %d (hash algo: %d)\n", sk->protect.algo, sk->protect.s2k.hash_algo ); @@ -1477,7 +1621,7 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, sk->protect.ivlen = 0; if( pktlen < sk->protect.ivlen ) { - rc = GPGERR_INVALID_PACKET; + rc = G10ERR_INVALID_PACKET; goto leave; } for(i=0; i < sk->protect.ivlen && pktlen; i++, pktlen-- ) @@ -1498,26 +1642,25 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, * So we put the key into secure memory when we unprotect it. */ if( sk->protect.s2k.mode == 1001 ) { /* better set some dummy stuff here */ - sk->skey[npkey] = mpi_set_opaque(NULL, gcry_xstrdup("dummydata"), 10); + sk->skey[npkey] = mpi_set_opaque(NULL, m_strdup("dummydata"), 10); pktlen = 0; } else if( is_v4 && sk->is_protected ) { /* ugly; the length is encrypted too, so we read all * stuff up to the end of the packet into the first * skey element */ - sk->skey[npkey] = gcry_mpi_set_opaque(NULL, - read_rest(inp, pktlen), pktlen*8 ); + sk->skey[npkey] = mpi_set_opaque(NULL, + read_rest(inp, pktlen), pktlen ); pktlen = 0; if( list_mode ) { printf("\tencrypted stuff follows\n"); } } - else { /* unencrypted v4 or v3 method (where length is not encrypted) */ + else { /* v3 method: the mpi length is not encrypted */ for(i=npkey; i < nskey; i++ ) { - n = pktlen; - sk->skey[i] = sk->is_protected ? mpi_read_opaque(inp, &n ) - : mpi_read( inp, &n, 1 ); - pktlen -=n; + n = pktlen; sk->skey[i] = mpi_read(inp, &n, 0 ); pktlen -=n; + if( sk->is_protected && sk->skey[i] ) + mpi_set_protect_flag(sk->skey[i]); if( list_mode ) { printf( "\tskey[%d]: ", i); if( sk->is_protected ) @@ -1527,7 +1670,11 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, putchar('\n'); } } + if (!sk->skey[i]) + rc = G10ERR_INVALID_PACKET; } + if (rc) + goto leave; sk->csum = read_16(inp); pktlen -= 2; if( list_mode ) { @@ -1539,8 +1686,8 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, PKT_public_key *pk = pkt->pkt.public_key; if( !npkey ) { - pk->pkey[0] = gcry_mpi_set_opaque( NULL, - read_rest(inp, pktlen), pktlen*8 ); + pk->pkey[0] = mpi_set_opaque( NULL, + read_rest(inp, pktlen), pktlen ); pktlen = 0; goto leave; } @@ -1552,7 +1699,11 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, mpi_print(stdout, pk->pkey[i], mpi_print_mode ); putchar('\n'); } + if (!pk->pkey[i]) + rc = G10ERR_INVALID_PACKET; } + if (rc) + goto leave; } leave: @@ -1560,16 +1711,95 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, return rc; } +/* Attribute subpackets have the same format as v4 signature + subpackets. This is not part of OpenPGP, but is done in several + versions of PGP nevertheless. */ +int +parse_attribute_subpkts(PKT_user_id *uid) +{ + size_t n; + int count=0; + struct user_attribute *attribs=NULL; + const byte *buffer=uid->attrib_data; + int buflen=uid->attrib_len; + byte type; + + m_free(uid->attribs); + + while(buflen) + { + n = *buffer++; buflen--; + if( n == 255 ) { /* 4 byte length header */ + if( buflen < 4 ) + goto too_short; + n = (buffer[0] << 24) | (buffer[1] << 16) + | (buffer[2] << 8) | buffer[3]; + buffer += 4; + buflen -= 4; + } + else if( n >= 192 ) { /* 2 byte special encoded length header */ + if( buflen < 2 ) + goto too_short; + n = (( n - 192 ) << 8) + *buffer + 192; + buffer++; + buflen--; + } + if( buflen < n ) + goto too_short; + + attribs=m_realloc(attribs,(count+1)*sizeof(struct user_attribute)); + memset(&attribs[count],0,sizeof(struct user_attribute)); + + type=*buffer; + buffer++; + buflen--; + n--; + + attribs[count].type=type; + attribs[count].data=buffer; + attribs[count].len=n; + buffer+=n; + buflen-=n; + count++; + } + + uid->attribs=attribs; + uid->numattribs=count; + return count; + + too_short: + log_error("buffer shorter than attribute subpacket\n"); + uid->attribs=attribs; + uid->numattribs=count; + return count; +} + +static void setup_user_id(PACKET *packet) +{ + packet->pkt.user_id->ref = 1; + packet->pkt.user_id->attribs = NULL; + packet->pkt.user_id->attrib_data = NULL; + packet->pkt.user_id->attrib_len = 0; + packet->pkt.user_id->is_primary = 0; + packet->pkt.user_id->is_revoked = 0; + packet->pkt.user_id->is_expired = 0; + packet->pkt.user_id->expiredate = 0; + packet->pkt.user_id->created = 0; + packet->pkt.user_id->help_key_usage = 0; + packet->pkt.user_id->help_key_expire = 0; + packet->pkt.user_id->prefs = NULL; +} static int parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { byte *p; - packet->pkt.user_id = gcry_xmalloc(sizeof *packet->pkt.user_id + pktlen); + packet->pkt.user_id = m_alloc(sizeof *packet->pkt.user_id + pktlen); packet->pkt.user_id->len = pktlen; - packet->pkt.user_id->photo = NULL; - packet->pkt.user_id->photolen = 0; + + setup_user_id(packet); + p = packet->pkt.user_id->name; for( ; pktlen; pktlen--, p++ ) *p = iobuf_get_noeof(inp); @@ -1578,7 +1808,7 @@ parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) if( list_mode ) { int n = packet->pkt.user_id->len; printf(":user ID packet: \""); - /* fixme: Hey why don't we replace this wioth print_string?? */ + /* fixme: Hey why don't we replace this with print_string?? */ for(p=packet->pkt.user_id->name; n; p++, n-- ) { if( *p >= ' ' && *p <= 'z' ) putchar(*p); @@ -1590,28 +1820,60 @@ parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) return 0; } +void +make_attribute_uidname(PKT_user_id *uid) +{ + if(uid->numattribs<=0) + sprintf(uid->name,"[bad attribute packet of size %lu]",uid->attrib_len); + else if(uid->numattribs>1) + sprintf(uid->name,"[%d attributes of size %lu]", + uid->numattribs,uid->attrib_len); + else + { + /* Only one attribute, so list it as the "user id" */ + + if(uid->attribs->type==ATTRIB_IMAGE) + { + u32 len; + byte type; + + if(parse_image_header(uid->attribs,&type,&len)) + sprintf(uid->name,"[%s image of size %lu]", + image_type_to_string(type,1),(ulong)len); + else + sprintf(uid->name,"[invalid image]"); + } + else + sprintf(uid->name,"[unknown attribute of size %lu]",uid->attribs->len); + } + + uid->len = strlen(uid->name); +} -/**************** - * PGP generates a packet of type 17. We assume this is a photo ID and - * simply store it here as a comment packet. - */ static int -parse_photo_id( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) +parse_attribute( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { byte *p; - packet->pkt.user_id = gcry_xmalloc(sizeof *packet->pkt.user_id + 30); - sprintf( packet->pkt.user_id->name, "[image of size %lu]", pktlen ); - packet->pkt.user_id->len = strlen(packet->pkt.user_id->name); + packet->pkt.user_id = m_alloc(sizeof *packet->pkt.user_id + 70); - packet->pkt.user_id->photo = gcry_xmalloc(sizeof *packet->pkt.user_id + pktlen); - packet->pkt.user_id->photolen = pktlen; - p = packet->pkt.user_id->photo; + setup_user_id(packet); + + packet->pkt.user_id->attrib_data = m_alloc(pktlen); + packet->pkt.user_id->attrib_len = pktlen; + p = packet->pkt.user_id->attrib_data; for( ; pktlen; pktlen--, p++ ) *p = iobuf_get_noeof(inp); + /* Now parse out the individual attribute subpackets. This is + somewhat pointless since there is only one currently defined + attribute type (jpeg), but it is correct by the spec. */ + parse_attribute_subpkts(packet->pkt.user_id); + + make_attribute_uidname(packet->pkt.user_id); + if( list_mode ) { - printf(":photo_id packet: %s\n", packet->pkt.user_id->name ); + printf(":attribute packet: %s\n", packet->pkt.user_id->name ); } return 0; } @@ -1622,7 +1884,7 @@ parse_comment( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { byte *p; - packet->pkt.comment = gcry_xmalloc(sizeof *packet->pkt.comment + pktlen - 1); + packet->pkt.comment = m_alloc(sizeof *packet->pkt.comment + pktlen - 1); packet->pkt.comment->len = pktlen; p = packet->pkt.comment->data; for( ; pktlen; pktlen--, p++ ) @@ -1647,13 +1909,34 @@ parse_comment( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) static void parse_trust( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt ) { - int c; + int c; - c = iobuf_get_noeof(inp); - pkt->pkt.ring_trust = gcry_xmalloc( sizeof *pkt->pkt.ring_trust ); - pkt->pkt.ring_trust->trustval = c; - if( list_mode ) - printf(":trust packet: flag=%02x\n", c ); + if (pktlen) + { + c = iobuf_get_noeof(inp); + pktlen--; + pkt->pkt.ring_trust = m_alloc( sizeof *pkt->pkt.ring_trust ); + pkt->pkt.ring_trust->trustval = c; + pkt->pkt.ring_trust->sigcache = 0; + if (!c && pktlen==1) + { + c = iobuf_get_noeof (inp); + pktlen--; + /* we require that bit 7 of the sigcache is 0 (easier eof handling)*/ + if ( !(c & 0x80) ) + pkt->pkt.ring_trust->sigcache = c; + } + if( list_mode ) + printf(":trust packet: flag=%02x sigcache=%02x\n", + pkt->pkt.ring_trust->trustval, + pkt->pkt.ring_trust->sigcache); + } + else + { + if( list_mode ) + printf(":trust packet: empty\n"); + } + skip_rest (inp, pktlen); } @@ -1661,21 +1944,29 @@ static int parse_plaintext( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt, int new_ctb ) { - int mode, namelen; + int rc = 0; + int mode, namelen, partial=0; PKT_plaintext *pt; byte *p; int c, i; if( pktlen && pktlen < 6 ) { log_error("packet(%d) too short (%lu)\n", pkttype, (ulong)pktlen); + rc = G10ERR_INVALID_PACKET; goto leave; } + /* A packet length of zero indicates partial body length. A zero + data length isn't a zero length packet due to the header (mode, + name, etc), so this is accurate. */ + if(pktlen==0) + partial=1; mode = iobuf_get_noeof(inp); if( pktlen ) pktlen--; namelen = iobuf_get_noeof(inp); if( pktlen ) pktlen--; - pt = pkt->pkt.plaintext = gcry_xmalloc(sizeof *pkt->pkt.plaintext + namelen -1); + pt = pkt->pkt.plaintext = m_alloc(sizeof *pkt->pkt.plaintext + namelen -1); pt->new_ctb = new_ctb; pt->mode = mode; pt->namelen = namelen; + pt->is_partial = partial; if( pktlen ) { for( i=0; pktlen > 4 && i < namelen; pktlen--, i++ ) pt->name[i] = iobuf_get_noeof(inp); @@ -1707,7 +1998,7 @@ parse_plaintext( IOBUF inp, int pkttype, unsigned long pktlen, } leave: - return 0; + return rc; } @@ -1721,7 +2012,7 @@ parse_compressed( IOBUF inp, int pkttype, unsigned long pktlen, * (this should be the last object in a file or * the compress algorithm should know the length) */ - zd = pkt->pkt.compressed = gcry_xmalloc(sizeof *pkt->pkt.compressed ); + zd = pkt->pkt.compressed = m_alloc(sizeof *pkt->pkt.compressed ); zd->len = 0; /* not yet used */ zd->algorithm = iobuf_get_noeof(inp); zd->new_ctb = new_ctb; @@ -1736,10 +2027,18 @@ static int parse_encrypted( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt, int new_ctb ) { + int rc = 0; PKT_encrypted *ed; + unsigned long orig_pktlen = pktlen; - ed = pkt->pkt.encrypted = gcry_xmalloc(sizeof *pkt->pkt.encrypted ); + ed = pkt->pkt.encrypted = m_alloc(sizeof *pkt->pkt.encrypted ); ed->len = pktlen; + /* we don't know the extralen which is (cipher_blocksize+2) + because the algorithm ist not specified in this packet. + However, it is only important to know this for somesanity + checks on the pkacet length - it doesn't matter that we can't + do it */ + ed->extralen = 0; ed->buf = NULL; ed->new_ctb = new_ctb; ed->mdc_method = 0; @@ -1747,22 +2046,27 @@ parse_encrypted( IOBUF inp, int pkttype, unsigned long pktlen, /* fixme: add some pktlen sanity checks */ int version; - version = iobuf_get_noeof(inp); pktlen--; + version = iobuf_get_noeof(inp); + if (orig_pktlen) + pktlen--; if( version != 1 ) { log_error("encrypted_mdc packet with unknown version %d\n", version); + /*skip_rest(inp, pktlen); should we really do this? */ + rc = G10ERR_INVALID_PACKET; goto leave; } - ed->mdc_method = GCRY_MD_SHA1; + ed->mdc_method = DIGEST_ALGO_SHA1; } - if( pktlen && pktlen < 10 ) { /* actually this is blocksize+2 */ + if( orig_pktlen && pktlen < 10 ) { /* actually this is blocksize+2 */ log_error("packet(%d) too short\n", pkttype); + rc = G10ERR_INVALID_PACKET; skip_rest(inp, pktlen); goto leave; } if( list_mode ) { - if( pktlen ) - printf(":encrypted data packet:\n\tlength: %lu\n", pktlen); + if( orig_pktlen ) + printf(":encrypted data packet:\n\tlength: %lu\n", orig_pktlen); else printf(":encrypted data packet:\n\tlength: unknown\n"); if( ed->mdc_method ) @@ -1773,7 +2077,7 @@ parse_encrypted( IOBUF inp, int pkttype, unsigned long pktlen, pktlen = 0; leave: - return 0; + return rc; } @@ -1781,14 +2085,16 @@ static int parse_mdc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt, int new_ctb ) { + int rc = 0; PKT_mdc *mdc; byte *p; - mdc = pkt->pkt.mdc= gcry_xmalloc(sizeof *pkt->pkt.mdc ); + mdc = pkt->pkt.mdc= m_alloc(sizeof *pkt->pkt.mdc ); if( list_mode ) printf(":mdc packet: length=%lu\n", pktlen); if( !new_ctb || pktlen != 20 ) { log_error("mdc_packet with invalid encoding\n"); + rc = G10ERR_INVALID_PACKET; goto leave; } p = mdc->hash; @@ -1796,6 +2102,90 @@ parse_mdc( IOBUF inp, int pkttype, unsigned long pktlen, *p = iobuf_get_noeof(inp); leave: - return 0; + return rc; } + +/* + * This packet is internally generated by PGG (by armor.c) to + * transfer some information to the lower layer. To make sure that + * this packet is really a GPG faked one and not one comming from outside, + * we first check that tehre is a unique tag in it. + * The format of such a control packet is: + * n byte session marker + * 1 byte control type CTRLPKT_xxxxx + * m byte control data + */ + +static int +parse_gpg_control( IOBUF inp, + int pkttype, unsigned long pktlen, PACKET *packet ) +{ + byte *p; + const byte *sesmark; + size_t sesmarklen; + int i; + + if ( list_mode ) + printf(":packet 63: length %lu ", pktlen); + + sesmark = get_session_marker ( &sesmarklen ); + if ( pktlen < sesmarklen+1 ) /* 1 is for the control bytes */ + goto skipit; + for( i=0; i < sesmarklen; i++, pktlen-- ) { + if ( sesmark[i] != iobuf_get_noeof(inp) ) + goto skipit; + } + if ( list_mode ) + puts ("- gpg control packet"); + + packet->pkt.gpg_control = m_alloc(sizeof *packet->pkt.gpg_control + + pktlen - 1); + packet->pkt.gpg_control->control = iobuf_get_noeof(inp); pktlen--; + packet->pkt.gpg_control->datalen = pktlen; + p = packet->pkt.gpg_control->data; + for( ; pktlen; pktlen--, p++ ) + *p = iobuf_get_noeof(inp); + + return 0; + + skipit: + if ( list_mode ) { + int c; + + i=0; + printf("- private (rest length %lu)\n", pktlen); + if( iobuf_in_block_mode(inp) ) { + while( (c=iobuf_get(inp)) != -1 ) + dump_hex_line(c, &i); + } + else { + for( ; pktlen; pktlen-- ) + dump_hex_line(iobuf_get(inp), &i); + } + putchar('\n'); + } + skip_rest(inp,pktlen); + return G10ERR_INVALID_PACKET; +} + +/* create a gpg control packet to be used internally as a placeholder */ +PACKET * +create_gpg_control( ctrlpkttype_t type, const byte *data, size_t datalen ) +{ + PACKET *packet; + byte *p; + + packet = m_alloc( sizeof *packet ); + init_packet(packet); + packet->pkttype = PKT_GPG_CONTROL; + packet->pkt.gpg_control = m_alloc(sizeof *packet->pkt.gpg_control + + datalen - 1); + packet->pkt.gpg_control->control = type; + packet->pkt.gpg_control->datalen = datalen; + p = packet->pkt.gpg_control->data; + for( ; datalen; datalen--, p++ ) + *p = *data++; + + return packet; +} diff --git a/g10/passphrase.c b/g10/passphrase.c index 6b06df72e..c8ebad620 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -1,5 +1,5 @@ /* passphrase.c - Get a passphrase - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -19,26 +19,60 @@ */ #include +#include #include #include -#include #include #include #include +#if !defined(HAVE_DOSISH_SYSTEM) && !defined(__riscos__) #include #include -#include +#endif +#if defined (__MINGW32__) || defined (__CYGWIN32__) +# include +#endif #include +#ifdef HAVE_LOCALE_H +#include +#endif -#include #include "util.h" +#include "memory.h" #include "options.h" #include "ttyio.h" +#include "cipher.h" #include "keydb.h" #include "main.h" #include "i18n.h" #include "status.h" -#include "gpga-prot.h" + + +enum gpga_protocol_codes { + /* Request codes */ + GPGA_PROT_GET_VERSION = 1, + GPGA_PROT_GET_PASSPHRASE = 2, + GPGA_PROT_CLEAR_PASSPHRASE= 3, + GPGA_PROT_SHUTDOWN = 4, + GPGA_PROT_FLUSH = 5, + + /* Reply codes */ + GPGA_PROT_REPLY_BASE = 0x10000, + GPGA_PROT_OKAY = 0x10001, + GPGA_PROT_GOT_PASSPHRASE = 0x10002, + + /* Error codes */ + GPGA_PROT_ERROR_BASE = 0x20000, + GPGA_PROT_PROTOCOL_ERROR = 0x20001, + GPGA_PROT_INVALID_REQUEST= 0x20002, + GPGA_PROT_CANCELED = 0x20003, + GPGA_PROT_NO_PASSPHRASE = 0x20004, + GPGA_PROT_BAD_PASSPHRASE = 0x20005, + GPGA_PROT_INVALID_DATA = 0x20006, + GPGA_PROT_NOT_IMPLEMENTED= 0x20007, + GPGA_PROT_UI_PROBLEM = 0x20008 +}; + #define buftou32( p ) ((*(byte*)(p) << 24) | (*((byte*)(p)+1)<< 16) | \ (*((byte*)(p)+2) << 8) | (*((byte*)(p)+3))) @@ -49,11 +83,25 @@ ((byte*)p)[3] = (byte)((a) ); \ } while(0) +#define digitp(p) (*(p) >= '0' && *(p) <= '9') +#define hexdigitp(a) (digitp (a) \ + || (*(a) >= 'A' && *(a) <= 'F') \ + || (*(a) >= 'a' && *(a) <= 'f')) +#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \ + *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10)) +#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1)) + + static char *fd_passwd = NULL; static char *next_pw = NULL; static char *last_pw = NULL; +#if defined (__MINGW32__) || defined (__CYGWIN32__) +static int read_fd = 0; +static int write_fd = 0; +#endif + static void hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create ); int @@ -71,10 +119,10 @@ have_static_passphrase() void set_next_passphrase( const char *s ) { - gcry_free(next_pw); + m_free(next_pw); next_pw = NULL; if( s ) { - next_pw = gcry_xmalloc_secure( strlen(s)+1 ); + next_pw = m_alloc_secure( strlen(s)+1 ); strcpy(next_pw, s ); } } @@ -101,7 +149,6 @@ read_passphrase_from_fd( int fd ) if ( opt.use_agent ) return; /* not used here */ - if( !opt.batch ) tty_printf("Reading passphrase from file descriptor %d ...", fd ); @@ -109,7 +156,7 @@ read_passphrase_from_fd( int fd ) if( i >= len-1 ) { char *pw2 = pw; len += 100; - pw = gcry_xmalloc_secure( len ); + pw = m_alloc_secure( len ); if( pw2 ) memcpy(pw, pw2, i ); else @@ -122,16 +169,33 @@ read_passphrase_from_fd( int fd ) if( !opt.batch ) tty_printf("\b\b\b \n" ); - gcry_free( fd_passwd ); + m_free( fd_passwd ); fd_passwd = pw; } - static int writen ( int fd, const void *buf, size_t nbytes ) { +#if defined (__MINGW32__) || defined (__CYGWIN32__) + DWORD nwritten, nleft = nbytes; + + while (nleft > 0) { + if ( !WriteFile( (HANDLE)write_fd, buf, nleft, &nwritten, NULL) ) { + log_error("write failed: ec=%d\n", (int)GetLastError()); + return -1; + } + /*log_info("** WriteFile fd=%d nytes=%d nwritten=%d\n", + write_fd, nbytes, (int)nwritten);*/ + Sleep(100); + + nleft -= nwritten; + buf = (const BYTE *)buf + nwritten; + } +#elif defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) + /* not implemented */ +#else size_t nleft = nbytes; - ssize_t nwritten; + int nwritten; while( nleft > 0 ) { nwritten = write( fd, buf, nleft ); @@ -139,13 +203,15 @@ writen ( int fd, const void *buf, size_t nbytes ) if ( errno == EINTR ) nwritten = 0; else { - log_error ( "writen() failed: %s\n", strerror (errno) ); + log_error ( "write() failed: %s\n", strerror (errno) ); return -1; } } nleft -= nwritten; buf = (const char*)buf + nwritten; } +#endif + return 0; } @@ -153,6 +219,29 @@ writen ( int fd, const void *buf, size_t nbytes ) static int readn ( int fd, void *buf, size_t buflen, size_t *ret_nread ) { +#if defined (__MINGW32__) || defined (__CYGWIN32__) + DWORD nread, nleft = buflen; + + while (nleft > 0) { + if ( !ReadFile( (HANDLE)read_fd, buf, nleft, &nread, NULL) ) { + log_error("read() error: ec=%d\n", (int)GetLastError()); + return -1; + } + if (!nread || GetLastError() == ERROR_BROKEN_PIPE) + break; + /*log_info("** ReadFile fd=%d buflen=%d nread=%d\n", + read_fd, buflen, (int)nread);*/ + Sleep(100); + + nleft -= nread; + buf = (BYTE *)buf + nread; + } + if (ret_nread) + *ret_nread = buflen - nleft; + +#elif defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) + /* not implemented */ +#else size_t nleft = buflen; int nread; char *p; @@ -175,9 +264,161 @@ readn ( int fd, void *buf, size_t buflen, size_t *ret_nread ) } if( ret_nread ) *ret_nread = buflen - nleft; +#endif + return 0; } +/* read an entire line */ +static int +readline (int fd, char *buf, size_t buflen) +{ + size_t nleft = buflen; + char *p; + int nread = 0; + + while (nleft > 0) + { + int n = read (fd, buf, nleft); + if (n < 0) + { + if (errno == EINTR) + continue; + return -1; /* read error */ + } + else if (!n) + { + return -1; /* incomplete line */ + } + p = buf; + nleft -= n; + buf += n; + nread += n; + + for (; n && *p != '\n'; n--, p++) + ; + if (n) + { + break; /* at least one full line available - that's enough. + This function is just a temporary hack until we use + the assuna lib in gpg. So it is okay to forget + about pending bytes */ + } + } + + return nread; +} + + + +#if !defined (__riscos__) + +#if !defined (__MINGW32__) && !defined (__CYGWIN32__) +/* For the new Assuan protocol we may have to send options */ +static int +agent_send_option (int fd, const char *name, const char *value) +{ + char buf[200]; + int nread; + char *line; + int i; + + line = m_alloc (7 + strlen (name) + 1 + strlen (value) + 2); + strcpy (stpcpy (stpcpy (stpcpy ( + stpcpy (line, "OPTION "), name), "="), value), "\n"); + i = writen (fd, line, strlen (line)); + m_free (line); + if (i) + return -1; + + /* get response */ + nread = readline (fd, buf, DIM(buf)-1); + if (nread < 3) + return -1; + + if (buf[0] == 'O' && buf[1] == 'K' && (buf[2] == ' ' || buf[2] == '\n')) + return 0; /* okay */ + + return -1; +} + +static int +agent_send_all_options (int fd) +{ + char *dft_display = NULL; + char *dft_ttyname = NULL; + char *dft_ttytype = NULL; + char *old_lc = NULL; + char *dft_lc = NULL; + int rc = 0; + + dft_display = getenv ("DISPLAY"); + if (opt.display || dft_display) + { + if (agent_send_option (fd, "display", + opt.display ? opt.display : dft_display)) + return -1; + } + + if (!opt.ttyname && ttyname (1)) + dft_ttyname = ttyname (1); + if (opt.ttyname || dft_ttyname) + { + if (agent_send_option (fd, "ttyname", + opt.ttyname ? opt.ttyname : dft_ttyname)) + return -1; + } + + dft_ttytype = getenv ("TERM"); + if (opt.ttytype || (dft_ttyname && dft_ttytype)) + { + if (agent_send_option (fd, "ttytype", + opt.ttyname ? opt.ttytype : dft_ttytype)) + return -1; + } + +#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE) + old_lc = setlocale (LC_CTYPE, NULL); + if (old_lc) + old_lc = m_strdup (old_lc); + dft_lc = setlocale (LC_CTYPE, ""); +#endif + if (opt.lc_ctype || (dft_ttyname && dft_lc)) + { + rc = agent_send_option (fd, "lc-ctype", + opt.lc_ctype ? opt.lc_ctype : dft_lc); + } +#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE) + if (old_lc) + { + setlocale (LC_CTYPE, old_lc); + m_free (old_lc); + } +#endif + if (rc) + return rc; + +#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES) + old_lc = setlocale (LC_MESSAGES, NULL); + if (old_lc) + old_lc = m_strdup (old_lc); + dft_lc = setlocale (LC_MESSAGES, ""); +#endif + if (opt.lc_messages || (dft_ttyname && dft_lc)) + { + rc = agent_send_option (fd, "lc-messages", + opt.lc_messages ? opt.lc_messages : dft_lc); + } +#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES) + if (old_lc) + { + setlocale (LC_MESSAGES, old_lc); + m_free (old_lc); + } +#endif + return rc; +} +#endif /*!__MINGW32__ && !__CYGWIN32__*/ /* @@ -186,33 +427,101 @@ readn ( int fd, void *buf, size_t buflen, size_t *ret_nread ) */ static int -agent_open () +agent_open (int *ret_prot) { +#if defined (__MINGW32__) || defined (__CYGWIN32__) + int fd; + char *infostr, *p; + HANDLE h; + char pidstr[128]; + + *ret_prot = 0; + if ( !(infostr = read_w32_registry_string(NULL, "Software\\GNU\\GnuPG", + "agentPID")) + || *infostr == '0') { + log_error( _("gpg-agent is not available in this session\n")); + return -1; + } + free(infostr); + + sprintf(pidstr, "%u", (unsigned int)GetCurrentProcessId()); + if (write_w32_registry_string(NULL, "Software\\GNU\\GnuPG", + "agentCID", pidstr)) { + log_error( _("can't set client pid for the agent\n") ); + return -1; + } + h = OpenEvent(EVENT_ALL_ACCESS, FALSE, "gpg_agent"); + SetEvent(h); + Sleep(50); /* some time for the server */ + if ( !(p = read_w32_registry_string(NULL, "Software\\GNU\\GnuPG", + "agentReadFD")) ) { + log_error( _("can't get server read FD for the agent\n") ); + return -1; + } + read_fd = atol(p); + free(p); + if ( !(p = read_w32_registry_string(NULL, "Software\\GNU\\GnuPG", + "agentWriteFD")) ) { + log_error ( _("can't get server write FD for the agent\n") ); + return -1; + } + write_fd = atol(p); + free(p); + fd = 0; + + if ( writen ( fd, "GPGA\0\0\0\x01", 8 ) ) { + fd = -1; + } +#else /* Posix */ + int fd; char *infostr, *p; struct sockaddr_un client_addr; size_t len; + int prot; + + if (opt.gpg_agent_info) + infostr = m_strdup (opt.gpg_agent_info); + else + { + infostr = getenv ( "GPG_AGENT_INFO" ); + if ( !infostr ) { + log_error (_("gpg-agent is not available in this session\n")); + opt.use_agent = 0; + return -1; + } + infostr = m_strdup ( infostr ); + } - infostr = getenv ( "GPG_AGENT_INFO" ); - if ( !infostr ) { - log_error (_("gpg-agent is not available in this session\n")); - return -1; - } - infostr = gcry_xstrdup ( infostr ); if ( !(p = strchr ( infostr, ':')) || p == infostr || (p-infostr)+1 >= sizeof client_addr.sun_path ) { - log_error (_("malformed GPG_AGENT_INFO environment variable\n")); - gcry_free (infostr ); + log_error( _("malformed GPG_AGENT_INFO environment variable\n")); + m_free (infostr ); + opt.use_agent = 0; return -1; } - *p = 0; - + *p++ = 0; + /* See whether this is the new gpg-agent using the Assuna protocl. + This agent identifies itself by have an info string with a + version number in the 3rd field. */ + while (*p && *p != ':') + p++; + prot = *p? atoi (p+1) : 0; + if ( prot < 0 || prot > 1) { + log_error (_("gpg-agent protocol version %d is not supported\n"),prot); + m_free (infostr ); + opt.use_agent = 0; + return -1; + } + *ret_prot = prot; + if( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1 ) { log_error ("can't create socket: %s\n", strerror(errno) ); - gcry_free (infostr ); + m_free (infostr ); + opt.use_agent = 0; return -1; } - + memset( &client_addr, 0, sizeof client_addr ); client_addr.sun_family = AF_UNIX; strcpy( client_addr.sun_path, infostr ); @@ -222,24 +531,57 @@ agent_open () if( connect( fd, (struct sockaddr*)&client_addr, len ) == -1 ) { log_error ( _("can't connect to `%s': %s\n"), infostr, strerror (errno) ); - gcry_free (infostr ); + m_free (infostr ); close (fd ); + opt.use_agent = 0; return -1; } - gcry_free (infostr); + m_free (infostr); - if ( writen ( fd, "GPGA\0\0\0\x01", 8 ) ) { - close (fd); - fd = -1; + if (!prot) { + if ( writen ( fd, "GPGA\0\0\0\x01", 8 ) ) { + close (fd); + fd = -1; + } } + else { /* assuan based gpg-agent */ + char line[200]; + int nread; + + nread = readline (fd, line, DIM(line)); + if (nread < 3 || !(line[0] == 'O' && line[1] == 'K' + && (line[2] == '\n' || line[2] == ' ')) ) { + log_error ( _("communication problem with gpg-agent\n")); + close (fd ); + opt.use_agent = 0; + return -1; + } + + if (agent_send_all_options (fd)) { + log_error (_("problem with the agent - disabling agent use\n")); + close (fd); + opt.use_agent = 0; + return -1; + } + + } +#endif + return fd; } + static void agent_close ( int fd ) { +#if defined (__MINGW32__) || defined (__CYGWIN32__) + HANDLE h = OpenEvent(EVENT_ALL_ACCESS, FALSE, "gpg_agent"); + ResetEvent(h); +#else close (fd); +#endif } +#endif /* !__riscos__ */ @@ -250,210 +592,345 @@ agent_close ( int fd ) * 2: Ditto, but change the text to "repeat entry" */ static char * -agent_get_passphrase ( u32 *keyid, int mode ) +agent_get_passphrase ( u32 *keyid, int mode, const char *tryagain_text ) { - size_t n; - char *atext; - char buf[50]; - int fd = -1; - int nread; - u32 reply; - char *pw = NULL; - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - byte fpr[MAX_FINGERPRINT_LEN]; +#if defined(__riscos__) + return NULL; +#else + size_t n; + char *atext; + char buf[50]; + int fd = -1; + int nread; + u32 reply; + char *pw = NULL; + PKT_public_key *pk = m_alloc_clear( sizeof *pk ); + byte fpr[MAX_FINGERPRINT_LEN]; + int prot; #if MAX_FINGERPRINT_LEN < 20 - #error agent needs a 20 byte fingerprint +#error agent needs a 20 byte fingerprint #endif - memset (fpr, 0, MAX_FINGERPRINT_LEN ); - if( keyid && get_pubkey( pk, keyid ) ) - pk = NULL; /* oops: no key for some reason */ - - if ( !mode && pk ) { - char *uid; - size_t uidlen; - const char *algo_name = gcry_pk_algo_name( pk->pubkey_algo ); - const char *timestr; - char *maink; - const char *fmtstr; - - if ( !algo_name ) - algo_name = "?"; - - fmtstr = _(" (main key ID %08lX)"); - maink = gcry_xmalloc ( strlen (fmtstr) + 20 ); - if( keyid[2] && keyid[3] && keyid[0] != keyid[2] - && keyid[1] != keyid[3] ) - sprintf( maink, fmtstr, (ulong)keyid[3] ); - else - *maink = 0; - - uid = get_user_id( keyid, &uidlen ); - timestr = strtimestamp (pk->timestamp); - fmtstr = _("You need a passphrase to unlock the" - " secret key for user:\n" - "\"%.*s\"\n" - "%u-bit %s key, ID %08lX, created %s%s\n" ); - atext = gcry_xmalloc ( 100 + strlen (fmtstr) - + uidlen + 15 + strlen(algo_name) + 8 - + strlen (timestr) + strlen (maink) ); - sprintf (atext, fmtstr, - uidlen, uid, - nbits_from_pk (pk), algo_name, (ulong)keyid[1], timestr, - maink ); - gcry_free (uid); - gcry_free (maink); - - { - size_t dummy; - fingerprint_from_pk( pk, fpr, &dummy ); - } - + memset (fpr, 0, MAX_FINGERPRINT_LEN ); + if( keyid && get_pubkey( pk, keyid ) ) + pk = NULL; /* oops: no key for some reason */ + + if ( !mode && pk ) + { + char *uid; + size_t uidlen; + const char *algo_name = pubkey_algo_to_string ( pk->pubkey_algo ); + const char *timestr; + char *maink; + const char *fmtstr; + + if ( !algo_name ) + algo_name = "?"; + + fmtstr = _(" (main key ID %08lX)"); + maink = m_alloc ( strlen (fmtstr) + 20 ); + if( keyid[2] && keyid[3] && keyid[0] != keyid[2] + && keyid[1] != keyid[3] ) + sprintf( maink, fmtstr, (ulong)keyid[3] ); + else + *maink = 0; + + uid = get_user_id( keyid, &uidlen ); + timestr = strtimestamp (pk->timestamp); + fmtstr = _("You need a passphrase to unlock the" + " secret key for user:\n" + "\"%.*s\"\n" + "%u-bit %s key, ID %08lX, created %s%s\n" ); + atext = m_alloc ( 100 + strlen (fmtstr) + + uidlen + 15 + strlen(algo_name) + 8 + + strlen (timestr) + strlen (maink) ); + sprintf (atext, fmtstr, + uidlen, uid, + nbits_from_pk (pk), algo_name, (ulong)keyid[1], timestr, + maink ); + m_free (uid); + m_free (maink); + + { + size_t dummy; + fingerprint_from_pk( pk, fpr, &dummy ); + } + } - else if (mode == 1 ) - atext = gcry_xstrdup ( _("Enter passphrase\n") ); - else - atext = gcry_xstrdup ( _("Repeat passphrase\n") ); + else if (mode == 1 ) + atext = m_strdup ( _("Enter passphrase\n") ); + else + atext = m_strdup ( _("Repeat passphrase\n") ); + + if ( (fd = agent_open (&prot)) == -1 ) + goto failure; - - - if ( (fd = agent_open ()) == -1 ) + if (!prot) + { /* old style protocol */ + n = 4 + 20 + strlen (atext); + u32tobuf (buf, n ); + u32tobuf (buf+4, GPGA_PROT_GET_PASSPHRASE ); + memcpy (buf+8, fpr, 20 ); + if ( writen ( fd, buf, 28 ) || writen ( fd, atext, strlen (atext) ) ) goto failure; - - - n = 4 + 20 + strlen (atext); - u32tobuf (buf, n ); - u32tobuf (buf+4, GPGA_PROT_GET_PASSPHRASE ); - memcpy (buf+8, fpr, 20 ); - if ( writen ( fd, buf, 28 ) || writen ( fd, atext, strlen (atext) ) ) + m_free (atext); atext = NULL; + + /* get response */ + if ( readn ( fd, buf, 12, &nread ) ) goto failure; - gcry_free (atext); atext = NULL; - - /* get response */ - if ( readn ( fd, buf, 12, &nread ) ) - goto failure; - - if ( nread < 8 ) { - log_error ( _("response from agent too short\n") ); - goto failure; - } - n = buftou32 ( buf ); - reply = buftou32 ( buf + 4 ); - if ( reply == GPGA_PROT_GOT_PASSPHRASE ) { - size_t pwlen; - size_t nn; - - if ( nread < 12 || n < 8 ) { - log_error ( _("response from agent too short\n") ); - goto failure; + + if ( nread < 8 ) + { + log_error ( "response from agent too short\n" ); + goto failure; } - pwlen = buftou32 ( buf + 8 ); - nread -= 12; - n -= 8; - if ( pwlen > n || n > 1000 ) { - log_error (_("passphrase too long\n")); - /* or protocol error */ + n = buftou32 ( buf ); + reply = buftou32 ( buf + 4 ); + if ( reply == GPGA_PROT_GOT_PASSPHRASE ) + { + size_t pwlen; + size_t nn; + + if ( nread < 12 || n < 8 ) + { + log_error ( "response from agent too short\n" ); + goto failure; + } + pwlen = buftou32 ( buf + 8 ); + nread -= 12; + n -= 8; + if ( pwlen > n || n > 1000 ) + { + log_error (_("passphrase too long\n")); + /* or protocol error */ + goto failure; + } + /* we read the whole block in one chunk to give no hints + * on how long the passhrase actually is - this wastes some bytes + * but because we already have this padding we should not loosen + * this by issuing 2 read calls */ + pw = m_alloc_secure ( n+1 ); + if ( readn ( fd, pw, n, &nn ) ) goto failure; + if ( n != nn ) + { + log_error (_("invalid response from agent\n")); + goto failure; + } + pw[pwlen] = 0; /* make a C String */ + agent_close (fd); + free_public_key( pk ); + return pw; } - /* we read the whole block in one chunk to give no hints - * on how long the passhrase actually is - this wastes some bytes - * but because we already have this padding we should not loosen - * the by issuing 2 read calls */ - pw = gcry_xmalloc_secure ( n+1 ); - if ( readn ( fd, pw, n, &nn ) ) - goto failure; - if ( n != nn ) { - log_error (_("invalid response from agent\n")); - goto failure; - } - pw[pwlen] = 0; /* make a C String */ - agent_close (fd); - free_public_key( pk ); - return pw; - } - else if ( reply == GPGA_PROT_CANCELED ) { + else if ( reply == GPGA_PROT_CANCELED ) log_info ( _("cancelled by user\n") ); - } - else { + else log_error ( _("problem with the agent: agent returns 0x%lx\n"), - (ulong)reply ); + (ulong)reply ); } - - - failure: - gcry_free (atext); - if ( fd != -1 ) - agent_close (fd); - gcry_free (pw ); - free_public_key( pk ); + else + { /* The new Assuan protocol */ + char *line, *p; + int i; - return NULL; + if (!tryagain_text) + tryagain_text = "X"; + + /* We allocate 2 time the needed space for atext so that there + is nenough space for escaping */ + line = m_alloc (15 + 46 + + 3*strlen (tryagain_text) + 3*strlen (atext) + 2); + strcpy (line, "GET_PASSPHRASE "); + p = line+15; + if (!mode) + { + for (i=0; i < 20; i++, p +=2 ) + sprintf (p, "%02X", fpr[i]); + } + else + *p++ = 'X'; /* no caching */ + *p++ = ' '; + for (i=0; tryagain_text[i]; i++) + { + if (tryagain_text[i] < ' ' || tryagain_text[i] == '+') + { + sprintf (p, "%%%02X", tryagain_text[i]); + p += 3; + } + else if (tryagain_text[i] == ' ') + *p++ = '+'; + else + *p++ = tryagain_text[i]; + } + *p++ = ' '; + *p++ = 'X'; /* Use the standard prompt */ + *p++ = ' '; + /* copy description */ + for (i=0; atext[i]; i++) + { + if (atext[i] < ' ' || atext[i] == '+') + { + sprintf (p, "%%%02X", atext[i]); + p += 3; + } + else if (atext[i] == ' ') + *p++ = '+'; + else + *p++ = atext[i]; + } + *p++ = '\n'; + i = writen (fd, line, p - line); + m_free (line); + if (i) + goto failure; + m_free (atext); atext = NULL; + + /* get response */ + pw = m_alloc_secure (500); + nread = readline (fd, pw, 499); + if (nread < 3) + goto failure; + + if (pw[0] == 'O' && pw[1] == 'K' && pw[2] == ' ') + { /* we got a passphrase - convert it back from hex */ + size_t pwlen = 0; + + for (i=3; i < nread && hexdigitp (pw+i); i+=2) + pw[pwlen++] = xtoi_2 (pw+i); + pw[pwlen] = 0; /* make a C String */ + agent_close (fd); + free_public_key( pk ); + return pw; + } + else if (nread > 7 && !memcmp (pw, "ERR 111", 7) + && (pw[7] == ' ' || pw[7] == '\n') ) + log_info (_("cancelled by user\n") ); + else + { + log_error (_("problem with the agent - disabling agent use\n")); + opt.use_agent = 0; + } + } + + + failure: + m_free (atext); + if ( fd != -1 ) + agent_close (fd); + m_free (pw ); + free_public_key( pk ); + + return NULL; +#endif /* Posix or W32 */ } - /* - * Reste the cached passphrase + * Clear the cached passphrase */ void passphrase_clear_cache ( u32 *keyid, int algo ) { - size_t n; - char buf[50]; - int fd = -1; - int nread; - u32 reply; - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - byte fpr[MAX_FINGERPRINT_LEN]; - +#if defined(__riscos__) + return ; +#else + size_t n; + char buf[200]; + int fd = -1; + size_t nread; + u32 reply; + PKT_public_key *pk; + byte fpr[MAX_FINGERPRINT_LEN]; + int prot; + #if MAX_FINGERPRINT_LEN < 20 #error agent needs a 20 byte fingerprint #endif - memset (fpr, 0, MAX_FINGERPRINT_LEN ); - if( !keyid || get_pubkey( pk, keyid ) ) { - log_debug ("oops, no key in passphrase_clear_cache\n"); - goto failure; /* oops: no key for some reason */ - } - + if (!opt.use_agent) + return; + + pk = m_alloc_clear ( sizeof *pk ); + memset (fpr, 0, MAX_FINGERPRINT_LEN ); + if( !keyid || get_pubkey( pk, keyid ) ) { - size_t dummy; - fingerprint_from_pk( pk, fpr, &dummy ); + log_debug ("oops, no key in passphrase_clear_cache\n"); + goto failure; /* oops: no key for some reason */ } + + { + size_t dummy; + fingerprint_from_pk( pk, fpr, &dummy ); + } - if ( (fd = agent_open ()) == -1 ) + if ( (fd = agent_open (&prot)) == -1 ) + goto failure; + + if (!prot) + { + n = 4 + 20; + u32tobuf (buf, n ); + u32tobuf (buf+4, GPGA_PROT_CLEAR_PASSPHRASE ); + memcpy (buf+8, fpr, 20 ); + if ( writen ( fd, buf, 28 ) ) goto failure; - - n = 4 + 20; - u32tobuf (buf, n ); - u32tobuf (buf+4, GPGA_PROT_CLEAR_PASSPHRASE ); - memcpy (buf+8, fpr, 20 ); - if ( writen ( fd, buf, 28 ) ) + + /* get response */ + if ( readn ( fd, buf, 8, &nread ) ) goto failure; - - /* get response */ - if ( readn ( fd, buf, 8, &nread ) ) - goto failure; - - if ( nread < 8 ) { - log_error ( _("response from agent too short\n") ); + + if ( nread < 8 ) { + log_error ( "response from agent too short\n" ); goto failure; + } + + reply = buftou32 ( buf + 4 ); + if ( reply != GPGA_PROT_OKAY && reply != GPGA_PROT_NO_PASSPHRASE ) + { + log_error ( _("problem with the agent: agent returns 0x%lx\n"), + (ulong)reply ); + } } - - reply = buftou32 ( buf + 4 ); - if ( reply != GPGA_PROT_OKAY && reply != GPGA_PROT_NO_PASSPHRASE ) { - log_error ( _("problem with the agent: agent returns 0x%lx\n"), - (ulong)reply ); + else + { /* The assuan protocol */ + char *line, *p; + int i; + + line = m_alloc (17 + 40 + 2); + strcpy (line, "CLEAR_PASSPHRASE "); + p = line+17; + for (i=0; i < 20; i++, p +=2 ) + sprintf (p, "%02X", fpr[i]); + *p++ = '\n'; + i = writen (fd, line, p - line); + m_free (line); + if (i) + goto failure; + + /* get response */ + nread = readline (fd, buf, DIM(buf)-1); + if (nread < 3) + goto failure; + + if (buf[0] == 'O' && buf[1] == 'K' && (buf[2] == ' ' || buf[2] == '\n')) + ; + else + { + log_error (_("problem with the agent - disabling agent use\n")); + opt.use_agent = 0; + } } - - failure: - if ( fd != -1 ) - agent_close (fd); - free_public_key( pk ); + failure: + if (fd != -1) + agent_close (fd); + free_public_key( pk ); +#endif /* Posix or W32 */ } + + /**************** * Get a passphrase for the secret key with KEYID, display TEXT * if the user needs to enter the passphrase. @@ -467,31 +944,49 @@ passphrase_clear_cache ( u32 *keyid, int algo ) */ DEK * passphrase_to_dek( u32 *keyid, int pubkey_algo, - int cipher_algo, STRING2KEY *s2k, int mode ) + int cipher_algo, STRING2KEY *s2k, int mode, + const char *tryagain_text) { char *pw = NULL; DEK *dek; STRING2KEY help_s2k; if( !s2k ) { + /* This is used for the old rfc1991 mode + * Note: This must match the code in encode.c with opt.rfc1991 set */ + int algo = opt.def_digest_algo ? opt.def_digest_algo + : opt.s2k_digest_algo; + s2k = &help_s2k; s2k->mode = 0; - /* this should be MD5 if cipher is IDEA, but because we do - * not have IDEA, we use the default one, the user - * can select it from the commandline - */ - s2k->hash_algo = opt.def_digest_algo?opt.def_digest_algo - :DEFAULT_DIGEST_ALGO; + s2k->hash_algo = algo; } if( !next_pw && is_status_enabled() ) { char buf[50]; + if( keyid ) { - sprintf( buf, "%08lX%08lX", (ulong)keyid[0], (ulong)keyid[1] ); - if( keyid[2] && keyid[3] && keyid[0] != keyid[2] - && keyid[1] != keyid[3] ) - sprintf( buf+strlen(buf), " %08lX%08lX %d 0", - (ulong)keyid[2], (ulong)keyid[3], pubkey_algo ); + u32 used_kid[2]; + char *us; + + if( keyid[2] && keyid[3] ) { + used_kid[0] = keyid[2]; + used_kid[1] = keyid[3]; + } + else { + used_kid[0] = keyid[0]; + used_kid[1] = keyid[1]; + } + + us = get_long_user_id_string( keyid ); + write_status_text( STATUS_USERID_HINT, us ); + m_free(us); + + sprintf( buf, "%08lX%08lX %08lX%08lX %d 0", + (ulong)keyid[0], (ulong)keyid[1], + (ulong)used_kid[0], (ulong)used_kid[1], + pubkey_algo ); + write_status_text( STATUS_NEED_PASSPHRASE, buf ); } else { @@ -501,7 +996,7 @@ passphrase_to_dek( u32 *keyid, int pubkey_algo, } if( keyid && !opt.batch && !next_pw ) { - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); + PKT_public_key *pk = m_alloc_clear( sizeof *pk ); size_t n; char *p; @@ -509,11 +1004,11 @@ passphrase_to_dek( u32 *keyid, int pubkey_algo, "user: \"") ); p = get_user_id( keyid, &n ); tty_print_utf8_string( p, n ); - gcry_free(p); + m_free(p); tty_printf("\"\n"); if( !get_pubkey( pk, keyid ) ) { - const char *s = gcry_pk_algo_name( pk->pubkey_algo ); + const char *s = pubkey_algo_to_string( pk->pubkey_algo ); tty_printf( _("%u-bit %s key, ID %08lX, created %s"), nbits_from_pk( pk ), s?s:"?", (ulong)keyid[1], strtimestamp(pk->timestamp) ); @@ -527,33 +1022,46 @@ passphrase_to_dek( u32 *keyid, int pubkey_algo, free_public_key( pk ); } + agent_died: if( next_pw ) { pw = next_pw; next_pw = NULL; } else if ( opt.use_agent ) { - pw = agent_get_passphrase ( keyid, mode == 2? 1: 0 ); - if ( !pw ) - pw = gcry_xstrdup (""); + pw = agent_get_passphrase ( keyid, mode == 2? 1: 0, tryagain_text ); + if (!pw) + { + if (!opt.use_agent) + goto agent_died; + pw = m_strdup (""); + } if( *pw && mode == 2 ) { - char *pw2 = agent_get_passphrase ( keyid, 2 ); - if ( !pw2 ) - pw2 = gcry_xstrdup (""); + char *pw2 = agent_get_passphrase ( keyid, 2, NULL ); + if (!pw2) + { + if (!opt.use_agent) + { + m_free (pw); + pw = NULL; + goto agent_died; + } + pw2 = m_strdup (""); + } if( strcmp(pw, pw2) ) { - gcry_free(pw2); - gcry_free(pw); + m_free(pw2); + m_free(pw); return NULL; } - gcry_free(pw2); + m_free(pw2); } } else if( fd_passwd ) { - pw = gcry_xmalloc_secure( strlen(fd_passwd)+1 ); + pw = m_alloc_secure( strlen(fd_passwd)+1 ); strcpy( pw, fd_passwd ); } else if( opt.batch ) { log_error(_("can't query password in batchmode\n")); - pw = gcry_xstrdup( "" ); /* return an empty passphrase */ + pw = m_strdup( "" ); /* return an empty passphrase */ } else { pw = cpr_get_hidden("passphrase.enter", _("Enter passphrase: ") ); @@ -563,24 +1071,24 @@ passphrase_to_dek( u32 *keyid, int pubkey_algo, _("Repeat passphrase: ") ); tty_kill_prompt(); if( strcmp(pw, pw2) ) { - gcry_free(pw2); - gcry_free(pw); + m_free(pw2); + m_free(pw); return NULL; } - gcry_free(pw2); + m_free(pw2); } } if( !pw || !*pw ) write_status( STATUS_MISSING_PASSPHRASE ); - dek = gcry_xmalloc_secure( sizeof *dek ); + dek = m_alloc_secure_clear ( sizeof *dek ); dek->algo = cipher_algo; if( !*pw && mode == 2 ) dek->keylen = 0; else hash_passphrase( dek, pw, s2k, mode==2 ); - gcry_free(last_pw); + m_free(last_pw); last_pw = pw; return dek; } @@ -594,24 +1102,28 @@ passphrase_to_dek( u32 *keyid, int pubkey_algo, static void hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create ) { - GCRY_MD_HD md; + MD_HANDLE md; int pass, i; int used = 0; int pwlen = strlen(pw); assert( s2k->hash_algo ); - dek->keylen = gcry_cipher_get_algo_keylen( dek->algo ); + dek->keylen = cipher_get_keylen( dek->algo ) / 8; if( !(dek->keylen > 0 && dek->keylen <= DIM(dek->key)) ) BUG(); - if( !(md = gcry_md_open( s2k->hash_algo, GCRY_MD_FLAG_SECURE )) ) - BUG(); - + md = md_open( s2k->hash_algo, 1); for(pass=0; used < dek->keylen ; pass++ ) { if( pass ) { - gcry_md_reset(md); + if( (opt.emulate_bugs & EMUBUG_3DESS2K)) { + int tmp = md->finalized; + md_reset( md ); + md->finalized = tmp; + } + else + md_reset(md); for(i=0; i < pass; i++ ) /* preset the hash context */ - gcry_md_putc(md, 0 ); + md_putc(md, 0 ); } if( s2k->mode == 1 || s2k->mode == 3 ) { @@ -619,7 +1131,7 @@ hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create ) ulong count = len2; if( create && !pass ) { - gcry_randomize(s2k->salt, 8, GCRY_STRONG_RANDOM ); + randomize_buffer(s2k->salt, 8, 1); if( s2k->mode == 3 ) s2k->count = 96; /* 65536 iterations */ } @@ -631,27 +1143,27 @@ hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create ) } /* a little bit complicated because we need a ulong for count */ while( count > len2 ) { /* maybe iterated+salted */ - gcry_md_write( md, s2k->salt, 8 ); - gcry_md_write( md, pw, pwlen ); + md_write( md, s2k->salt, 8 ); + md_write( md, pw, pwlen ); count -= len2; } if( count < 8 ) - gcry_md_write( md, s2k->salt, count ); + md_write( md, s2k->salt, count ); else { - gcry_md_write( md, s2k->salt, 8 ); + md_write( md, s2k->salt, 8 ); count -= 8; - gcry_md_write( md, pw, count ); + md_write( md, pw, count ); } } else - gcry_md_write( md, pw, pwlen ); - gcry_md_final( md ); - i = gcry_md_get_algo_dlen( s2k->hash_algo ); + md_write( md, pw, pwlen ); + md_final( md ); + i = md_digest_length( s2k->hash_algo ); if( i > dek->keylen - used ) i = dek->keylen - used; - memcpy( dek->key+used, gcry_md_read(md, s2k->hash_algo), i ); + memcpy( dek->key+used, md_read(md, s2k->hash_algo), i ); used += i; } - gcry_md_close(md); + md_close(md); } diff --git a/g10/photoid.c b/g10/photoid.c new file mode 100644 index 000000000..66240ecc2 --- /dev/null +++ b/g10/photoid.c @@ -0,0 +1,320 @@ +/* photoid.c - photo ID handling code + * Copyright (C) 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#ifdef HAVE_DOSISH_SYSTEM +#include +#endif +#include "packet.h" +#include "status.h" +#include "exec.h" +#include "keydb.h" +#include "util.h" +#include "i18n.h" +#include "iobuf.h" +#include "memory.h" +#include "options.h" +#include "main.h" +#include "photoid.h" + +/* Generate a new photo id packet, or return NULL if canceled */ +PKT_user_id *generate_photo_id(PKT_public_key *pk) +{ + PKT_user_id *uid; + int error=1,i; + unsigned int len; + char *filename=NULL; + byte *photo=NULL; + byte header[16]; + IOBUF file; + + header[0]=0x10; /* little side of photo header length */ + header[1]=0; /* big side of photo header length */ + header[2]=1; /* 1 == version of photo header */ + header[3]=1; /* 1 == JPEG */ + + for(i=4;i<16;i++) /* The reserved bytes */ + header[i]=0; + + uid=m_alloc_clear(sizeof(*uid)+50); + + printf(_("\nPick an image to use for your photo ID. " + "The image must be a JPEG file.\n" + "Remember that the image is stored within your public key. " + "If you use a\n" + "very large picture, your key will become very large as well!\n" + "Keeping the image close to 240x288 is a good size to use.\n")); + + while(photo==NULL) + { + printf("\n"); + + m_free(filename); + + filename=cpr_get("photoid.jpeg.add", + _("Enter JPEG filename for photo ID: ")); + + if(strlen(filename)==0) + goto scram; + + file=iobuf_open(filename); + if(!file) + { + log_error(_("Unable to open photo \"%s\": %s\n"), + filename,strerror(errno)); + continue; + } + + len=iobuf_get_filelength(file); + if(len>6144) + { + printf("This JPEG is really large (%d bytes) !\n",len); + if(!cpr_get_answer_is_yes("photoid.jpeg.size", + _("Are you sure you want to use it (y/N)? "))) + { + iobuf_close(file); + continue; + } + } + + photo=m_alloc(len); + iobuf_read(file,photo,len); + iobuf_close(file); + + /* Is it a JPEG? */ + if(photo[0]!=0xFF || photo[1]!=0xD8 || + photo[6]!='J' || photo[7]!='F' || photo[8]!='I' || photo[9]!='F') + { + log_error(_("\"%s\" is not a JPEG file\n"),filename); + m_free(photo); + photo=NULL; + continue; + } + + /* Build the packet */ + build_attribute_subpkt(uid,1,photo,len,header,16); + parse_attribute_subpkts(uid); + make_attribute_uidname(uid); + + /* Showing the photo is not safe when noninteractive since the + "user" may not be able to dismiss a viewer window! */ + if(opt.command_fd==-1) + { + show_photos(uid->attribs,uid->numattribs,pk,NULL); + switch(cpr_get_answer_yes_no_quit("photoid.jpeg.okay", + _("Is this photo correct (y/N/q)? "))) + { + case -1: + goto scram; + case 0: + free_attributes(uid); + m_free(photo); + photo=NULL; + continue; + } + } + } + + error=0; + uid->ref=1; + + scram: + m_free(filename); + m_free(photo); + + if(error) + { + free_attributes(uid); + m_free(uid); + return NULL; + } + + return uid; +} + +/* Returns 0 for error, 1 for valid */ +int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len) +{ + int headerlen; + + if(attr->len<3) + return 0; + + /* For historical reasons (i.e. "oops!"), the header length is + little endian. */ + headerlen=(attr->data[1]<<8) | attr->data[0]; + + if(headerlen>attr->len) + return 0; + + if(type && attr->len>=4) + { + if(attr->data[2]==1) /* header version 1 */ + *type=attr->data[3]; + else + *type=0; + } + + *len=attr->len-headerlen; + + if(*len==0) + return 0; + + return 1; +} + +/* style==0 for extension, 1 for name, 2 for MIME type. Remember that + the "name" style string could be used in a user ID name field, so + make sure it is not too big (see + parse-packet.c:parse_attribute). */ +char *image_type_to_string(byte type,int style) +{ + char *string; + + switch(type) + { + case 1: /* jpeg */ + if(style==0) + string="jpg"; + else if(style==1) + string="jpeg"; + else + string="image/jpeg"; + break; + + default: + if(style==0) + string="bin"; + else if(style==1) + string="unknown"; + else + string="image/x-unknown"; + break; + } + + return string; +} + +static const char *get_default_photo_command(void) +{ +#if defined(HAVE_DOSISH_SYSTEM) + OSVERSIONINFO osvi; + + memset(&osvi,0,sizeof(osvi)); + osvi.dwOSVersionInfoSize=sizeof(osvi); + GetVersionEx(&osvi); + + if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS) + return "start /w %i"; + else + return "cmd /c start /w %i"; +#elif defined(__APPLE__) + /* OS X. This really needs more than just __APPLE__. */ + return "open %I"; +#elif defined(__riscos__) + return "Filer_Run %I"; +#else + return "xloadimage -fork -quiet -title 'KeyID 0x%k' stdin"; +#endif +} + +void show_photos(const struct user_attribute *attrs, + int count,PKT_public_key *pk,PKT_secret_key *sk) +{ + int i; + struct expando_args args; + u32 len; + u32 kid[2]={0,0}; + + memset(&args,0,sizeof(args)); + args.pk=pk; + args.sk=sk; + + if(pk) + keyid_from_pk(pk,kid); + else if(sk) + keyid_from_sk(sk,kid); + + for(i=0;itempfile_in, + image_type_to_string(args.imagetype,2)); +#endif + + m_free(name); + + fwrite(&attrs[i].data[offset],attrs[i].len-offset,1,spawn->tochild); + + if(exec_read(spawn)!=0) + { + exec_finish(spawn); + goto fail; + } + + if(exec_finish(spawn)!=0) + goto fail; + } + + return; + + fail: + log_error("unable to display photo ID!\n"); +} diff --git a/g10/photoid.h b/g10/photoid.h new file mode 100644 index 000000000..45d104f8c --- /dev/null +++ b/g10/photoid.h @@ -0,0 +1,14 @@ +/* Photo ID functions */ + +#ifndef _PHOTOID_H_ +#define _PHOTOID_H_ + +#include "packet.h" + +PKT_user_id *generate_photo_id(PKT_public_key *pk); +int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len); +char *image_type_to_string(byte type,int style); +void show_photos(const struct user_attribute *attrs, + int count,PKT_public_key *pk,PKT_secret_key *sk); + +#endif /* !_PHOTOID_H_ */ diff --git a/g10/pipemode.c b/g10/pipemode.c new file mode 100644 index 000000000..f3351277e --- /dev/null +++ b/g10/pipemode.c @@ -0,0 +1,317 @@ +/* pipemode.c - pipemode handler + * Copyright (C) 1998, 1990, 2000, 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include + +#include "options.h" +#include "packet.h" +#include "errors.h" +#include "iobuf.h" +#include "keydb.h" +#include "memory.h" +#include "util.h" +#include "main.h" +#include "status.h" +#include "filter.h" + + +#define CONTROL_PACKET_SPACE 30 +#define FAKED_LITERAL_PACKET_SPACE (9+2+2) + + +enum pipemode_state_e { + STX_init = 0, + STX_wait_operation, + STX_begin, + STX_text, + STX_detached_signature, + STX_detached_signature_wait_text, + STX_signed_data, + STX_wait_init +}; + +struct pipemode_context_s { + enum pipemode_state_e state; + int operation; + int stop; + int block_mode; + UnarmorPump unarmor_ctx; +}; + + +static size_t +make_control ( byte *buf, int code, int operation ) +{ + const byte *sesmark; + size_t sesmarklen, n=0;; + + sesmark = get_session_marker( &sesmarklen ); + if ( sesmarklen > 20 ) + BUG(); + + buf[n++] = 0xff; /* new format, type 63, 1 length byte */ + n++; /* length will fixed below */ + memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen; + buf[n++] = CTRLPKT_PIPEMODE; + buf[n++] = code; + buf[n++] = operation; + buf[1] = n-2; + return n; +} + + + +static int +pipemode_filter( void *opaque, int control, + IOBUF a, byte *buf, size_t *ret_len) +{ + size_t size = *ret_len; + struct pipemode_context_s *stx = opaque; + int rc=0; + size_t n = 0; + int esc = 0; + + if( control == IOBUFCTRL_UNDERFLOW ) { + *ret_len = 0; + /* reserve some space for one control packet */ + if ( size <= CONTROL_PACKET_SPACE+FAKED_LITERAL_PACKET_SPACE ) + BUG(); + size -= CONTROL_PACKET_SPACE+FAKED_LITERAL_PACKET_SPACE; + + if ( stx->block_mode ) { + /* reserve 2 bytes for the block length */ + buf[n++] = 0; + buf[n++] = 0; + } + + + while ( n < size ) { + /* FIXME: we have to make sure that we have a large enough + * buffer for a control packet even after we already read + * something. The easest way to do this is probably by ungetting + * the control sequence and returning the buffer we have + * already assembled */ + int c = iobuf_get (a); + if (c == -1) { + if ( stx->state != STX_init ) { + log_error ("EOF encountered at wrong state\n"); + stx->stop = 1; + return -1; + } + break; + } + if ( esc ) { + switch (c) { + case '@': + if ( stx->state == STX_text ) { + buf[n++] = c; + break; + } + else if ( stx->state == STX_detached_signature ) { + esc = 0; + goto do_unarmor; /* not a very elegant solution */ + } + else if ( stx->state == STX_detached_signature_wait_text) { + esc = 0; + break; /* just ignore it in this state */ + } + log_error ("@@ not allowed in current state\n"); + return -1; + case '<': /* begin of stream part */ + if ( stx->state != STX_init ) { + log_error ("nested begin of stream\n"); + stx->stop = 1; + return -1; + } + stx->state = STX_wait_operation; + stx->block_mode = 0; + unarmor_pump_release (stx->unarmor_ctx); + stx->unarmor_ctx = NULL; + break; + case '>': /* end of stream part */ + if ( stx->state != STX_wait_init ) { + log_error ("invalid state for @>\n"); + stx->stop = 1; + return -1; + } + stx->state = STX_init; + break; + case 'V': /* operation = verify */ + case 'E': /* operation = encrypt */ + case 'S': /* operation = sign */ + case 'B': /* operation = detach sign */ + case 'C': /* operation = clearsign */ + case 'D': /* operation = decrypt */ + if ( stx->state != STX_wait_operation ) { + log_error ("invalid state for operation code\n"); + stx->stop = 1; + return -1; + } + stx->operation = c; + if ( stx->operation == 'B') { + stx->state = STX_detached_signature; + if ( !opt.no_armor ) + stx->unarmor_ctx = unarmor_pump_new (); + } + else + stx->state = STX_begin; + n += make_control ( buf+n, 1, stx->operation ); + /* must leave after a control packet */ + goto leave; + + case 't': /* plaintext text follows */ + if ( stx->state == STX_detached_signature_wait_text ) + stx->state = STX_detached_signature; + if ( stx->state == STX_detached_signature ) { + if ( stx->operation != 'B' ) { + log_error ("invalid operation for this state\n"); + stx->stop = 1; + return -1; + } + stx->state = STX_signed_data; + n += make_control ( buf+n, 2, 'B' ); + /* and now we fake a literal data packet much the same + * as in armor.c */ + buf[n++] = 0xaf; /* old packet format, type 11, + var length */ + buf[n++] = 0; /* set the length header */ + buf[n++] = 6; + buf[n++] = 'b'; /* we ignore it anyway */ + buf[n++] = 0; /* namelength */ + memset(buf+n, 0, 4); /* timestamp */ + n += 4; + /* and return now so that we are sure to have + * more space in the bufer for the next control + * packet */ + stx->block_mode = 1; + goto leave2; + } + else { + log_error ("invalid state for @t\n"); + stx->stop = 1; + return -1; + } + break; + + case '.': /* ready */ + if ( stx->state == STX_signed_data ) { + if (stx->block_mode) { + buf[0] = (n-2) >> 8; + buf[1] = (n-2); + if ( buf[0] || buf[1] ) { + /* end of blocks marker */ + buf[n++] = 0; + buf[n++] = 0; + } + stx->block_mode = 0; + } + n += make_control ( buf+n, 3, 'B' ); + } + else { + log_error ("invalid state for @.\n"); + stx->stop = 1; + return -1; + } + stx->state = STX_wait_init; + goto leave; + + default: + log_error ("invalid escape sequence 0x%02x in stream\n", + c); + stx->stop = 1; + return -1; + } + esc = 0; + } + else if (c == '@') + esc = 1; + else if (stx->unarmor_ctx) { + do_unarmor: /* used to handle a @@ */ + c = unarmor_pump (stx->unarmor_ctx, c); + if ( !(c & ~255) ) + buf[n++] = c; + else if ( c < 0 ) { + /* end of armor or error - we don't care becuase + the armor can be modified anyway. The unarmored + stuff should stand for itself. */ + unarmor_pump_release (stx->unarmor_ctx); + stx->unarmor_ctx = NULL; + stx->state = STX_detached_signature_wait_text; + } + } + else if (stx->state == STX_detached_signature_wait_text) + ; /* just wait */ + else + buf[n++] = c; + } + + leave: + if ( !n ) { + stx->stop = 1; + rc = -1; /* eof */ + } + if ( stx->block_mode ) { + /* fixup the block length */ + buf[0] = (n-2) >> 8; + buf[1] = (n-2); + } + leave2: + /*log_hexdump ("pipemode:", buf, n );*/ + *ret_len = n; + } + else if( control == IOBUFCTRL_DESC ) + *(char**)buf = "pipemode_filter"; + return rc; +} + + + +void +run_in_pipemode(void) +{ + IOBUF fp; + armor_filter_context_t afx; + struct pipemode_context_s stx; + int rc; + + memset( &afx, 0, sizeof afx); + memset( &stx, 0, sizeof stx); + + fp = iobuf_open("-"); + iobuf_push_filter (fp, pipemode_filter, &stx ); + + do { + write_status (STATUS_BEGIN_STREAM); + rc = proc_packets( NULL, fp ); + write_status (STATUS_END_STREAM); + } while ( !stx.stop ); + +} + + + + + + diff --git a/g10/pkclist.c b/g10/pkclist.c index 1170c4088..671b56879 100644 --- a/g10/pkclist.c +++ b/g10/pkclist.c @@ -1,5 +1,5 @@ /* pkclist.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,77 +25,21 @@ #include #include -#include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" +#include "memory.h" #include "util.h" +#include "main.h" #include "trustdb.h" #include "ttyio.h" #include "status.h" #include "i18n.h" -#include "main.h" #define CONTROL_D ('D' - 'A' + 1) -/* fixme: we have nearly the same code in keyedit.c */ -static void -print_fpr( PKT_public_key *pk ) -{ - byte array[MAX_FINGERPRINT_LEN], *p; - size_t i, n; - - fingerprint_from_pk( pk, array, &n ); - p = array; - /* Translators: this shoud fit into 24 bytes to that the fingerprint - * data is properly aligned with the user ID */ - tty_printf(_(" Fingerprint:")); - if( n == 20 ) { - for(i=0; i < n ; i++, i++, p += 2 ) { - if( i == 10 ) - tty_printf(" "); - tty_printf(" %02X%02X", *p, p[1] ); - } - } - else { - for(i=0; i < n ; i++, p++ ) { - if( i && !(i%8) ) - tty_printf(" "); - tty_printf(" %02X", *p ); - } - } - tty_printf("\n"); -} - -static void -fpr_info( PKT_public_key *pk ) -{ - byte array[MAX_FINGERPRINT_LEN], *p; - size_t i, n; - FILE *fp = log_stream(); - - fingerprint_from_pk( pk, array, &n ); - p = array; - log_info(_("Fingerprint:")); - if( n == 20 ) { - for(i=0; i < n ; i++, i++, p += 2 ) { - if( i == 10 ) - putc(' ', fp); - fprintf(fp, " %02X%02X", *p, p[1] ); - } - } - else { - for(i=0; i < n ; i++, p++ ) { - if( i && !(i%8) ) - putc(' ', fp); - fprintf(fp, " %02X", *p ); - } - } - putc('\n', fp ); -} - /**************** * Show the revocation reason as it is stored with the given signature @@ -108,15 +52,15 @@ do_show_revocation_reason( PKT_signature *sig ) int seq = 0; const char *text; - while( (p = enum_sig_subpkt( sig->hashed_data, SIGSUBPKT_REVOC_REASON, - &n, &seq )) ) { + while( (p = enum_sig_subpkt (sig->hashed, SIGSUBPKT_REVOC_REASON, + &n, &seq, NULL )) ) { if( !n ) continue; /* invalid - just skip it */ if( *p == 0 ) text = _("No reason specified"); else if( *p == 0x01 ) - text = _("Key is superseeded"); + text = _("Key is superseded"); else if( *p == 0x02 ) text = _("Key has been compromised"); else if( *p == 0x03 ) @@ -126,7 +70,7 @@ do_show_revocation_reason( PKT_signature *sig ) else text = NULL; - log_info( _("Reason for revocation: ") ); + log_info( _("reason for revocation: ") ); if( text ) fputs( text, log_stream() ); else @@ -143,7 +87,7 @@ do_show_revocation_reason( PKT_signature *sig ) if( n ) { pp = memchr( p, '\n', n ); nn = pp? pp - p : n; - log_info( _("Revocation comment: ") ); + log_info( _("revocation comment: ") ); print_string( log_stream(), p, nn, 0 ); putc( '\n', log_stream() ); p += nn; n -= nn; @@ -152,18 +96,20 @@ do_show_revocation_reason( PKT_signature *sig ) } } +/* Mode 0: try and find the revocation based on the pk (i.e. check + subkeys, etc.) Mode 1: use only the revocation on the main pk */ -static void -show_revocation_reason( PKT_public_key *pk ) +void +show_revocation_reason( PKT_public_key *pk, int mode ) { /* Hmmm, this is not so easy becuase we have to duplicate the code * used in the trustbd to calculate the keyflags. We need to find - * a clean way to check revocation certificates on keys and signatures. - * And there should be no duplicate code. Because we enter this function - * only when the trustdb toldus, taht we have a revoked key, we could - * simplylook for a revocation cert and display this one, when there is - * only one. Let's try to do this until we have a better solution. - */ + * a clean way to check revocation certificates on keys and + * signatures. And there should be no duplicate code. Because we + * enter this function only when the trustdb told us that we have + * a revoked key, we could simply look for a revocation cert and + * display this one, when there is only one. Let's try to do this + * until we have a better solution. */ KBNODE node, keyblock = NULL; byte fingerprint[MAX_FINGERPRINT_LEN]; size_t fingerlen; @@ -178,9 +124,10 @@ show_revocation_reason( PKT_public_key *pk ) } for( node=keyblock; node; node = node->next ) { - if( ( node->pkt->pkttype == PKT_PUBLIC_KEY + if( (mode && node->pkt->pkttype == PKT_PUBLIC_KEY) || + ( ( node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) - && !cmp_public_keys( node->pkt->pkt.public_key, pk ) ) + && !cmp_public_keys( node->pkt->pkt.public_key, pk ) ) ) break; } if( !node ) { @@ -197,16 +144,23 @@ show_revocation_reason( PKT_public_key *pk ) || node->pkt->pkt.signature->sig_class == 0x28 ) ) { /* FIXME: we should check the signature here */ do_show_revocation_reason ( node->pkt->pkt.signature ); + break; } } + /* We didn't find it, so check if the whole key is revoked */ + if(!node && !mode) + show_revocation_reason(pk,1); + release_kbnode( keyblock ); } static void -show_paths( ulong lid, int only_first ) +show_paths (const PKT_public_key *pk, int only_first ) { + log_debug("not yet implemented\n"); +#if 0 void *context = NULL; unsigned otrust, validity; int last_level, level; @@ -224,16 +178,17 @@ show_paths( ulong lid, int only_first ) last_level = level; rc = keyid_from_lid( lid, keyid ); + if( rc ) { log_error("ooops: can't get keyid for lid %lu\n", lid); return; } - pk = gcry_xcalloc( 1, sizeof *pk ); + pk = m_alloc_clear( sizeof *pk ); rc = get_pubkey( pk, keyid ); if( rc ) { log_error("key %08lX: public key not found: %s\n", - (ulong)keyid[1], gpg_errstr(rc) ); + (ulong)keyid[1], g10_errstr(rc) ); return; } @@ -257,11 +212,12 @@ show_paths( ulong lid, int only_first ) p = get_user_id( keyid, &n ); tty_print_utf8_string( p, n ), - gcry_free(p); + m_free(p); tty_printf("\"\n"); free_public_key( pk ); } enum_cert_paths( &context, NULL, NULL, NULL ); /* release context */ +#endif tty_printf("\n"); } @@ -269,207 +225,192 @@ show_paths( ulong lid, int only_first ) /**************** - * Returns true if an ownertrust has changed. + * mode: 0 = standard + * 1 = Without key info and additional menu option 'm' + * this does also add an option to set the key to ultimately trusted. + * Returns: + * -2 = nothing changed - caller should show some additional info + * -1 = quit operation + * 0 = nothing changed + * 1 = new ownertrust now in new_trust */ static int -do_edit_ownertrust( ulong lid, int mode, unsigned *new_trust, int defer_help ) +do_edit_ownertrust (PKT_public_key *pk, int mode, + unsigned *new_trust, int defer_help ) { - char *p; - int rc; - size_t n; - u32 keyid[2]; - PKT_public_key *pk ; - int changed=0; - int quit=0; - int show=0; - int did_help=defer_help; + char *p; + size_t n; + u32 keyid[2]; + int changed=0; + int quit=0; + int show=0; + int did_help=defer_help; - rc = keyid_from_lid( lid, keyid ); - if( rc ) { - log_error("ooops: can't get keyid for lid %lu\n", lid); - return 0; - } + keyid_from_pk (pk, keyid); + for(;;) { + /* a string with valid answers */ + const char *ans = _("iImMqQsS"); - pk = gcry_xcalloc( 1, sizeof *pk ); - rc = get_pubkey( pk, keyid ); - if( rc ) { - log_error("key %08lX: public key not found: %s\n", - (ulong)keyid[1], gpg_errstr(rc) ); - return 0; - } - - - for(;;) { - /* a string with valid answers */ - const char *ans = _("sSmMqQ"); - - if( !did_help ) { - if( !mode ) { - tty_printf(_("No trust value assigned to %lu:\n" - "%4u%c/%08lX %s \""), lid, - nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), - (ulong)keyid[1], datestr_from_pk( pk ) ); - p = get_user_id( keyid, &n ); - tty_print_utf8_string( p, n ), - gcry_free(p); - tty_printf("\"\n"); - print_fpr( pk ); - tty_printf("\n"); - } - tty_printf(_( -"Please decide how far you trust this user to correctly\n" -"verify other users' keys (by looking at passports,\n" -"checking fingerprints from different sources...)?\n\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n") ); - if( mode ) - tty_printf(_(" m = back to the main menu\n")); - else - tty_printf(_(" q = quit\n")); - tty_printf("\n"); - did_help = 1; - } - if( strlen(ans) != 6 ) - BUG(); - p = cpr_get("edit_ownertrust.value",_("Your decision? ")); - trim_spaces(p); - cpr_kill_prompt(); - if( !*p ) - did_help = 0; - else if( *p && p[1] ) - ; - else if( !p[1] && (*p >= '1' && *p <= '4') ) { - unsigned trust; - switch( *p ) { - case '1': trust = TRUST_UNDEFINED; break; - case '2': trust = TRUST_NEVER ; break; - case '3': trust = TRUST_MARGINAL ; break; - case '4': trust = TRUST_FULLY ; break; - default: BUG(); - } - *new_trust = trust; - changed = 1; - break; - } - else if( *p == ans[0] || *p == ans[1] ) { - tty_printf(_( - "Certificates leading to an ultimately trusted key:\n")); - show = 1; - break; - } - else if( mode && (*p == ans[2] || *p == ans[3] || *p == CONTROL_D ) ) { - break ; /* back to the menu */ - } - else if( !mode && (*p == ans[4] || *p == ans[5] ) ) { - quit = 1; - break ; /* back to the menu */ - } - gcry_free(p); p = NULL; - } - gcry_free(p); - gcry_free(pk); - return show? -2: quit? -1 : changed; + if( !did_help ) + { + if( !mode ) + { + tty_printf(_("No trust value assigned to:\n" + "%4u%c/%08lX %s \""), + nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), + (ulong)keyid[1], datestr_from_pk( pk ) ); + p = get_user_id( keyid, &n ); + tty_print_utf8_string( p, n ), + m_free(p); + tty_printf("\"\n"); + print_fingerprint (pk, NULL, 2); + tty_printf("\n"); + } + tty_printf (_( + "Please decide how far you trust this user to correctly\n" + "verify other users' keys (by looking at passports,\n" + "checking fingerprints from different sources...)?\n\n")); + tty_printf (_(" %d = Don't know\n"), 1); + tty_printf (_(" %d = I do NOT trust\n"), 2); + tty_printf (_(" %d = I trust marginally\n"), 3); + tty_printf (_(" %d = I trust fully\n"), 4); + if (mode) + tty_printf (_(" %d = I trust ultimately\n"), 5); + tty_printf (_(" i = please show me more information\n") ); + if( mode ) + tty_printf(_(" m = back to the main menu\n")); + else + { + tty_printf(_(" s = skip this key\n")); + tty_printf(_(" q = quit\n")); + } + tty_printf("\n"); + did_help = 1; + } + if( strlen(ans) != 8 ) + BUG(); + p = cpr_get("edit_ownertrust.value",_("Your decision? ")); + trim_spaces(p); + cpr_kill_prompt(); + if( !*p ) + did_help = 0; + else if( *p && p[1] ) + ; + else if( !p[1] && (*p >= '1' && *p <= (mode?'5':'4')) ) + { + unsigned int trust; + switch( *p ) + { + case '1': trust = TRUST_UNDEFINED; break; + case '2': trust = TRUST_NEVER ; break; + case '3': trust = TRUST_MARGINAL ; break; + case '4': trust = TRUST_FULLY ; break; + case '5': trust = TRUST_ULTIMATE ; break; + default: BUG(); + } + if (trust == TRUST_ULTIMATE + && !cpr_get_answer_is_yes ("edit_ownertrust.set_ultimate.okay", + _("Do you really want to set this key" + " to ultimate trust? "))) + ; /* no */ + else + { + *new_trust = trust; + changed = 1; + break; + } + } + else if( *p == ans[0] || *p == ans[1] ) + { + tty_printf(_("Certificates leading to an ultimately trusted key:\n")); + show = 1; + break; + } + else if( mode && (*p == ans[2] || *p == ans[3] || *p == CONTROL_D ) ) + { + break ; /* back to the menu */ + } + else if( !mode && (*p == ans[6] || *p == ans[7] ) ) + { + break; /* skip */ + } + else if( !mode && (*p == ans[4] || *p == ans[5] ) ) + { + quit = 1; + break ; /* back to the menu */ + } + m_free(p); p = NULL; + } + m_free(p); + return show? -2: quit? -1 : changed; } - +/* + * Display a menu to change the ownertrust of the key PK (which should + * be a primary key). + * For mode values see do_edit_ownertrust () + */ int -edit_ownertrust( ulong lid, int mode ) +edit_ownertrust (PKT_public_key *pk, int mode ) { - unsigned int trust; - int no_help = 0; + unsigned int trust; + int no_help = 0; - for(;;) { - switch( do_edit_ownertrust( lid, mode, &trust, no_help ) ) { - case -1: - return 0; - case -2: - show_paths( lid, 1 ); - no_help = 1; - break; - case 1: - trust &= ~TRUST_FLAG_DISABLED; - trust |= get_ownertrust( lid ) & TRUST_FLAG_DISABLED; - if( !update_ownertrust( lid, trust ) ) - return 1; - return 0; - default: - return 0; - } + for(;;) + { + switch ( do_edit_ownertrust (pk, mode, &trust, no_help ) ) + { + case -1: /* quit */ + return -1; + case -2: /* show info */ + show_paths(pk, 1); + no_help = 1; + break; + case 1: /* trust value set */ + trust &= ~TRUST_FLAG_DISABLED; + trust |= get_ownertrust (pk) & TRUST_FLAG_DISABLED; + update_ownertrust (pk, trust ); + return 1; + default: + return 0; + } } } -static int -add_ownertrust_cb( ulong lid ) -{ - unsigned trust; - int rc = do_edit_ownertrust( lid, 0, &trust, 0 ); - - if( rc == 1 ) - return trust & TRUST_MASK; - return rc > 0? 0 : rc; -} - -/**************** - * Try to add some more owner trusts (interactive) - * This function presents all the signator in a certificate - * chain who have no ownertrust value assigned. - * Returns: -1 if no ownertrust were added. - */ -static int -add_ownertrust( PKT_public_key *pk, int *quit, unsigned *trustlevel ) -{ - int rc; - unsigned flags = 0; - - *quit = 0; - *trustlevel = 0; - tty_printf( -_("Could not find a valid trust path to the key. Let's see whether we\n" - "can assign some missing owner trust values.\n\n")); - - rc = check_trust( pk, trustlevel, NULL, add_ownertrust_cb, &flags ); - - if( !(flags & 1) ) - tty_printf(_("No path leading to one of our keys found.\n\n") ); - else if( !(flags & 2) ) - tty_printf(_("No certificates with undefined trust found.\n\n") ); - else if( !(flags & 4) ) - tty_printf(_("No trust values changed.\n\n") ); - - return (flags & 4)? 0:-1; -} /**************** * Check whether we can trust this pk which has a trustlevel of TRUSTLEVEL - * Returns: true if we trust. Might change the trustlevel + * Returns: true if we trust. */ static int -do_we_trust( PKT_public_key *pk, int *trustlevel ) +do_we_trust( PKT_public_key *pk, unsigned int *trustlevel ) { - int rc; - int did_add = 0; - int trustmask = 0; + unsigned int trustmask = 0; - retry: + /* FIXME: get_pubkey_byname already checks the validity and won't + * return keys which are either expired or revoked - so these + * question here won't get triggered. We have to find a solution + * for this. It might make sense to have a function in getkey.c + * which does only the basic checks and returns even revoked and + * expired keys. This fnction could then also returhn a list of + * keys if the speicified name is ambiguous + */ if( (*trustlevel & TRUST_FLAG_REVOKED) ) { log_info(_("key %08lX: key has been revoked!\n"), (ulong)keyid_from_pk( pk, NULL) ); - show_revocation_reason( pk ); + show_revocation_reason( pk, 0 ); if( opt.batch ) - return 0; + return 0; /* no */ if( !cpr_get_answer_is_yes("revoked_key.override", _("Use this key anyway? ")) ) - return 0; + return 0; /* no */ trustmask |= TRUST_FLAG_REVOKED; } - else if( (*trustlevel & TRUST_FLAG_SUB_REVOKED) ) { + if( (*trustlevel & TRUST_FLAG_SUB_REVOKED) ) { log_info(_("key %08lX: subkey has been revoked!\n"), (ulong)keyid_from_pk( pk, NULL) ); - show_revocation_reason( pk ); + show_revocation_reason( pk, 0 ); if( opt.batch ) return 0; @@ -483,52 +424,25 @@ do_we_trust( PKT_public_key *pk, int *trustlevel ) if( opt.always_trust) { if( opt.verbose ) log_info("No trust check due to --always-trust option\n"); - /* The problem with this, is that EXPIRE can't be checked as - * this needs to insert a ne key into the trustdb first and - * we don't want that */ return 1; } - switch( (*trustlevel & TRUST_MASK) ) { - case TRUST_UNKNOWN: /* No pubkey in trustDB: Insert and check again */ - rc = insert_trust_record_by_pk( pk ); - if( rc ) { - log_error("failed to insert it into the trustdb: %s\n", - gpg_errstr(rc) ); - return 0; /* no */ - } - rc = check_trust( pk, trustlevel, NULL, NULL, NULL ); - *trustlevel &= ~trustmask; - if( rc ) - log_fatal("trust check after insert failed: %s\n", - gpg_errstr(rc) ); - if( *trustlevel == TRUST_UNKNOWN || *trustlevel == TRUST_EXPIRED ) { - log_debug("do_we_trust: oops at %d\n", __LINE__ ); - return 0; - } - return do_we_trust( pk, trustlevel ); - case TRUST_EXPIRED: log_info(_("%08lX: key has expired\n"), (ulong)keyid_from_pk( pk, NULL) ); return 0; /* no */ + default: + log_error ("invalid trustlevel %u returned from validation layer\n", + *trustlevel); + /* fall thru */ + case TRUST_UNKNOWN: case TRUST_UNDEFINED: - if( opt.batch || opt.answer_no ) - log_info(_("%08lX: no info to calculate a trust probability\n"), - (ulong)keyid_from_pk( pk, NULL) ); - else { - int quit; - - rc = add_ownertrust( pk, &quit, trustlevel ); - *trustlevel &= ~trustmask; - if( !rc && !did_add && !quit ) { - did_add = 1; - goto retry; - } - } - return 0; + log_info(_("%08lX: There is no indication that this key " + "really belongs to the owner\n"), + (ulong)keyid_from_pk( pk, NULL) ); + return 0; /* no */ case TRUST_NEVER: log_info(_("%08lX: We do NOT trust this key\n"), @@ -550,8 +464,6 @@ do_we_trust( PKT_public_key *pk, int *trustlevel ) if( opt.verbose ) log_info(_("This key belongs to us\n")); return 1; /* yes */ - - default: BUG(); } return 1; /* yes */ @@ -564,7 +476,7 @@ do_we_trust( PKT_public_key *pk, int *trustlevel ) * key anyway. */ static int -do_we_trust_pre( PKT_public_key *pk, int trustlevel ) +do_we_trust_pre( PKT_public_key *pk, unsigned int trustlevel ) { int rc; @@ -574,7 +486,8 @@ do_we_trust_pre( PKT_public_key *pk, int trustlevel ) return 0; if( (trustlevel & TRUST_FLAG_SUB_REVOKED) && !rc ) return 0; - else if( !opt.batch && !rc ) { + + if( !opt.batch && !rc ) { char *p; u32 keyid[2]; size_t n; @@ -585,9 +498,9 @@ do_we_trust_pre( PKT_public_key *pk, int trustlevel ) (ulong)keyid[1], datestr_from_pk( pk ) ); p = get_user_id( keyid, &n ); tty_print_utf8_string( p, n ), - gcry_free(p); + m_free(p); tty_printf("\"\n"); - print_fpr( pk ); + print_fingerprint (pk, NULL, 2); tty_printf("\n"); tty_printf(_( @@ -599,7 +512,7 @@ do_we_trust_pre( PKT_public_key *pk, int trustlevel ) _("Use this key anyway? ")) ) rc = 1; - /* Hmmm: Should we set a flag to tell the user the user about + /* Hmmm: Should we set a flag to tell the user about * his decision the next time he encrypts for this recipient? */ } @@ -620,121 +533,102 @@ do_we_trust_pre( PKT_public_key *pk, int trustlevel ) int check_signatures_trust( PKT_signature *sig ) { - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - int trustlevel; - int did_add = 0; - int rc=0; + PKT_public_key *pk = m_alloc_clear( sizeof *pk ); + unsigned int trustlevel; + int rc=0; - - if( opt.always_trust ) { - if( !opt.quiet ) - log_info(_("WARNING: Using untrusted key!\n")); - return 0; + if ( opt.always_trust) + { + if( !opt.quiet ) + log_info(_("WARNING: Using untrusted key!\n")); + if (opt.with_fingerprint) + print_fingerprint (pk, NULL, 1); + goto leave; } - - rc = get_pubkey( pk, sig->keyid ); - if( rc ) { /* this should not happen */ - log_error("Ooops; the key vanished - can't check the trust\n"); - rc = GPGERR_NO_PUBKEY; - goto leave; + rc = get_pubkey( pk, sig->keyid ); + if (rc) + { /* this should not happen */ + log_error("Ooops; the key vanished - can't check the trust\n"); + rc = G10ERR_NO_PUBKEY; + goto leave; } - rc = check_trust( pk, &trustlevel, NULL, NULL, NULL ); - if( rc ) { - log_error("check trust failed: %s\n", gpg_errstr(rc)); - goto leave; + trustlevel = get_validity (pk, NULL); + + if ( (trustlevel & TRUST_FLAG_REVOKED) ) + { + write_status( STATUS_KEYREVOKED ); + log_info(_("WARNING: This key has been revoked by its owner!\n")); + log_info(_(" This could mean that the signature is forgery.\n")); + show_revocation_reason( pk, 0 ); + } + else if ((trustlevel & TRUST_FLAG_SUB_REVOKED) ) + { + write_status( STATUS_KEYREVOKED ); + log_info(_("WARNING: This subkey has been revoked by its owner!\n")); + show_revocation_reason( pk, 0 ); + } + + if ((trustlevel & TRUST_FLAG_DISABLED)) + log_info (_("Note: This key has been disabled.\n")); + + switch ( (trustlevel & TRUST_MASK) ) + { + case TRUST_EXPIRED: + log_info(_("Note: This key has expired!\n")); + print_fingerprint (pk, NULL, 1); + break; + + default: + log_error ("invalid trustlevel %u returned from validation layer\n", + trustlevel); + /* fall thru */ + case TRUST_UNKNOWN: + case TRUST_UNDEFINED: + write_status( STATUS_TRUST_UNDEFINED ); + log_info(_("WARNING: This key is not certified with" + " a trusted signature!\n")); + log_info(_(" There is no indication that the " + "signature belongs to the owner.\n" )); + print_fingerprint (pk, NULL, 1); + break; + + case TRUST_NEVER: + /* currently we won't get that status */ + write_status( STATUS_TRUST_NEVER ); + log_info(_("WARNING: We do NOT trust this key!\n")); + log_info(_(" The signature is probably a FORGERY.\n")); + if (opt.with_fingerprint) + print_fingerprint (pk, NULL, 1); + rc = G10ERR_BAD_SIGN; + break; + + case TRUST_MARGINAL: + write_status( STATUS_TRUST_MARGINAL ); + log_info(_("WARNING: This key is not certified with" + " sufficiently trusted signatures!\n")); + log_info(_(" It is not certain that the" + " signature belongs to the owner.\n" )); + print_fingerprint (pk, NULL, 1); + break; + + case TRUST_FULLY: + write_status( STATUS_TRUST_FULLY ); + if (opt.with_fingerprint) + print_fingerprint (pk, NULL, 1); + break; + + case TRUST_ULTIMATE: + write_status( STATUS_TRUST_ULTIMATE ); + if (opt.with_fingerprint) + print_fingerprint (pk, NULL, 1); + break; } - retry: - if( (trustlevel & TRUST_FLAG_REVOKED) ) { - write_status( STATUS_KEYREVOKED ); - log_info(_("WARNING: This key has been revoked by its owner!\n")); - log_info(_(" This could mean that the signature is forgery.\n")); - show_revocation_reason( pk ); - } - else if( (trustlevel & TRUST_FLAG_SUB_REVOKED) ) { - write_status( STATUS_KEYREVOKED ); - log_info(_("WARNING: This subkey has been revoked by its owner!\n")); - show_revocation_reason( pk ); - } - - - switch( (trustlevel & TRUST_MASK) ) { - case TRUST_UNKNOWN: /* No pubkey in trustDB: Insert and check again */ - rc = insert_trust_record_by_pk( pk ); - if( rc ) { - log_error("failed to insert it into the trustdb: %s\n", - gpg_errstr(rc) ); - goto leave; - } - rc = check_trust( pk, &trustlevel, NULL, NULL, NULL ); - if( rc ) - log_fatal("trust check after insert failed: %s\n", - gpg_errstr(rc) ); - if( trustlevel == TRUST_UNKNOWN || trustlevel == TRUST_EXPIRED ) - BUG(); - goto retry; - - case TRUST_EXPIRED: - log_info(_("Note: This key has expired!\n")); - fpr_info( pk ); - break; - - case TRUST_UNDEFINED: - if( did_add || opt.batch || opt.answer_no ) { - write_status( STATUS_TRUST_UNDEFINED ); - log_info(_( - "WARNING: This key is not certified with a trusted signature!\n")); - log_info(_( - " There is no indication that the " - "signature belongs to the owner.\n" )); - fpr_info( pk ); - } - else { - int quit; - rc = add_ownertrust( pk, &quit, &trustlevel ); - if( rc || quit ) { - did_add = 1; - rc = 0; - } - goto retry; - } - break; - - case TRUST_NEVER: - write_status( STATUS_TRUST_NEVER ); - log_info(_("WARNING: We do NOT trust this key!\n")); - log_info(_(" The signature is probably a FORGERY.\n")); - rc = GPGERR_BAD_SIGN; - break; - - case TRUST_MARGINAL: - write_status( STATUS_TRUST_MARGINAL ); - log_info(_( - "WARNING: This key is not certified with sufficiently trusted signatures!\n" - )); - log_info(_( - " It is not certain that the signature belongs to the owner.\n" - )); - fpr_info( pk ); - break; - - case TRUST_FULLY: - write_status( STATUS_TRUST_FULLY ); - break; - - case TRUST_ULTIMATE: - write_status( STATUS_TRUST_ULTIMATE ); - break; - - default: BUG(); - } - - - leave: - free_public_key( pk ); - return rc; + leave: + free_public_key( pk ); + return rc; } @@ -746,7 +640,7 @@ release_pk_list( PK_LIST pk_list ) for( ; pk_list; pk_list = pk_rover ) { pk_rover = pk_list->next; free_public_key( pk_list->pk ); - gcry_free( pk_list ); + m_free( pk_list ); } } @@ -775,11 +669,11 @@ default_recipient(void) int i; if( opt.def_recipient ) - return gcry_xstrdup( opt.def_recipient ); + return m_strdup( opt.def_recipient ); if( !opt.def_recipient_self ) return NULL; - sk = gcry_xcalloc( 1, sizeof *sk ); - i = get_seckey_byname( NULL, sk, NULL, 0, NULL ); + sk = m_alloc_clear( sizeof *sk ); + i = get_seckey_byname( sk, NULL, 0 ); if( i ) { free_secret_key( sk ); return NULL; @@ -787,7 +681,7 @@ default_recipient(void) n = MAX_FINGERPRINT_LEN; fingerprint_from_sk( sk, fpr, &n ); free_secret_key( sk ); - p = gcry_xmalloc( 2*n+3 ); + p = m_alloc( 2*n+3 ); *p++ = '0'; *p++ = 'x'; for(i=0; i < n; i++ ) @@ -796,31 +690,82 @@ default_recipient(void) return p; } +static int +expand_id(const char *id,STRLIST *into,unsigned int flags) +{ + struct groupitem *groups; + int count=0; + + for(groups=opt.grouplist;groups;groups=groups->next) + { + /* need strcasecmp() here, as this should be localized */ + if(strcasecmp(groups->name,id)==0) + { + STRLIST each,sl; + + /* this maintains the current utf8-ness */ + for(each=groups->values;each;each=each->next) + { + sl=add_to_strlist(into,each->d); + sl->flags=flags; + count++; + } + + break; + } + } + + return count; +} + +/* For simplicity, and to avoid potential loops, we only expand once - + you can't make an alias that points to an alias. */ +static STRLIST +expand_group(STRLIST input) +{ + STRLIST sl,output=NULL,rover; + + for(rover=input;rover;rover=rover->next) + if(expand_id(rover->d,&output,rover->flags)==0) + { + /* Didn't find any groups, so use the existing string */ + sl=add_to_strlist(&output,rover->d); + sl->flags=rover->flags; + } + + return output; +} int -build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ) +build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use ) { PK_LIST pk_list = NULL; PKT_public_key *pk=NULL; int rc=0; int any_recipients=0; - STRLIST rov; + STRLIST rov,remusr; char *def_rec = NULL; + if(opt.grouplist) + remusr=expand_group(rcpts); + else + remusr=rcpts; + /* check whether there are any recipients in the list and build the * list of the encrypt-to ones (we always trust them) */ for( rov = remusr; rov; rov = rov->next ) { if( !(rov->flags & 1) ) any_recipients = 1; - else if( (use & GCRY_PK_USAGE_ENCR) && !opt.no_encrypt_to ) { - pk = gcry_xcalloc( 1, sizeof *pk ); + else if( (use & PUBKEY_USAGE_ENC) && !opt.no_encrypt_to ) { + pk = m_alloc_clear( sizeof *pk ); pk->req_usage = use; - if( (rc = get_pubkey_byname( NULL, pk, rov->d, NULL )) ) { + if( (rc = get_pubkey_byname( pk, rov->d, NULL, NULL )) ) { free_public_key( pk ); pk = NULL; - log_error(_("%s: skipped: %s\n"), rov->d, gpg_errstr(rc) ); - } - else if( !(rc=openpgp_pk_test_algo(pk->pubkey_algo, - pk->pubkey_usage)) ) { + log_error(_("%s: skipped: %s\n"), rov->d, g10_errstr(rc) ); + write_status_text_and_buffer (STATUS_INV_RECP, "0 ", + rov->d, strlen (rov->d), -1); + } + else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) ) { /* Skip the actual key if the key is already present * in the list */ if (key_present_in_pk_list(pk_list, pk) == 0) { @@ -830,7 +775,7 @@ build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ) } else { PK_LIST r; - r = gcry_xmalloc( sizeof *r ); + r = m_alloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->mark = 0; @@ -839,44 +784,53 @@ build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ) } else { free_public_key( pk ); pk = NULL; - log_error(_("%s: skipped: %s\n"), rov->d, gpg_errstr(rc) ); + log_error(_("%s: skipped: %s\n"), rov->d, g10_errstr(rc) ); + write_status_text_and_buffer (STATUS_INV_RECP, "0 ", + rov->d, strlen (rov->d), -1); } } } if( !any_recipients && !opt.batch ) { /* ask */ - char *answer=NULL; int have_def_rec; + char *answer=NULL; + STRLIST backlog=NULL; def_rec = default_recipient(); have_def_rec = !!def_rec; if( !have_def_rec ) tty_printf(_( - "You did not specify a user ID. (you may use \"-r\")\n\n")); + "You did not specify a user ID. (you may use \"-r\")\n")); for(;;) { rc = 0; - gcry_free(answer); + m_free(answer); if( have_def_rec ) { answer = def_rec; def_rec = NULL; } + else if(backlog) { + answer=pop_strlist(&backlog); + } else { answer = cpr_get_utf8("pklist.user_id.enter", - _("Enter the user ID: ")); + _("\nEnter the user ID. End with an empty line: ")); trim_spaces(answer); cpr_kill_prompt(); } - if( !*answer ) + if( !answer || !*answer ) { + m_free(answer); break; + } + if(expand_id(answer,&backlog,0)) + continue; if( pk ) free_public_key( pk ); - pk = gcry_xcalloc( 1, sizeof *pk ); + pk = m_alloc_clear( sizeof *pk ); pk->req_usage = use; - rc = get_pubkey_byname( NULL, pk, answer, NULL ); + rc = get_pubkey_byname( pk, answer, NULL, NULL ); if( rc ) tty_printf(_("No such user ID.\n")); - else if( !(rc=openpgp_pk_test_algo(pk->pubkey_algo, - pk->pubkey_usage)) ) { + else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) ) { if( have_def_rec ) { if (key_present_in_pk_list(pk_list, pk) == 0) { free_public_key(pk); pk = NULL; @@ -884,25 +838,20 @@ build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ) "already set as default recipient\n") ); } else { - PK_LIST r = gcry_xmalloc( sizeof *r ); + PK_LIST r = m_alloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->mark = 0; pk_list = r; } any_recipients = 1; - break; + continue; } else { int trustlevel; - rc = check_trust( pk, &trustlevel, pk->namehash, - NULL, NULL ); - if( rc ) { - log_error("error checking pk of `%s': %s\n", - answer, gpg_errstr(rc) ); - } - else if( (trustlevel & TRUST_FLAG_DISABLED) ) { + trustlevel = get_validity (pk, NULL); + if( (trustlevel & TRUST_FLAG_DISABLED) ) { tty_printf(_("Public key is disabled.\n") ); } else if( do_we_trust_pre( pk, trustlevel ) ) { @@ -910,52 +859,71 @@ build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ) * in the list */ if (key_present_in_pk_list(pk_list, pk) == 0) { free_public_key(pk); pk = NULL; - log_info(_("skipped: public key " - "already set with --encrypt-to\n") ); + log_info(_("skipped: public key already set\n") ); } else { PK_LIST r; + char *p; + size_t n; + u32 keyid[2]; - r = gcry_xmalloc( sizeof *r ); + keyid_from_pk( pk, keyid); + tty_printf("Added %4u%c/%08lX %s \"", + nbits_from_pk( pk ), + pubkey_letter( pk->pubkey_algo ), + (ulong)keyid[1], + datestr_from_pk( pk ) ); + p = get_user_id( keyid, &n ); + tty_print_utf8_string( p, n ); + m_free(p); + tty_printf("\"\n"); + + r = m_alloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->mark = 0; pk_list = r; } any_recipients = 1; - break; + continue; } } } - gcry_free(def_rec); def_rec = NULL; + m_free(def_rec); def_rec = NULL; have_def_rec = 0; } - gcry_free(answer); if( pk ) { free_public_key( pk ); pk = NULL; } } else if( !any_recipients && (def_rec = default_recipient()) ) { - pk = gcry_xcalloc( 1, sizeof *pk ); + pk = m_alloc_clear( sizeof *pk ); pk->req_usage = use; - rc = get_pubkey_byname( NULL, pk, def_rec, NULL ); + rc = get_pubkey_byname( pk, def_rec, NULL, NULL ); if( rc ) log_error(_("unknown default recipient `%s'\n"), def_rec ); - else if( !(rc=openpgp_pk_test_algo(pk->pubkey_algo, - pk->pubkey_usage)) ) { - PK_LIST r = gcry_xmalloc( sizeof *r ); + else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) ) { + /* Mark any_recipients here since the default recipient + would have been used if it wasn't already there. It + doesn't really matter if we got this key from the default + recipient or an encrypt-to. */ + any_recipients = 1; + if (key_present_in_pk_list(pk_list, pk) == 0) + log_info(_("skipped: public key already set as default recipient\n")); + else { + PK_LIST r = m_alloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->mark = 0; pk_list = r; - any_recipients = 1; + } } if( pk ) { free_public_key( pk ); pk = NULL; } - gcry_free(def_rec); def_rec = NULL; + m_free(def_rec); def_rec = NULL; } else { any_recipients = 0; @@ -963,26 +931,27 @@ build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ) if( (remusr->flags & 1) ) continue; /* encrypt-to keys are already handled */ - pk = gcry_xcalloc( 1, sizeof *pk ); + pk = m_alloc_clear( sizeof *pk ); pk->req_usage = use; - if( (rc = get_pubkey_byname( NULL, pk, remusr->d, NULL )) ) { + if( (rc = get_pubkey_byname( pk, remusr->d, NULL, NULL )) ) { free_public_key( pk ); pk = NULL; - log_error(_("%s: skipped: %s\n"), remusr->d, gpg_errstr(rc) ); + log_error(_("%s: skipped: %s\n"), remusr->d, g10_errstr(rc) ); + write_status_text_and_buffer (STATUS_INV_RECP, "0 ", + remusr->d, strlen (remusr->d), + -1); } - else if( !(rc=openpgp_pk_test_algo(pk->pubkey_algo, - pk->pubkey_usage)) ) { + else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) ) { int trustlevel; - rc = check_trust( pk, &trustlevel, pk->namehash, NULL, NULL ); - if( rc ) { - free_public_key( pk ); pk = NULL; - log_error(_("%s: error checking key: %s\n"), - remusr->d, gpg_errstr(rc) ); - } - else if( (trustlevel & TRUST_FLAG_DISABLED) ) { + trustlevel = get_validity (pk, pk->namehash); + if( (trustlevel & TRUST_FLAG_DISABLED) ) { free_public_key(pk); pk = NULL; log_info(_("%s: skipped: public key is disabled\n"), remusr->d); + write_status_text_and_buffer (STATUS_INV_RECP, "0 ", + remusr->d, + strlen (remusr->d), + -1); } else if( do_we_trust_pre( pk, trustlevel ) ) { /* note: do_we_trust may have changed the trustlevel */ @@ -1000,7 +969,7 @@ build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ) } else { PK_LIST r; - r = gcry_xmalloc( sizeof *r ); + r = m_alloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->mark = 0; @@ -1009,55 +978,103 @@ build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use ) } else { /* we don't trust this pk */ free_public_key( pk ); pk = NULL; + write_status_text_and_buffer (STATUS_INV_RECP, "0 ", + remusr->d, + strlen (remusr->d), + -1); } } else { free_public_key( pk ); pk = NULL; - log_error(_("%s: skipped: %s\n"), remusr->d, gpg_errstr(rc) ); + write_status_text_and_buffer (STATUS_INV_RECP, "0 ", + remusr->d, + strlen (remusr->d), + -1); + log_error(_("%s: skipped: %s\n"), remusr->d, g10_errstr(rc) ); } } } if( !rc && !any_recipients ) { log_error(_("no valid addressees\n")); - rc = GPGERR_NO_USER_ID; + write_status_text (STATUS_NO_RECP, "0"); + rc = G10ERR_NO_USER_ID; } if( rc ) release_pk_list( pk_list ); else *ret_pk_list = pk_list; + if(opt.grouplist) + free_strlist(remusr); return rc; } +/* In pgp6 mode, disallow all ciphers except IDEA (1), 3DES (2), and + CAST5 (3), all hashes except MD5 (1), SHA1 (2), and RIPEMD160 (3), + and all compressions except none (0) and ZIP (1). pgp7 mode + expands the cipher list to include AES128 (7), AES192 (8), AES256 + (9), and TWOFISH (10). For a true PGP key all of this is unneeded + as they are the only items present in the preferences subpacket, + but checking here covers the weird case of encrypting to a key that + had preferences from a different implementation which was then used + with PGP. I am not completely comfortable with this as the right + thing to do, as it slightly alters the list of what the user is + supposedly requesting. It is not against the RFC however, as the + preference chosen will never be one that the user didn't specify + somewhere ("The implementation may use any mechanism to pick an + algorithm in the intersection"), and PGP has no mechanism to fix + such a broken preference list, so I'm including it. -dms */ static int -algo_available( int preftype, int algo ) +algo_available( int preftype, int algo, void *hint ) { if( preftype == PREFTYPE_SYM ) { - return algo && !openpgp_cipher_test_algo( algo ); + if( opt.pgp6 && ( algo != 1 && algo != 2 && algo != 3) ) + return 0; + + if( opt.pgp7 && (algo != 1 && algo != 2 && algo != 3 && + algo != 7 && algo != 8 && algo != 9 && algo != 10) ) + return 0; + + return algo && !check_cipher_algo( algo ); } else if( preftype == PREFTYPE_HASH ) { - return algo && !openpgp_md_test_algo( algo ); + int bits=0; + + if(hint) + bits=*(int *)hint; + + if(bits && (bits != md_digest_length(algo))) + return 0; + + if( (opt.pgp6 || opt.pgp7 ) && ( algo != 1 && algo != 2 && algo != 3) ) + return 0; + + return algo && !check_digest_algo( algo ); } - else if( preftype == PREFTYPE_COMPR ) { - return !algo || algo == 1 || algo == 2; + else if( preftype == PREFTYPE_ZIP ) { + if ( ( opt.pgp6 || opt.pgp7 ) && ( algo !=0 && algo != 1) ) + return 0; + + return !check_compress_algo( algo ); } else return 0; } + + /**************** * Return -1 if we could not find an algorithm. */ int -select_algo_from_prefs( PK_LIST pk_list, int preftype ) +select_algo_from_prefs(PK_LIST pk_list, int preftype, int request, void *hint) { PK_LIST pkr; u32 bits[8]; - byte *pref = NULL; - size_t npref; + const prefitem_t *prefs; int i, j; int compr_hack=0; int any; @@ -1070,43 +1087,65 @@ select_algo_from_prefs( PK_LIST pk_list, int preftype ) u32 mask[8]; memset( mask, 0, 8 * sizeof *mask ); - if( !pkr->pk->local_id ) { /* try to set the local id */ - query_trust_info( pkr->pk, NULL ); - if( !pkr->pk->local_id ) { - log_debug("select_algo_from_prefs: can't get LID\n"); - continue; - } + if( preftype == PREFTYPE_SYM ) { + if( opt.pgp2 && + pkr->pk->version < 4 && + pkr->pk->selfsigversion < 4 ) + mask[0] |= (1<<1); /* IDEA is implicitly there for v3 keys + with v3 selfsigs (rfc2440:12.1) if + --pgp2 mode is on. This doesn't + mean it's actually available, of + course. */ + else + mask[0] |= (1<<2); /* 3DES is implicitly there for everyone else */ } - if( preftype == PREFTYPE_SYM ) - mask[0] |= (1<<2); /* 3DES is implicitly there */ - gcry_free(pref); - pref = get_pref_data( pkr->pk->local_id, pkr->pk->namehash, &npref); + else if( preftype == PREFTYPE_HASH ) { + /* While I am including this code for completeness, note + that currently --pgp2 mode locks the hash at MD5, so this + function will never even be called. Even if the hash + wasn't locked at MD5, we don't support sign+encrypt in + --pgp2 mode, and that's the only time PREFTYPE_HASH is + used anyway. -dms */ + if( opt.pgp2 && + pkr->pk->version < 4 && + pkr->pk->selfsigversion < 4 ) + mask[0] |= (1<<1); /* MD5 is there for v3 keys with v3 + selfsigs when --pgp2 is on. */ + else + mask[0] |= (1<<2); /* SHA1 is there for everyone else */ + } + else if( preftype == PREFTYPE_ZIP ) + mask[0] |= (1<<0); /* Uncompressed is implicit */ + + if (pkr->pk->user_id) /* selected by user ID */ + prefs = pkr->pk->user_id->prefs; + else + prefs = pkr->pk->prefs; + any = 0; - if( pref ) { - #if 0 - log_hexdump("raw: ", pref, npref ); - #endif - for(i=0; i+1 < npref; i+=2 ) { - if( pref[i] == preftype ) { - mask[pref[i+1]/32] |= 1 << (pref[i+1]%32); + if( prefs ) { + for (i=0; prefs[i].type; i++ ) { + if( prefs[i].type == preftype ) { + mask[prefs[i].value/32] |= 1 << (prefs[i].value%32); any = 1; } } } - if( (!pref || !any) && preftype == PREFTYPE_COMPR ) { + + if( (!prefs || !any) && preftype == PREFTYPE_ZIP ) { mask[0] |= 3; /* asume no_compression and old pgp */ compr_hack = 1; } #if 0 - log_debug("mask=%08lX%08lX%08lX%08lX%08lX%08lX%08lX%08lX\n", + log_debug("pref mask=%08lX%08lX%08lX%08lX%08lX%08lX%08lX%08lX\n", (ulong)mask[7], (ulong)mask[6], (ulong)mask[5], (ulong)mask[4], (ulong)mask[3], (ulong)mask[2], (ulong)mask[1], (ulong)mask[0]); #endif for(i=0; i < 8; i++ ) bits[i] &= mask[i]; #if 0 - log_debug("bits=%08lX%08lX%08lX%08lX%08lX%08lX%08lX%08lX\n", + log_debug("pref bits=%08lX%08lX%08lX%08lX%08lX%08lX%08lX%08lX\n", (ulong)bits[7], (ulong)bits[6], (ulong)bits[5], (ulong)bits[4], (ulong)bits[3], (ulong)bits[2], (ulong)bits[1], (ulong)bits[0]); #endif @@ -1119,28 +1158,42 @@ select_algo_from_prefs( PK_LIST pk_list, int preftype ) */ i = -1; any = 0; - if( pref ) { - for(j=0; j+1 < npref; j+=2 ) { - if( pref[j] == preftype ) { - if( (bits[pref[j+1]/32] & (1<<(pref[j+1]%32))) ) { - if( algo_available( preftype, pref[j+1] ) ) { + + /* If we have personal prefs set, use them instead of the last key */ + if(preftype==PREFTYPE_SYM && opt.personal_cipher_prefs) + prefs=opt.personal_cipher_prefs; + else if(preftype==PREFTYPE_HASH && opt.personal_digest_prefs) + prefs=opt.personal_digest_prefs; + else if(preftype==PREFTYPE_ZIP && opt.personal_compress_prefs) + prefs=opt.personal_compress_prefs; + + if( prefs ) { + for(j=0; prefs[j].type; j++ ) { + if( prefs[j].type == preftype ) { + if( (bits[prefs[j].value/32] & (1<<(prefs[j].value%32))) ) { + if( algo_available( preftype, prefs[j].value, hint ) ) { any = 1; - i = pref[j+1]; + i = prefs[j].value; break; } } } } } - if( !pref || !any ) { + if( !prefs || !any ) { for(j=0; j < 256; j++ ) if( (bits[j/32] & (1<<(j%32))) ) { - if( algo_available( preftype, j ) ) { + if( algo_available( preftype, j, hint ) ) { i = j; break; } } } + + /* Can we use the requested algorithm? */ + if(request>-1 && request==i) + return i; + #if 0 log_debug("prefs of type %d: selected %d\n", preftype, i ); #endif @@ -1152,8 +1205,53 @@ select_algo_from_prefs( PK_LIST pk_list, int preftype ) i = 1; /* yep; we can use compression algo 1 */ } - gcry_free(pref); + /* "If you are building an authentication system, the recipient + may specify a preferred signing algorithm. However, the signer + would be foolish to use a weak algorithm simply because the + recipient requests it." RFC2440:13. If we settle on MD5, and + SHA1 is also available, use SHA1 instead. Of course, if the + user intentinally chose MD5 (by putting it in their personal + prefs), then we should do what they say. */ + + if(preftype==PREFTYPE_HASH && + i==DIGEST_ALGO_MD5 && (bits[0] & (1<next) { + int mdc; + + if (pkr->pk->user_id) /* selected by user ID */ + mdc = pkr->pk->user_id->mdc_feature; + else + mdc = pkr->pk->mdc_feature; + if (!mdc) + return 0; /* at least one recipient does not support it */ + } + return 1; /* can be used */ +} diff --git a/g10/plaintext.c b/g10/plaintext.c index 555dd1636..b12fb0f11 100644 --- a/g10/plaintext.c +++ b/g10/plaintext.c @@ -1,5 +1,5 @@ -/* plaintext.c - process an plaintext packet - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* plaintext.c - process plaintext packets + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -29,7 +29,7 @@ #endif #include "util.h" -#include +#include "memory.h" #include "options.h" #include "packet.h" #include "ttyio.h" @@ -60,7 +60,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, if( nooutput ) ; else if( opt.outfile ) { - fname = gcry_xmalloc( strlen( opt.outfile ) + 1); + fname = m_alloc( strlen( opt.outfile ) + 1); strcpy(fname, opt.outfile ); } else if( pt->namelen == 8 && !memcmp( pt->name, "_CONSOLE", 8 ) ) { @@ -72,7 +72,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, if( !fname ) fname = ask_outfile_name( pt->name, pt->namelen ); if( !fname ) { - rc = GPGERR_CREATE_FILE; + rc = G10ERR_CREATE_FILE; goto leave; } } @@ -89,31 +89,44 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, setmode ( fileno(fp) , O_BINARY ); #endif } - else if( !overwrite_filep( fname ) ) { - rc = GPGERR_CREATE_FILE; - goto leave; + else { + while( !overwrite_filep (fname) ) { + char *tmp = ask_outfile_name (NULL, 0); + if ( !tmp || !*tmp ) { + m_free (tmp); + rc = G10ERR_CREATE_FILE; + goto leave; + } + m_free (fname); + fname = tmp; + } } if( fp || nooutput ) ; else if( !(fp = fopen(fname,"wb")) ) { - log_error("Error creating `%s': %s\n", fname, strerror(errno) ); - rc = GPGERR_CREATE_FILE; + log_error(_("error creating `%s': %s\n"), fname, strerror(errno) ); + rc = G10ERR_CREATE_FILE; +#ifdef __riscos__ + if (errno == 106) + log_info("perhaps the output file has the same name as the input file?\n"); +#endif /* __riscos__ */ goto leave; } - if( pt->len ) { + if( !pt->is_partial ) { + /* we have an actual length (which might be zero). */ assert( !clearsig ); if( convert ) { /* text mode */ for( ; pt->len; pt->len-- ) { if( (c = iobuf_get(pt->buf)) == -1 ) { log_error("Problem reading source (%u bytes remaining)\n", (unsigned)pt->len); - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; goto leave; } if( mfx->md ) - gcry_md_putc(mfx->md, c ); + md_putc(mfx->md, c ); #ifndef HAVE_DOSISH_SYSTEM if( c == '\r' ) /* convert to native line ending */ continue; /* fixme: this hack might be too simple */ @@ -122,45 +135,45 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, if( putc( c, fp ) == EOF ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; goto leave; } } } } else { /* binary mode */ - byte *buffer = gcry_xmalloc( 32768 ); + byte *buffer = m_alloc( 32768 ); while( pt->len ) { int len = pt->len > 32768 ? 32768 : pt->len; len = iobuf_read( pt->buf, buffer, len ); if( len == -1 ) { log_error("Problem reading source (%u bytes remaining)\n", (unsigned)pt->len); - rc = GPGERR_READ_FILE; - gcry_free( buffer ); + rc = G10ERR_READ_FILE; + m_free( buffer ); goto leave; } if( mfx->md ) - gcry_md_write( mfx->md, buffer, len ); + md_write( mfx->md, buffer, len ); if( fp ) { if( fwrite( buffer, 1, len, fp ) != len ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); - rc = GPGERR_WRITE_FILE; - gcry_free( buffer ); + rc = G10ERR_WRITE_FILE; + m_free( buffer ); goto leave; } } pt->len -= len; } - gcry_free( buffer ); + m_free( buffer ); } } else if( !clearsig ) { if( convert ) { /* text mode */ while( (c = iobuf_get(pt->buf)) != -1 ) { if( mfx->md ) - gcry_md_putc(mfx->md, c ); + md_putc(mfx->md, c ); #ifndef HAVE_DOSISH_SYSTEM if( convert && c == '\r' ) continue; /* fixme: this hack might be too simple */ @@ -169,14 +182,14 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, if( putc( c, fp ) == EOF ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; goto leave; } } } } else { /* binary mode */ - byte *buffer = gcry_xmalloc( 32768 ); + byte *buffer = m_alloc( 32768 ); int eof; for( eof=0; !eof; ) { /* Why do we check for len < 32768: @@ -191,18 +204,18 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, if( len < 32768 ) eof = 1; if( mfx->md ) - gcry_md_write( mfx->md, buffer, len ); + md_write( mfx->md, buffer, len ); if( fp ) { if( fwrite( buffer, 1, len, fp ) != len ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); - rc = GPGERR_WRITE_FILE; - gcry_free( buffer ); + rc = G10ERR_WRITE_FILE; + m_free( buffer ); goto leave; } } } - gcry_free( buffer ); + m_free( buffer ); } pt->buf = NULL; } @@ -214,15 +227,15 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, if( putc( c, fp ) == EOF ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; goto leave; } } if( !mfx->md ) continue; if( state == 2 ) { - gcry_md_putc(mfx->md, '\r' ); - gcry_md_putc(mfx->md, '\n' ); + md_putc(mfx->md, '\r' ); + md_putc(mfx->md, '\n' ); state = 0; } if( !state ) { @@ -231,18 +244,18 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, else if( c == '\n' ) state = 2; else - gcry_md_putc(mfx->md, c ); + md_putc(mfx->md, c ); } else if( state == 1 ) { if( c == '\n' ) state = 2; else { - gcry_md_putc(mfx->md, '\r' ); + md_putc(mfx->md, '\r' ); if( c == '\r' ) state = 1; else { state = 0; - gcry_md_putc(mfx->md, c ); + md_putc(mfx->md, c ); } } } @@ -253,7 +266,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, if( fp && fp != stdout && fclose(fp) ) { log_error("Error closing `%s': %s\n", fname, strerror(errno) ); fp = NULL; - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; goto leave; } fp = NULL; @@ -261,12 +274,12 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, leave: if( fp && fp != stdout ) fclose(fp); - gcry_free(fname); + m_free(fname); return rc; } static void -do_hash( GCRY_MD_HD md, GCRY_MD_HD md2, IOBUF fp, int textmode ) +do_hash( MD_HANDLE md, MD_HANDLE md2, IOBUF fp, int textmode ) { text_filter_context_t tfx; int c; @@ -280,27 +293,27 @@ do_hash( GCRY_MD_HD md, GCRY_MD_HD md2, IOBUF fp, int textmode ) int lc = -1; while( (c = iobuf_get(fp)) != -1 ) { if( c == '\n' && lc == '\r' ) - gcry_md_putc(md2, c); + md_putc(md2, c); else if( c == '\n' ) { - gcry_md_putc(md2, '\r'); - gcry_md_putc(md2, c); + md_putc(md2, '\r'); + md_putc(md2, c); } else if( c != '\n' && lc == '\r' ) { - gcry_md_putc(md2, '\n'); - gcry_md_putc(md2, c); + md_putc(md2, '\n'); + md_putc(md2, c); } else - gcry_md_putc(md2, c); + md_putc(md2, c); if( md ) - gcry_md_putc(md, c ); + md_putc(md, c ); lc = c; } } else { while( (c = iobuf_get(fp)) != -1 ) { if( md ) - gcry_md_putc(md, c ); + md_putc(md, c ); } } } @@ -311,7 +324,7 @@ do_hash( GCRY_MD_HD md, GCRY_MD_HD md2, IOBUF fp, int textmode ) * INFILE is the name of the input file. */ int -ask_for_detached_datafile( GCRY_MD_HD md, GCRY_MD_HD md2, +ask_for_detached_datafile( MD_HANDLE md, MD_HANDLE md2, const char *inname, int textmode ) { char *answer = NULL; @@ -323,12 +336,12 @@ ask_for_detached_datafile( GCRY_MD_HD md, GCRY_MD_HD md2, int any=0; tty_printf(_("Detached signature.\n")); do { - gcry_free(answer); + m_free(answer); answer = cpr_get("detached_signature.filename", _("Please enter name of data file: ")); cpr_kill_prompt(); if( any && !*answer ) { - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; goto leave; } fp = iobuf_open(answer); @@ -338,7 +351,7 @@ ask_for_detached_datafile( GCRY_MD_HD md, GCRY_MD_HD md2, } else if( !fp ) { log_error("can't open `%s': %s\n", answer, strerror(errno) ); - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; goto leave; } } while( !fp ); @@ -355,7 +368,7 @@ ask_for_detached_datafile( GCRY_MD_HD md, GCRY_MD_HD md2, leave: - gcry_free(answer); + m_free(answer); return rc; } @@ -366,11 +379,11 @@ ask_for_detached_datafile( GCRY_MD_HD md, GCRY_MD_HD md2, * If FILES is NULL, hash stdin. */ int -hash_datafiles( GCRY_MD_HD md, GCRY_MD_HD md2, STRLIST files, +hash_datafiles( MD_HANDLE md, MD_HANDLE md2, STRLIST files, const char *sigfilename, int textmode ) { IOBUF fp; - STRLIST sl=NULL; + STRLIST sl; if( !files ) { /* check whether we can open the signed material */ @@ -380,28 +393,26 @@ hash_datafiles( GCRY_MD_HD md, GCRY_MD_HD md2, STRLIST files, iobuf_close(fp); return 0; } - /* no we can't (no sigfile) - read signed stuff from stdin */ - add_to_strlist( &sl, "-"); + log_error (_("no signed data\n")); + return G10ERR_OPEN_FILE; } - else - sl = files; - for( ; sl; sl = sl->next ) { + + for (sl=files; sl; sl = sl->next ) { fp = iobuf_open( sl->d ); if( !fp ) { log_error(_("can't open signed data `%s'\n"), print_fname_stdin(sl->d)); - if( !files ) - free_strlist(sl); - return GPGERR_OPEN_FILE; + return G10ERR_OPEN_FILE; } do_hash( md, md2, fp, textmode ); iobuf_close(fp); } - if( !files ) - free_strlist(sl); return 0; } + + + diff --git a/g10/pubkey-enc.c b/g10/pubkey-enc.c index 646aca017..2c8771c27 100644 --- a/g10/pubkey-enc.c +++ b/g10/pubkey-enc.c @@ -1,5 +1,5 @@ /* pubkey-enc.c - public key encoded packet handling - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -23,12 +23,13 @@ #include #include #include - -#include #include "util.h" +#include "memory.h" #include "packet.h" +#include "mpi.h" #include "keydb.h" #include "trustdb.h" +#include "cipher.h" #include "status.h" #include "options.h" #include "main.h" @@ -38,66 +39,31 @@ static int get_it( PKT_pubkey_enc *k, DEK *dek, PKT_secret_key *sk, u32 *keyid ); -/**************** - * Emulate our old PK interface here - sometime in the future we might - * change the internal design to directly fit to libgcrypt. - */ +/* check that the given algo is mentioned in one of the valid user IDs */ static int -pk_decrypt( int algo, MPI *result, MPI *data, MPI *skey ) +is_algo_in_prefs ( KBNODE keyblock, preftype_t type, int algo ) { - GCRY_SEXP s_skey, s_data, s_plain; - int rc; + KBNODE k; - *result = NULL; - /* make a sexp from skey */ - if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) { - rc = gcry_sexp_build ( &s_skey, NULL, - "(private-key(elg(p%m)(g%m)(y%m)(x%m)))", - skey[0], skey[1], skey[2], skey[3] ); + for (k=keyblock; k; k=k->next) { + if (k->pkt->pkttype == PKT_USER_ID) { + PKT_user_id *uid = k->pkt->pkt.user_id; + prefitem_t *prefs = uid->prefs; + + if (uid->created && prefs && + !uid->is_revoked && !uid->is_expired ) { + for (; prefs->type; prefs++ ) + if (prefs->type == type && prefs->value == algo) + return 1; + } + } } - else if( algo == GCRY_PK_RSA ) { - rc = gcry_sexp_build ( &s_skey, NULL, - "(private-key(rsa(n%m)(e%m)(d%m)(p%m)(q%m)(u%m)))", - skey[0], skey[1], skey[2], skey[3], skey[4], skey[5] ); - } - else - return GPGERR_PUBKEY_ALGO; - - if ( rc ) - BUG (); - - /* put data into a S-Exp s_data */ - if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) { - rc = gcry_sexp_build ( &s_data, NULL, - "(enc-val(elg(a%m)(b%m)))", data[0], data[1] ); - } - else if( algo == GCRY_PK_RSA ) { - rc = gcry_sexp_build ( &s_data, NULL, - "(enc-val(rsa(a%m)))", data[0] ); - } - else - BUG(); - - if ( rc ) - BUG (); - - rc = gcry_pk_decrypt( &s_plain, s_data, s_skey ); - gcry_sexp_release( s_skey ); - gcry_sexp_release( s_data); - if( rc ) - return rc; - - *result = gcry_sexp_nth_mpi( s_plain, 0, 0 ); - gcry_sexp_release( s_plain ); - if( !*result ) - return -1; /* oops */ - return 0; } /**************** - * Get the session key from a pubkey enc paket and return + * Get the session key from a pubkey enc packet and return * it in DEK, which should have been allocated in secure memory. */ int @@ -106,12 +72,12 @@ get_session_key( PKT_pubkey_enc *k, DEK *dek ) PKT_secret_key *sk = NULL; int rc; - rc = openpgp_pk_test_algo( k->pubkey_algo, 0 ); + rc = check_pubkey_algo2 (k->pubkey_algo, PUBKEY_USAGE_ENC); if( rc ) goto leave; if( (k->keyid[0] || k->keyid[1]) && !opt.try_all_secrets ) { - sk = gcry_xcalloc( 1, sizeof *sk ); + sk = m_alloc_clear( sizeof *sk ); sk->pubkey_algo = k->pubkey_algo; /* we want a pubkey with this algo*/ if( !(rc = get_seckey( sk, k->keyid )) ) rc = get_it( k, dek, sk, k->keyid ); @@ -123,17 +89,17 @@ get_session_key( PKT_pubkey_enc *k, DEK *dek ) for(;;) { if( sk ) free_secret_key( sk ); - sk = gcry_xcalloc( 1, sizeof *sk ); + sk = m_alloc_clear( sizeof *sk ); rc=enum_secret_keys( &enum_context, sk, 1); if( rc ) { - rc = GPGERR_NO_SECKEY; + rc = G10ERR_NO_SECKEY; break; } if( sk->pubkey_algo != k->pubkey_algo ) continue; keyid_from_sk( sk, keyid ); - log_info(_("anonymous receiver; trying secret key %08lX ...\n"), - (ulong)keyid[1] ); + log_info(_("anonymous recipient; trying secret key %08lX ...\n"), + (ulong)keyid[1] ); rc = check_secret_key( sk, 1 ); /* ask only once */ if( !rc ) rc = get_it( k, dek, sk, keyid ); @@ -153,22 +119,19 @@ get_session_key( PKT_pubkey_enc *k, DEK *dek ) static int -get_it( PKT_pubkey_enc *k, DEK *dek, PKT_secret_key *sk, u32 *keyid ) +get_it( PKT_pubkey_enc *enc, DEK *dek, PKT_secret_key *sk, u32 *keyid ) { int rc; MPI plain_dek = NULL; byte *frame = NULL; - unsigned int n; - size_t nframe; + unsigned n, nframe; u16 csum, csum2; - rc = pk_decrypt(sk->pubkey_algo, &plain_dek, k->data, sk->skey ); + rc = pubkey_decrypt(sk->pubkey_algo, &plain_dek, enc->data, sk->skey ); if( rc ) goto leave; - if( gcry_mpi_aprint( GCRYMPI_FMT_USG, &frame, &nframe, plain_dek ) ) - BUG(); - - mpi_release( plain_dek ); plain_dek = NULL; + frame = mpi_get_buffer( plain_dek, &nframe, NULL ); + mpi_free( plain_dek ); plain_dek = NULL; /* Now get the DEK (data encryption key) from the frame * @@ -180,8 +143,7 @@ get_it( PKT_pubkey_enc *k, DEK *dek, PKT_secret_key *sk, u32 *keyid ) * * 0 2 RND(n bytes) 0 A DEK(k bytes) CSUM(2 bytes) * - * (mpi_get_buffer already removed the leading zero - still true - * for gcry_mpi_aprint(0 which is used now?) + * (mpi_get_buffer already removed the leading zero). * * RND are non-zero randow bytes. * A is the cipher algorithm @@ -192,35 +154,37 @@ get_it( PKT_pubkey_enc *k, DEK *dek, PKT_secret_key *sk, u32 *keyid ) log_hexdump("DEK frame:", frame, nframe ); n=0; if( n + 7 > nframe ) - { rc = GPGERR_WRONG_SECKEY; goto leave; } + { rc = G10ERR_WRONG_SECKEY; goto leave; } if( frame[n] == 1 && frame[nframe-1] == 2 ) { log_info(_("old encoding of the DEK is not supported\n")); - rc = GPGERR_CIPHER_ALGO; + rc = G10ERR_CIPHER_ALGO; goto leave; } if( frame[n] != 2 ) /* somethink is wrong */ - { rc = GPGERR_WRONG_SECKEY; goto leave; } + { rc = G10ERR_WRONG_SECKEY; goto leave; } for(n++; n < nframe && frame[n]; n++ ) /* skip the random bytes */ ; n++; /* and the zero byte */ if( n + 4 > nframe ) - { rc = GPGERR_WRONG_SECKEY; goto leave; } + { rc = G10ERR_WRONG_SECKEY; goto leave; } dek->keylen = nframe - (n+1) - 2; dek->algo = frame[n++]; - if( dek->algo == GCRY_CIPHER_IDEA ) + if( dek->algo == CIPHER_ALGO_IDEA ) write_status(STATUS_RSA_OR_IDEA); - rc = openpgp_cipher_test_algo( dek->algo ); + rc = check_cipher_algo( dek->algo ); if( rc ) { - if( !opt.quiet && rc == GPGERR_CIPHER_ALGO ) { - log_info(_("cipher algorithm %d is unknown or disabled\n"), - dek->algo); + if( !opt.quiet && rc == G10ERR_CIPHER_ALGO ) { + log_info(_("cipher algorithm %d%s is unknown or disabled\n"), + dek->algo, dek->algo == CIPHER_ALGO_IDEA? " (IDEA)":""); + if(dek->algo==CIPHER_ALGO_IDEA) + idea_cipher_warn(0); } dek->algo = 0; goto leave; } - if( dek->keylen != gcry_cipher_get_algo_keylen( dek->algo ) ) { - rc = GPGERR_WRONG_SECKEY; + if( (dek->keylen*8) != cipher_get_keylen( dek->algo ) ) { + rc = G10ERR_WRONG_SECKEY; goto leave; } @@ -231,53 +195,102 @@ get_it( PKT_pubkey_enc *k, DEK *dek, PKT_secret_key *sk, u32 *keyid ) for( csum2=0, n=0; n < dek->keylen; n++ ) csum2 += dek->key[n]; if( csum != csum2 ) { - rc = GPGERR_WRONG_SECKEY; + rc = G10ERR_WRONG_SECKEY; goto leave; } if( DBG_CIPHER ) log_hexdump("DEK is:", dek->key, dek->keylen ); /* check that the algo is in the preferences and whether it has expired */ { - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - if( (rc = get_pubkey( pk, keyid )) ) - log_error("public key problem: %s\n", gpg_errstr(rc) ); - else if( !pk->local_id && query_trust_record(pk) ) - log_error("can't check algorithm against preferences\n"); - else if( dek->algo != GCRY_CIPHER_3DES - && !is_algo_in_prefs( pk->local_id, PREFTYPE_SYM, dek->algo ) ) { + PKT_public_key *pk = NULL; + KBNODE pkb = get_pubkeyblock (keyid); + + if( !pkb ) { + rc = -1; + log_error("oops: public key not found for preference check\n"); + } + else if( pkb->pkt->pkt.public_key->selfsigversion > 3 + && dek->algo != CIPHER_ALGO_3DES + && !is_algo_in_prefs( pkb, PREFTYPE_SYM, dek->algo ) ) { /* Don't print a note while we are not on verbose mode, * the cipher is blowfish and the preferences have twofish * listed */ - if( opt.verbose || dek->algo != GCRY_CIPHER_BLOWFISH - || !is_algo_in_prefs( pk->local_id, PREFTYPE_SYM, - GCRY_CIPHER_TWOFISH ) ) + if( opt.verbose || dek->algo != CIPHER_ALGO_BLOWFISH + || !is_algo_in_prefs( pkb, PREFTYPE_SYM, CIPHER_ALGO_TWOFISH)) log_info(_( "NOTE: cipher algorithm %d not found in preferences\n"), dek->algo ); } + if (!rc) { + KBNODE k; + + for (k=pkb; k; k = k->next) { + if (k->pkt->pkttype == PKT_PUBLIC_KEY + || k->pkt->pkttype == PKT_PUBLIC_SUBKEY){ + u32 aki[2]; + keyid_from_pk(k->pkt->pkt.public_key, aki); - if( !rc && pk->expiredate && pk->expiredate <= make_timestamp() ) { - log_info(_("NOTE: secret key %08lX expired at %s\n"), - (ulong)keyid[1], asctimestamp( pk->expiredate) ); - } + if (aki[0]==keyid[0] && aki[1]==keyid[1]) { + pk = k->pkt->pkt.public_key; + break; + } + } + } + if (!pk) + BUG (); + if ( pk->expiredate && pk->expiredate <= make_timestamp() ) { + log_info(_("NOTE: secret key %08lX expired at %s\n"), + (ulong)keyid[1], asctimestamp( pk->expiredate) ); + } + } - /* FIXME: check wheter the key has been revoked and display - * the revocation reason. Actually the user should know this himself, - * but the sender might not know already and therefor the user - * should get a notice that an revoked key has been used to decode - * the message. The user can than watch out for snakes send by - * one of those Eves outside his paradise :-) - */ - free_public_key( pk ); + if ( pk->is_revoked ) { + log_info( _("NOTE: key has been revoked") ); + putc( '\n', log_stream() ); + show_revocation_reason( pk, 1 ); + } + + release_kbnode (pkb); rc = 0; } leave: - mpi_release(plain_dek); - gcry_free(frame); + mpi_free(plain_dek); + m_free(frame); return rc; } +/**************** + * Get the session key from the given string. + * String is supposed to be formatted as this: + * : + */ +int +get_override_session_key( DEK *dek, const char *string ) +{ + const char *s; + int i; + + if ( !string ) + return G10ERR_BAD_KEY; + dek->algo = atoi(string); + if ( dek->algo < 1 ) + return G10ERR_BAD_KEY; + if ( !(s = strchr ( string, ':' )) ) + return G10ERR_BAD_KEY; + s++; + for(i=0; i < DIM(dek->key) && *s; i++, s +=2 ) { + int c = hextobyte ( s ); + if (c == -1) + return G10ERR_BAD_KEY; + dek->key[i] = c; + } + if ( *s ) + return G10ERR_BAD_KEY; + dek->keylen = i; + return 0; +} + diff --git a/g10/revoke.c b/g10/revoke.c index e988e5e62..ca67d80e5 100644 --- a/g10/revoke.c +++ b/g10/revoke.c @@ -1,5 +1,5 @@ /* revoke.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -30,7 +30,7 @@ #include "packet.h" #include "errors.h" #include "keydb.h" -#include +#include "memory.h" #include "util.h" #include "main.h" #include "ttyio.h" @@ -52,24 +52,273 @@ revocation_reason_build_cb( PKT_signature *sig, void *opaque ) byte *buffer; size_t buflen = 1; + if(!reason) + return 0; + if( reason->desc ) { ud = native_to_utf8( reason->desc ); buflen += strlen(ud); } - buffer = gcry_xmalloc( buflen ); + buffer = m_alloc( buflen ); *buffer = reason->code; if( ud ) { memcpy(buffer+1, ud, strlen(ud) ); - gcry_free( ud ); + m_free( ud ); } build_sig_subpkt( sig, SIGSUBPKT_REVOC_REASON, buffer, buflen ); - gcry_free( buffer ); + m_free( buffer ); return 0; } +/**************** + * Generate a revocation certificate for UNAME via a designated revoker + */ +int +gen_desig_revoke( const char *uname ) +{ + int rc = 0; + armor_filter_context_t afx; + PACKET pkt; + PKT_public_key *pk = NULL; + PKT_secret_key *sk = NULL; + PKT_signature *sig = NULL; + IOBUF out = NULL; + struct revocation_reason_info *reason = NULL; + KEYDB_HANDLE kdbhd; + KEYDB_SEARCH_DESC desc; + KBNODE keyblock=NULL,node; + u32 keyid[2]; + int i,any=0; + + if( opt.batch ) { + log_error(_("sorry, can't do this in batch mode\n")); + return G10ERR_GENERAL; + } + + memset( &afx, 0, sizeof afx); + + kdbhd = keydb_new (0); + classify_user_id (uname, &desc); + rc = desc.mode? keydb_search (kdbhd, &desc, 1) : G10ERR_INV_USER_ID; + if (rc) { + log_error (_("key `%s' not found: %s\n"),uname, g10_errstr (rc)); + goto leave; + } + + rc = keydb_get_keyblock (kdbhd, &keyblock ); + if( rc ) { + log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); + goto leave; + } + + /* To parse the revkeys */ + merge_keys_and_selfsig(keyblock); + + /* get the key from the keyblock */ + node = find_kbnode( keyblock, PKT_PUBLIC_KEY ); + if( !node ) + BUG (); + + pk=node->pkt->pkt.public_key; + + keyid_from_pk(pk,keyid); + + /* Are we a designated revoker for this key? */ + + if(!pk->revkey && pk->numrevkeys) + BUG(); + + for(i=0;inumrevkeys;i++) + { + if(sk) + free_secret_key(sk); + + sk=m_alloc_clear(sizeof(*sk)); + + rc=get_seckey_byfprint(sk,pk->revkey[i].fpr,MAX_FINGERPRINT_LEN); + + /* We have the revocation key */ + if(!rc) + { + size_t n; + char *p; + u32 sk_keyid[2]; + PKT_user_id *uid=NULL; + PKT_signature *selfsig=NULL; + + any=1; + keyid_from_sk(sk,sk_keyid); + + tty_printf("\npub %4u%c/%08lX %s ", + nbits_from_pk( pk ), + pubkey_letter( pk->pubkey_algo ), + (ulong)keyid[1], datestr_from_pk(pk) ); + + p = get_user_id( keyid, &n ); + tty_print_utf8_string( p, n ); + m_free(p); + tty_printf("\n\n"); + + tty_printf(_("To be revoked by:\n")); + + tty_printf("\nsec %4u%c/%08lX %s ", + nbits_from_sk( sk ), + pubkey_letter( sk->pubkey_algo ), + (ulong)sk_keyid[1], datestr_from_sk(sk) ); + + p = get_user_id( sk_keyid, &n ); + tty_print_utf8_string( p, n ); + m_free(p); + tty_printf("\n\n"); + + if( !cpr_get_answer_is_yes("gen_desig_revoke.okay", + _("Create a revocation certificate for this key? ")) ) + continue; + + /* get the reason for the revocation (this is always v4) */ + reason = ask_revocation_reason( 1, 0, 1 ); + if( !reason ) + continue; + + rc = check_secret_key( sk, 0 ); + if( rc ) + continue; + + if( !opt.armor ) + tty_printf(_("ASCII armored output forced.\n")); + + if( (rc = open_outfile( NULL, 0, &out )) ) + goto leave; + + afx.what = 1; + afx.hdrlines = "Comment: A revocation certificate should follow\n"; + iobuf_push_filter( out, armor_filter, &afx ); + + /* create it */ + rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0, + 0, 0, 0, + revocation_reason_build_cb, reason ); + if( rc ) { + log_error(_("make_keysig_packet failed: %s\n"), g10_errstr(rc)); + goto leave; + } + + /* Spit out a minimal pk as well, since otherwise there is + no way to know which key to attach this revocation + to. */ + + node=find_kbnode(keyblock,PKT_PUBLIC_KEY); + if(!node) + { + rc=G10ERR_GENERAL; + log_error(_("key %08lX incomplete\n"),(ulong)keyid[1]); + goto leave; + } + + pkt = *node->pkt; + rc=build_packet(out,&pkt); + if( rc ) { + log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); + goto leave; + } + + init_packet( &pkt ); + pkt.pkttype = PKT_SIGNATURE; + pkt.pkt.signature = sig; + + rc = build_packet( out, &pkt ); + if( rc ) { + log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); + goto leave; + } + + while(!selfsig) + { + KBNODE signode; + + node=find_next_kbnode(node,PKT_USER_ID); + if(!node) + { + /* We're out of user IDs - none were + self-signed. */ + if(uid) + break; + else + { + rc=G10ERR_GENERAL; + log_error(_("key %08lX incomplete\n"),(ulong)keyid[1]); + goto leave; + } + } + + if(node->pkt->pkt.user_id->attrib_data) + continue; + + uid=node->pkt->pkt.user_id; + signode=node; + + while((signode=find_next_kbnode(signode,PKT_SIGNATURE))) + { + if(keyid[0]==signode->pkt->pkt.signature->keyid[0] && + keyid[1]==signode->pkt->pkt.signature->keyid[1] && + IS_UID_SIG(signode->pkt->pkt.signature)) + { + selfsig=signode->pkt->pkt.signature; + break; + } + } + } + + pkt.pkttype = PKT_USER_ID; + pkt.pkt.user_id = uid; + + rc = build_packet( out, &pkt ); + if( rc ) { + log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); + goto leave; + } + + if(selfsig) + { + pkt.pkttype = PKT_SIGNATURE; + pkt.pkt.signature = selfsig; + + rc = build_packet( out, &pkt ); + if( rc ) { + log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); + goto leave; + } + } + + /* and issue a usage notice */ + tty_printf(_("Revocation certificate created.\n")); + break; + } + } + + if(!any) + log_error(_("no revocation keys found for `%s'\n"),uname); + + leave: + if( pk ) + free_public_key( pk ); + if( sk ) + free_secret_key( sk ); + if( sig ) + free_seckey_enc( sig ); + + if( rc ) + iobuf_cancel(out); + else + iobuf_close(out); + release_revocation_reason_info( reason ); + return rc; +} + + /**************** * Generate a revocation certificate for UNAME */ @@ -78,7 +327,6 @@ gen_revoke( const char *uname ) { int rc = 0; armor_filter_context_t afx; - compress_filter_context_t zfx; PACKET pkt; PKT_secret_key *sk; /* used as pointer into a kbnode */ PKT_public_key *pk = NULL; @@ -87,34 +335,40 @@ gen_revoke( const char *uname ) IOBUF out = NULL; KBNODE keyblock = NULL; KBNODE node; + KEYDB_HANDLE kdbhd; struct revocation_reason_info *reason = NULL; + KEYDB_SEARCH_DESC desc; if( opt.batch ) { log_error(_("sorry, can't do this in batch mode\n")); - return GPGERR_GENERAL; + return G10ERR_GENERAL; } - memset( &afx, 0, sizeof afx); - memset( &zfx, 0, sizeof zfx); init_packet( &pkt ); + /* search the userid: + * We don't want the whole getkey stuff here but the entire keyblock + */ + kdbhd = keydb_new (1); + classify_user_id (uname, &desc); + rc = desc.mode? keydb_search (kdbhd, &desc, 1) : G10ERR_INV_USER_ID; + if (rc) { + log_error (_("secret key `%s' not found: %s\n"), + uname, g10_errstr (rc)); + goto leave; + } - /* search the userid */ - rc = find_secret_keyblock_byname( &keyblock, uname ); + rc = keydb_get_keyblock (kdbhd, &keyblock ); if( rc ) { - log_error(_("secret key for user `%s' not found: %s\n"), - uname, gpg_errstr(rc) ); + log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); goto leave; } /* get the keyid from the keyblock */ node = find_kbnode( keyblock, PKT_SECRET_KEY ); - if( !node ) { /* maybe better to use log_bug ? */ - log_error(_("Oops; secret key not found anymore!\n")); - rc = GPGERR_GENERAL; - goto leave; - } + if( !node ) + BUG (); /* fixme: should make a function out of this stuff, * it's used all over the source */ @@ -123,23 +377,25 @@ gen_revoke( const char *uname ) tty_printf("\nsec %4u%c/%08lX %s ", nbits_from_sk( sk ), pubkey_letter( sk->pubkey_algo ), - sk_keyid[1], datestr_from_sk(sk) ); + (ulong)sk_keyid[1], datestr_from_sk(sk) ); { size_t n; char *p = get_user_id( sk_keyid, &n ); tty_print_utf8_string( p, n ); - gcry_free(p); + m_free(p); tty_printf("\n"); } - pk = gcry_xcalloc( 1, sizeof *pk ); + pk = m_alloc_clear( sizeof *pk ); + + /* FIXME: We should get the public key direct from the secret one */ rc = get_pubkey( pk, sk_keyid ); if( rc ) { - log_error(_("no corresponding public key: %s\n"), gpg_errstr(rc) ); + log_error(_("no corresponding public key: %s\n"), g10_errstr(rc) ); goto leave; } if( cmp_public_secret_key( pk, sk ) ) { log_error(_("public key does not match secret key!\n") ); - rc = GPGERR_GENERAL; + rc = G10ERR_GENERAL; goto leave; } @@ -150,17 +406,19 @@ gen_revoke( const char *uname ) goto leave; } - /* get the reason for the revocation */ - reason = ask_revocation_reason( 1, 0, 1 ); - if( !reason ) { /* user decided to cancel */ + if(sk->version>=4 || opt.force_v4_certs) { + /* get the reason for the revocation */ + reason = ask_revocation_reason( 1, 0, 1 ); + if( !reason ) { /* user decided to cancel */ rc = 0; goto leave; + } } switch( is_secret_key_protected( sk ) ) { case -1: log_error(_("unknown protection algorithm\n")); - rc = GPGERR_PUBKEY_ALGO; + rc = G10ERR_PUBKEY_ALGO; break; case 0: tty_printf(_("NOTE: This key is not protected!\n")); @@ -185,10 +443,10 @@ gen_revoke( const char *uname ) /* create it */ rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0, - revocation_reason_build_cb, - reason ); + opt.force_v4_certs?4:0, 0, 0, + revocation_reason_build_cb, reason ); if( rc ) { - log_error(_("make_keysig_packet failed: %s\n"), gpg_errstr(rc)); + log_error(_("make_keysig_packet failed: %s\n"), g10_errstr(rc)); goto leave; } init_packet( &pkt ); @@ -197,7 +455,7 @@ gen_revoke( const char *uname ) rc = build_packet( out, &pkt ); if( rc ) { - log_error(_("build_packet failed: %s\n"), gpg_errstr(rc) ); + log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); goto leave; } @@ -217,6 +475,7 @@ gen_revoke( const char *uname ) if( sig ) free_seckey_enc( sig ); release_kbnode( keyblock ); + keydb_release (kdbhd); if( rc ) iobuf_cancel(out); else @@ -230,20 +489,22 @@ gen_revoke( const char *uname ) struct revocation_reason_info * ask_revocation_reason( int key_rev, int cert_rev, int hint ) { - int code; + int code=-1; char *description = NULL; struct revocation_reason_info *reason; + const char *text_0 = _("No reason specified"); const char *text_1 = _("Key has been compromised"); const char *text_2 = _("Key is superseded"); const char *text_3 = _("Key is no longer used"); - const char *text_4 = _("User ID is non longer valid"); + const char *text_4 = _("User ID is no longer valid"); const char *code_text = NULL; do { - gcry_free(description); + m_free(description); description = NULL; tty_printf(_("Please select the reason for the revocation:\n")); + tty_printf( " 0 = %s\n", text_0 ); if( key_rev ) tty_printf(" 1 = %s\n", text_1 ); if( key_rev ) @@ -252,29 +513,31 @@ ask_revocation_reason( int key_rev, int cert_rev, int hint ) tty_printf(" 3 = %s\n", text_3 ); if( cert_rev ) tty_printf(" 4 = %s\n", text_4 ); - tty_printf( " 0 = %s\n", _("Cancel") ); + tty_printf( " Q = %s\n", _("Cancel") ); if( hint ) tty_printf(_("(Probably you want to select %d here)\n"), hint ); - for(code = 0; !code;) { + while(code==-1) { int n; char *answer = cpr_get("ask_revocation_reason.code", _("Your decision? ")); trim_spaces( answer ); cpr_kill_prompt(); - if( *answer == 'q' || *answer == 'Q' ) - n = 0; - else if( !isdigit( *answer ) ) - n = -1; - else if( hint && !*answer ) + if( *answer == 'q' || *answer == 'Q') + return NULL; /* cancel */ + if( hint && !*answer ) n = hint; + else if(!isdigit( *answer ) ) + n = -1; else n = atoi(answer); - gcry_free(answer); - if( !n ) - return NULL; /* cancel */ + m_free(answer); + if( n == 0 ) { + code = 0x00; /* no particular reason */ + code_text = text_0; + } else if( key_rev && n == 1 ) { - code = 0x02; /* key has been compromised */ + code = 0x02; /* key has been compromised */ code_text = text_1; } else if( key_rev && n == 2 ) { @@ -286,7 +549,7 @@ ask_revocation_reason( int key_rev, int cert_rev, int hint ) code_text = text_3; } else if( cert_rev && n == 4 ) { - code = 0x20; /* uid is non longer valid */ + code = 0x20; /* uid is no longer valid */ code_text = text_4; } else @@ -300,25 +563,25 @@ ask_revocation_reason( int key_rev, int cert_rev, int hint ) trim_trailing_ws( answer, strlen(answer) ); cpr_kill_prompt(); if( !*answer ) { - gcry_free(answer); + m_free(answer); break; } { char *p = make_printable_string( answer, strlen(answer), 0 ); - gcry_free(answer); + m_free(answer); answer = p; } if( !description ) - description = gcry_xstrdup(answer); + description = m_strdup(answer); else { - char *p = gcry_xmalloc( strlen(description) + strlen(answer) + 2 ); + char *p = m_alloc( strlen(description) + strlen(answer) + 2 ); strcpy(stpcpy(stpcpy( p, description),"\n"),answer); - gcry_free(description); + m_free(description); description = p; } - gcry_free(answer); + m_free(answer); } tty_printf(_("Reason for revocation: %s\n"), code_text ); @@ -330,7 +593,7 @@ ask_revocation_reason( int key_rev, int cert_rev, int hint ) } while( !cpr_get_answer_is_yes("ask_revocation_reason.okay", _("Is this okay? ")) ); - reason = gcry_xmalloc( sizeof *reason ); + reason = m_alloc( sizeof *reason ); reason->code = code; reason->desc = description; return reason; @@ -340,8 +603,7 @@ void release_revocation_reason_info( struct revocation_reason_info *reason ) { if( reason ) { - gcry_free( reason->desc ); - gcry_free( reason ); + m_free( reason->desc ); + m_free( reason ); } } - diff --git a/g10/ringedit.c b/g10/ringedit.c deleted file mode 100644 index 6d5b3e0e4..000000000 --- a/g10/ringedit.c +++ /dev/null @@ -1,1360 +0,0 @@ -/* ringedit.c - Function for key ring editing - * Copyright (C) 1998, 2000 Free Software Foundation, Inc. - * - * This file is part of GnuPG. - * - * GnuPG is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GnuPG is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - - -/**************** - * This module supplies function for: - * - * - Search for a key block (pubkey and all other stuff) and return a - * handle for it. - * - * - Lock/Unlock a key block - * - * - Read a key block into a tree - * - * - Update a key block - * - * - Insert a new key block - * - * - Delete a key block - * - */ - - - -#include -#include -#include -#include -#include -#include -#include -#include /* for truncate */ -#include - -#include -#include "util.h" -#include "packet.h" -#include "iobuf.h" -#include "keydb.h" -#include "host2net.h" -#include "options.h" -#include "main.h" -#include "i18n.h" -#include "kbx.h" - - - - -struct resource_table_struct { - int used; - int secret; /* this is a secret keyring */ - char *fname; - IOBUF iobuf; - enum resource_type rt; - DOTLOCK lockhd; - int is_locked; -}; -typedef struct resource_table_struct RESTBL; - - -struct keyblock_pos_struct { - int resno; /* resource number */ - enum resource_type rt; - ulong offset; /* position information */ - unsigned count; /* length of the keyblock in packets */ - IOBUF fp; /* used by enum_keyblocks */ - int secret; /* working on a secret keyring */ - PACKET *pkt; /* ditto */ - int valid; - ulong save_offset; -}; - - - - -#define MAX_RESOURCES 10 -static RESTBL resource_table[MAX_RESOURCES]; -static int default_public_resource; -static int default_secret_resource; - -static int keyring_enum( KBPOS kbpos, KBNODE *ret_root, int skipsigs ); -static int keyring_copy( KBPOS kbpos, int mode, KBNODE root ); - -static int do_kbxf_enum( KBPOS kbpos, KBNODE *ret_root, int skipsigs ); -static int do_kbxf_copy( KBPOS kbpos, int mode, KBNODE root ); - - -static RESTBL * -check_pos( KBPOS kbpos ) -{ - if( kbpos->resno < 0 || kbpos->resno >= MAX_RESOURCES ) - return NULL; - if( !resource_table[kbpos->resno].used ) - return NULL; - return resource_table + kbpos->resno; -} - - -/**************** - * Hmmm, how to avoid deadlock? They should not happen if everyone - * locks the key resources in the same order; but who knows. - * A solution is to use only one lock file in the gnupg homedir but - * what will happen with key resources which normally don't belong - * to the gpg homedir? - */ -static void -lock_rentry( RESTBL *rentry ) -{ - if( !rentry->lockhd ) { - rentry->lockhd = create_dotlock( rentry->fname ); - if( !rentry->lockhd ) - log_fatal("can't allocate lock for `%s'\n", rentry->fname ); - rentry->is_locked = 0; - } - if( !rentry->is_locked ) { - if( make_dotlock( rentry->lockhd, -1 ) ) - log_fatal("can't lock `%s'\n", rentry->fname ); - rentry->is_locked = 1; - } -} - -static void -unlock_rentry( RESTBL *rentry ) -{ - if( opt.lock_once ) - return; - if( !release_dotlock( rentry->lockhd ) ) - rentry->is_locked = 0; -} - - -/**************************************************************** - ****************** public functions **************************** - ****************************************************************/ - -/**************** - * Get the name of the keyrings, start with a sequence number pointing to a 0. - */ -const char * -enum_keyblock_resources( int *sequence, int secret ) -{ - int i = *sequence; - const char *name = NULL; - - for(; i < MAX_RESOURCES; i++ ) - if( resource_table[i].used && !resource_table[i].secret == !secret ) { - if( resource_table[i].fname ) { - name = resource_table[i].fname; - break; - } - } - *sequence = ++i; - return name; -} - - -/**************** - * Register a resource (which currently may only be a keyring file). - * The first keyring which is added by this function is - * created if it does not exist. - * Note: this function may be called before secure memory is - * available. - */ -int -add_keyblock_resource( const char *url, int force, int secret ) -{ - static int any_secret, any_public; - const char *resname = url; - IOBUF iobuf = NULL; - int i; - char *filename = NULL; - int rc = 0; - enum resource_type rt = rt_UNKNOWN; - - - /* Do we have an URL? - * gnupg-kbxf:filename := this is a KBX file resource - * gnupg-ring:filename := this is a plain keyring - * filename := See what is is, but create as plain keyring. - */ - if( strlen( resname ) > 11 ) { - if( !strncmp( resname, "gnupg-ring:", 11 ) ) { - rt = rt_RING; - resname += 11; - } - else if( !strncmp( resname, "gnupg-kbxf:", 11 ) ) { - rt = rt_KBXF; - resname += 11; - } - #ifndef HAVE_DRIVE_LETTERS - else if( strchr( resname, ':' ) ) { - log_error("%s: invalid URL\n", url ); - rc = GPGERR_GENERAL; - goto leave; - } - #endif - } - - if( *resname != '/' ) { /* do tilde expansion etc */ - if( strchr(resname, '/') ) - filename = make_filename(resname, NULL); - else - filename = make_filename(opt.homedir, resname, NULL); - } - else - filename = gcry_xstrdup( resname ); - - if( !force ) - force = secret? !any_secret : !any_public; - - for(i=0; i < MAX_RESOURCES; i++ ) - if( !resource_table[i].used ) - break; - if( i == MAX_RESOURCES ) { - rc = GPGERR_RESOURCE_LIMIT; - goto leave; - } - - /* see whether we can determine the filetype */ - if( rt == rt_UNKNOWN ) { - FILE *fp = fopen( filename, "rb" ); - - if( fp ) { - u32 magic; - - if( fread( &magic, 4, 1, fp) == 1 ) { - char buf[8]; - - rt = rt_RING; - if( fread( buf, 8, 1, fp) == 1 ) { - if( !memcmp( buf+4, "KBXf", 4 ) - && buf[0] == 1 && buf[1] == 1 ) { - rt = rt_KBXF; - } - } - } - else /* maybe empty: assume ring */ - rt = rt_RING; - fclose( fp ); - } - else /* no file yet: create ring */ - rt = rt_RING; - } - - switch( rt ) { - case rt_UNKNOWN: - log_error("%s: unknown resource type\n", url ); - rc = GPGERR_GENERAL; - goto leave; - - case rt_RING: - case rt_KBXF: - iobuf = iobuf_open( filename ); - if( !iobuf && !force ) { - rc = GPGERR_OPEN_FILE; - goto leave; - } - - if( !iobuf ) { - char *last_slash_in_filename; - - last_slash_in_filename = strrchr(filename, '/'); - *last_slash_in_filename = 0; - - if( access(filename, F_OK) ) { - /* on the first time we try to create the default homedir and - * in this case the process will be terminated, so that on the - * next invocation it can read the options file in on startup - */ - try_make_homedir( filename ); - rc = GPGERR_OPEN_FILE; - goto leave; - } - - *last_slash_in_filename = '/'; - - iobuf = iobuf_create( filename ); - if( !iobuf ) { - log_error(_("%s: can't create keyring: %s\n"), - filename, strerror(errno)); - rc = GPGERR_OPEN_FILE; - goto leave; - } - else { - #ifndef HAVE_DOSISH_SYSTEM - if( secret ) { - if( chmod( filename, S_IRUSR | S_IWUSR ) ) { - log_error("%s: chmod failed: %s\n", - filename, strerror(errno) ); - rc = GPGERR_WRITE_FILE; - goto leave; - } - } - #endif - if( !opt.quiet ) - log_info(_("%s: keyring created\n"), filename ); - } - } - #if HAVE_DOSISH_SYSTEM || 1 - iobuf_close( iobuf ); - iobuf = NULL; - /* must close it again */ - #endif - break; - - - default: - log_error("%s: unsupported resource type\n", url ); - rc = GPGERR_GENERAL; - goto leave; - } - - #ifndef HAVE_DOSISH_SYSTEM - #if 0 /* fixme: check directory permissions and print a warning */ - if( secret ) { - } - #endif - #endif - - /* fixme: avoid duplicate resources */ - resource_table[i].used = 1; - resource_table[i].secret = !!secret; - resource_table[i].fname = gcry_xstrdup(filename); - resource_table[i].iobuf = iobuf; - resource_table[i].rt = rt; - if( secret ) - default_secret_resource = i; - else - default_public_resource = i; - - leave: - if( rc ) - log_error("keyblock resource `%s': %s\n", filename, gpg_errstr(rc) ); - else if( secret ) - any_secret = 1; - else - any_public = 1; - gcry_free( filename ); - return rc; -} - -/**************** - * Return the resource name of the keyblock associated with KBPOS. - */ -const char * -keyblock_resource_name( KBPOS kbpos ) -{ - RESTBL *rentry; - - if( !(rentry = check_pos( kbpos )) || !rentry->fname ) - log_bug("no name for keyblock resource %d\n", kbpos->resno ); - return rentry->fname; -} - - -/**************** - * Get a keyblock handle KBPOS from a filename. This can be used - * to get a handle for insert_keyblock for a new keyblock. - * Using a filename of NULL returns the default resource - */ -int -get_keyblock_handle( const char *filename, int secret, KBPOS kbpos ) -{ - int i = 0; - - if( !filename ) - i = secret? default_secret_resource : default_public_resource; - - for(; i < MAX_RESOURCES; i++ ) { - if( resource_table[i].used && !resource_table[i].secret == !secret ) { - /* fixme: dos needs case insensitive file compare */ - if( !filename || !strcmp( resource_table[i].fname, filename ) ) { - memset( kbpos, 0, sizeof *kbpos ); - kbpos->resno = i; - kbpos->rt = resource_table[i].rt; - return 0; - } - } - } - return -1; /* not found */ -} - - -/**************** - * Return the filename of the firstkeyblock resource which is intended - * for write access. This will either be the default resource or in - * case this is not writable one of the others. If no writable is found, - * the default filename in the homedirectory will be returned. - * Caller must free, will never return NULL. - */ -char * -get_writable_keyblock_file( int secret ) -{ - int i = secret? default_secret_resource : default_public_resource; - - if( resource_table[i].used && !resource_table[i].secret == !secret ) { - if( !access( resource_table[i].fname, R_OK|W_OK ) ) { - return gcry_xstrdup( resource_table[i].fname ); - } - } - for(i=0; i < MAX_RESOURCES; i++ ) { - if( resource_table[i].used && !resource_table[i].secret == !secret ) { - if( !access( resource_table[i].fname, R_OK|W_OK ) ) { - return gcry_xstrdup( resource_table[i].fname ); - } - } - } - /* Assume the home dir is always writable */ - return make_filename(opt.homedir, secret? "secring.gpg" - : "pubring.gpg", NULL ); -} - - -void -ringedit_copy_kbpos ( KBPOS d, KBPOS s ) -{ - *d = *s; -} - - -/**************** - * Lock the keyblock; wait until it's available - * This function may change the internal data in kbpos, in cases - * when the keyblock to be locked has been modified. - * fixme: remove this function and add an option to search()? - */ -static int -lock_keyblock( KBPOS kbpos ) -{ - if( !check_pos(kbpos) ) - return GPGERR_GENERAL; - return 0; -} - -/**************** - * Release a lock on a keyblock - */ -static void -unlock_keyblock( KBPOS kbpos ) -{ - if( !check_pos(kbpos) ) - BUG(); -} - - -static int -enum_keyrings_open_helper( KBPOS kbpos, int where ) -{ - int i = where; - RESTBL *rentry; - - for(; i < MAX_RESOURCES; i++ ) - if( resource_table[i].used - && !resource_table[i].secret == !kbpos->secret ) - break; - if( i == MAX_RESOURCES ) - return -1; /* no resources */ - kbpos->resno = i; - rentry = check_pos( kbpos ); - kbpos->rt = resource_table[i].rt; - kbpos->valid = 0; - switch( kbpos->rt ) { - case rt_RING: - case rt_KBXF: - kbpos->fp = iobuf_open( rentry->fname ); - if ( !kbpos->fp ) { - log_error("can't open `%s'\n", rentry->fname ); - return GPGERR_OPEN_FILE; - } - break; - - default: BUG(); - } - kbpos->pkt = NULL; - return 0; -} - - -/**************** - * This set of functions is used to scan over all keyrings. - * The mode in enum_keyblocks_next() is used liek this: - * Mode is: 1 = read - * 11 = read but skip signature and comment packets. - */ -int -enum_keyblocks_begin( KBPOS *rkbpos, int use_secret ) -{ - int rc, i; - KBPOS kbpos; - - *rkbpos = NULL; - - kbpos = gcry_xcalloc( 1, sizeof *kbpos ); - kbpos->fp = NULL; - kbpos->rt = rt_UNKNOWN; - if( !use_secret ) { - kbpos->secret = 0; - i = 0; - } - else { - kbpos->secret = 1; - i = 0; - } - - rc = enum_keyrings_open_helper( kbpos, i ); - if ( rc ) { - gcry_free( kbpos ); - return rc; - } - /* return the handle */ - *rkbpos = kbpos; - return 0; -} - -void -enum_keyblocks_end( KBPOS kbpos ) -{ - if ( !kbpos ) - return; - switch( kbpos->rt ) { - case rt_RING: - case rt_KBXF: - if( kbpos->fp ) { - iobuf_close( kbpos->fp ); - kbpos->fp = NULL; - } - break; - case rt_UNKNOWN: - /* this happens when we have no keyring at all */ - gcry_free( kbpos ); - return; - - default: - BUG(); - } - /* release pending packet */ - free_packet( kbpos->pkt ); - gcry_free( kbpos->pkt ); - gcry_free( kbpos ); -} - -int -enum_keyblocks_next( KBPOS kbpos, int mode, KBNODE *ret_root ) -{ - int cont, rc = 0; - RESTBL *rentry; - - if( mode != 1 && mode != 11 ) - return GPGERR_INV_ARG; - - do { - cont = 0; - switch( kbpos->rt ) { - case rt_RING: - if( !kbpos->fp ) - return GPGERR_GENERAL; - rc = keyring_enum( kbpos, ret_root, mode == 11 ); - break; - case rt_KBXF: - if( !kbpos->fp ) - return GPGERR_GENERAL; - rc = do_kbxf_enum( kbpos, ret_root, mode == 11 ); - break; - default: BUG(); - } - - if( rc == -1 ) { - RESTBL *rentry; - int i; - - assert( !kbpos->pkt ); - rentry = check_pos( kbpos ); - assert(rentry); - i = kbpos->resno+1; - /* first close */ - if( kbpos->fp ) { - iobuf_close( kbpos->fp ); - kbpos->fp = NULL; - } - free_packet( kbpos->pkt ); - gcry_free( kbpos->pkt ); - kbpos->pkt = NULL; - /* and then open the next one */ - rc = enum_keyrings_open_helper( kbpos, i ); - if ( !rc ) - cont = 1; - /* hmm, that is not really correct: if we got an error kbpos - * might be not well anymore */ - } - } while(cont); - - return rc; -} - - - - -/**************** - * Insert the keyblock described by ROOT into the keyring described - * by KBPOS. This actually appends the data to the keyfile. - */ -int -insert_keyblock( KBNODE root ) -{ - int rc; -#if 0 - if( !check_pos(kbpos) ) - return GPGERR_GENERAL; - - switch( kbpos->rt ) { - case rt_RING: - rc = keyring_copy( kbpos, 1, root ); - break; - case rt_KBXF: - rc = do_kbxf_copy( kbpos, 1, root ); - break; - default: BUG(); - } -#endif - return rc; -} - -/**************** - * Delete the keyblock described by KBPOS. - * The current code simply changes the keyblock in the keyring - * to packet of type 0 with the correct length. To help detect errors, - * zero bytes are written. - */ -int -delete_keyblock( KBNODE keyblock ) -{ - int rc; - #if 0 - if( !check_pos(kbpos) ) - return GPGERR_GENERAL; - - switch( kbpos->rt ) { - case rt_RING: - rc = keyring_copy( kbpos, 2, NULL ); - break; - case rt_KBXF: - rc = do_kbxf_copy( kbpos, 2, NULL ); - break; - default: BUG(); - } - #endif - return rc; -} - - -/**************** - * Update the keyblock in the ring (or whatever resource) one in ROOT. - */ -int -update_keyblock( KBNODE root ) -{ - int rc; - struct keyblock_pos_struct kbpos; - - /* We need to get the file position of original keyblock first */ - if ( root->pkt->pkttype == PKT_PUBLIC_KEY ) - rc = find_kblocation_bypk( &kbpos, root->pkt->pkt.public_key ); - else if ( root->pkt->pkttype == PKT_SECRET_KEY ) - rc = find_kblocation_bysk( &kbpos, root->pkt->pkt.secret_key ); - else - BUG(); - - if ( rc ) - return rc; - - if( !check_pos(&kbpos) ) - return GPGERR_GENERAL; - - switch( kbpos.rt ) { - case rt_RING: - rc = keyring_copy( &kbpos, 3, root ); - break; - case rt_KBXF: - rc = do_kbxf_copy( &kbpos, 3, root ); - break; - default: BUG(); - } - - return rc; -} - - - -/**************************************************************** - ********** Functions which operates on regular keyrings ******** - ****************************************************************/ - -static int -keyring_enum( KBPOS kbpos, KBNODE *ret_root, int skipsigs ) -{ - PACKET *pkt; - int rc; - RESTBL *rentry; - KBNODE root = NULL; - ulong offset, first_offset=0; - - if( !(rentry=check_pos(kbpos)) ) - return GPGERR_GENERAL; - - if( kbpos->pkt ) { - root = new_kbnode( kbpos->pkt ); - first_offset = kbpos->save_offset; - kbpos->pkt = NULL; - } - kbpos->valid = 0; - - pkt = gcry_xmalloc( sizeof *pkt ); - init_packet(pkt); - while( (rc=parse_packet(kbpos->fp, pkt, &offset )) != -1 ) { - if( rc ) { /* ignore errors */ - if( rc != GPGERR_UNKNOWN_PACKET ) { - log_error("keyring_enum: read error: %s\n", gpg_errstr(rc) ); - rc = GPGERR_INV_KEYRING; - goto ready; - } - free_packet( pkt ); - init_packet( pkt ); - continue; - } - /* make a linked list of all packets */ - switch( pkt->pkttype ) { - case PKT_COMPRESSED: - log_error("skipped compressed packet in keyring\n" ); - free_packet(pkt); - init_packet(pkt); - break; - - case PKT_PUBLIC_KEY: - case PKT_SECRET_KEY: - if( root ) { /* save this packet */ - kbpos->pkt = pkt; - kbpos->save_offset = offset; - pkt = NULL; - goto ready; - } - root = new_kbnode( pkt ); - first_offset = offset; - pkt = gcry_xmalloc( sizeof *pkt ); - init_packet(pkt); - break; - - default: - /* skip pakets at the beginning of a keyring, until we find - * a start packet; issue a warning if it is not a comment */ - if( !root && pkt->pkttype != PKT_COMMENT - && pkt->pkttype != PKT_OLD_COMMENT ) { - break; - } - if( !root || (skipsigs && ( pkt->pkttype == PKT_SIGNATURE - ||pkt->pkttype == PKT_COMMENT - ||pkt->pkttype == PKT_OLD_COMMENT )) ) { - init_packet(pkt); - break; - } - add_kbnode( root, new_kbnode( pkt ) ); - pkt = gcry_xmalloc( sizeof *pkt ); - init_packet(pkt); - break; - } - } - ready: - if( rc == -1 && root ) - rc = 0; - - if( rc ) - release_kbnode( root ); - else { - if ( root ) { - kbpos->offset = first_offset; - kbpos->valid = 1; - } - *ret_root = root; - } - free_packet( pkt ); - gcry_free( pkt ); - - return rc; -} - - -/**************** - * Perform insert/delete/update operation. - * mode 1 = insert - * 2 = delete - * 3 = update - */ -static int -keyring_copy( KBPOS kbpos, int mode, KBNODE root ) -{ - RESTBL *rentry; - IOBUF fp, newfp; - int rc=0; - char *bakfname = NULL; - char *tmpfname = NULL; -#warning We need to lock the keyring while we are editing it. - /* rethink this whole module */ - - if( !(rentry = check_pos( kbpos )) ) - return GPGERR_GENERAL; - - if( opt.dry_run ) - return 0; - - lock_rentry( rentry ); - - /* open the source file */ - if( kbpos->fp ) { - /* BUG(); not allowed with such a handle */ - log_debug("keyring_copy: closing fp %p\n", kbpos->fp ); - iobuf_close (kbpos->fp); - kbpos->fp = NULL; - kbpos->valid = 0; - } - fp = iobuf_open( rentry->fname ); - if( mode == 1 && !fp && errno == ENOENT ) { /* no file yet */ - KBNODE kbctx, node; - - /* insert: create a new file */ - newfp = iobuf_create( rentry->fname ); - if( !newfp ) { - log_error(_("%s: can't create: %s\n"), rentry->fname, strerror(errno)); - unlock_rentry( rentry ); - return GPGERR_OPEN_FILE; - } - else if( !opt.quiet ) - log_info(_("%s: keyring created\n"), rentry->fname ); - - kbctx=NULL; - while( (node = walk_kbnode( root, &kbctx, 0 )) ) { - if( (rc = build_packet( newfp, node->pkt )) ) { - log_error("build_packet(%d) failed: %s\n", - node->pkt->pkttype, gpg_errstr(rc) ); - iobuf_cancel(newfp); - unlock_rentry( rentry ); - return GPGERR_WRITE_FILE; - } - } - if( iobuf_close(newfp) ) { - log_error("%s: close failed: %s\n", rentry->fname, strerror(errno)); - unlock_rentry( rentry ); - return GPGERR_CLOSE_FILE; - } - if( chmod( rentry->fname, S_IRUSR | S_IWUSR ) ) { - log_error("%s: chmod failed: %s\n", - rentry->fname, strerror(errno) ); - unlock_rentry( rentry ); - return GPGERR_WRITE_FILE; - } - return 0; - } - if( !fp ) { - log_error("%s: can't open: %s\n", rentry->fname, strerror(errno) ); - rc = GPGERR_OPEN_FILE; - goto leave; - } - - /* create the new file */ - #ifdef USE_ONLY_8DOT3 - /* Here is another Windoze bug?: - * you cant rename("pubring.gpg.tmp", "pubring.gpg"); - * but rename("pubring.gpg.tmp", "pubring.aaa"); - * works. So we replace .gpg by .bak or .tmp - */ - if( strlen(rentry->fname) > 4 - && !strcmp(rentry->fname+strlen(rentry->fname)-4, ".gpg") ) { - bakfname = gcry_xmalloc( strlen( rentry->fname ) + 1 ); - strcpy(bakfname,rentry->fname); - strcpy(bakfname+strlen(rentry->fname)-4, ".bak"); - tmpfname = gcry_xmalloc( strlen( rentry->fname ) + 1 ); - strcpy(tmpfname,rentry->fname); - strcpy(tmpfname+strlen(rentry->fname)-4, ".tmp"); - } - else { /* file does not end with gpg; hmmm */ - bakfname = gcry_xmalloc( strlen( rentry->fname ) + 5 ); - strcpy(stpcpy(bakfname,rentry->fname),".bak"); - tmpfname = gcry_xmalloc( strlen( rentry->fname ) + 5 ); - strcpy(stpcpy(tmpfname,rentry->fname),".tmp"); - } - #else - bakfname = gcry_xmalloc( strlen( rentry->fname ) + 2 ); - strcpy(stpcpy(bakfname,rentry->fname),"~"); - tmpfname = gcry_xmalloc( strlen( rentry->fname ) + 5 ); - strcpy(stpcpy(tmpfname,rentry->fname),".tmp"); - #endif - newfp = iobuf_create( tmpfname ); - if( !newfp ) { - log_error("%s: can't create: %s\n", tmpfname, strerror(errno) ); - iobuf_close(fp); - rc = GPGERR_OPEN_FILE; - goto leave; - } - - if( mode == 1 ) { /* insert */ - /* copy everything to the new file */ - rc = copy_all_packets( fp, newfp ); - if( rc != -1 ) { - log_error("%s: copy to %s failed: %s\n", - rentry->fname, tmpfname, gpg_errstr(rc) ); - iobuf_close(fp); - iobuf_cancel(newfp); - goto leave; - } - rc = 0; - } - - if( mode == 2 || mode == 3 ) { /* delete or update */ - /* copy first part to the new file */ - rc = copy_some_packets( fp, newfp, kbpos->offset ); - if( rc ) { /* should never get EOF here */ - log_error("%s: copy to %s failed: %s\n", - rentry->fname, tmpfname, gpg_errstr(rc) ); - iobuf_close(fp); - iobuf_cancel(newfp); - goto leave; - } - /* skip this keyblock */ - assert( kbpos->count ); - rc = skip_some_packets( fp, kbpos->count ); - if( rc ) { - log_error("%s: skipping %u packets failed: %s\n", - rentry->fname, kbpos->count, gpg_errstr(rc)); - iobuf_close(fp); - iobuf_cancel(newfp); - goto leave; - } - } - - if( mode == 1 || mode == 3 ) { /* insert or update */ - KBNODE kbctx, node; - - /* append the new data */ - kbctx=NULL; - while( (node = walk_kbnode( root, &kbctx, 0 )) ) { - if( (rc = build_packet( newfp, node->pkt )) ) { - log_error("build_packet(%d) failed: %s\n", - node->pkt->pkttype, gpg_errstr(rc) ); - iobuf_close(fp); - iobuf_cancel(newfp); - rc = GPGERR_WRITE_FILE; - goto leave; - } - } - kbpos->valid = 0; - } - - if( mode == 2 || mode == 3 ) { /* delete or update */ - /* copy the rest */ - rc = copy_all_packets( fp, newfp ); - if( rc != -1 ) { - log_error("%s: copy to %s failed: %s\n", - rentry->fname, tmpfname, gpg_errstr(rc) ); - iobuf_close(fp); - iobuf_cancel(newfp); - goto leave; - } - rc = 0; - } - - /* close both files */ - if( iobuf_close(fp) ) { - log_error("%s: close failed: %s\n", rentry->fname, strerror(errno) ); - rc = GPGERR_CLOSE_FILE; - goto leave; - } - if( iobuf_close(newfp) ) { - log_error("%s: close failed: %s\n", tmpfname, strerror(errno) ); - rc = GPGERR_CLOSE_FILE; - goto leave; - } - /* if the new file is a secring, restrict the permissions */ - #ifndef HAVE_DOSISH_SYSTEM - if( rentry->secret ) { - if( chmod( tmpfname, S_IRUSR | S_IWUSR ) ) { - log_error("%s: chmod failed: %s\n", - tmpfname, strerror(errno) ); - rc = GPGERR_WRITE_FILE; - goto leave; - } - } - #endif - - /* rename and make backup file */ - if( !rentry->secret ) { /* but not for secret keyrings */ - #ifdef HAVE_DOSISH_SYSTEM - remove( bakfname ); - #endif - if( rename( rentry->fname, bakfname ) ) { - log_error("%s: rename to %s failed: %s\n", - rentry->fname, bakfname, strerror(errno) ); - rc = GPGERR_RENAME_FILE; - goto leave; - } - } - #ifdef HAVE_DOSISH_SYSTEM - remove( rentry->fname ); - #endif - if( rename( tmpfname, rentry->fname ) ) { - log_error("%s: rename to %s failed: %s\n", - tmpfname, rentry->fname,strerror(errno) ); - rc = GPGERR_RENAME_FILE; - if( rentry->secret ) { - log_info(_( - "WARNING: 2 files with confidential information exists.\n")); - log_info(_("%s is the unchanged one\n"), rentry->fname ); - log_info(_("%s is the new one\n"), tmpfname ); - log_info(_("Please fix this possible security flaw\n")); - } - goto leave; - } - - leave: - unlock_rentry( rentry ); - gcry_free(bakfname); - gcry_free(tmpfname); - return rc; -} - - -/**************************************************************** - ********** Functions which operate on KBX files **************** - ****************************************************************/ - -static int -do_kbxf_enum( KBPOS kbpos, KBNODE *ret_root, int skipsigs ) -{ - PACKET *pkt; - int rc; - RESTBL *rentry; - KBNODE root = NULL; - - if( !(rentry=check_pos(kbpos)) ) - return GPGERR_GENERAL; - - if( kbpos->pkt ) { - root = new_kbnode( kbpos->pkt ); - kbpos->pkt = NULL; - } - - pkt = gcry_xmalloc( sizeof *pkt ); - init_packet(pkt); - while( (rc=parse_packet(kbpos->fp, pkt, NULL)) != -1 ) { - if( rc ) { /* ignore errors */ - if( rc != GPGERR_UNKNOWN_PACKET ) { - log_error("do_kbxf_enum: read error: %s\n", gpg_errstr(rc) ); - rc = GPGERR_INV_KEYRING; - goto ready; - } - free_packet( pkt ); - init_packet( pkt ); - continue; - } - /* make a linked list of all packets */ - switch( pkt->pkttype ) { - case PKT_COMPRESSED: - log_error("skipped compressed packet in keyring\n" ); - free_packet(pkt); - init_packet(pkt); - break; - - case PKT_PUBLIC_KEY: - case PKT_SECRET_KEY: - if( root ) { /* store this packet */ - kbpos->pkt = pkt; - pkt = NULL; - goto ready; - } - root = new_kbnode( pkt ); - pkt = gcry_xmalloc( sizeof *pkt ); - init_packet(pkt); - break; - - default: - /* skip pakets at the beginning of a keyring, until we find - * a start packet; issue a warning if it is not a comment */ - if( !root && pkt->pkttype != PKT_COMMENT - && pkt->pkttype != PKT_OLD_COMMENT ) { - break; - } - if( !root || (skipsigs && ( pkt->pkttype == PKT_SIGNATURE - ||pkt->pkttype == PKT_COMMENT - ||pkt->pkttype == PKT_OLD_COMMENT )) ) { - init_packet(pkt); - break; - } - add_kbnode( root, new_kbnode( pkt ) ); - pkt = gcry_xmalloc( sizeof *pkt ); - init_packet(pkt); - break; - } - } - ready: - if( rc == -1 && root ) - rc = 0; - - if( rc ) - release_kbnode( root ); - else - *ret_root = root; - free_packet( pkt ); - gcry_free( pkt ); - - return rc; -} - - -/**************** - * Perform insert/delete/update operation. - * mode 1 = insert - * 2 = delete - * 3 = update - */ -static int -do_kbxf_copy( KBPOS kbpos, int mode, KBNODE root ) -{ - RESTBL *rentry; - IOBUF fp, newfp; - int rc=0; - char *bakfname = NULL; - char *tmpfname = NULL; - - if( !(rentry = check_pos( kbpos )) ) - return GPGERR_GENERAL; - if( kbpos->fp ) - BUG(); /* not allowed with such a handle */ - - if( opt.dry_run ) - return 0; - - lock_rentry( rentry ); - - /* open the source file */ - fp = iobuf_open( rentry->fname ); - if( mode == 1 && !fp && errno == ENOENT ) { /* no file yet */ - KBNODE kbctx, node; - - /* insert: create a new file */ - newfp = iobuf_create( rentry->fname ); - if( !newfp ) { - log_error(_("%s: can't create: %s\n"), rentry->fname, strerror(errno)); - unlock_rentry( rentry ); - return GPGERR_OPEN_FILE; - } - else if( !opt.quiet ) - log_info(_("%s: keyring created\n"), rentry->fname ); - - kbctx=NULL; - while( (node = walk_kbnode( root, &kbctx, 0 )) ) { - if( (rc = build_packet( newfp, node->pkt )) ) { - log_error("build_packet(%d) failed: %s\n", - node->pkt->pkttype, gpg_errstr(rc) ); - iobuf_cancel(newfp); - unlock_rentry( rentry ); - return GPGERR_WRITE_FILE; - } - } - if( iobuf_close(newfp) ) { - log_error("%s: close failed: %s\n", rentry->fname, strerror(errno)); - unlock_rentry( rentry ); - return GPGERR_CLOSE_FILE; - } - if( chmod( rentry->fname, S_IRUSR | S_IWUSR ) ) { - log_error("%s: chmod failed: %s\n", - rentry->fname, strerror(errno) ); - unlock_rentry( rentry ); - return GPGERR_WRITE_FILE; - } - return 0; - } - if( !fp ) { - log_error("%s: can't open: %s\n", rentry->fname, strerror(errno) ); - rc = GPGERR_OPEN_FILE; - goto leave; - } - - /* create the new file */ - #ifdef USE_ONLY_8DOT3 - /* Here is another Windoze bug?: - * you cant rename("pubring.gpg.tmp", "pubring.gpg"); - * but rename("pubring.gpg.tmp", "pubring.aaa"); - * works. So we replace .gpg by .bak or .tmp - */ - if( strlen(rentry->fname) > 4 - && !strcmp(rentry->fname+strlen(rentry->fname)-4, ".gpg") ) { - bakfname = gcry_xmalloc( strlen( rentry->fname ) + 1 ); - strcpy(bakfname,rentry->fname); - strcpy(bakfname+strlen(rentry->fname)-4, ".bak"); - tmpfname = gcry_xmalloc( strlen( rentry->fname ) + 1 ); - strcpy(tmpfname,rentry->fname); - strcpy(tmpfname+strlen(rentry->fname)-4, ".tmp"); - } - else { /* file does not end with gpg; hmmm */ - bakfname = gcry_xmalloc( strlen( rentry->fname ) + 5 ); - strcpy(stpcpy(bakfname,rentry->fname),".bak"); - tmpfname = gcry_xmalloc( strlen( rentry->fname ) + 5 ); - strcpy(stpcpy(tmpfname,rentry->fname),".tmp"); - } - #else - bakfname = gcry_xmalloc( strlen( rentry->fname ) + 2 ); - strcpy(stpcpy(bakfname,rentry->fname),"~"); - tmpfname = gcry_xmalloc( strlen( rentry->fname ) + 5 ); - strcpy(stpcpy(tmpfname,rentry->fname),".tmp"); - #endif - newfp = iobuf_create( tmpfname ); - if( !newfp ) { - log_error("%s: can't create: %s\n", tmpfname, strerror(errno) ); - iobuf_close(fp); - rc = GPGERR_OPEN_FILE; - goto leave; - } - - if( mode == 1 ) { /* insert */ - /* copy everything to the new file */ - rc = copy_all_packets( fp, newfp ); - if( rc != -1 ) { - log_error("%s: copy to %s failed: %s\n", - rentry->fname, tmpfname, gpg_errstr(rc) ); - iobuf_close(fp); - iobuf_cancel(newfp); - goto leave; - } - rc = 0; - } - - if( mode == 2 || mode == 3 ) { /* delete or update */ - /* copy first part to the new file */ - rc = copy_some_packets( fp, newfp, kbpos->offset ); - if( rc ) { /* should never get EOF here */ - log_error("%s: copy to %s failed: %s\n", - rentry->fname, tmpfname, gpg_errstr(rc) ); - iobuf_close(fp); - iobuf_cancel(newfp); - goto leave; - } - /* skip this keyblock */ - assert( kbpos->count ); - rc = skip_some_packets( fp, kbpos->count ); - if( rc ) { - log_error("%s: skipping %u packets failed: %s\n", - rentry->fname, kbpos->count, gpg_errstr(rc)); - iobuf_close(fp); - iobuf_cancel(newfp); - goto leave; - } - } - - if( mode == 1 || mode == 3 ) { /* insert or update */ - KBNODE kbctx, node; - - /* append the new data */ - kbctx=NULL; - while( (node = walk_kbnode( root, &kbctx, 0 )) ) { - if( (rc = build_packet( newfp, node->pkt )) ) { - log_error("build_packet(%d) failed: %s\n", - node->pkt->pkttype, gpg_errstr(rc) ); - iobuf_close(fp); - iobuf_cancel(newfp); - rc = GPGERR_WRITE_FILE; - goto leave; - } - } - kbpos->valid = 0; - } - - if( mode == 2 || mode == 3 ) { /* delete or update */ - /* copy the rest */ - rc = copy_all_packets( fp, newfp ); - if( rc != -1 ) { - log_error("%s: copy to %s failed: %s\n", - rentry->fname, tmpfname, gpg_errstr(rc) ); - iobuf_close(fp); - iobuf_cancel(newfp); - goto leave; - } - rc = 0; - } - - /* close both files */ - if( iobuf_close(fp) ) { - log_error("%s: close failed: %s\n", rentry->fname, strerror(errno) ); - rc = GPGERR_CLOSE_FILE; - goto leave; - } - if( iobuf_close(newfp) ) { - log_error("%s: close failed: %s\n", tmpfname, strerror(errno) ); - rc = GPGERR_CLOSE_FILE; - goto leave; - } - /* if the new file is a secring, restrict the permissions */ - #ifndef HAVE_DOSISH_SYSTEM - if( rentry->secret ) { - if( chmod( tmpfname, S_IRUSR | S_IWUSR ) ) { - log_error("%s: chmod failed: %s\n", - tmpfname, strerror(errno) ); - rc = GPGERR_WRITE_FILE; - goto leave; - } - } - #endif - - /* rename and make backup file */ - if( !rentry->secret ) { /* but not for secret keyrings */ - #ifdef HAVE_DOSISH_SYSTEM - remove( bakfname ); - #endif - if( rename( rentry->fname, bakfname ) ) { - log_error("%s: rename to %s failed: %s\n", - rentry->fname, bakfname, strerror(errno) ); - rc = GPGERR_RENAME_FILE; - goto leave; - } - } - #ifdef HAVE_DOSISH_SYSTEM - remove( rentry->fname ); - #endif - if( rename( tmpfname, rentry->fname ) ) { - log_error("%s: rename to %s failed: %s\n", - tmpfname, rentry->fname,strerror(errno) ); - rc = GPGERR_RENAME_FILE; - if( rentry->secret ) { - log_info(_( - "WARNING: 2 files with confidential information exists.\n")); - log_info(_("%s is the unchanged one\n"), rentry->fname ); - log_info(_("%s is the new one\n"), tmpfname ); - log_info(_("Please fix this possible security flaw\n")); - } - goto leave; - } - - leave: - unlock_rentry( rentry ); - gcry_free(bakfname); - gcry_free(tmpfname); - return rc; -} - - - - diff --git a/g10/seckey-cert.c b/g10/seckey-cert.c index 2adb9ef4c..01f4c7b2f 100644 --- a/g10/seckey-cert.c +++ b/g10/seckey-cert.c @@ -1,5 +1,5 @@ /* seckey-cert.c - secret key certificate packet handling - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -23,58 +23,22 @@ #include #include #include - -#include #include "util.h" +#include "memory.h" #include "packet.h" +#include "mpi.h" #include "keydb.h" +#include "cipher.h" #include "main.h" #include "options.h" #include "i18n.h" #include "status.h" -/**************** - * Emulate our old PK interface here - sometime in the future we might - * change the internal design to directly fit to libgcrypt. - */ static int -pk_check_secret_key( int algo, MPI *skey ) -{ - GCRY_SEXP s_skey; - int rc; - - /* make a sexp from skey */ - if( algo == GCRY_PK_DSA ) { - rc = gcry_sexp_build ( &s_skey, NULL, - "(private-key(dsa(p%m)(q%m)(g%m)(y%m)(x%m)))", - skey[0], skey[1], skey[2], skey[3], skey[4] ); - } - else if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) { - rc = gcry_sexp_build ( &s_skey, NULL, - "(private-key(elg(p%m)(g%m)(y%m)(x%m)))", - skey[0], skey[1], skey[2], skey[3] ); - } - else if( algo == GCRY_PK_RSA ) { - rc = gcry_sexp_build ( &s_skey, NULL, - "(private-key(rsa(n%m)(e%m)(d%m)(p%m)(q%m)(u%m)))", - skey[0], skey[1], skey[2], skey[3], skey[4], skey[5] ); - } - else - return GPGERR_PUBKEY_ALGO; - - if ( rc ) - BUG (); - - rc = gcry_pk_testkey( s_skey ); - gcry_sexp_release( s_skey ); - return rc; -} - - -static int -do_check( PKT_secret_key *sk ) +do_check( PKT_secret_key *sk, const char *tryagain_text ) { + byte *buffer; u16 csum=0; int i, res; unsigned nbytes; @@ -82,19 +46,20 @@ do_check( PKT_secret_key *sk ) if( sk->is_protected ) { /* remove the protection */ DEK *dek = NULL; u32 keyid[4]; /* 4! because we need two of them */ - GCRY_CIPHER_HD cipher_hd=NULL; + CIPHER_HANDLE cipher_hd=NULL; PKT_secret_key *save_sk; if( sk->protect.s2k.mode == 1001 ) { log_info(_("secret key parts are not available\n")); - return GPGERR_GENERAL; + return G10ERR_GENERAL; } - if( sk->protect.algo == GCRY_CIPHER_NONE ) + if( sk->protect.algo == CIPHER_ALGO_NONE ) BUG(); - if( openpgp_cipher_test_algo( sk->protect.algo ) ) { - log_info(_("protection algorithm %d is not supported\n"), - sk->protect.algo ); - return GPGERR_CIPHER_ALGO; + if( check_cipher_algo( sk->protect.algo ) ) { + log_info(_("protection algorithm %d%s is not supported\n"), + sk->protect.algo,sk->protect.algo==1?" (IDEA)":"" ); + idea_cipher_warn(0); + return G10ERR_CIPHER_ALGO; } keyid_from_sk( sk, keyid ); keyid[2] = keyid[3] = 0; @@ -103,110 +68,115 @@ do_check( PKT_secret_key *sk ) keyid[3] = sk->main_keyid[1]; } dek = passphrase_to_dek( keyid, sk->pubkey_algo, sk->protect.algo, - &sk->protect.s2k, 0 ); - /* Hmmm: Do we use sync mode here even for Twofish? */ - if( !(cipher_hd = gcry_cipher_open( sk->protect.algo, - GCRY_CIPHER_MODE_CFB, - GCRY_CIPHER_SECURE - | (sk->protect.algo >= 100 ? - 0 : GCRY_CIPHER_ENABLE_SYNC) ) ) - ) { - BUG(); - } - - if( gcry_cipher_setkey( cipher_hd, dek->key, dek->keylen ) ) - log_fatal("set key failed: %s\n", gcry_strerror(-1) ); - gcry_free(dek); + &sk->protect.s2k, 0, tryagain_text ); + cipher_hd = cipher_open( sk->protect.algo, + CIPHER_MODE_AUTO_CFB, 1); + cipher_setkey( cipher_hd, dek->key, dek->keylen ); + m_free(dek); save_sk = copy_secret_key( NULL, sk ); - if( gcry_cipher_setiv( cipher_hd, sk->protect.iv, sk->protect.ivlen )) - log_fatal("set IV failed: %s\n", gcry_strerror(-1) ); + cipher_setiv( cipher_hd, sk->protect.iv, sk->protect.ivlen ); csum = 0; if( sk->version >= 4 ) { - size_t ndata; - unsigned int ndatabits; + int ndata; byte *p, *data; u16 csumc = 0; i = pubkey_get_npkey(sk->pubkey_algo); - assert( gcry_mpi_get_flag( sk->skey[i], GCRYMPI_FLAG_OPAQUE ) ); - p = gcry_mpi_get_opaque( sk->skey[i], &ndatabits ); - ndata = (ndatabits+7)/8; + assert( mpi_is_opaque( sk->skey[i] ) ); + p = mpi_get_opaque( sk->skey[i], &ndata ); if ( ndata > 1 ) csumc = p[ndata-2] << 8 | p[ndata-1]; - data = gcry_xmalloc_secure( ndata ); - gcry_cipher_decrypt( cipher_hd, data, ndata, p, ndata ); - mpi_release( sk->skey[i] ); sk->skey[i] = NULL ; + data = m_alloc_secure( ndata ); + cipher_decrypt( cipher_hd, data, p, ndata ); + mpi_free( sk->skey[i] ); sk->skey[i] = NULL ; p = data; - if( ndata < 2 ) { - log_error("not enough bytes for checksum\n"); - sk->csum = 0; - csum = 1; - } - else { - csum = checksum( data, ndata-2); - sk->csum = data[ndata-2] << 8 | data[ndata-1]; - if ( sk->csum != csum ) { - /* This is a PGP 7.0.0 workaround */ - sk->csum = csumc; /* take the encrypted one */ + if (sk->protect.sha1chk) { + /* This is the new SHA1 checksum method to detect + tampering with the key as used by the Klima/Rosa + attack */ + sk->csum = 0; + csum = 1; + if( ndata < 20 ) + log_error("not enough bytes for SHA-1 checksum\n"); + else { + MD_HANDLE h = md_open (DIGEST_ALGO_SHA1, 1); + if (!h) + BUG(); /* algo not available */ + md_write (h, data, ndata - 20); + md_final (h); + if (!memcmp (md_read (h, DIGEST_ALGO_SHA1), + data + ndata - 20, 20) ) { + /* digest does match. We have to keep the old + style checksum in sk->csum, so that the + test used for unprotected keys does work. + This test gets used when we are adding new + keys. */ + sk->csum = csum = checksum (data, ndata-20); + } + md_close (h); } - } - /* must check it here otherwise the mpi_read_xx would fail - * because the length may have an arbitrary value */ - if( sk->csum == csum ) { - for( ; i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { - nbytes = ndata; - assert( gcry_is_secure( p ) ); - res = gcry_mpi_scan( &sk->skey[i], GCRYMPI_FMT_PGP, - p, &nbytes); - if( res ) - log_bug("gcry_mpi_scan failed in do_check: rc=%d\n", res); - - ndata -= nbytes; - p += nbytes; - } - } - gcry_free(data); + } + else { + if( ndata < 2 ) { + log_error("not enough bytes for checksum\n"); + sk->csum = 0; + csum = 1; + } + else { + csum = checksum( data, ndata-2); + sk->csum = data[ndata-2] << 8 | data[ndata-1]; + if ( sk->csum != csum ) { + /* This is a PGP 7.0.0 workaround */ + sk->csum = csumc; /* take the encrypted one */ + } + } + } + + /* must check it here otherwise the mpi_read_xx would fail + because the length may have an arbitrary value */ + if( sk->csum == csum ) { + for( ; i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { + nbytes = ndata; + sk->skey[i] = mpi_read_from_buffer(p, &nbytes, 1 ); + ndata -= nbytes; + p += nbytes; + } + /* Note: at this point ndata should be 2 for a simple + checksum or 20 for the sha1 digest */ + } + m_free(data); } else { for(i=pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { - size_t ndata; - unsigned int ndatabits; - byte *p, *data; - - assert( gcry_mpi_get_flag( sk->skey[i], GCRYMPI_FLAG_OPAQUE ) ); - p = gcry_mpi_get_opaque( sk->skey[i], &ndatabits ); - ndata = (ndatabits+7)/8; - data = gcry_xmalloc_secure( ndata ); - gcry_cipher_sync( cipher_hd ); - gcry_cipher_decrypt( cipher_hd, data, ndata, p, ndata ); - mpi_release( sk->skey[i] ); sk->skey[i] = NULL ; - - res = gcry_mpi_scan( &sk->skey[i], GCRYMPI_FMT_USG, - data, &ndata ); - if( res ) - log_bug("gcry_mpi_scan failed in do_check: rc=%d\n", res); - + buffer = mpi_get_secure_buffer( sk->skey[i], &nbytes, NULL ); + cipher_sync( cipher_hd ); + assert( mpi_is_protected(sk->skey[i]) ); + cipher_decrypt( cipher_hd, buffer, buffer, nbytes ); + mpi_set_buffer( sk->skey[i], buffer, nbytes, 0 ); + mpi_clear_protect_flag( sk->skey[i] ); csum += checksum_mpi( sk->skey[i] ); - gcry_free( data ); + m_free( buffer ); + } + if( opt.emulate_bugs & EMUBUG_GPGCHKSUM ) { + csum = sk->csum; } } - gcry_cipher_close( cipher_hd ); + cipher_close( cipher_hd ); /* now let's see whether we have used the right passphrase */ if( csum != sk->csum ) { copy_secret_key( sk, save_sk ); passphrase_clear_cache ( keyid, sk->pubkey_algo ); free_secret_key( save_sk ); - return GPGERR_BAD_PASS; + return G10ERR_BAD_PASS; } - /* the checksum may be correct in some cases, - * so we also check the key itself */ - res = pk_check_secret_key( sk->pubkey_algo, sk->skey ); + /* the checksum may fail, so we also check the key itself */ + res = pubkey_check_secret_key( sk->pubkey_algo, sk->skey ); if( res ) { copy_secret_key( sk, save_sk ); passphrase_clear_cache ( keyid, sk->pubkey_algo ); free_secret_key( save_sk ); - return GPGERR_BAD_PASS; + return G10ERR_BAD_PASS; } free_secret_key( save_sk ); sk->is_protected = 0; @@ -215,11 +185,10 @@ do_check( PKT_secret_key *sk ) csum = 0; for(i=pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { - assert( !gcry_mpi_get_flag( sk->skey[i], GCRYMPI_FLAG_OPAQUE ) ); csum += checksum_mpi( sk->skey[i] ); } if( csum != sk->csum ) - return GPGERR_CHECKSUM; + return G10ERR_CHECKSUM; } return 0; @@ -234,17 +203,20 @@ do_check( PKT_secret_key *sk ) int check_secret_key( PKT_secret_key *sk, int n ) { - int rc = GPGERR_BAD_PASS; + int rc = G10ERR_BAD_PASS; int i; if( n < 1 ) - n = opt.batch? 1 : 3; /* use the default value */ + n = (opt.batch && !opt.use_agent)? 1 : 3; /* use the default value */ - for(i=0; i < n && rc == GPGERR_BAD_PASS; i++ ) { - if( i ) - log_info(_("Invalid passphrase; please try again ...\n")); - rc = do_check( sk ); - if( rc == GPGERR_BAD_PASS && is_status_enabled() ) { + for(i=0; i < n && rc == G10ERR_BAD_PASS; i++ ) { + const char *tryagain = NULL; + if (i) { + tryagain = _("Invalid passphrase; please try again"); + log_info (_("%s ...\n"), tryagain); + } + rc = do_check( sk, tryagain ); + if( rc == G10ERR_BAD_PASS && is_status_enabled() ) { u32 kid[2]; char buf[50]; @@ -289,114 +261,103 @@ protect_secret_key( PKT_secret_key *sk, DEK *dek ) return 0; if( !sk->is_protected ) { /* okay, apply the protection */ - GCRY_CIPHER_HD cipher_hd=NULL; + CIPHER_HANDLE cipher_hd=NULL; - if( openpgp_cipher_test_algo( sk->protect.algo ) ) - rc = GPGERR_CIPHER_ALGO; /* unsupport protection algorithm */ + if( check_cipher_algo( sk->protect.algo ) ) + rc = G10ERR_CIPHER_ALGO; /* unsupport protection algorithm */ else { print_cipher_algo_note( sk->protect.algo ); - if( !(cipher_hd = gcry_cipher_open( sk->protect.algo, - GCRY_CIPHER_MODE_CFB, - GCRY_CIPHER_SECURE - | (sk->protect.algo >= 100 ? - 0 : GCRY_CIPHER_ENABLE_SYNC) )) - ) { - BUG(); - } - rc = gcry_cipher_setkey( cipher_hd, dek->key, dek->keylen ); - if( rc == GCRYERR_WEAK_KEY ) { + cipher_hd = cipher_open( sk->protect.algo, + CIPHER_MODE_AUTO_CFB, 1 ); + if( cipher_setkey( cipher_hd, dek->key, dek->keylen ) ) log_info(_("WARNING: Weak key detected" " - please change passphrase again.\n")); - rc = 0; - } - else if( rc ) - BUG(); - - /* set the IV length */ - { int blocksize = gcry_cipher_get_algo_blklen( sk->protect.algo ); - if( blocksize != 8 && blocksize != 16 ) - log_fatal("unsupported blocksize %d\n", blocksize ); - sk->protect.ivlen = blocksize; - assert( sk->protect.ivlen <= DIM(sk->protect.iv) ); - } - gcry_randomize(sk->protect.iv, sk->protect.ivlen, - GCRY_STRONG_RANDOM); - gcry_cipher_setiv( cipher_hd, sk->protect.iv, sk->protect.ivlen ); - - /* FIXME: replace set/get buffer */ + sk->protect.ivlen = cipher_get_blocksize( sk->protect.algo ); + assert( sk->protect.ivlen <= DIM(sk->protect.iv) ); + if( sk->protect.ivlen != 8 && sk->protect.ivlen != 16 ) + BUG(); /* yes, we are very careful */ + randomize_buffer(sk->protect.iv, sk->protect.ivlen, 1); + cipher_setiv( cipher_hd, sk->protect.iv, sk->protect.ivlen ); if( sk->version >= 4 ) { - byte *bufarr[GNUPG_MAX_NSKEY]; - unsigned narr[GNUPG_MAX_NSKEY]; - unsigned nbits[GNUPG_MAX_NSKEY]; + byte *bufarr[PUBKEY_MAX_NSKEY]; + unsigned narr[PUBKEY_MAX_NSKEY]; + unsigned nbits[PUBKEY_MAX_NSKEY]; int ndata=0; byte *p, *data; for(j=0, i = pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++, j++ ) { - assert( !gcry_mpi_get_flag( sk->skey[i], GCRYMPI_FLAG_OPAQUE ) ); - - if( gcry_mpi_aprint( GCRYMPI_FMT_USG, (void**)bufarr+j, - narr+j, sk->skey[i])) - BUG(); - - nbits[j] = gcry_mpi_get_nbits( sk->skey[i] ); + assert( !mpi_is_opaque( sk->skey[i] ) ); + bufarr[j] = mpi_get_buffer( sk->skey[i], &narr[j], NULL ); + nbits[j] = mpi_get_nbits( sk->skey[i] ); ndata += narr[j] + 2; } - for( ; j < GNUPG_MAX_NSKEY; j++ ) + for( ; j < PUBKEY_MAX_NSKEY; j++ ) bufarr[j] = NULL; - ndata += 2; /* for checksum */ + ndata += opt.simple_sk_checksum? 2 : 20; /* for checksum */ - data = gcry_xmalloc_secure( ndata ); + data = m_alloc_secure( ndata ); p = data; - for(j=0; j < GNUPG_MAX_NSKEY && bufarr[j]; j++ ) { + for(j=0; j < PUBKEY_MAX_NSKEY && bufarr[j]; j++ ) { p[0] = nbits[j] >> 8 ; p[1] = nbits[j]; p += 2; memcpy(p, bufarr[j], narr[j] ); p += narr[j]; - gcry_free(bufarr[j]); + m_free(bufarr[j]); } - csum = checksum( data, ndata-2); - sk->csum = csum; - *p++ = csum >> 8; - *p++ = csum; - assert( p == data+ndata ); - gcry_cipher_encrypt( cipher_hd, data, ndata, NULL, 0 ); + + if (opt.simple_sk_checksum) { + log_info (_("generating the deprecated 16-bit checksum" + " for secret key protection\n")); + csum = checksum( data, ndata-2); + sk->csum = csum; + *p++ = csum >> 8; + *p++ = csum; + sk->protect.sha1chk = 0; + } + else { + MD_HANDLE h = md_open (DIGEST_ALGO_SHA1, 1); + if (!h) + BUG(); /* algo not available */ + md_write (h, data, ndata - 20); + md_final (h); + memcpy (p, md_read (h, DIGEST_ALGO_SHA1), 20); + p += 20; + md_close (h); + sk->csum = csum = 0; + sk->protect.sha1chk = 1; + } + assert( p == data+ndata ); + + cipher_encrypt( cipher_hd, data, data, ndata ); for(i = pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { - mpi_release( sk->skey[i] ); + mpi_free( sk->skey[i] ); sk->skey[i] = NULL; } i = pubkey_get_npkey(sk->pubkey_algo); - sk->skey[i] = gcry_mpi_set_opaque(NULL, data, ndata*8 ); + sk->skey[i] = mpi_set_opaque(NULL, data, ndata ); } else { /* NOTE: we always recalculate the checksum because there * are some test releases which calculated it wrong */ - /* FIXME: Replace this code -- Hmmm: why */ csum = 0; for(i=pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { - csum += checksum_mpi( sk->skey[i] ); - - if( gcry_mpi_aprint( GCRYMPI_FMT_USG, - &buffer, &nbytes, sk->skey[i] ) ) - BUG(); - - gcry_cipher_sync( cipher_hd ); - assert( !gcry_mpi_get_flag( sk->skey[i], GCRYMPI_FLAG_OPAQUE ) ); - gcry_cipher_encrypt( cipher_hd, buffer, nbytes, NULL, 0 ); - gcry_mpi_release( sk->skey[i] ); - if( gcry_mpi_scan( &sk->skey[i], GCRYMPI_FMT_USG, - buffer,&nbytes ) ) - BUG(); - - gcry_free( buffer ); + csum += checksum_mpi_counted_nbits( sk->skey[i] ); + buffer = mpi_get_buffer( sk->skey[i], &nbytes, NULL ); + cipher_sync( cipher_hd ); + assert( !mpi_is_protected(sk->skey[i]) ); + cipher_encrypt( cipher_hd, buffer, buffer, nbytes ); + mpi_set_buffer( sk->skey[i], buffer, nbytes, 0 ); + mpi_set_protect_flag( sk->skey[i] ); + m_free( buffer ); } sk->csum = csum; } sk->is_protected = 1; - gcry_cipher_close( cipher_hd ); + cipher_close( cipher_hd ); } } return rc; diff --git a/g10/seskey.c b/g10/seskey.c index aa2a1511c..fc912eeb5 100644 --- a/g10/seskey.c +++ b/g10/seskey.c @@ -1,5 +1,5 @@ /* seskey.c - make sesssion keys etc. - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -23,9 +23,9 @@ #include #include #include - -#include #include "util.h" +#include "cipher.h" +#include "mpi.h" #include "main.h" #include "i18n.h" @@ -36,31 +36,22 @@ void make_session_key( DEK *dek ) { - GCRY_CIPHER_HD chd; + CIPHER_HANDLE chd; int i, rc; - dek->keylen = gcry_cipher_get_algo_keylen( dek->algo ); + dek->keylen = cipher_get_keylen( dek->algo ) / 8; - if( !(chd = gcry_cipher_open( dek->algo, GCRY_CIPHER_MODE_CFB, - GCRY_CIPHER_SECURE - | (dek->algo >= 100 ? - 0 : GCRY_CIPHER_ENABLE_SYNC) )) - ) { - BUG(); - } - - gcry_randomize( dek->key, dek->keylen, GCRY_STRONG_RANDOM ); + chd = cipher_open( dek->algo, CIPHER_MODE_AUTO_CFB, 1 ); + randomize_buffer( dek->key, dek->keylen, 1 ); for(i=0; i < 16; i++ ) { - rc = gcry_cipher_setkey( chd, dek->key, dek->keylen ); + rc = cipher_setkey( chd, dek->key, dek->keylen ); if( !rc ) { - gcry_cipher_close( chd ); + cipher_close( chd ); return; } - if( rc != GCRYERR_WEAK_KEY ) - BUG(); log_info(_("weak key created - retrying\n") ); /* Renew the session key until we get a non-weak key. */ - gcry_randomize( dek->key, dek->keylen, GCRY_STRONG_RANDOM ); + randomize_buffer( dek->key, dek->keylen, 1 ); } log_fatal(_( "cannot avoid weak key for symmetric cipher; tried %d times!\n"), @@ -108,13 +99,13 @@ encode_session_key( DEK *dek, unsigned nbits ) for( p = dek->key, i=0; i < dek->keylen; i++ ) csum += *p++; - frame = gcry_xmalloc_secure( nframe ); + frame = m_alloc_secure( nframe ); n = 0; frame[n++] = 0; frame[n++] = 2; i = nframe - 6 - dek->keylen; assert( i > 0 ); - p = gcry_random_bytes_secure( i, GCRY_STRONG_RANDOM ); + p = get_random_bits( i*8, 1, 1 ); /* replace zero bytes by new values */ for(;;) { int j, k; @@ -127,14 +118,14 @@ encode_session_key( DEK *dek, unsigned nbits ) if( !k ) break; /* okay: no zero bytes */ k += k/128; /* better get some more */ - pp = gcry_random_bytes_secure( k, GCRY_STRONG_RANDOM); + pp = get_random_bits( k*8, 1, 1); for(j=0; j < i && k ; j++ ) if( !p[j] ) p[j] = pp[--k]; - gcry_free(pp); + m_free(pp); } memcpy( frame+n, p, i ); - gcry_free(p); + m_free(p); n += i; frame[n++] = 0; frame[n++] = dek->algo; @@ -142,16 +133,15 @@ encode_session_key( DEK *dek, unsigned nbits ) frame[n++] = csum >>8; frame[n++] = csum; assert( n == nframe ); - if( gcry_mpi_scan( &a, GCRYMPI_FMT_USG, frame, &nframe ) ) - BUG(); - gcry_free(frame); - + a = mpi_alloc_secure( (nframe+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB ); + mpi_set_buffer( a, frame, nframe, 0 ); + m_free(frame); return a; } static MPI -do_encode_md( GCRY_MD_HD md, int algo, size_t len, unsigned nbits, +do_encode_md( MD_HANDLE md, int algo, size_t len, unsigned nbits, const byte *asn, size_t asnlen, int v3compathack ) { int nframe = (nbits+7) / 8; @@ -165,12 +155,11 @@ do_encode_md( GCRY_MD_HD md, int algo, size_t len, unsigned nbits, /* We encode the MD in this way: * - * 0 1 PAD(n bytes) 0 ASN(asnlen bytes) MD(len bytes) + * 0 A PAD(n bytes) 0 ASN(asnlen bytes) MD(len bytes) * * PAD consists of FF bytes. */ - frame = gcry_md_is_secure(md)? gcry_xmalloc_secure( nframe ) - : gcry_xmalloc( nframe ); + frame = md_is_secure(md)? m_alloc_secure( nframe ) : m_alloc( nframe ); n = 0; frame[n++] = 0; frame[n++] = v3compathack? algo : 1; /* block type */ @@ -179,11 +168,13 @@ do_encode_md( GCRY_MD_HD md, int algo, size_t len, unsigned nbits, memset( frame+n, 0xff, i ); n += i; frame[n++] = 0; memcpy( frame+n, asn, asnlen ); n += asnlen; - memcpy( frame+n, gcry_md_read(md, algo), len ); n += len; + memcpy( frame+n, md_read(md, algo), len ); n += len; assert( n == nframe ); - if( gcry_mpi_scan( &a, GCRYMPI_FMT_USG, frame, &nframe ) ) - BUG(); - gcry_free(frame); + a = md_is_secure(md)? + mpi_alloc_secure( (nframe+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB ) + : mpi_alloc( (nframe+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB ); + mpi_set_buffer( a, frame, nframe, 0 ); + m_free(frame); return a; } @@ -192,36 +183,35 @@ do_encode_md( GCRY_MD_HD md, int algo, size_t len, unsigned nbits, * Encode a message digest into an MPI. * v3compathack is used to work around a bug in old GnuPG versions * which did put the algo identifier inseatd of the block type 1 into - * the encoded value. setting this vare force the old behaviour. + * the encoded value. Setting this flag forces the old behaviour. */ MPI -encode_md_value( int pubkey_algo, GCRY_MD_HD md, int hash_algo, +encode_md_value( int pubkey_algo, MD_HANDLE md, int hash_algo, unsigned nbits, int v3compathack ) { - int algo = hash_algo? hash_algo : gcry_md_get_algo(md); + int algo = hash_algo? hash_algo : md_get_algo(md); + const byte *asn; + size_t asnlen, mdlen; MPI frame; - if( pubkey_algo == GCRY_PK_DSA ) { - size_t n = gcry_md_get_algo_dlen(hash_algo); - if( gcry_mpi_scan( &frame, GCRYMPI_FMT_USG, - gcry_md_read(md, hash_algo), &n ) ) - BUG(); + if( pubkey_algo == PUBKEY_ALGO_DSA ) { + mdlen = md_digest_length (hash_algo); + if (mdlen != 20) { + log_error (_("DSA requires the use of a 160 bit hash algorithm\n")); + return NULL; + } + + frame = md_is_secure(md)? mpi_alloc_secure((md_digest_length(hash_algo) + +BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB ) + : mpi_alloc((md_digest_length(hash_algo) + +BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB ); + mpi_set_buffer( frame, md_read(md, hash_algo), + md_digest_length(hash_algo), 0 ); } else { - byte *asn; - size_t asnlen; - - if( gcry_md_algo_info( algo, GCRYCTL_GET_ASNOID, NULL, &asnlen ) ) - log_fatal("can't get OID of algo %d: %s\n", - algo, gcry_strerror(-1)); - asn = gcry_xmalloc( asnlen ); - if( gcry_md_algo_info( algo, GCRYCTL_GET_ASNOID, asn, &asnlen ) ) - BUG(); - frame = do_encode_md( md, algo, gcry_md_get_algo_dlen( algo ), - nbits, asn, asnlen, v3compathack ); - gcry_free( asn ); + asn = md_asn_oid( algo, &asnlen, &mdlen ); + frame = do_encode_md( md, algo, mdlen, nbits, asn, asnlen, v3compathack); } return frame; } - diff --git a/g10/sig-check.c b/g10/sig-check.c index a3946a1e0..c9c19aad4 100644 --- a/g10/sig-check.c +++ b/g10/sig-check.c @@ -1,5 +1,5 @@ /* sig-check.c - Check a signature - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -23,11 +23,12 @@ #include #include #include - -#include #include "util.h" #include "packet.h" +#include "memory.h" +#include "mpi.h" #include "keydb.h" +#include "cipher.h" #include "main.h" #include "status.h" #include "i18n.h" @@ -35,108 +36,35 @@ struct cmp_help_context_s { PKT_signature *sig; - GCRY_MD_HD md; + MD_HANDLE md; }; - -static int do_signature_check( PKT_signature *sig, GCRY_MD_HD digest, - u32 *r_expiredate, int *r_expired ); static int do_check( PKT_public_key *pk, PKT_signature *sig, - GCRY_MD_HD digest, int *r_expired ); - - - -/**************** - * Emulate our old PK interface here - sometime in the future we might - * change the internal design to directly fit to libgcrypt. - */ -static int -pk_verify( int algo, MPI hash, MPI *data, MPI *pkey, - int (*cmp)(void *, MPI), void *opaque ) -{ - GCRY_SEXP s_sig, s_hash, s_pkey; - int rc; - - /* forget about cmp and opaque - we never used it */ - - /* make a sexp from pkey */ - if( algo == GCRY_PK_DSA ) { - rc = gcry_sexp_build ( &s_pkey, NULL, - "(public-key(dsa(p%m)(q%m)(g%m)(y%m)))", - pkey[0], pkey[1], pkey[2], pkey[3] ); - } - else if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) { - rc = gcry_sexp_build ( &s_pkey, NULL, - "(public-key(elg(p%m)(g%m)(y%m)))", - pkey[0], pkey[1], pkey[2] ); - } - else if( algo == GCRY_PK_RSA ) { - rc = gcry_sexp_build ( &s_pkey, NULL, - "(public-key(rsa(n%m)(e%m)))", - pkey[0], pkey[1] ); - } - else - return GPGERR_PUBKEY_ALGO; - - if ( rc ) - BUG (); - - /* put hash into a S-Exp s_hash */ - if ( gcry_sexp_build( &s_hash, NULL, "%m", hash ) ) - BUG (); - - /* put data into a S-Exp s_sig */ - if( algo == GCRY_PK_DSA ) { - rc = gcry_sexp_build ( &s_sig, NULL, - "(sig-val(dsa(r%m)(s%m)))", data[0], data[1] ); - } - else if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) { - rc = gcry_sexp_build ( &s_sig, NULL, - "(sig-val(elg(r%m)(s%m)))", data[0], data[1] ); - } - else if( algo == GCRY_PK_RSA ) { - rc = gcry_sexp_build ( &s_sig, NULL, - "(sig-val(rsa(s%m)))", data[0] ); - } - else - BUG(); - - if ( rc ) - BUG (); - - - rc = gcry_pk_verify( s_sig, s_hash, s_pkey ); - gcry_sexp_release( s_sig ); - gcry_sexp_release( s_hash ); - gcry_sexp_release( s_pkey ); - return rc; -} - - + MD_HANDLE digest, int *r_expired ); /**************** * Check the signature which is contained in SIG. - * The GCRY_MD_HD should be currently open, so that this function + * The MD_HANDLE should be currently open, so that this function * is able to append some data, before finalizing the digest. */ int -signature_check( PKT_signature *sig, GCRY_MD_HD digest ) +signature_check( PKT_signature *sig, MD_HANDLE digest ) { u32 dummy; int dum2; - return do_signature_check( sig, digest, &dummy, &dum2 ); + return signature_check2( sig, digest, &dummy, &dum2 ); } -static int -do_signature_check( PKT_signature *sig, GCRY_MD_HD digest, - u32 *r_expiredate, int *r_expired ) +int +signature_check2( PKT_signature *sig, MD_HANDLE digest, + u32 *r_expiredate, int *r_expired ) { - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); + PKT_public_key *pk = m_alloc_clear( sizeof *pk ); int rc=0; *r_expiredate = 0; if( get_pubkey( pk, sig->keyid ) ) - rc = GPGERR_NO_PUBKEY; + rc = G10ERR_NO_PUBKEY; else { *r_expiredate = pk->expiredate; rc = do_check( pk, sig, digest, r_expired ); @@ -150,40 +78,38 @@ do_signature_check( PKT_signature *sig, GCRY_MD_HD digest, * this sig-id we could have also used the hash of the document * and the timestamp, but the drawback of this is, that it is * not possible to sign more than one identical document within - * one second. Some remote bacth processing applications might + * one second. Some remote batch processing applications might * like this feature here */ - GCRY_MD_HD md; + MD_HANDLE md; u32 a = sig->timestamp; int i, nsig = pubkey_get_nsig( sig->pubkey_algo ); byte *p, *buffer; - if( !(md = gcry_md_open( GCRY_MD_RMD160, 0)) ) - BUG(); - gcry_md_putc( digest, sig->pubkey_algo ); - gcry_md_putc( digest, sig->digest_algo ); - gcry_md_putc( digest, (a >> 24) & 0xff ); - gcry_md_putc( digest, (a >> 16) & 0xff ); - gcry_md_putc( digest, (a >> 8) & 0xff ); - gcry_md_putc( digest, a & 0xff ); + md = md_open( DIGEST_ALGO_RMD160, 0); + md_putc( digest, sig->pubkey_algo ); + md_putc( digest, sig->digest_algo ); + md_putc( digest, (a >> 24) & 0xff ); + md_putc( digest, (a >> 16) & 0xff ); + md_putc( digest, (a >> 8) & 0xff ); + md_putc( digest, a & 0xff ); for(i=0; i < nsig; i++ ) { - size_t n = gcry_mpi_get_nbits( sig->data[i]); + unsigned n = mpi_get_nbits( sig->data[i]); - gcry_md_putc( md, n>>8); - gcry_md_putc( md, n ); - if( gcry_mpi_aprint( GCRYMPI_FMT_USG, &p, &n, sig->data[i] ) ) - BUG(); - gcry_md_write( md, p, n ); - gcry_free(p); + md_putc( md, n>>8); + md_putc( md, n ); + p = mpi_get_buffer( sig->data[i], &n, NULL ); + md_write( md, p, n ); + m_free(p); } - gcry_md_final( md ); - p = make_radix64_string( gcry_md_read( md, 0 ), 20 ); - buffer = gcry_xmalloc( strlen(p) + 60 ); + md_final( md ); + p = make_radix64_string( md_read( md, 0 ), 20 ); + buffer = m_alloc( strlen(p) + 60 ); sprintf( buffer, "%s %s %lu", p, strtimestamp( sig->timestamp ), (ulong)sig->timestamp ); write_status_text( STATUS_SIG_ID, buffer ); - gcry_free(buffer); - gcry_free(p); - gcry_md_close(md); + m_free(buffer); + m_free(p); + md_close(md); } return rc; @@ -203,7 +129,7 @@ cmp_help( void *opaque, MPI result ) size_t mdlen, asnlen; struct cmp_help_context_s *ctx = opaque; PKT_signature *sig = ctx->sig; - GCRY_MD_HD digest = ctx->md; + MD_HANDLE digest = ctx->md; old_enc = 0; for(i=j=0; (c=mpi_getbyte(result, i)) != -1; i++ ) { @@ -226,7 +152,7 @@ cmp_help( void *opaque, MPI result ) } if( old_enc ) { log_error("old encoding scheme is not supported\n"); - return GPGERR_GENERAL; + return G10ERR_GENERAL; } if( (rc=check_digest_algo(sig->digest_algo)) ) @@ -238,25 +164,25 @@ cmp_help( void *opaque, MPI result ) if( asn[j] != c ) break; if( j != -1 || mpi_getbyte(result, i) ) - return GPGERR_BAD_PUBKEY; /* ASN is wrong */ + return G10ERR_BAD_PUBKEY; /* ASN is wrong */ for(i++; (c=mpi_getbyte(result, i)) != -1; i++ ) if( c != 0xff ) break; i++; if( c != sig->digest_algo || mpi_getbyte(result, i) ) { /* Padding or leading bytes in signature is wrong */ - return GPGERR_BAD_PUBKEY; + return G10ERR_BAD_PUBKEY; } if( mpi_getbyte(result, mdlen-1) != sig->digest_start[0] || mpi_getbyte(result, mdlen-2) != sig->digest_start[1] ) { /* Wrong key used to check the signature */ - return GPGERR_BAD_PUBKEY; + return G10ERR_BAD_PUBKEY; } dp = md_read( digest, sig->digest_algo ); for(i=mdlen-1; i >= 0; i--, dp++ ) { if( mpi_getbyte( result, i ) != *dp ) - return GPGERR_BAD_SIGN; + return G10ERR_BAD_SIGN; } return 0; #else @@ -266,7 +192,7 @@ cmp_help( void *opaque, MPI result ) static int -do_check( PKT_public_key *pk, PKT_signature *sig, GCRY_MD_HD digest, +do_check( PKT_public_key *pk, PKT_signature *sig, MD_HANDLE digest, int *r_expired ) { MPI result = NULL; @@ -275,10 +201,10 @@ do_check( PKT_public_key *pk, PKT_signature *sig, GCRY_MD_HD digest, u32 cur_time; *r_expired = 0; - if( pk->version == 4 && pk->pubkey_algo == GCRY_PK_ELG_E ) { + if( pk->version == 4 && pk->pubkey_algo == PUBKEY_ALGO_ELGAMAL_E ) { log_info(_("this is a PGP generated " - "ElGamal key which is NOT secure for signatures!\n")); - return GPGERR_PUBKEY_ALGO; + "ElGamal key which is NOT secure for signatures!\n")); + return G10ERR_PUBKEY_ALGO; } if( pk->timestamp > sig->timestamp ) { @@ -288,7 +214,7 @@ do_check( PKT_public_key *pk, PKT_signature *sig, GCRY_MD_HD digest, : _("public key is %lu seconds newer than the signature\n"), d ); if( !opt.ignore_time_conflict ) - return GPGERR_TIME_CONFLICT; /* pubkey newer than signature */ + return G10ERR_TIME_CONFLICT; /* pubkey newer than signature */ } cur_time = make_timestamp(); @@ -299,44 +225,55 @@ do_check( PKT_public_key *pk, PKT_signature *sig, GCRY_MD_HD digest, : _("key has been created %lu seconds " "in future (time warp or clock problem)\n"), d ); if( !opt.ignore_time_conflict ) - return GPGERR_TIME_CONFLICT; + return G10ERR_TIME_CONFLICT; } if( pk->expiredate && pk->expiredate < cur_time ) { - log_info(_("NOTE: signature key expired %s\n"), - asctimestamp( pk->expiredate ) ); + char buf[11]; + if (opt.verbose) { + u32 tmp_kid[2]; + + keyid_from_pk( pk, tmp_kid ); + log_info(_("NOTE: signature key %08lX expired %s\n"), + (ulong)tmp_kid[1], asctimestamp( pk->expiredate ) ); + } + /* SIGEXPIRED is deprecated. Use KEYEXPIRED. */ + sprintf(buf,"%lu",(ulong)pk->expiredate); + write_status_text(STATUS_KEYEXPIRED,buf); write_status(STATUS_SIGEXPIRED); *r_expired = 1; } - if( (rc=openpgp_md_test_algo(sig->digest_algo)) ) + if( (rc=check_digest_algo(sig->digest_algo)) ) return rc; - if( (rc=openpgp_pk_test_algo(sig->pubkey_algo, 0)) ) + if( (rc=check_pubkey_algo(sig->pubkey_algo)) ) return rc; /* make sure the digest algo is enabled (in case of a detached signature)*/ - gcry_md_enable( digest, sig->digest_algo ); + md_enable( digest, sig->digest_algo ); /* complete the digest */ if( sig->version >= 4 ) - gcry_md_putc( digest, sig->version ); - gcry_md_putc( digest, sig->sig_class ); + md_putc( digest, sig->version ); + md_putc( digest, sig->sig_class ); if( sig->version < 4 ) { u32 a = sig->timestamp; - gcry_md_putc( digest, (a >> 24) & 0xff ); - gcry_md_putc( digest, (a >> 16) & 0xff ); - gcry_md_putc( digest, (a >> 8) & 0xff ); - gcry_md_putc( digest, a & 0xff ); + md_putc( digest, (a >> 24) & 0xff ); + md_putc( digest, (a >> 16) & 0xff ); + md_putc( digest, (a >> 8) & 0xff ); + md_putc( digest, a & 0xff ); } else { byte buf[6]; size_t n; - gcry_md_putc( digest, sig->pubkey_algo ); - gcry_md_putc( digest, sig->digest_algo ); - if( sig->hashed_data ) { - n = (sig->hashed_data[0] << 8) | sig->hashed_data[1]; - gcry_md_write( digest, sig->hashed_data, n+2 ); + md_putc( digest, sig->pubkey_algo ); + md_putc( digest, sig->digest_algo ); + if( sig->hashed ) { + n = sig->hashed->len; + md_putc (digest, (n >> 8) ); + md_putc (digest, n ); + md_write (digest, sig->hashed->data, n); n += 6; } else @@ -348,57 +285,61 @@ do_check( PKT_public_key *pk, PKT_signature *sig, GCRY_MD_HD digest, buf[3] = n >> 16; buf[4] = n >> 8; buf[5] = n; - gcry_md_write( digest, buf, 6 ); + md_write( digest, buf, 6 ); } - gcry_md_final( digest ); + md_final( digest ); result = encode_md_value( pk->pubkey_algo, digest, sig->digest_algo, - gcry_mpi_get_nbits(pk->pkey[0]), 0); + mpi_get_nbits(pk->pkey[0]), 0 ); + if (!result) + return G10ERR_GENERAL; ctx.sig = sig; ctx.md = digest; - rc = pk_verify( pk->pubkey_algo, result, sig->data, pk->pkey, + rc = pubkey_verify( pk->pubkey_algo, result, sig->data, pk->pkey, cmp_help, &ctx ); - mpi_release( result ); + mpi_free( result ); if( (opt.emulate_bugs & EMUBUG_MDENCODE) - && rc == GPGERR_BAD_SIGN && is_ELGAMAL(pk->pubkey_algo) ) { + && rc == G10ERR_BAD_SIGN && is_ELGAMAL(pk->pubkey_algo) ) { /* In this case we try again because old GnuPG versions didn't encode * the hash right. There is no problem with DSA however */ result = encode_md_value( pk->pubkey_algo, digest, sig->digest_algo, - gcry_mpi_get_nbits(pk->pkey[0]), (sig->version < 5) ); - ctx.sig = sig; - ctx.md = digest; - rc = pk_verify( pk->pubkey_algo, result, sig->data, pk->pkey, - cmp_help, &ctx ); + mpi_get_nbits(pk->pkey[0]), (sig->version < 5) ); + if (!result) + rc = G10ERR_GENERAL; + else { + ctx.sig = sig; + ctx.md = digest; + rc = pubkey_verify( pk->pubkey_algo, result, sig->data, pk->pkey, + cmp_help, &ctx ); + } } if( !rc && sig->flags.unknown_critical ) { log_info(_("assuming bad signature due to an unknown critical bit\n")); - rc = GPGERR_BAD_SIGN; + rc = G10ERR_BAD_SIGN; } - sig->flags.checked = 1; - sig->flags.valid = !rc; return rc; } static void -hash_uid_node( KBNODE unode, GCRY_MD_HD md, PKT_signature *sig ) +hash_uid_node( KBNODE unode, MD_HANDLE md, PKT_signature *sig ) { PKT_user_id *uid = unode->pkt->pkt.user_id; assert( unode->pkt->pkttype == PKT_USER_ID ); - if( uid->photo ) { + if( uid->attrib_data ) { if( sig->version >=4 ) { byte buf[5]; - buf[0] = 0xd1; /* packet of type 17 */ - buf[1] = uid->photolen >> 24; /* always use 4 length bytes */ - buf[2] = uid->photolen >> 16; - buf[3] = uid->photolen >> 8; - buf[4] = uid->photolen; - gcry_md_write( md, buf, 5 ); + buf[0] = 0xd1; /* packet of type 17 */ + buf[1] = uid->attrib_len >> 24; /* always use 4 length bytes */ + buf[2] = uid->attrib_len >> 16; + buf[3] = uid->attrib_len >> 8; + buf[4] = uid->attrib_len; + md_write( md, buf, 5 ); } - gcry_md_write( md, uid->photo, uid->photolen ); + md_write( md, uid->attrib_data, uid->attrib_len ); } else { if( sig->version >=4 ) { @@ -408,9 +349,26 @@ hash_uid_node( KBNODE unode, GCRY_MD_HD md, PKT_signature *sig ) buf[2] = uid->len >> 16; buf[3] = uid->len >> 8; buf[4] = uid->len; - gcry_md_write( md, buf, 5 ); + md_write( md, buf, 5 ); } - gcry_md_write( md, uid->name, uid->len ); + md_write( md, uid->name, uid->len ); + } +} + +static void +cache_sig_result ( PKT_signature *sig, int result ) +{ + if ( !result ) { + sig->flags.checked = 1; + sig->flags.valid = 1; + } + else if ( result == G10ERR_BAD_SIGN ) { + sig->flags.checked = 1; + sig->flags.valid = 0; + } + else { + sig->flags.checked = 0; + sig->flags.valid = 0; } } @@ -431,7 +389,7 @@ int check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig, u32 *r_expiredate, int *r_expired ) { - GCRY_MD_HD md; + MD_HANDLE md; PKT_public_key *pk; PKT_signature *sig; int algo; @@ -448,47 +406,49 @@ check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig, sig = node->pkt->pkt.signature; algo = sig->digest_algo; - #if 0 - if( sig->flags.checked ) { - log_debug("check_key_signature: already checked: %s\n", - sig->flags.valid? "good":"bad" ); - if ( sig->flags.valid ) - return 0; /* shortcut already checked signatures */ - /* FIXME: We should also do this with bad signatures but here we - * have to distinguish between several reasons; e.g. for a missing - * public key. the key may now be available. - * For now we simply don't shortcut bad signatures - */ - } - #endif + /* check whether we have cached the result of a previous signature check.*/ + if ( !opt.no_sig_cache ) { + if (sig->flags.checked) { /*cached status available*/ + if( is_selfsig ) { + u32 keyid[2]; - if( (rc=openpgp_md_test_algo(algo)) ) + keyid_from_pk( pk, keyid ); + if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) + *is_selfsig = 1; + } + return sig->flags.valid? 0 : G10ERR_BAD_SIGN; + } + } + + if( (rc=check_digest_algo(algo)) ) return rc; - if( sig->sig_class == 0x20 ) { - if( !(md = gcry_md_open( algo, 0 )) ) - BUG(); + if( sig->sig_class == 0x20 ) { /* key revocation */ + md = md_open( algo, 0 ); hash_public_key( md, pk ); rc = do_check( pk, sig, md, r_expired ); - gcry_md_close(md); + cache_sig_result ( sig, rc ); + md_close(md); } else if( sig->sig_class == 0x28 ) { /* subkey revocation */ KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY ); if( snode ) { - if( !(md = gcry_md_open( algo, 0 )) ) - BUG(); + md = md_open( algo, 0 ); hash_public_key( md, pk ); hash_public_key( md, snode->pkt->pkt.public_key ); rc = do_check( pk, sig, md, r_expired ); - gcry_md_close(md); + cache_sig_result ( sig, rc ); + md_close(md); } else { - log_error("no subkey for subkey revocation packet\n"); - rc = GPGERR_SIG_CLASS; + if (!opt.quiet) + log_info ("key %08lX: no subkey for subkey revocation packet\n", + (ulong)keyid_from_pk (pk, NULL)); + rc = G10ERR_SIG_CLASS; } } - else if( sig->sig_class == 0x18 ) { + else if( sig->sig_class == 0x18 ) { /* key binding */ KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY ); if( snode ) { @@ -499,27 +459,35 @@ check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig, if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) *is_selfsig = 1; } - if( !(md = gcry_md_open( algo, 0 )) ) - BUG(); + md = md_open( algo, 0 ); hash_public_key( md, pk ); hash_public_key( md, snode->pkt->pkt.public_key ); rc = do_check( pk, sig, md, r_expired ); - gcry_md_close(md); + cache_sig_result ( sig, rc ); + md_close(md); } else { - log_error("no subkey for key signature packet\n"); - rc = GPGERR_SIG_CLASS; + if (!opt.quiet) + log_info ("key %08lX: no subkey for subkey binding packet\n", + (ulong)keyid_from_pk (pk, NULL)); + rc = G10ERR_SIG_CLASS; } } - else { + else if( sig->sig_class == 0x1f ) { /* direct key signature */ + md = md_open( algo, 0 ); + hash_public_key( md, pk ); + rc = do_check( pk, sig, md, r_expired ); + cache_sig_result ( sig, rc ); + md_close(md); + } + else { /* all other classes */ KBNODE unode = find_prev_kbnode( root, node, PKT_USER_ID ); if( unode ) { u32 keyid[2]; keyid_from_pk( pk, keyid ); - if( !(md = gcry_md_open( algo, 0 )) ) - BUG(); + md = md_open( algo, 0 ); hash_public_key( md, pk ); hash_uid_node( unode, md, sig ); if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) { @@ -528,13 +496,17 @@ check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig, rc = do_check( pk, sig, md, r_expired ); } else { - rc = do_signature_check( sig, md, r_expiredate, r_expired ); + rc = signature_check2( sig, md, r_expiredate, r_expired ); } - gcry_md_close(md); + cache_sig_result ( sig, rc ); + md_close(md); } else { - log_error("no user ID for key signature packet\n"); - rc = GPGERR_SIG_CLASS; + if (!opt.quiet) + log_info ("key %08lX: no user ID for key signature packet " + "of class %02x\n", + (ulong)keyid_from_pk (pk, NULL), sig->sig_class ); + rc = G10ERR_SIG_CLASS; } } diff --git a/g10/sign.c b/g10/sign.c index bdc5b8afe..6a8ce2991 100644 --- a/g10/sign.c +++ b/g10/sign.c @@ -1,5 +1,5 @@ /* sign.c - sign data - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,13 +24,14 @@ #include #include #include +#include /* need sleep() */ -#include #include "options.h" #include "packet.h" #include "errors.h" #include "iobuf.h" #include "keydb.h" +#include "memory.h" #include "util.h" #include "main.h" #include "filter.h" @@ -40,69 +41,15 @@ #include "i18n.h" -#define ENABLE_BETTER_PGP2_COMPAT 1 - #ifdef HAVE_DOSISH_SYSTEM #define LF "\r\n" + void __stdcall Sleep(ulong); + #define sleep(a) Sleep((a)*1000) #else #define LF "\n" #endif -/**************** - * Emulate our old PK interface here - sometime in the future we might - * change the internal design to directly fit to libgcrypt. - */ -static int -pk_sign( int algo, MPI *data, MPI hash, MPI *skey ) -{ - GCRY_SEXP s_sig, s_hash, s_skey, list; - int rc; - - /* make a sexp from skey */ - if( algo == GCRY_PK_DSA ) { - rc = gcry_sexp_build ( &s_skey, NULL, - "(private-key(dsa(p%m)(q%m)(g%m)(y%m)(x%m)))", - skey[0], skey[1], skey[2], skey[3], skey[4] ); - } - else if( algo == GCRY_PK_ELG || algo == GCRY_PK_ELG_E ) { - rc = gcry_sexp_build ( &s_skey, NULL, - "(private-key(elg(p%m)(g%m)(y%m)(x%m)))", - skey[0], skey[1], skey[2], skey[3] ); - } - else - return GPGERR_PUBKEY_ALGO; - - if ( rc ) - BUG (); - - /* put hash into a S-Exp s_hash */ - if ( gcry_sexp_build( &s_hash, NULL, "%m", hash ) ) - BUG (); - - rc = gcry_pk_sign( &s_sig, s_hash, s_skey ); - gcry_sexp_release( s_hash ); - gcry_sexp_release( s_skey ); - - if( rc ) - ; - else { - list = gcry_sexp_find_token( s_sig, "r" , 0 ); - assert( list ); - data[0] = gcry_sexp_nth_mpi( list, 1, 0 ); - assert( data[0] ); - gcry_sexp_release (list); - - list = gcry_sexp_find_token( s_sig, "s" , 0 ); - assert( list ); - data[1] = gcry_sexp_nth_mpi( list, 1, 0 ); - assert( data[1] ); - gcry_sexp_release (list); - } - - - gcry_sexp_release( s_sig ); - return rc; -} +static int recipient_digest_algo=0; /**************** * Create a notation. It is assumed that the stings in STRLIST @@ -110,55 +57,196 @@ pk_sign( int algo, MPI *data, MPI hash, MPI *skey ) * NAME=VALUE format. */ static void -mk_notation_and_policy( PKT_signature *sig ) +mk_notation_and_policy( PKT_signature *sig, + PKT_public_key *pk, PKT_secret_key *sk ) { - const char *string, *s; + const char *string; + char *s=NULL; byte *buf; unsigned n1, n2; + STRLIST nd=NULL,pu=NULL; + struct expando_args args; + + memset(&args,0,sizeof(args)); + args.pk=pk; + args.sk=sk; /* notation data */ - if( opt.notation_data && sig->version < 4 ) - log_info("can't put notation data into v3 signatures\n"); - else if( opt.notation_data ) { - STRLIST nd = opt.notation_data; + if(IS_SIG(sig) && opt.sig_notation_data) + { + if(sig->version<4) + log_info("can't put notation data into v3 signatures\n"); + else + nd=opt.sig_notation_data; + } + else if( IS_CERT(sig) && opt.cert_notation_data ) + { + if(sig->version<4) + log_info("can't put notation data into v3 key signatures\n"); + else + nd=opt.cert_notation_data; + } - for( ; nd; nd = nd->next ) { - string = nd->d; - s = strchr( string, '=' ); - if( !s ) - BUG(); /* we have already parsed this */ - n1 = s - string; - s++; - n2 = strlen(s); - buf = gcry_xmalloc( 8 + n1 + n2 ); - buf[0] = 0x80; /* human readable */ - buf[1] = buf[2] = buf[3] = 0; - buf[4] = n1 >> 8; - buf[5] = n1; - buf[6] = n2 >> 8; - buf[7] = n2; - memcpy(buf+8, string, n1 ); - memcpy(buf+8+n1, s, n2 ); - build_sig_subpkt( sig, SIGSUBPKT_NOTATION - | ((nd->flags & 1)? SIGSUBPKT_FLAG_CRITICAL:0), - buf, 8+n1+n2 ); - } + for( ; nd; nd = nd->next ) { + char *expanded; + + string = nd->d; + s = strchr( string, '=' ); + if( !s ) + BUG(); /* we have already parsed this */ + n1 = s - string; + s++; + + expanded=pct_expando(s,&args); + if(!expanded) + { + log_error(_("WARNING: unable to %%-expand notation " + "(too large). Using unexpanded.\n")); + expanded=m_strdup(s); + } + + n2 = strlen(expanded); + buf = m_alloc( 8 + n1 + n2 ); + buf[0] = 0x80; /* human readable */ + buf[1] = buf[2] = buf[3] = 0; + buf[4] = n1 >> 8; + buf[5] = n1; + buf[6] = n2 >> 8; + buf[7] = n2; + memcpy(buf+8, string, n1 ); + memcpy(buf+8+n1, expanded, n2 ); + build_sig_subpkt( sig, SIGSUBPKT_NOTATION + | ((nd->flags & 1)? SIGSUBPKT_FLAG_CRITICAL:0), + buf, 8+n1+n2 ); + m_free(expanded); + m_free(buf); } + if(opt.show_notation) + show_notation(sig,0); + /* set policy URL */ - if( (s=opt.set_policy_url) ) { - if( *s == '!' ) - build_sig_subpkt( sig, SIGSUBPKT_POLICY | SIGSUBPKT_FLAG_CRITICAL, - s+1, strlen(s+1) ); + if( IS_SIG(sig) && opt.sig_policy_url ) + { + if(sig->version<4) + log_info("can't put a policy URL into v3 signatures\n"); else - build_sig_subpkt( sig, SIGSUBPKT_POLICY, s, strlen(s) ); + pu=opt.sig_policy_url; + } + else if( IS_CERT(sig) && opt.cert_policy_url ) + { + if(sig->version<4) + log_info("can't put a policy URL into v3 key signatures\n"); + else + pu=opt.cert_policy_url; + } + + for(;pu;pu=pu->next) + { + string = pu->d; + + s=pct_expando(string,&args); + if(!s) + { + log_error(_("WARNING: unable to %%-expand policy url " + "(too large). Using unexpanded.\n")); + s=m_strdup(string); + } + + build_sig_subpkt(sig,SIGSUBPKT_POLICY| + ((pu->flags & 1)?SIGSUBPKT_FLAG_CRITICAL:0), + s,strlen(s)); + + m_free(s); + } + + if(opt.show_policy_url) + show_policy_url(sig,0); +} + + +/* + * Helper to hash a user ID packet. + */ +static void +hash_uid (MD_HANDLE md, int sigversion, const PKT_user_id *uid) +{ + if ( sigversion >= 4 ) { + byte buf[5]; + + if(uid->attrib_data) { + buf[0] = 0xd1; /* indicates an attribute packet */ + buf[1] = uid->attrib_len >> 24; /* always use 4 length bytes */ + buf[2] = uid->attrib_len >> 16; + buf[3] = uid->attrib_len >> 8; + buf[4] = uid->attrib_len; + } + else { + buf[0] = 0xb4; /* indicates a userid packet */ + buf[1] = uid->len >> 24; /* always use 4 length bytes */ + buf[2] = uid->len >> 16; + buf[3] = uid->len >> 8; + buf[4] = uid->len; + } + md_write( md, buf, 5 ); + } + + if(uid->attrib_data) + md_write (md, uid->attrib_data, uid->attrib_len ); + else + md_write (md, uid->name, uid->len ); +} + + +/* + * Helper to hash some parts from the signature + */ +static void +hash_sigversion_to_magic (MD_HANDLE md, const PKT_signature *sig) +{ + if (sig->version >= 4) + md_putc (md, sig->version); + md_putc (md, sig->sig_class); + if (sig->version < 4) { + u32 a = sig->timestamp; + md_putc (md, (a >> 24) & 0xff ); + md_putc (md, (a >> 16) & 0xff ); + md_putc (md, (a >> 8) & 0xff ); + md_putc (md, a & 0xff ); + } + else { + byte buf[6]; + size_t n; + + md_putc (md, sig->pubkey_algo); + md_putc (md, sig->digest_algo); + if (sig->hashed) { + n = sig->hashed->len; + md_putc (md, (n >> 8) ); + md_putc (md, n ); + md_write (md, sig->hashed->data, n ); + n += 6; + } + else { + md_putc (md, 0); /* always hash the length of the subpacket*/ + md_putc (md, 0); + n = 6; + } + /* add some magic */ + buf[0] = sig->version; + buf[1] = 0xff; + buf[2] = n >> 24; /* hmmm, n is only 16 bit, so this is always 0 */ + buf[3] = n >> 16; + buf[4] = n >> 8; + buf[5] = n; + md_write (md, buf, 6); } } static int do_sign( PKT_secret_key *sk, PKT_signature *sig, - GCRY_MD_HD md, int digest_algo ) + MD_HANDLE md, int digest_algo ) { MPI frame; byte *dp; @@ -171,32 +259,59 @@ do_sign( PKT_secret_key *sk, PKT_signature *sig, : _("key has been created %lu seconds " "in future (time warp or clock problem)\n"), d ); if( !opt.ignore_time_conflict ) - return GPGERR_TIME_CONFLICT; + return G10ERR_TIME_CONFLICT; } print_pubkey_algo_note(sk->pubkey_algo); if( !digest_algo ) - digest_algo = gcry_md_get_algo(md); + digest_algo = md_get_algo(md); print_digest_algo_note( digest_algo ); - dp = gcry_md_read( md, digest_algo ); + dp = md_read( md, digest_algo ); sig->digest_algo = digest_algo; sig->digest_start[0] = dp[0]; sig->digest_start[1] = dp[1]; frame = encode_md_value( sk->pubkey_algo, md, - digest_algo, gcry_mpi_get_nbits(sk->skey[0]), 0 ); - rc = pk_sign( sk->pubkey_algo, sig->data, frame, sk->skey ); - mpi_release(frame); + digest_algo, mpi_get_nbits(sk->skey[0]), 0 ); + if (!frame) + return G10ERR_GENERAL; + rc = pubkey_sign( sk->pubkey_algo, sig->data, frame, sk->skey ); + mpi_free(frame); + if (!rc && !opt.no_sig_create_check) { + /* check that the signature verification worked and nothing is + * fooling us e.g. by a bug in the signature create + * code or by deliberately introduced faults. */ + PKT_public_key *pk = m_alloc_clear (sizeof *pk); + + if( get_pubkey( pk, sig->keyid ) ) + rc = G10ERR_NO_PUBKEY; + else { + frame = encode_md_value (pk->pubkey_algo, md, + sig->digest_algo, + mpi_get_nbits(pk->pkey[0]), 0); + if (!frame) + rc = G10ERR_GENERAL; + else + rc = pubkey_verify (pk->pubkey_algo, frame, + sig->data, pk->pkey, + NULL, NULL ); + mpi_free (frame); + } + if (rc) + log_error (_("checking created signature failed: %s\n"), + g10_errstr (rc)); + free_public_key (pk); + } if( rc ) - log_error(_("signing failed: %s\n"), gpg_errstr(rc) ); + log_error(_("signing failed: %s\n"), g10_errstr(rc) ); else { if( opt.verbose ) { char *ustr = get_user_id_string( sig->keyid ); log_info(_("%s signature from: %s\n"), - gcry_pk_algo_name(sk->pubkey_algo), ustr ); - gcry_free(ustr); + pubkey_algo_to_string(sk->pubkey_algo), ustr ); + m_free(ustr); } } return rc; @@ -205,16 +320,12 @@ do_sign( PKT_secret_key *sk, PKT_signature *sig, int -complete_sig( PKT_signature *sig, PKT_secret_key *sk, GCRY_MD_HD md ) +complete_sig( PKT_signature *sig, PKT_secret_key *sk, MD_HANDLE md ) { int rc=0; if( !(rc=check_secret_key( sk, 0 )) ) rc = do_sign( sk, sig, md, 0 ); - - /* fixme: should we check whether the signature is okay? - * maybe by using an option */ - return rc; } @@ -223,10 +334,12 @@ hash_for(int pubkey_algo, int packet_version ) { if( opt.def_digest_algo ) return opt.def_digest_algo; - if( pubkey_algo == GCRY_PK_DSA ) - return GCRY_MD_SHA1; - if( pubkey_algo == GCRY_PK_RSA && packet_version < 4 ) - return GCRY_MD_MD5; + if( recipient_digest_algo ) + return recipient_digest_algo; + if( pubkey_algo == PUBKEY_ALGO_DSA ) + return DIGEST_ALGO_SHA1; + if( pubkey_algo == PUBKEY_ALGO_RSA && packet_version < 4 ) + return DIGEST_ALGO_MD5; return DEFAULT_DIGEST_ALGO; } @@ -239,7 +352,7 @@ only_old_style( SK_LIST sk_list ) /* if there are only old style capable key we use the old sytle */ for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; - if( sk->pubkey_algo == GCRY_PK_RSA && sk->version < 4 ) + if( sk->pubkey_algo == PUBKEY_ALGO_RSA && sk->version < 4 ) old_style = 1; else return 0; @@ -267,94 +380,210 @@ print_status_sig_created ( PKT_secret_key *sk, PKT_signature *sig, int what ) write_status_text( STATUS_SIG_CREATED, buf ); } + +/* + * Loop over the secret certificates in SK_LIST and build the one pass + * signature packets. OpenPGP says that the data should be bracket by + * the onepass-sig and signature-packet; so we build these onepass + * packet here in reverse order + */ static int -write_one_signature( IOBUF out, PKT_secret_key *sk, int old_style, - const char *outfile, - GCRY_MD_HD datamd, - int sig_class, - int status_char ) +write_onepass_sig_packets (SK_LIST sk_list, IOBUF out, int sigclass ) { - PKT_signature *sig; - GCRY_MD_HD md; - int rc; + int skcount; + SK_LIST sk_rover; - /* build the signature packet */ - /* fixme: this code is partly duplicated in make_keysig_packet */ - sig = gcry_xcalloc( 1, sizeof *sig ); - sig->version = old_style || opt.force_v3_sigs ? 3 : sk->version; - keyid_from_sk( sk, sig->keyid ); - sig->digest_algo = hash_for(sk->pubkey_algo, sk->version); - sig->pubkey_algo = sk->pubkey_algo; - sig->timestamp = make_timestamp(); - sig->sig_class = sig_class; + for (skcount=0, sk_rover=sk_list; sk_rover; sk_rover = sk_rover->next) + skcount++; - md = gcry_md_copy( datamd ); - if( !md ) - BUG(); - if( sig->version >= 4 ) { - build_sig_subpkt_from_sig( sig ); - gcry_md_putc( md, sig->version ); + for (; skcount; skcount--) { + PKT_secret_key *sk; + PKT_onepass_sig *ops; + PACKET pkt; + int i, rc; + + for (i=0, sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { + if (++i == skcount) + break; + } + + sk = sk_rover->sk; + ops = m_alloc_clear (sizeof *ops); + ops->sig_class = sigclass; + ops->digest_algo = hash_for (sk->pubkey_algo, sk->version); + ops->pubkey_algo = sk->pubkey_algo; + keyid_from_sk (sk, ops->keyid); + ops->last = (skcount == 1); + + init_packet(&pkt); + pkt.pkttype = PKT_ONEPASS_SIG; + pkt.pkt.onepass_sig = ops; + rc = build_packet (out, &pkt); + free_packet (&pkt); + if (rc) { + log_error ("build onepass_sig packet failed: %s\n", + g10_errstr(rc)); + return rc; + } } - - mk_notation_and_policy( sig ); - - gcry_md_putc( md, sig->sig_class ); - if( sig->version < 4 ) { - u32 a = sig->timestamp; - gcry_md_putc( md, (a >> 24) & 0xff ); - gcry_md_putc( md, (a >> 16) & 0xff ); - gcry_md_putc( md, (a >> 8) & 0xff ); - gcry_md_putc( md, a & 0xff ); + + return 0; +} + +/* + * Helper to write the plaintext (literal data) packet + */ +static int +write_plaintext_packet (IOBUF out, IOBUF inp, const char *fname, int ptmode) +{ + PKT_plaintext *pt = NULL; + u32 filesize; + int rc = 0; + + if (!opt.no_literal) { + if (fname || opt.set_filename) { + char *s = make_basename (opt.set_filename? opt.set_filename + : fname); + pt = m_alloc (sizeof *pt + strlen(s) - 1); + pt->namelen = strlen (s); + memcpy (pt->name, s, pt->namelen); + m_free (s); + } + else { /* no filename */ + pt = m_alloc (sizeof *pt - 1); + pt->namelen = 0; + } + } + + /* try to calculate the length of the data */ + if (fname) { + if( !(filesize = iobuf_get_filelength(inp)) ) + log_info (_("WARNING: `%s' is an empty file\n"), fname); + + /* we can't yet encode the length of very large files, + * so we switch to partial length encoding in this case */ + if (filesize >= IOBUF_FILELENGTH_LIMIT) + filesize = 0; + + /* because the text_filter modifies the length of the + * data, it is not possible to know the used length + * without a double read of the file - to avoid that + * we simple use partial length packets. + */ + if ( ptmode == 't' ) + filesize = 0; } else { - byte buf[6]; - size_t n; - - gcry_md_putc( md, sig->pubkey_algo ); - gcry_md_putc( md, sig->digest_algo ); - if( sig->hashed_data ) { - n = (sig->hashed_data[0] << 8) | sig->hashed_data[1]; - gcry_md_write( md, sig->hashed_data, n+2 ); - n += 6; - } - else { - gcry_md_putc( md, 0 );/* always hash the length of the subpacket*/ - gcry_md_putc( md, 0 ); - n = 6; - } - /* add some magic */ - buf[0] = sig->version; - buf[1] = 0xff; - buf[2] = n >> 24; /* hmmm, n is only 16 bit, so this is always 0 */ - buf[3] = n >> 16; - buf[4] = n >> 8; - buf[5] = n; - gcry_md_write( md, buf, 6 ); + filesize = opt.set_filesize? opt.set_filesize : 0; /* stdin */ } - gcry_md_final( md ); - rc = do_sign( sk, sig, md, hash_for(sig->pubkey_algo, sk->version) ); - gcry_md_close( md ); - /* Hmmm: Do we release sig in case of rc != 0? */ - - if( !rc ) { /* and write it */ + if (!opt.no_literal) { PACKET pkt; + pt->timestamp = make_timestamp (); + pt->mode = ptmode; + pt->len = filesize; + pt->new_ctb = !pt->len && !opt.rfc1991; + pt->buf = inp; init_packet(&pkt); - pkt.pkttype = PKT_SIGNATURE; - pkt.pkt.signature = sig; - rc = build_packet( out, &pkt ); - if( !rc && is_status_enabled() ) { - print_status_sig_created ( sk, sig, status_char ); - } - free_packet( &pkt ); - if( rc ) - log_error("build signature packet failed: %s\n", gpg_errstr(rc) ); + pkt.pkttype = PKT_PLAINTEXT; + pkt.pkt.plaintext = pt; + /*cfx.datalen = filesize? calc_packet_length( &pkt ) : 0;*/ + if( (rc = build_packet (out, &pkt)) ) + log_error ("build_packet(PLAINTEXT) failed: %s\n", + g10_errstr(rc) ); + pt->buf = NULL; } + else { + byte copy_buffer[4096]; + int bytes_copied; + while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1) + if (iobuf_write(out, copy_buffer, bytes_copied) == -1) { + rc = G10ERR_WRITE_FILE; + log_error ("copying input to output failed: %s\n", + g10_errstr(rc)); + break; + } + memset(copy_buffer, 0, 4096); /* burn buffer */ + } + /* fixme: it seems that we never freed pt/pkt */ + return rc; } +/* + * Write the signatures from the SK_LIST to OUT. HASH must be a non-finalized + * hash which will not be changes here. + */ +static int +write_signature_packets (SK_LIST sk_list, IOBUF out, MD_HANDLE hash, + int sigclass, u32 timestamp, u32 duration, + int status_letter) +{ + SK_LIST sk_rover; + + /* loop over the secret certificates */ + for (sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next) { + PKT_secret_key *sk; + PKT_signature *sig; + MD_HANDLE md; + int rc; + + sk = sk_rover->sk; + + /* build the signature packet */ + sig = m_alloc_clear (sizeof *sig); + if(opt.force_v3_sigs || opt.rfc1991) + sig->version=3; + else if(duration || opt.sig_policy_url || opt.sig_notation_data) + sig->version=4; + else + sig->version=sk->version; + keyid_from_sk (sk, sig->keyid); + sig->digest_algo = hash_for (sk->pubkey_algo, sk->version); + sig->pubkey_algo = sk->pubkey_algo; + if(timestamp) + sig->timestamp = timestamp; + else + sig->timestamp = make_timestamp(); + if(duration) + sig->expiredate = sig->timestamp+duration; + sig->sig_class = sigclass; + + md = md_copy (hash); + + if (sig->version >= 4) + build_sig_subpkt_from_sig (sig); + mk_notation_and_policy (sig, NULL, sk); + + hash_sigversion_to_magic (md, sig); + md_final (md); + + rc = do_sign( sk, sig, md, hash_for (sig->pubkey_algo, sk->version) ); + md_close (md); + + if( !rc ) { /* and write it */ + PACKET pkt; + + init_packet(&pkt); + pkt.pkttype = PKT_SIGNATURE; + pkt.pkt.signature = sig; + rc = build_packet (out, &pkt); + if (!rc && is_status_enabled()) { + print_status_sig_created ( sk, sig, status_letter); + } + free_packet (&pkt); + if (rc) + log_error ("build signature packet failed: %s\n", + g10_errstr(rc) ); + } + if( rc ) + return rc;; + } + + return 0; +} /**************** * Sign the files whose names are in FILENAME. @@ -362,7 +591,7 @@ write_one_signature( IOBUF out, PKT_secret_key *sk, int old_style, * make a detached signature. If FILENAMES->d is NULL read from stdin * and ignore the detached mode. Sign the file with all secret keys * which can be taken from LOCUSR, if this is NULL, use the default one - * If ENCRYPT is true, use REMUSER (or ask if it is NULL) to encrypt the + * If ENCRYPTFLAG is true, use REMUSER (or ask if it is NULL) to encrypt the * signed data for these users. * If OUTFILE is not NULL; this file is used for output and the function * does not ask for overwrite permission; output is then always @@ -370,7 +599,7 @@ write_one_signature( IOBUF out, PKT_secret_key *sk, int old_style, */ int sign_file( STRLIST filenames, int detached, STRLIST locusr, - int encrypt, STRLIST remusr, const char *outfile ) + int encryptflag, STRLIST remusr, const char *outfile ) { const char *fname; armor_filter_context_t afx; @@ -380,16 +609,12 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, encrypt_filter_context_t efx; IOBUF inp = NULL, out = NULL; PACKET pkt; - PKT_plaintext *pt = NULL; - u32 filesize; int rc = 0; PK_LIST pk_list = NULL; SK_LIST sk_list = NULL; SK_LIST sk_rover = NULL; int multifile = 0; - int old_style = opt.rfc1991; - int compr_algo = -1; /* unknown */ - + u32 timestamp=0,duration=0; memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); @@ -405,20 +630,25 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, else fname = NULL; - if( fname && filenames->next && (!detached || encrypt) ) + if( fname && filenames->next && (!detached || encryptflag) ) log_bug("multiple files can only be detached signed"); - if( (rc=build_sk_list( locusr, &sk_list, 1, GCRY_PK_USAGE_SIGN )) ) - goto leave; - if( !old_style ) - old_style = only_old_style( sk_list ); + if(opt.ask_sig_expire && !opt.force_v3_sigs && !opt.batch && !opt.rfc1991) + duration=ask_expire_interval(1); - if( encrypt ) { - if( (rc=build_pk_list( remusr, &pk_list, GCRY_PK_USAGE_ENCR )) ) - goto leave; - if( !old_style ) - compr_algo = select_algo_from_prefs( pk_list, PREFTYPE_COMPR ); - } + if( (rc=build_sk_list( locusr, &sk_list, 1, PUBKEY_USAGE_SIG )) ) + goto leave; + + if(opt.pgp2 && !only_old_style(sk_list)) + { + log_info(_("you can only detach-sign with PGP 2.x style keys " + "while in --pgp2 mode\n")); + log_info(_("this message may not be usable by PGP 2.x\n")); + opt.pgp2=0; + } + + if(encryptflag && (rc=build_pk_list( remusr, &pk_list, PUBKEY_USAGE_ENC ))) + goto leave; /* prepare iobufs */ if( multifile ) /* have list of filenames */ @@ -426,14 +656,14 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, else if( !(inp = iobuf_open(fname)) ) { log_error("can't open %s: %s\n", fname? fname: "[stdin]", strerror(errno) ); - rc = GPGERR_OPEN_FILE; + rc = G10ERR_OPEN_FILE; goto leave; } if( outfile ) { if( !(out = iobuf_create( outfile )) ) { log_error(_("can't create %s: %s\n"), outfile, strerror(errno) ); - rc = GPGERR_CREATE_FILE; + rc = G10ERR_CREATE_FILE; goto leave; } else if( opt.verbose ) @@ -445,92 +675,108 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, /* prepare to calculate the MD over the input */ if( opt.textmode && !outfile ) iobuf_push_filter( inp, text_filter, &tfx ); - if( !(mfx.md = gcry_md_open(0, 0))) - BUG(); + mfx.md = md_open(0, 0); + + /* If we're encrypting and signing, it is reasonable to pick the + hash algorithm to use out of the recepient key prefs. */ + if(pk_list) + { + if(opt.def_digest_algo) + { + if(!opt.expert && + select_algo_from_prefs(pk_list,PREFTYPE_HASH, + opt.def_digest_algo, + NULL)!=opt.def_digest_algo) + log_info(_("forcing digest algorithm %s (%d) " + "violates recipient preferences\n"), + digest_algo_to_string(opt.def_digest_algo), + opt.def_digest_algo); + } + else + { + int hashlen=0,algo; + + /* Of course, if the recipient asks for something + unreasonable (like a non-160-bit hash for DSA, for + example), then don't do it. Check all sk's - if any + are DSA, then the hash must be 160-bit. In the future + this can be more complex with different hashes for each + sk, but so long as there is only one signing algorithm + with hash restrictions, this is ok. -dms */ + + for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) + if(sk_rover->sk->pubkey_algo==PUBKEY_ALGO_DSA) + hashlen=20; + + if((algo= + select_algo_from_prefs(pk_list,PREFTYPE_HASH,-1,&hashlen))>0) + recipient_digest_algo=algo; + } + } for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; - gcry_md_enable(mfx.md, hash_for(sk->pubkey_algo, sk->version )); + md_enable(mfx.md, hash_for(sk->pubkey_algo, sk->version )); } if( !multifile ) iobuf_push_filter( inp, md_filter, &mfx ); - if( detached && !encrypt && !opt.rfc1991 ) + if( detached && !encryptflag && !opt.rfc1991 ) afx.what = 2; if( opt.armor && !outfile ) iobuf_push_filter( out, armor_filter, &afx ); - #ifdef ENABLE_COMMENT_PACKETS - else { - write_comment( out, "#created by GNUPG v" VERSION " (" - PRINTABLE_OS_NAME ")"); - if( opt.comment_string ) - write_comment( out, opt.comment_string ); - } - #endif - if( encrypt ) { + + if( encryptflag ) { efx.pk_list = pk_list; /* fixme: set efx.cfx.datalen if known */ iobuf_push_filter( out, encrypt_filter, &efx ); } - /* Select a compress algorithm */ - if( opt.compress && !outfile && ( !detached || opt.compress_sigs) ) { - if( !compr_algo ) - ; /* don't use compression */ - else { - if( old_style - || compr_algo == 1 - || (compr_algo == -1 && !encrypt) ) - zfx.algo = 1; /* use the non optional algorithm */ + if( opt.compress && !outfile && ( !detached || opt.compress_sigs) ) + { + int compr_algo=opt.def_compress_algo; + + /* If not forced by user */ + if(compr_algo==-1) + { + /* If we're not encrypting, then select_algo_from_prefs + will fail and we'll end up with the default. If we are + encrypting, select_algo_from_prefs cannot fail since + there is an assumed preference for uncompressed data. + Still, if it did fail, we'll also end up with the + default. */ + + if((compr_algo= + select_algo_from_prefs(pk_list,PREFTYPE_ZIP,-1,NULL))==-1) + compr_algo=DEFAULT_COMPRESS_ALGO; + } + else if(!opt.expert && + select_algo_from_prefs(pk_list,PREFTYPE_ZIP, + compr_algo,NULL)!=compr_algo) + log_info(_("forcing compression algorithm %s (%d) " + "violates recipient preferences\n"), + compress_algo_to_string(compr_algo),compr_algo); + + /* algo 0 means no compression */ + if( compr_algo ) + { + zfx.algo = compr_algo; iobuf_push_filter( out, compress_filter, &zfx ); - } - } + } + } - /* Build one-pass signature packets when needed */ - if( !detached && !old_style ) { - int skcount=0; - /* loop over the secret certificates and build headers - * The specs now say that the data should be bracket by - * the onepass-sig and signature-packet; so we must build it - * here in reverse order */ - for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) - skcount++; - for( ; skcount; skcount-- ) { - PKT_secret_key *sk; - PKT_onepass_sig *ops; - int i = 0; - - for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) - if( ++i == skcount ) - break; - - sk = sk_rover->sk; - ops = gcry_xcalloc( 1, sizeof *ops ); - ops->sig_class = opt.textmode && !outfile ? 0x01 : 0x00; - ops->digest_algo = hash_for(sk->pubkey_algo, sk->version); - ops->pubkey_algo = sk->pubkey_algo; - keyid_from_sk( sk, ops->keyid ); - ops->last = skcount == 1; - - init_packet(&pkt); - pkt.pkttype = PKT_ONEPASS_SIG; - pkt.pkt.onepass_sig = ops; - rc = build_packet( out, &pkt ); - free_packet( &pkt ); - if( rc ) { - log_error("build onepass_sig packet failed: %s\n", - gpg_errstr(rc)); - goto leave; - } - } + /* Write the one-pass signature packets if needed */ + if (!detached && !opt.rfc1991) { + rc = write_onepass_sig_packets (sk_list, out, + opt.textmode && !outfile ? 0x01:0x00); + if (rc) + goto leave; } /* setup the inner packet */ if( detached ) { - /* this is pretty much the same for old and new PGP. So no - * need to cope with different packet ordering */ if( multifile ) { STRLIST sl; @@ -542,7 +788,7 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, if( !(inp = iobuf_open(sl->d)) ) { log_error(_("can't open %s: %s\n"), sl->d, strerror(errno) ); - rc = GPGERR_OPEN_FILE; + rc = G10ERR_OPEN_FILE; goto leave; } if( opt.verbose ) @@ -562,92 +808,35 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, } } else { - /* get the filename to be stored into the literal datapacket */ - if (!opt.no_literal) { - if( fname || opt.set_filename ) { - char *s = make_basename( opt.set_filename ? - opt.set_filename : fname ); - pt = gcry_xmalloc( sizeof *pt + strlen(s) - 1 ); - pt->namelen = strlen(s); - memcpy(pt->name, s, pt->namelen ); - gcry_free(s); - } - else { /* no filename */ - pt = gcry_xmalloc( sizeof *pt - 1 ); - pt->namelen = 0; - } - } - - if( fname ) { - if( !(filesize = iobuf_get_filelength(inp)) ) - log_info(_("WARNING: `%s' is an empty file\n"), fname ); - /* we can't yet encode the length of very large files, - * so we switch to partial length encoding in this case */ - if ( filesize >= IOBUF_FILELENGTH_LIMIT ) - filesize = 0; - - /* Because the text_filter modifies the length of the - * data, it is not possible to know the used length - * without a double read of the file - to avoid that - * we simple use partial length packets. - */ - if( opt.textmode && !outfile ) - filesize = 0; - } - else - filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */ - - if (!opt.no_literal) { - pt->timestamp = make_timestamp(); - pt->mode = opt.textmode && !outfile ? 't':'b'; - pt->len = filesize; - pt->new_ctb = !pt->len && !opt.rfc1991; - pt->buf = inp; - pkt.pkttype = PKT_PLAINTEXT; - pkt.pkt.plaintext = pt; - /*cfx.datalen = filesize? calc_packet_length( &pkt ) : 0;*/ - if( (rc = build_packet( out, &pkt )) ) - log_error("build_packet(PLAINTEXT) failed: %s\n", - gpg_errstr(rc) ); - pt->buf = NULL; - } - else { - byte copy_buffer[4096]; - int bytes_copied; - while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1) - if (iobuf_write(out, copy_buffer, bytes_copied) == -1) { - rc = GPGERR_WRITE_FILE; - log_error("copying input to output failed: %s\n", - gpg_errstr(rc)); - break; - } - memset(copy_buffer, 0, 4096); /* burn buffer */ - } + rc = write_plaintext_packet (out, inp, fname, + opt.textmode && !outfile ? 't':'b'); } /* catch errors from above */ if (rc) goto leave; - /* write all the signature packets */ - for( sk_rover = sk_list; sk_rover && !rc ; sk_rover = sk_rover->next ) { - rc = write_one_signature( out, sk_rover->sk, - old_style, outfile, mfx.md, + /* write the signatures */ + rc = write_signature_packets (sk_list, out, mfx.md, opt.textmode && !outfile? 0x01 : 0x00, - detached ? 'D':'S' ); - } + timestamp, duration, detached ? 'D':'S'); + if( rc ) + goto leave; leave: if( rc ) iobuf_cancel(out); - else + else { iobuf_close(out); + if (encryptflag) + write_status( STATUS_END_ENCRYPTION ); + } iobuf_close(inp); - gcry_md_close( mfx.md ); + md_close( mfx.md ); release_sk_list( sk_list ); release_pk_list( pk_list ); - /* FIXME: Did we release the efx.cfx.dek ? */ + recipient_digest_algo=0; return rc; } @@ -660,7 +849,7 @@ int clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) { armor_filter_context_t afx; - GCRY_MD_HD textmd = NULL; + MD_HANDLE textmd = NULL; IOBUF inp = NULL, out = NULL; PACKET pkt; int rc = 0; @@ -668,27 +857,40 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) SK_LIST sk_rover = NULL; int old_style = opt.rfc1991; int only_md5 = 0; + u32 timestamp=0,duration=0; memset( &afx, 0, sizeof afx); init_packet( &pkt ); - if( (rc=build_sk_list( locusr, &sk_list, 1, GCRY_PK_USAGE_SIGN )) ) + if(opt.ask_sig_expire && !opt.force_v3_sigs && !opt.batch && !opt.rfc1991) + duration=ask_expire_interval(1); + + if( (rc=build_sk_list( locusr, &sk_list, 1, PUBKEY_USAGE_SIG )) ) goto leave; - if( !old_style ) + + if( !old_style && !duration ) old_style = only_old_style( sk_list ); + if(!old_style && opt.pgp2) + { + log_info(_("you can only clearsign with PGP 2.x style keys " + "while in --pgp2 mode\n")); + log_info(_("this message may not be usable by PGP 2.x\n")); + opt.pgp2=0; + } + /* prepare iobufs */ if( !(inp = iobuf_open(fname)) ) { log_error("can't open %s: %s\n", fname? fname: "[stdin]", strerror(errno) ); - rc = GPGERR_OPEN_FILE; + rc = G10ERR_OPEN_FILE; goto leave; } if( outfile ) { if( !(out = iobuf_create( outfile )) ) { log_error(_("can't create %s: %s\n"), outfile, strerror(errno) ); - rc = GPGERR_CREATE_FILE; + rc = G10ERR_CREATE_FILE; goto leave; } else if( opt.verbose ) @@ -701,7 +903,7 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; - if( hash_for(sk->pubkey_algo, sk->version) == GCRY_MD_MD5 ) + if( hash_for(sk->pubkey_algo, sk->version) == DIGEST_ALGO_MD5 ) only_md5 = 1; else { only_md5 = 0; @@ -709,9 +911,8 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) } } - if( old_style && only_md5 ) - iobuf_writestr(out, "\n" ); - else { + if( !(old_style && only_md5) ) { + const char *s; int any = 0; byte hashs_seen[256]; @@ -722,33 +923,32 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) int i = hash_for(sk->pubkey_algo, sk->version); if( !hashs_seen[ i & 0xff ] ) { - if( !openpgp_md_test_algo( i ) ) { + s = digest_algo_to_string( i ); + if( s ) { hashs_seen[ i & 0xff ] = 1; if( any ) iobuf_put(out, ',' ); - iobuf_writestr(out, gcry_md_algo_name( i ) ); + iobuf_writestr(out, s ); any = 1; } } } assert(any); - iobuf_writestr(out, "\n" ); - if( opt.not_dash_escaped ) - iobuf_writestr( out, - "NotDashEscaped: You need GnuPG to verify this message\n" ); - iobuf_writestr(out, "\n" ); + iobuf_writestr(out, LF ); } + if( opt.not_dash_escaped ) + iobuf_writestr( out, + "NotDashEscaped: You need GnuPG to verify this message" LF ); + iobuf_writestr(out, LF ); - textmd = gcry_md_open(0, 0); - if( !textmd ) - BUG(); + textmd = md_open(0, 0); for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; - gcry_md_enable(textmd, hash_for(sk->pubkey_algo, sk->version)); + md_enable(textmd, hash_for(sk->pubkey_algo, sk->version)); } if ( DBG_HASHING ) - gcry_md_start_debug( textmd, "clearsign" ); + md_start_debug( textmd, "clearsign" ); copy_clearsig_text( out, inp, textmd, !opt.not_dash_escaped, opt.escape_from, old_style ); /* fixme: check for read errors */ @@ -757,13 +957,11 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) afx.what = 2; iobuf_push_filter( out, armor_filter, &afx ); - /* write all the signature packets */ - for( sk_rover = sk_list; sk_rover && !rc ; sk_rover = sk_rover->next ) { - rc = write_one_signature( out, sk_rover->sk, - old_style, outfile, textmd, - 0x01, - 'C' ); - } + /* write the signatures */ + rc = write_signature_packets (sk_list, out, textmd, 0x01, + timestamp, duration, 'C'); + if( rc ) + goto leave; leave: if( rc ) @@ -771,68 +969,249 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) else iobuf_close(out); iobuf_close(inp); - gcry_md_close( textmd ); + md_close( textmd ); release_sk_list( sk_list ); return rc; } +/* + * Sign and conventionally encrypt the given file. + * FIXME: Far too much code is duplicated - revamp the whole file. + */ +int +sign_symencrypt_file (const char *fname, STRLIST locusr) +{ + armor_filter_context_t afx; + compress_filter_context_t zfx; + md_filter_context_t mfx; + text_filter_context_t tfx; + cipher_filter_context_t cfx; + IOBUF inp = NULL, out = NULL; + PACKET pkt; + STRING2KEY *s2k = NULL; + int rc = 0; + SK_LIST sk_list = NULL; + SK_LIST sk_rover = NULL; + int algo; + u32 timestamp=0,duration=0; + + memset( &afx, 0, sizeof afx); + memset( &zfx, 0, sizeof zfx); + memset( &mfx, 0, sizeof mfx); + memset( &tfx, 0, sizeof tfx); + memset( &cfx, 0, sizeof cfx); + init_packet( &pkt ); + + if(opt.ask_sig_expire && !opt.force_v3_sigs && !opt.batch && !opt.rfc1991) + duration=ask_expire_interval(1); + + rc = build_sk_list (locusr, &sk_list, 1, PUBKEY_USAGE_SIG); + if (rc) + goto leave; + + /* prepare iobufs */ + inp = iobuf_open(fname); + if( !inp ) { + log_error("can't open %s: %s\n", fname? fname: "[stdin]", + strerror(errno) ); + rc = G10ERR_OPEN_FILE; + goto leave; + } + + /* prepare key */ + s2k = m_alloc_clear( sizeof *s2k ); + s2k->mode = opt.rfc1991? 0:opt.s2k_mode; + s2k->hash_algo = opt.def_digest_algo ? opt.def_digest_algo + : opt.s2k_digest_algo; + + algo = opt.def_cipher_algo ? opt.def_cipher_algo : opt.s2k_cipher_algo; + if (!opt.quiet || !opt.batch) + log_info (_("%s encryption will be used\n"), + cipher_algo_to_string(algo) ); + cfx.dek = passphrase_to_dek( NULL, 0, algo, s2k, 2, NULL ); + + if (!cfx.dek || !cfx.dek->keylen) { + rc = G10ERR_PASSPHRASE; + log_error(_("error creating passphrase: %s\n"), g10_errstr(rc) ); + goto leave; + } + + /* now create the outfile */ + rc = open_outfile (fname, opt.armor? 1:0, &out); + if (rc) + goto leave; + + /* prepare to calculate the MD over the input */ + if (opt.textmode) + iobuf_push_filter (inp, text_filter, &tfx); + mfx.md = md_open(0, 0); + + for (sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next) { + PKT_secret_key *sk = sk_rover->sk; + md_enable (mfx.md, hash_for (sk->pubkey_algo, sk->version )); + } + + iobuf_push_filter (inp, md_filter, &mfx); + + /* Push armor output filter */ + if (opt.armor) + iobuf_push_filter (out, armor_filter, &afx); + + /* Write the symmetric key packet */ + /*(current filters: armor)*/ + if (!opt.rfc1991) { + PKT_symkey_enc *enc = m_alloc_clear( sizeof *enc ); + enc->version = 4; + enc->cipher_algo = cfx.dek->algo; + enc->s2k = *s2k; + pkt.pkttype = PKT_SYMKEY_ENC; + pkt.pkt.symkey_enc = enc; + if( (rc = build_packet( out, &pkt )) ) + log_error("build symkey packet failed: %s\n", g10_errstr(rc) ); + m_free(enc); + } + + /* Push the encryption filter */ + iobuf_push_filter( out, cipher_filter, &cfx ); + + /* Push the Zip filter */ + if (opt.compress) + { + int compr_algo=opt.def_compress_algo; + + /* Default */ + if(compr_algo==-1) + compr_algo=DEFAULT_COMPRESS_ALGO; + + if (compr_algo) + { + zfx.algo = compr_algo; + iobuf_push_filter( out, compress_filter, &zfx ); + } + } + + /* Write the one-pass signature packets */ + /*(current filters: zip - encrypt - armor)*/ + if (!opt.rfc1991) { + rc = write_onepass_sig_packets (sk_list, out, + opt.textmode? 0x01:0x00); + if (rc) + goto leave; + } + + /* Pipe data through all filters; i.e. write the signed stuff */ + /*(current filters: zip - encrypt - armor)*/ + rc = write_plaintext_packet (out, inp, fname, opt.textmode ? 't':'b'); + if (rc) + goto leave; + + /* Write the signatures */ + /*(current filters: zip - encrypt - armor)*/ + rc = write_signature_packets (sk_list, out, mfx.md, + opt.textmode? 0x01 : 0x00, + timestamp, duration, 'S'); + if( rc ) + goto leave; + + + leave: + if( rc ) + iobuf_cancel(out); + else { + iobuf_close(out); + write_status( STATUS_END_ENCRYPTION ); + } + iobuf_close(inp); + release_sk_list( sk_list ); + md_close( mfx.md ); + m_free(cfx.dek); + m_free(s2k); + return rc; +} + /**************** - * Create a signature packet for the given public key certificate - * and the user id and return it in ret_sig. User signature class SIGCLASS - * user-id is not used (and may be NULL if sigclass is 0x20) - * If digest_algo is 0 the function selects an appropriate one. - */ + * Create a signature packet for the given public key certificate and + * the user id and return it in ret_sig. User signature class SIGCLASS + * user-id is not used (and may be NULL if sigclass is 0x20) If + * DIGEST_ALGO is 0 the function selects an appropriate one. + * SIGVERSION gives the minimal required signature packet version; + * this is needed so that special properties like local sign are not + * applied (actually: dropped) when a v3 key is used. TIMESTAMP is + * the timestamp to use for the signature. 0 means "now" */ int make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk, PKT_user_id *uid, PKT_public_key *subpk, PKT_secret_key *sk, int sigclass, int digest_algo, + int sigversion, u32 timestamp, u32 duration, int (*mksubpkt)(PKT_signature *, void *), void *opaque ) { PKT_signature *sig; int rc=0; - GCRY_MD_HD md; + MD_HANDLE md; - assert( (sigclass >= 0x10 && sigclass <= 0x13) + assert( (sigclass >= 0x10 && sigclass <= 0x13) || sigclass == 0x1F || sigclass == 0x20 || sigclass == 0x18 || sigclass == 0x30 || sigclass == 0x28 ); - if( !digest_algo ) { - switch( sk->pubkey_algo ) { - case GCRY_PK_DSA: digest_algo = GCRY_MD_SHA1; break; - case GCRY_PK_RSA_S: - case GCRY_PK_RSA: digest_algo = GCRY_MD_MD5; break; - default: digest_algo = GCRY_MD_RMD160; break; - } - } - if( !(md = gcry_md_open( digest_algo, 0 ))) - BUG(); + + if (opt.force_v4_certs) + sigversion = 4; + + if (sigversion < sk->version) + sigversion = sk->version; + + /* If you are making a signature on a v4 key using your v3 key, it + doesn't make sense to generate a v3 sig. After all, no v3-only + PGP implementation could understand the v4 key in the first + place. */ + if (sigversion < pk->version) + sigversion = pk->version; + + if( !digest_algo ) + { + /* Basically, this means use SHA1 always unless it's a v3 RSA + key making a v3 cert (use MD5), or the user specified + something (use whatever they said). They still must use a + 160-bit hash with DSA, or the signature will fail. Note + that this still allows the caller of make_keysig_packet to + override the user setting if it must. */ + + if(opt.cert_digest_algo) + digest_algo=opt.cert_digest_algo; + else if((sk->pubkey_algo==PUBKEY_ALGO_RSA || + sk->pubkey_algo==PUBKEY_ALGO_RSA_S) && + pk->version<4 && sigversion < 4) + digest_algo = DIGEST_ALGO_MD5; + else + digest_algo = DIGEST_ALGO_SHA1; + } + + md = md_open( digest_algo, 0 ); /* hash the public key certificate and the user id */ hash_public_key( md, pk ); if( sigclass == 0x18 || sigclass == 0x28 ) { /* subkey binding/revocation*/ hash_public_key( md, subpk ); } - else if( sigclass != 0x20 ) { - if( sk->version >=4 ) { - byte buf[5]; - buf[0] = 0xb4; /* indicates a userid packet */ - buf[1] = uid->len >> 24; /* always use 4 length bytes */ - buf[2] = uid->len >> 16; - buf[3] = uid->len >> 8; - buf[4] = uid->len; - gcry_md_write( md, buf, 5 ); - } - gcry_md_write( md, uid->name, uid->len ); + else if( sigclass != 0x1F && sigclass != 0x20 ) { + hash_uid (md, sigversion, uid); } /* and make the signature packet */ - sig = gcry_xcalloc( 1, sizeof *sig ); - sig->version = sk->version; + sig = m_alloc_clear( sizeof *sig ); + sig->version = sigversion; + sig->flags.exportable=1; + sig->flags.revocable=1; keyid_from_sk( sk, sig->keyid ); sig->pubkey_algo = sk->pubkey_algo; sig->digest_algo = digest_algo; - sig->timestamp = make_timestamp(); + if(timestamp) + sig->timestamp=timestamp; + else + sig->timestamp=make_timestamp(); + if(duration) + sig->expiredate=sig->timestamp+duration; sig->sig_class = sigclass; if( sig->version >= 4 ) build_sig_subpkt_from_sig( sig ); @@ -841,49 +1220,14 @@ make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk, rc = (*mksubpkt)( sig, opaque ); if( !rc ) { - mk_notation_and_policy( sig ); - if( sig->version >= 4 ) - gcry_md_putc( md, sig->version ); - gcry_md_putc( md, sig->sig_class ); - if( sig->version < 4 ) { - u32 a = sig->timestamp; - gcry_md_putc( md, (a >> 24) & 0xff ); - gcry_md_putc( md, (a >> 16) & 0xff ); - gcry_md_putc( md, (a >> 8) & 0xff ); - gcry_md_putc( md, a & 0xff ); - } - else { - byte buf[6]; - size_t n; - - gcry_md_putc( md, sig->pubkey_algo ); - gcry_md_putc( md, sig->digest_algo ); - if( sig->hashed_data ) { - n = (sig->hashed_data[0] << 8) | sig->hashed_data[1]; - gcry_md_write( md, sig->hashed_data, n+2 ); - n += 6; - } - else { - gcry_md_putc( md, 0 ); /* always hash the length of the subpacket*/ - gcry_md_putc( md, 0 ); - n = 6; - } - /* add some magic */ - buf[0] = sig->version; - buf[1] = 0xff; - buf[2] = n >> 24; /* hmmm, n is only 16 bit, so this is always 0 */ - buf[3] = n >> 16; - buf[4] = n >> 8; - buf[5] = n; - gcry_md_write( md, buf, 6 ); - - } - gcry_md_final(md); + mk_notation_and_policy( sig, pk, sk ); + hash_sigversion_to_magic (md, sig); + md_final(md); rc = complete_sig( sig, sk, md ); } - gcry_md_close( md ); + md_close( md ); if( rc ) free_seckey_enc( sig ); else @@ -892,3 +1236,63 @@ make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk, } + +/**************** + * Create a new signature packet based on an existing one. + * Only user ID signatures are supported for now. + * TODO: Merge this with make_keysig_packet. + */ +int +update_keysig_packet( PKT_signature **ret_sig, + PKT_signature *orig_sig, + PKT_public_key *pk, + PKT_user_id *uid, + PKT_secret_key *sk, + int (*mksubpkt)(PKT_signature *, void *), + void *opaque + ) +{ + PKT_signature *sig; + int rc=0; + MD_HANDLE md; + + if (!orig_sig || !pk || !uid || !sk) + return G10ERR_GENERAL; + if (orig_sig->sig_class < 0x10 || orig_sig->sig_class > 0x13 ) + return G10ERR_GENERAL; + + md = md_open( orig_sig->digest_algo, 0 ); + + /* hash the public key certificate and the user id */ + hash_public_key( md, pk ); + hash_uid (md, orig_sig->version, uid); + + /* create a new signature packet */ + sig = copy_signature (NULL, orig_sig); + if ( sig->version >= 4 && mksubpkt) + rc = (*mksubpkt)(sig, opaque); + + /* we increase the timestamp by one second so that a future import + of this key will replace the existing one. We also make sure that + we don't create a timestamp in the future */ + sig->timestamp++; + while (sig->timestamp >= make_timestamp()) + sleep (1); + /* put the updated timestamp back into the data */ + if( sig->version >= 4 ) + build_sig_subpkt_from_sig( sig ); + + if (!rc) { + hash_sigversion_to_magic (md, sig); + md_final(md); + + rc = complete_sig( sig, sk, md ); + } + + md_close (md); + if( rc ) + free_seckey_enc (sig); + else + *ret_sig = sig; + return rc; +} diff --git a/g10/signal.c b/g10/signal.c index f61b0a8f8..0517ba648 100644 --- a/g10/signal.c +++ b/g10/signal.c @@ -1,5 +1,5 @@ /* signal.c - signal handling - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -27,9 +27,9 @@ #include #include -#include #include "options.h" #include "errors.h" +#include "memory.h" #include "util.h" #include "main.h" #include "ttyio.h" @@ -38,6 +38,36 @@ static volatile int caught_fatal_sig = 0; static volatile int caught_sigusr1 = 0; +static void +init_one_signal (int sig, RETSIGTYPE (*handler)(int), int check_ign ) +{ + #ifndef HAVE_DOSISH_SYSTEM + #ifdef HAVE_SIGACTION + struct sigaction oact, nact; + + if (check_ign) { + /* we don't want to change an IGN handler */ + sigaction (sig, NULL, &oact ); + if (oact.sa_handler == SIG_IGN ) + return; + } + + nact.sa_handler = handler; + sigemptyset (&nact.sa_mask); + nact.sa_flags = 0; + sigaction ( sig, &nact, NULL); + #else + RETSIGTYPE (*ohandler)(int); + + ohandler = signal (sig, handler); + if (check_ign && ohandler == SIG_IGN) { + /* Change it back if it was already set to IGN */ + signal (sig, SIG_IGN); + } + #endif + #endif /*!HAVE_DOSISH_SYSTEM*/ +} + static const char * get_signal_name( int signum ) { @@ -58,23 +88,20 @@ got_fatal_signal( int sig ) raise( sig ); caught_fatal_sig = 1; - gcry_control( GCRYCTL_TERM_SECMEM ); + secmem_term(); /* better don't transtale these messages */ write(2, "\n", 1 ); s = log_get_name(); if( s ) write(2, s, strlen(s) ); write(2, ": ", 2 ); s = get_signal_name(sig); write(2, s, strlen(s) ); - write(2, " caught ... exiting\n", 21 ); + write(2, " caught ... exiting\n", 20 ); - #ifndef HAVE_DOSISH_SYSTEM - { /* reset action to default action and raise signal again */ - struct sigaction nact; - nact.sa_handler = SIG_DFL; - sigemptyset( &nact.sa_mask ); - nact.sa_flags = 0; - sigaction( sig, &nact, NULL); - } - #endif + /* reset action to default action and raise signal again */ + init_one_signal (sig, SIG_DFL, 0); + remove_lockfiles (); +#ifdef __riscos__ + close_fds (); +#endif /* __riscos__ */ raise( sig ); } @@ -85,37 +112,18 @@ got_usr_signal( int sig ) caught_sigusr1 = 1; } -#ifndef HAVE_DOSISH_SYSTEM -static void -do_sigaction( int sig, struct sigaction *nact ) -{ - struct sigaction oact; - - sigaction( sig, NULL, &oact ); - if( oact.sa_handler != SIG_IGN ) - sigaction( sig, nact, NULL); -} -#endif void init_signals() { #ifndef HAVE_DOSISH_SYSTEM - struct sigaction nact; - - nact.sa_handler = got_fatal_signal; - sigemptyset( &nact.sa_mask ); - nact.sa_flags = 0; - - do_sigaction( SIGINT, &nact ); - do_sigaction( SIGHUP, &nact ); - do_sigaction( SIGTERM, &nact ); - do_sigaction( SIGQUIT, &nact ); - do_sigaction( SIGSEGV, &nact ); - nact.sa_handler = got_usr_signal; - sigaction( SIGUSR1, &nact, NULL ); - nact.sa_handler = SIG_IGN; - sigaction( SIGPIPE, &nact, NULL ); + init_one_signal (SIGINT, got_fatal_signal, 1 ); + init_one_signal (SIGHUP, got_fatal_signal, 1 ); + init_one_signal (SIGTERM, got_fatal_signal, 1 ); + init_one_signal (SIGQUIT, got_fatal_signal, 1 ); + init_one_signal (SIGSEGV, got_fatal_signal, 1 ); + init_one_signal (SIGUSR1, got_usr_signal, 0 ); + init_one_signal (SIGPIPE, SIG_IGN, 0 ); #endif } @@ -124,6 +132,7 @@ void pause_on_sigusr( int which ) { #ifndef HAVE_DOSISH_SYSTEM + #ifdef HAVE_SIGPROCMASK sigset_t mask, oldmask; assert( which == 1 ); @@ -135,6 +144,14 @@ pause_on_sigusr( int which ) sigsuspend( &oldmask ); caught_sigusr1 = 0; sigprocmask( SIG_UNBLOCK, &mask, NULL ); + #else + assert (which == 1); + sighold (SIGUSR1); + while (!caught_sigusr1) + sigpause(SIGUSR1); + caught_sigusr1 = 0; + sigrelse(SIGUSR1); ???? + #endif /*!HAVE_SIGPROCMASK*/ #endif } @@ -142,12 +159,13 @@ pause_on_sigusr( int which ) static void do_block( int block ) { - #ifndef HAVE_DOSISH_SYSTEM + #ifndef HAVE_DOSISH_SYSTEM static int is_blocked; + #ifdef HAVE_SIGPROCMASK static sigset_t oldmask; if( block ) { - sigset_t newmask; + sigset_t newmask; if( is_blocked ) log_bug("signals are already blocked\n"); @@ -161,7 +179,28 @@ do_block( int block ) sigprocmask( SIG_SETMASK, &oldmask, NULL ); is_blocked = 0; } - #endif /*HAVE_DOSISH_SYSTEM*/ + #else /*!HAVE_SIGPROCMASK*/ + static void (*disposition[MAXSIG])(); + int sig; + + if( block ) { + if( is_blocked ) + log_bug("signals are already blocked\n"); + for (sig=1; sig < MAXSIG; sig++) { + disposition[sig] = sigset (sig, SIG_HOLD); + } + is_blocked = 1; + } + else { + if( !is_blocked ) + log_bug("signals are not blocked\n"); + for (sig=1; sig < MAXSIG; sig++) { + sigset (sig, disposition[sig]); + } + is_blocked = 0; + } + #endif /*!HAVE_SIGPROCMASK*/ + #endif /*HAVE_DOSISH_SYSTEM*/ } @@ -176,4 +215,3 @@ unblock_all_signals() { do_block(0); } - diff --git a/g10/skclist.c b/g10/skclist.c index bc325cd58..1f7a3919a 100644 --- a/g10/skclist.c +++ b/g10/skclist.c @@ -1,5 +1,5 @@ /* skclist.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,14 +25,14 @@ #include #include -#include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" +#include "memory.h" #include "util.h" #include "i18n.h" -#include "main.h" +#include "cipher.h" void @@ -43,14 +43,66 @@ release_sk_list( SK_LIST sk_list ) for( ; sk_list; sk_list = sk_rover ) { sk_rover = sk_list->next; free_secret_key( sk_list->sk ); - gcry_free( sk_list ); + m_free( sk_list ); } } +/* Check that we are only using keys which don't have + * the string "(insecure!)" or "not secure" or "do not use" + * in one of the user ids + */ +static int +is_insecure( PKT_secret_key *sk ) +{ + u32 keyid[2]; + KBNODE node = NULL, u; + int insecure = 0; + + keyid_from_sk( sk, keyid ); + node = get_pubkeyblock( keyid ); + for ( u = node; u; u = u->next ) { + if ( u->pkt->pkttype == PKT_USER_ID ) { + PKT_user_id *id = u->pkt->pkt.user_id; + if ( id->attrib_data ) + continue; /* skip attribute packets */ + if ( strstr( id->name, "(insecure!)" ) + || strstr( id->name, "not secure" ) + || strstr( id->name, "do not use" ) ) { + insecure = 1; + break; + } + } + } + release_kbnode( node ); + + return insecure; +} + +static int +key_present_in_sk_list(SK_LIST sk_list, PKT_secret_key *sk) +{ + for (; sk_list; sk_list = sk_list->next) { + if ( !cmp_secret_keys(sk_list->sk, sk) ) + return 0; + } + return -1; +} + +static int +is_duplicated_entry (STRLIST list, STRLIST item) +{ + for(; list && list != item; list = list->next) { + if ( !strcmp (list->d, item->d) ) + return 1; + } + return 0; +} + + int -build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, int unlock, - unsigned int use ) +build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, + int unlock, unsigned int use ) { SK_LIST sk_list = NULL; int rc; @@ -58,24 +110,28 @@ build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, int unlock, if( !locusr ) { /* use the default one */ PKT_secret_key *sk; - sk = gcry_xcalloc( 1, sizeof *sk ); + sk = m_alloc_clear( sizeof *sk ); sk->req_usage = use; - if( (rc = get_seckey_byname( NULL, sk, NULL, unlock, NULL )) ) { + if( (rc = get_seckey_byname( sk, NULL, unlock )) ) { free_secret_key( sk ); sk = NULL; - log_error("no default secret key: %s\n", gpg_errstr(rc) ); + log_error("no default secret key: %s\n", g10_errstr(rc) ); } - else if( !(rc=openpgp_pk_test_algo(sk->pubkey_algo, - sk->pubkey_usage)) ) { + else if( !(rc=check_pubkey_algo2(sk->pubkey_algo, use)) ) { SK_LIST r; - - if( sk->version == 4 && (sk->pubkey_usage & GCRY_PK_USAGE_SIGN ) - && sk->pubkey_algo == GCRY_PK_ELG_E ) { + + if( sk->version == 4 && (use & PUBKEY_USAGE_SIG) + && sk->pubkey_algo == PUBKEY_ALGO_ELGAMAL_E ) { log_info("this is a PGP generated " "ElGamal key which is NOT secure for signatures!\n"); free_secret_key( sk ); sk = NULL; } + else if( random_is_faked() && !is_insecure( sk ) ) { + log_info(_("key is not flagged as insecure - " + "can't use it with the faked RNG!\n")); + free_secret_key( sk ); sk = NULL; + } else { - r = gcry_xmalloc( sizeof *r ); + r = m_alloc( sizeof *r ); r->sk = sk; sk = NULL; r->next = sk_list; r->mark = 0; @@ -84,31 +140,54 @@ build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, int unlock, } else { free_secret_key( sk ); sk = NULL; - log_error("invalid default secret key: %s\n", gpg_errstr(rc) ); + log_error("invalid default secret key: %s\n", g10_errstr(rc) ); } } else { + STRLIST locusr_orig = locusr; for(; locusr; locusr = locusr->next ) { PKT_secret_key *sk; - - sk = gcry_xcalloc( 1, sizeof *sk ); + + rc = 0; + /* Do an early check agains duplicated entries. However this + * won't catch all duplicates because the user IDs may be + * specified in different ways. + */ + if ( is_duplicated_entry ( locusr_orig, locusr ) ) { + log_error(_("skipped `%s': duplicated\n"), locusr->d ); + continue; + } + sk = m_alloc_clear( sizeof *sk ); sk->req_usage = use; - if( (rc = get_seckey_byname( NULL, sk, locusr->d, unlock, NULL))) { + if( (rc = get_seckey_byname( sk, locusr->d, 0 )) ) { free_secret_key( sk ); sk = NULL; - log_error(_("skipped `%s': %s\n"), locusr->d, gpg_errstr(rc) ); + log_error(_("skipped `%s': %s\n"), locusr->d, g10_errstr(rc) ); } - else if( !(rc=openpgp_pk_test_algo(sk->pubkey_algo, - sk->pubkey_usage)) ) { + else if ( key_present_in_sk_list(sk_list, sk) == 0) { + free_secret_key(sk); sk = NULL; + log_info(_("skipped: secret key already present\n")); + } + else if ( unlock && (rc = check_secret_key( sk, 0 )) ) { + free_secret_key( sk ); sk = NULL; + log_error(_("skipped `%s': %s\n"), locusr->d, g10_errstr(rc) ); + } + else if( !(rc=check_pubkey_algo2(sk->pubkey_algo, use)) ) { SK_LIST r; - if( sk->version == 4 && (sk->pubkey_usage & GCRY_PK_USAGE_SIGN) - && sk->pubkey_algo == GCRY_PK_ELG_E ) { + + if( sk->version == 4 && (use & PUBKEY_USAGE_SIG) + && sk->pubkey_algo == PUBKEY_ALGO_ELGAMAL_E ) { log_info(_("skipped `%s': this is a PGP generated " "ElGamal key which is not secure for signatures!\n"), locusr->d ); free_secret_key( sk ); sk = NULL; } + else if( random_is_faked() && !is_insecure( sk ) ) { + log_info(_("key is not flagged as insecure - " + "can't use it with the faked RNG!\n")); + free_secret_key( sk ); sk = NULL; + } else { - r = gcry_xmalloc( sizeof *r ); + r = m_alloc( sizeof *r ); r->sk = sk; sk = NULL; r->next = sk_list; r->mark = 0; @@ -117,7 +196,7 @@ build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, int unlock, } else { free_secret_key( sk ); sk = NULL; - log_error("skipped `%s': %s\n", locusr->d, gpg_errstr(rc) ); + log_error("skipped `%s': %s\n", locusr->d, g10_errstr(rc) ); } } } @@ -125,7 +204,7 @@ build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, int unlock, if( !rc && !sk_list ) { log_error("no valid signators\n"); - rc = GPGERR_NO_USER_ID; + rc = G10ERR_NO_USER_ID; } if( rc ) diff --git a/g10/status.c b/g10/status.c index d336ae3b0..e0b126b78 100644 --- a/g10/status.c +++ b/g10/status.c @@ -1,5 +1,5 @@ /* status.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,11 +24,13 @@ #include #include #include +#include #ifdef USE_SHM_COPROCESSING #ifdef USE_CAPABILITIES #include #endif #ifdef HAVE_SYS_IPC_H + #include #include #endif #ifdef HAVE_SYS_SHM_H @@ -38,16 +40,20 @@ #include #endif #endif - -#include #include "util.h" #include "status.h" #include "ttyio.h" #include "options.h" #include "main.h" #include "i18n.h" +#include "cipher.h" /* for progress functions */ + +#define CONTROL_D ('D' - 'A' + 1) + + + +static FILE *statusfp; -static int fd = -1; #ifdef USE_SHM_COPROCESSING static int shm_id = -1; static volatile char *shm_area; @@ -68,26 +74,118 @@ progress_cb ( void *ctx, int c ) write_status_text ( STATUS_PROGRESS, buf ); } +static const char * +get_status_string ( int no ) +{ + const char *s; + + switch( no ) { + case STATUS_ENTER : s = "ENTER"; break; + case STATUS_LEAVE : s = "LEAVE"; break; + case STATUS_ABORT : s = "ABORT"; break; + case STATUS_GOODSIG: s = "GOODSIG"; break; + case STATUS_KEYEXPIRED: s = "KEYEXPIRED"; break; + case STATUS_KEYREVOKED: s = "KEYREVOKED"; break; + case STATUS_BADSIG : s = "BADSIG"; break; + case STATUS_ERRSIG : s = "ERRSIG"; break; + case STATUS_BADARMOR : s = "BADARMOR"; break; + case STATUS_RSA_OR_IDEA : s= "RSA_OR_IDEA"; break; + case STATUS_TRUST_UNDEFINED: s = "TRUST_UNDEFINED"; break; + case STATUS_TRUST_NEVER : s = "TRUST_NEVER"; break; + case STATUS_TRUST_MARGINAL : s = "TRUST_MARGINAL"; break; + case STATUS_TRUST_FULLY : s = "TRUST_FULLY"; break; + case STATUS_TRUST_ULTIMATE : s = "TRUST_ULTIMATE"; break; + case STATUS_GET_BOOL : s = "GET_BOOL"; break; + case STATUS_GET_LINE : s = "GET_LINE"; break; + case STATUS_GET_HIDDEN : s = "GET_HIDDEN"; break; + case STATUS_GOT_IT : s = "GOT_IT"; break; + case STATUS_SHM_INFO : s = "SHM_INFO"; break; + case STATUS_SHM_GET : s = "SHM_GET"; break; + case STATUS_SHM_GET_BOOL : s = "SHM_GET_BOOL"; break; + case STATUS_SHM_GET_HIDDEN : s = "SHM_GET_HIDDEN"; break; + case STATUS_NEED_PASSPHRASE: s = "NEED_PASSPHRASE"; break; + case STATUS_VALIDSIG : s = "VALIDSIG"; break; + case STATUS_SIG_ID : s = "SIG_ID"; break; + case STATUS_ENC_TO : s = "ENC_TO"; break; + case STATUS_NODATA : s = "NODATA"; break; + case STATUS_BAD_PASSPHRASE : s = "BAD_PASSPHRASE"; break; + case STATUS_NO_PUBKEY : s = "NO_PUBKEY"; break; + case STATUS_NO_SECKEY : s = "NO_SECKEY"; break; + case STATUS_NEED_PASSPHRASE_SYM: s = "NEED_PASSPHRASE_SYM"; break; + case STATUS_DECRYPTION_FAILED: s = "DECRYPTION_FAILED"; break; + case STATUS_DECRYPTION_OKAY: s = "DECRYPTION_OKAY"; break; + case STATUS_MISSING_PASSPHRASE: s = "MISSING_PASSPHRASE"; break; + case STATUS_GOOD_PASSPHRASE : s = "GOOD_PASSPHRASE"; break; + case STATUS_GOODMDC : s = "GOODMDC"; break; + case STATUS_BADMDC : s = "BADMDC"; break; + case STATUS_ERRMDC : s = "ERRMDC"; break; + case STATUS_IMPORTED : s = "IMPORTED"; break; + case STATUS_IMPORT_RES : s = "IMPORT_RES"; break; + case STATUS_FILE_START : s = "FILE_START"; break; + case STATUS_FILE_DONE : s = "FILE_DONE"; break; + case STATUS_FILE_ERROR : s = "FILE_ERROR"; break; + case STATUS_BEGIN_DECRYPTION:s = "BEGIN_DECRYPTION"; break; + case STATUS_END_DECRYPTION : s = "END_DECRYPTION"; break; + case STATUS_BEGIN_ENCRYPTION:s = "BEGIN_ENCRYPTION"; break; + case STATUS_END_ENCRYPTION : s = "END_ENCRYPTION"; break; + case STATUS_DELETE_PROBLEM : s = "DELETE_PROBLEM"; break; + case STATUS_PROGRESS : s = "PROGRESS"; break; + case STATUS_SIG_CREATED : s = "SIG_CREATED"; break; + case STATUS_SESSION_KEY : s = "SESSION_KEY"; break; + case STATUS_NOTATION_NAME : s = "NOTATION_NAME" ; break; + case STATUS_NOTATION_DATA : s = "NOTATION_DATA" ; break; + case STATUS_POLICY_URL : s = "POLICY_URL" ; break; + case STATUS_BEGIN_STREAM : s = "BEGIN_STREAM"; break; + case STATUS_END_STREAM : s = "END_STREAM"; break; + case STATUS_KEY_CREATED : s = "KEY_CREATED"; break; + case STATUS_USERID_HINT : s = "USERID_HINT"; break; + case STATUS_UNEXPECTED : s = "UNEXPECTED"; break; + case STATUS_INV_RECP : s = "INV_RECP"; break; + case STATUS_NO_RECP : s = "NO_RECP"; break; + case STATUS_ALREADY_SIGNED : s = "ALREADY_SIGNED"; break; + case STATUS_SIGEXPIRED : s = "SIGEXPIRED deprecated-use-keyexpired-instead"; break; + case STATUS_EXPSIG : s = "EXPSIG"; break; + case STATUS_EXPKEYSIG : s = "EXPKEYSIG"; break; + case STATUS_ATTRIBUTE : s = "ATTRIBUTE"; break; + default: s = "?"; break; + } + return s; +} void -set_status_fd ( int newfd ) +set_status_fd ( int fd ) { - fd = newfd; - if ( fd != -1 ) { - #warning fixme - progress functions - /* Has to be fixed in libgcrypt */ - #if 0 - register_primegen_progress ( progress_cb, "primegen" ); - register_pk_dsa_progress ( progress_cb, "pk_dsa" ); - register_pk_elg_progress ( progress_cb, "pk_elg" ); - #endif + static int last_fd = -1; + + if ( fd != -1 && last_fd == fd ) + return; + + if ( statusfp && statusfp != stdout && statusfp != stderr ) + fclose (statusfp); + statusfp = NULL; + if ( fd == -1 ) + return; + + if( fd == 1 ) + statusfp = stdout; + else if( fd == 2 ) + statusfp = stderr; + else + statusfp = fdopen( fd, "w" ); + if( !statusfp ) { + log_fatal("can't open fd %d for status output: %s\n", + fd, strerror(errno)); } + last_fd = fd; + register_primegen_progress ( progress_cb, "primegen" ); + register_pk_dsa_progress ( progress_cb, "pk_dsa" ); + register_pk_elg_progress ( progress_cb, "pk_elg" ); } int is_status_enabled() { - return fd != -1; + return !!statusfp; } void @@ -99,77 +197,97 @@ write_status ( int no ) void write_status_text ( int no, const char *text) { - const char *s; - - if( fd == -1 ) + if( !statusfp ) return; /* not enabled */ - switch( no ) { - case STATUS_ENTER : s = "ENTER\n"; break; - case STATUS_LEAVE : s = "LEAVE\n"; break; - case STATUS_ABORT : s = "ABORT\n"; break; - case STATUS_GOODSIG: s = "GOODSIG\n"; break; - case STATUS_SIGEXPIRED: s = "SIGEXPIRED\n"; break; - case STATUS_KEYREVOKED: s = "KEYREVOKED\n"; break; - case STATUS_BADSIG : s = "BADSIG\n"; break; - case STATUS_ERRSIG : s = "ERRSIG\n"; break; - case STATUS_BADARMOR : s = "BADARMOR\n"; break; - case STATUS_RSA_OR_IDEA : s= "RSA_OR_IDEA\n"; break; - case STATUS_TRUST_UNDEFINED: s = "TRUST_UNDEFINED\n"; break; - case STATUS_TRUST_NEVER : s = "TRUST_NEVER\n"; break; - case STATUS_TRUST_MARGINAL : s = "TRUST_MARGINAL\n"; break; - case STATUS_TRUST_FULLY : s = "TRUST_FULLY\n"; break; - case STATUS_TRUST_ULTIMATE : s = "TRUST_ULTIMATE\n"; break; - case STATUS_GET_BOOL : s = "GET_BOOL\n"; break; - case STATUS_GET_LINE : s = "GET_LINE\n"; break; - case STATUS_GET_HIDDEN : s = "GET_HIDDEN\n"; break; - case STATUS_GOT_IT : s = "GOT_IT\n"; break; - case STATUS_SHM_INFO : s = "SHM_INFO\n"; break; - case STATUS_SHM_GET : s = "SHM_GET\n"; break; - case STATUS_SHM_GET_BOOL : s = "SHM_GET_BOOL\n"; break; - case STATUS_SHM_GET_HIDDEN : s = "SHM_GET_HIDDEN\n"; break; - case STATUS_NEED_PASSPHRASE: s = "NEED_PASSPHRASE\n"; break; - case STATUS_VALIDSIG : s = "VALIDSIG\n"; break; - case STATUS_SIG_ID : s = "SIG_ID\n"; break; - case STATUS_ENC_TO : s = "ENC_TO\n"; break; - case STATUS_NODATA : s = "NODATA\n"; break; - case STATUS_BAD_PASSPHRASE : s = "BAD_PASSPHRASE\n"; break; - case STATUS_NO_PUBKEY : s = "NO_PUBKEY\n"; break; - case STATUS_NO_SECKEY : s = "NO_SECKEY\n"; break; - case STATUS_NEED_PASSPHRASE_SYM: s = "NEED_PASSPHRASE_SYM\n"; break; - case STATUS_DECRYPTION_FAILED: s = "DECRYPTION_FAILED\n"; break; - case STATUS_DECRYPTION_OKAY: s = "DECRYPTION_OKAY\n"; break; - case STATUS_MISSING_PASSPHRASE: s = "MISSING_PASSPHRASE\n"; break; - case STATUS_GOOD_PASSPHRASE : s = "GOOD_PASSPHRASE\n"; break; - case STATUS_GOODMDC : s = "GOODMDC\n"; break; - case STATUS_BADMDC : s = "BADMDC\n"; break; - case STATUS_ERRMDC : s = "ERRMDC\n"; break; - case STATUS_IMPORTED : s = "IMPORTED\n"; break; - case STATUS_IMPORT_RES : s = "IMPORT_RES\n"; break; - case STATUS_FILE_START : s = "FILE_START\n"; break; - case STATUS_FILE_DONE : s = "FILE_DONE\n"; break; - case STATUS_FILE_ERROR : s = "FILE_ERROR\n"; break; - case STATUS_BEGIN_DECRYPTION:s = "BEGIN_DECRYPTION\n"; break; - case STATUS_END_DECRYPTION : s = "END_DECRYPTION\n"; break; - case STATUS_BEGIN_ENCRYPTION:s = "BEGIN_ENCRYPTION\n"; break; - case STATUS_END_ENCRYPTION : s = "END_ENCRYPTION\n"; break; - case STATUS_DELETE_PROBLEM : s = "DELETE_PROBLEM\n"; break; - case STATUS_PROGRESS : s = "PROGRESS\n"; break; - case STATUS_SIG_CREATED : s = "SIG_CREATED\n"; break; - default: s = "?\n"; break; + fputs ( "[GNUPG:] ", statusfp ); + fputs ( get_status_string (no), statusfp ); + if( text ) { + putc ( ' ', statusfp ); + for (; *text; text++) { + if (*text == '\n') + fputs ( "\\n", statusfp ); + else if (*text == '\r') + fputs ( "\\r", statusfp ); + else + putc ( *(const byte *)text, statusfp ); + } + } + putc ('\n',statusfp); + fflush (statusfp); +} + + +/* + * Write a status line with a buffer using %XX escapes. If WRAP is > + * 0 wrap the line after this length. If STRING is not NULL it will + * be prepended to the buffer, no escaping is done for string. + * A wrap of -1 forces spaces not to be encoded as %20. + */ +void +write_status_text_and_buffer ( int no, const char *string, + const char *buffer, size_t len, int wrap ) +{ + const char *s, *text; + int esc, first; + int lower_limit = ' '; + size_t n, count, dowrap; + + if( !statusfp ) + return; /* not enabled */ + + if (wrap == -1) { + lower_limit--; + wrap = 0; } - write( fd, "[GNUPG:] ", 9 ); - if( text ) { - write( fd, s, strlen(s)-1 ); - write( fd, " ", 1 ); - write( fd, text, strlen(text) ); - write( fd, "\n", 1 ); - } - else - write( fd, s, strlen(s) ); + text = get_status_string (no); + count = dowrap = first = 1; + do { + if (dowrap) { + fprintf (statusfp, "[GNUPG:] %s ", text ); + count = dowrap = 0; + if (first && string) { + fputs (string, statusfp); + count += strlen (string); + } + first = 0; + } + for (esc=0, s=buffer, n=len; n && !esc; s++, n-- ) { + if ( *s == '%' || *(const byte*)s <= lower_limit + || *(const byte*)s == 127 ) + esc = 1; + if ( wrap && ++count > wrap ) { + dowrap=1; + break; + } + } + if (esc) { + s--; n++; + } + if (s != buffer) + fwrite (buffer, s-buffer, 1, statusfp ); + if ( esc ) { + fprintf (statusfp, "%%%02X", *(const byte*)s ); + s++; n--; + } + buffer = s; + len = n; + if ( dowrap && len ) + putc ( '\n', statusfp ); + } while ( len ); + + putc ('\n',statusfp); + fflush (statusfp); } +void +write_status_buffer ( int no, const char *buffer, size_t len, int wrap ) +{ + write_status_text_and_buffer (no, NULL, buffer, len, wrap); +} + + #ifdef USE_SHM_COPROCESSING @@ -333,7 +451,7 @@ do_shm_get( const char *keyword, int hidden, int bool ) if( bool ) return p[0]? "" : NULL; - string = hidden? gcry_xmalloc_secure( n+1 ) : gcry_xmalloc( n+1 ); + string = hidden? m_alloc_secure( n+1 ) : m_alloc( n+1 ); memcpy(string, p, n ); string[n] = 0; /* make sure it is a string */ if( hidden ) /* invalidate the memory */ @@ -344,6 +462,32 @@ do_shm_get( const char *keyword, int hidden, int bool ) #endif /* USE_SHM_COPROCESSING */ +static int +myread(int fd, void *buf, size_t count) +{ + int rc; + do { + rc = read( fd, buf, count ); + } while ( rc == -1 && errno == EINTR ); + if ( !rc && count ) { + static int eof_emmited=0; + if ( eof_emmited < 3 ) { + *(char*)buf = CONTROL_D; + rc = 1; + eof_emmited++; + } + else { /* Ctrl-D not caught - do something reasonable */ + #ifdef HAVE_DOSISH_SYSTEM + raise (SIGINT); /* nothing to hangup under DOS */ + #else + raise (SIGHUP); /* no more input data */ + #endif + } + } + return rc; +} + + /**************** * Request a string from the client over the command-fd @@ -362,15 +506,21 @@ do_get_from_fd( const char *keyword, int hidden, int bool ) if( i >= len-1 ) { char *save = string; len += 100; - string = hidden? gcry_xmalloc_secure ( len ) : gcry_malloc ( len ); + string = hidden? m_alloc_secure ( len ) : m_alloc ( len ); if( save ) memcpy(string, save, i ); else i=0; } /* Hmmm: why not use our read_line function here */ - if( read( opt.command_fd, string+i, 1) != 1 || string[i] == '\n' ) - break; + if( myread( opt.command_fd, string+i, 1) != 1 || string[i] == '\n' ) + break; + else if ( string[i] == CONTROL_D ) { + /* found ETX - cancel the line and return a sole ETX */ + string[0] = CONTROL_D; + i=1; + break; + } } string[i] = 0; @@ -396,6 +546,23 @@ cpr_enabled() return 0; } +char * +cpr_get_no_help( const char *keyword, const char *prompt ) +{ + char *p; + + if( opt.command_fd != -1 ) + return do_get_from_fd ( keyword, 0, 0 ); + #ifdef USE_SHM_COPROCESSING + if( opt.shm_coprocess ) + return do_shm_get( keyword, 0, 0 ); + #endif + for(;;) { + p = tty_get( prompt ); + return p; + } +} + char * cpr_get( const char *keyword, const char *prompt ) { @@ -410,7 +577,7 @@ cpr_get( const char *keyword, const char *prompt ) for(;;) { p = tty_get( prompt ); if( *p=='?' && !p[1] && !(keyword && !*keyword)) { - gcry_free(p); + m_free(p); display_online_help( keyword ); } else @@ -418,6 +585,7 @@ cpr_get( const char *keyword, const char *prompt ) } } + char * cpr_get_utf8( const char *keyword, const char *prompt ) { @@ -425,7 +593,7 @@ cpr_get_utf8( const char *keyword, const char *prompt ) p = cpr_get( keyword, prompt ); if( p ) { char *utf8 = native_to_utf8( p ); - gcry_free( p ); + m_free( p ); p = utf8; } return p; @@ -445,7 +613,7 @@ cpr_get_hidden( const char *keyword, const char *prompt ) for(;;) { p = tty_get_hidden( prompt ); if( *p == '?' && !p[1] ) { - gcry_free(p); + m_free(p); display_online_help( keyword ); } else @@ -482,13 +650,13 @@ cpr_get_answer_is_yes( const char *keyword, const char *prompt ) p = tty_get( prompt ); trim_spaces(p); /* it is okay to do this here */ if( *p == '?' && !p[1] ) { - gcry_free(p); + m_free(p); display_online_help( keyword ); } else { tty_kill_prompt(); yes = answer_is_yes(p); - gcry_free(p); + m_free(p); return yes; } } @@ -510,13 +678,13 @@ cpr_get_answer_yes_no_quit( const char *keyword, const char *prompt ) p = tty_get( prompt ); trim_spaces(p); /* it is okay to do this here */ if( *p == '?' && !p[1] ) { - gcry_free(p); + m_free(p); display_online_help( keyword ); } else { tty_kill_prompt(); yes = answer_is_yes_no_quit(p); - gcry_free(p); + m_free(p); return yes; } } diff --git a/g10/status.h b/g10/status.h index f9cce5b6b..86e232719 100644 --- a/g10/status.h +++ b/g10/status.h @@ -1,5 +1,5 @@ /* status.h - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -17,8 +17,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_STATUS_H -#define GPG_STATUS_H +#ifndef G10_STATUS_H +#define G10_STATUS_H #define STATUS_ENTER 1 @@ -33,7 +33,7 @@ #define STATUS_BADARMOR 7 #define STATUS_RSA_OR_IDEA 8 -#define STATUS_SIGEXPIRED 9 +#define STATUS_KEYEXPIRED 9 #define STATUS_KEYREVOKED 10 #define STATUS_TRUST_UNDEFINED 11 @@ -81,12 +81,32 @@ #define STATUS_GOT_IT 49 #define STATUS_PROGRESS 50 #define STATUS_SIG_CREATED 51 +#define STATUS_SESSION_KEY 52 +#define STATUS_NOTATION_NAME 53 +#define STATUS_NOTATION_DATA 54 +#define STATUS_POLICY_URL 55 +#define STATUS_BEGIN_STREAM 56 +#define STATUS_END_STREAM 57 +#define STATUS_KEY_CREATED 58 +#define STATUS_USERID_HINT 59 +#define STATUS_UNEXPECTED 60 +#define STATUS_INV_RECP 61 +#define STATUS_NO_RECP 62 +#define STATUS_ALREADY_SIGNED 63 +#define STATUS_SIGEXPIRED 64 +#define STATUS_EXPSIG 65 +#define STATUS_EXPKEYSIG 66 +#define STATUS_ATTRIBUTE 67 /*-- status.c --*/ void set_status_fd ( int fd ); int is_status_enabled ( void ); void write_status ( int no ); void write_status_text ( int no, const char *text ); +void write_status_buffer ( int no, + const char *buffer, size_t len, int wrap ); +void write_status_text_and_buffer ( int no, const char *text, + const char *buffer, size_t len, int wrap ); #ifdef USE_SHM_COPROCESSING void init_shm_coprocessing ( ulong requested_shm_size, int lock_mem ); @@ -94,6 +114,7 @@ void write_status_text ( int no, const char *text ); int cpr_enabled(void); char *cpr_get( const char *keyword, const char *prompt ); +char *cpr_get_no_help( const char *keyword, const char *prompt ); char *cpr_get_utf8( const char *keyword, const char *prompt ); char *cpr_get_hidden( const char *keyword, const char *prompt ); void cpr_kill_prompt(void); @@ -101,4 +122,4 @@ int cpr_get_answer_is_yes( const char *keyword, const char *prompt ); int cpr_get_answer_yes_no_quit( const char *keyword, const char *prompt ); -#endif /*GPG_STATUS_H*/ +#endif /*G10_STATUS_H*/ diff --git a/g10/tdbdump.c b/g10/tdbdump.c index 6729d4e56..cd46f1f5a 100644 --- a/g10/tdbdump.c +++ b/g10/tdbdump.c @@ -1,5 +1,5 @@ /* tdbdump.c - * Copyright (C) 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -33,7 +33,7 @@ #include "errors.h" #include "iobuf.h" #include "keydb.h" -#include +#include "memory.h" #include "util.h" #include "trustdb.h" #include "options.h" @@ -46,22 +46,7 @@ #define HEXTOBIN(x) ( (x) >= '0' && (x) <= '9' ? ((x)-'0') : \ (x) >= 'A' && (x) <= 'F' ? ((x)-'A'+10) : ((x)-'a'+10)) -/**************** - * Read a record but die if it does not exist - * fixme: duplicate: remove it - */ -#if 0 -static void -read_record( ulong recno, TRUSTREC *rec, int rectype ) -{ - int rc = tdbio_read_record( recno, rec, rectype ); - if( !rc ) - return; - log_error(_("trust record %lu, req type %d: read failed: %s\n"), - recno, rectype, gpg_errstr(rc) ); - tdbio_invalid(); -} -#endif + /**************** * Wirte a record but die on error */ @@ -72,263 +57,13 @@ write_record( TRUSTREC *rec ) if( !rc ) return; log_error(_("trust record %lu, type %d: write failed: %s\n"), - rec->recnum, rec->rectype, gpg_errstr(rc) ); + rec->recnum, rec->rectype, g10_errstr(rc) ); tdbio_invalid(); } /**************** - * sync the db - */ -static void -do_sync(void) -{ - int rc = tdbio_sync(); - if( !rc ) - return; - log_error(_("trustdb: sync failed: %s\n"), gpg_errstr(rc) ); - gpg_exit(2); -} - -#if 0 -static int -print_sigflags( FILE *fp, unsigned flags ) -{ - if( flags & SIGF_CHECKED ) { - fprintf(fp,"%c%c%c", - (flags & SIGF_VALID) ? 'V':'-', - (flags & SIGF_EXPIRED) ? 'E':'-', - (flags & SIGF_REVOKED) ? 'R':'-'); - } - else if( flags & SIGF_NOPUBKEY) - fputs("?--", fp); - else - fputs("---", fp); - return 3; -} -#endif - - -/**************** - * Walk through the signatures of a public key. - * The caller must provide a context structure, with all fields set - * to zero, but the local_id field set to the requested key; - * This function does not change this field. On return the context - * is filled with the local-id of the signature and the signature flag. - * No fields should be changed (clearing all fields and setting - * pubkeyid is okay to continue with an other pubkey) - * Returns: 0 - okay, -1 for eof (no more sigs) or any other errorcode - * FIXME: Do we really need this large and complicated function? - */ -#if 0 -static int -walk_sigrecs( SIGREC_CONTEXT *c ) -{ - TRUSTREC *r; - ulong rnum; - - if( c->ctl.eof ) - return -1; - r = &c->ctl.rec; - if( !c->ctl.init_done ) { - c->ctl.init_done = 1; - read_record( c->lid, r, 0 ); - if( r->rectype != RECTYPE_DIR ) { - c->ctl.eof = 1; - return -1; /* return eof */ - } - c->ctl.nextuid = r->r.dir.uidlist; - /* force a read */ - c->ctl.index = SIGS_PER_RECORD; - r->r.sig.next = 0; - } - - /* need a loop to skip over deleted sigs */ - do { - if( c->ctl.index >= SIGS_PER_RECORD ) { /* read the record */ - rnum = r->r.sig.next; - if( !rnum && c->ctl.nextuid ) { /* read next uid record */ - read_record( c->ctl.nextuid, r, RECTYPE_UID ); - c->ctl.nextuid = r->r.uid.next; - rnum = r->r.uid.siglist; - } - if( !rnum ) { - c->ctl.eof = 1; - return -1; /* return eof */ - } - read_record( rnum, r, RECTYPE_SIG ); - if( r->r.sig.lid != c->lid ) { - log_error(_("chained sigrec %lu has a wrong owner\n"), rnum ); - c->ctl.eof = 1; - tdbio_invalid(); - } - c->ctl.index = 0; - } - } while( !r->r.sig.sig[c->ctl.index++].lid ); - - c->sig_lid = r->r.sig.sig[c->ctl.index-1].lid; - c->sig_flag = r->r.sig.sig[c->ctl.index-1].flag; - return 0; -} -#endif - -#if 0 -static int -do_list_sigs( ulong root, ulong pk_lid, int depth, - LOCAL_ID_TABLE lids, unsigned *lineno ) -{ - SIGREC_CONTEXT sx; - int rc; - u32 keyid[2]; - - memset( &sx, 0, sizeof sx ); - sx.lid = pk_lid; - for(;;) { - rc = walk_sigrecs( &sx ); /* should we replace it and use */ - if( rc ) - break; - rc = keyid_from_lid( sx.sig_lid, keyid ); - if( rc ) { - printf("%6u: %*s????????.%lu:", *lineno, depth*4, "", sx.sig_lid ); - print_sigflags( stdout, sx.sig_flag ); - putchar('\n'); - ++*lineno; - } - else { - printf("%6u: %*s%08lX.%lu:", *lineno, depth*4, "", - (ulong)keyid[1], sx.sig_lid ); - print_sigflags( stdout, sx.sig_flag ); - putchar(' '); - /* check whether we already checked this pk_lid */ - if( !qry_lid_table_flag( ultikey_table, sx.sig_lid, NULL ) ) { - print_user_id("[ultimately trusted]", keyid); - ++*lineno; - } - else if( sx.sig_lid == pk_lid ) { - printf("[self-signature]\n"); - ++*lineno; - } - else if( sx.sig_lid == root ) { - printf("[closed]\n"); - ++*lineno; - } - else if( ins_lid_table_item( lids, sx.sig_lid, *lineno ) ) { - unsigned refline; - qry_lid_table_flag( lids, sx.sig_lid, &refline ); - printf("[see line %u]\n", refline); - ++*lineno; - } - else if( depth+1 >= MAX_LIST_SIGS_DEPTH ) { - print_user_id( "[too deeply nested]", keyid ); - ++*lineno; - } - else { - print_user_id( "", keyid ); - ++*lineno; - rc = do_list_sigs( root, sx.sig_lid, depth+1, lids, lineno ); - if( rc ) - break; - } - } - } - return rc==-1? 0 : rc; -} -#endif -/**************** - * List all signatures of a public key - */ -static int -list_sigs( ulong pubkey_id ) -{ - int rc=0; - #if 0 - u32 keyid[2]; - LOCAL_ID_TABLE lids; - unsigned lineno = 1; - - rc = keyid_from_lid( pubkey_id, keyid ); - if( rc ) - return rc; - printf("Signatures of %08lX.%lu ", (ulong)keyid[1], pubkey_id ); - print_user_id("", keyid); - printf("----------------------\n"); - - lids = new_lid_table(); - rc = do_list_sigs( pubkey_id, pubkey_id, 0, lids, &lineno ); - putchar('\n'); - release_lid_table(lids); - #endif - return rc; -} - -/**************** - * List all records of a public key - */ -static int -list_records( ulong lid ) -{ - int rc; - TRUSTREC dr, ur, rec; - ulong recno; - - rc = tdbio_read_record( lid, &dr, RECTYPE_DIR ); - if( rc ) { - log_error(_("lid %lu: read dir record failed: %s\n"), - lid, gpg_errstr(rc)); - return rc; - } - tdbio_dump_record( &dr, stdout ); - - for( recno=dr.r.dir.keylist; recno; recno = rec.r.key.next ) { - rc = tdbio_read_record( recno, &rec, 0 ); - if( rc ) { - log_error(_("lid %lu: read key record failed: %s\n"), - lid, gpg_errstr(rc)); - return rc; - } - tdbio_dump_record( &rec, stdout ); - } - - for( recno=dr.r.dir.uidlist; recno; recno = ur.r.uid.next ) { - rc = tdbio_read_record( recno, &ur, RECTYPE_UID ); - if( rc ) { - log_error(_("lid %lu: read uid record failed: %s\n"), - lid, gpg_errstr(rc)); - return rc; - } - tdbio_dump_record( &ur, stdout ); - /* preference records */ - for(recno=ur.r.uid.prefrec; recno; recno = rec.r.pref.next ) { - rc = tdbio_read_record( recno, &rec, RECTYPE_PREF ); - if( rc ) { - log_error(_("lid %lu: read pref record failed: %s\n"), - lid, gpg_errstr(rc)); - return rc; - } - tdbio_dump_record( &rec, stdout ); - } - /* sig records */ - for(recno=ur.r.uid.siglist; recno; recno = rec.r.sig.next ) { - rc = tdbio_read_record( recno, &rec, RECTYPE_SIG ); - if( rc ) { - log_error(_("lid %lu: read sig record failed: %s\n"), - lid, gpg_errstr(rc)); - return rc; - } - tdbio_dump_record( &rec, stdout ); - } - } - - /* add cache record dump here */ - - - - return rc; -} - - -/**************** - * Dump the complte trustdb or only the entries of one key. + * Dump the entire trustdb or only the entries of one key. */ void list_trustdb( const char *username ) @@ -336,38 +71,8 @@ list_trustdb( const char *username ) TRUSTREC rec; init_trustdb(); - - if( username && *username == '#' ) { - int rc; - ulong lid = atoi(username+1); - - if( (rc = list_records( lid)) ) - log_error(_("user '%s' read problem: %s\n"), - username, gpg_errstr(rc)); - else if( (rc = list_sigs( lid )) ) - log_error(_("user '%s' list problem: %s\n"), - username, gpg_errstr(rc)); - } - else if( username ) { - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - int rc; - - if( (rc = get_pubkey_byname( NULL, pk, username, NULL )) ) - log_error(_("user '%s' not found: %s\n"), username, gpg_errstr(rc) ); - else if( (rc=tdbio_search_dir_bypk( pk, &rec )) && rc != -1 ) - log_error(_("problem finding '%s' in trustdb: %s\n"), - username, gpg_errstr(rc)); - else if( rc == -1 ) - log_error(_("user '%s' not in trustdb\n"), username); - else if( (rc = list_records( pk->local_id)) ) - log_error(_("user '%s' read problem: %s\n"), - username, gpg_errstr(rc)); - else if( (rc = list_sigs( pk->local_id )) ) - log_error(_("user '%s' list problem: %s\n"), - username, gpg_errstr(rc)); - free_public_key( pk ); - } - else { + /* for now we ignore the user ID */ + if (1) { ulong recnum; int i; @@ -391,33 +96,22 @@ void export_ownertrust() { TRUSTREC rec; - TRUSTREC rec2; ulong recnum; int i; byte *p; - int rc; init_trustdb(); printf(_("# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n"), asctimestamp( make_timestamp() ) ); for(recnum=0; !tdbio_read_record( recnum, &rec, 0); recnum++ ) { - if( rec.rectype == RECTYPE_DIR ) { - if( !rec.r.dir.keylist ) { - log_error(_("directory record w/o primary key\n")); + if( rec.rectype == RECTYPE_TRUST ) { + if( !rec.r.trust.ownertrust ) continue; - } - if( !rec.r.dir.ownertrust ) - continue; - rc = tdbio_read_record( rec.r.dir.keylist, &rec2, RECTYPE_KEY); - if( rc ) { - log_error(_("error reading key record: %s\n"), gpg_errstr(rc)); - continue; - } - p = rec2.r.key.fingerprint; - for(i=0; i < rec2.r.key.fingerprint_len; i++, p++ ) + p = rec.r.trust.fingerprint; + for(i=0; i < 20; i++, p++ ) printf("%02X", *p ); - printf(":%u:\n", (unsigned)rec.r.dir.ownertrust ); + printf(":%u:\n", (unsigned int)rec.r.trust.ownertrust ); } } } @@ -431,7 +125,10 @@ import_ownertrust( const char *fname ) char line[256]; char *p; size_t n, fprlen; - unsigned otrust; + unsigned int otrust; + byte fpr[20]; + int any = 0; + int rc; init_trustdb(); if( !fname || (*fname == '-' && !fname[1]) ) { @@ -446,7 +143,6 @@ import_ownertrust( const char *fname ) while( fgets( line, DIM(line)-1, fp ) ) { TRUSTREC rec; - int rc; if( !*line || *line == '#' ) continue; @@ -475,51 +171,52 @@ import_ownertrust( const char *fname ) if( !otrust ) continue; /* no otrust defined - no need to update or insert */ /* convert the ascii fingerprint to binary */ - for(p=line, fprlen=0; *p != ':'; p += 2 ) - line[fprlen++] = HEXTOBIN(p[0]) * 16 + HEXTOBIN(p[1]); - line[fprlen] = 0; - - repeat: - rc = tdbio_search_dir_byfpr( line, fprlen, 0, &rec ); + for(p=line, fprlen=0; fprlen < 20 && *p != ':'; p += 2 ) + fpr[fprlen++] = HEXTOBIN(p[0]) * 16 + HEXTOBIN(p[1]); + while (fprlen < 20) + fpr[fprlen++] = 0; + + rc = tdbio_search_trust_byfpr (fpr, &rec); if( !rc ) { /* found: update */ - if( rec.r.dir.ownertrust ) - log_info("LID %lu: changing trust from %u to %u\n", - rec.r.dir.lid, rec.r.dir.ownertrust, otrust ); - else - log_info("LID %lu: setting trust to %u\n", - rec.r.dir.lid, otrust ); - rec.r.dir.ownertrust = otrust; - write_record( &rec ); + if (rec.r.trust.ownertrust != otrust) + { + if( rec.r.trust.ownertrust ) + log_info("changing ownertrust from %u to %u\n", + rec.r.trust.ownertrust, otrust ); + else + log_info("setting ownertrust to %u\n", otrust ); + rec.r.trust.ownertrust = otrust; + write_record (&rec ); + any = 1; + } } - else if( rc == -1 ) { /* not found; get the key from the ring */ - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - - log_info_f(fname, _("key not in trustdb, searching ring.\n")); - rc = get_pubkey_byfprint( pk, line, fprlen ); - if( rc ) - log_info_f(fname, _("key not in ring: %s\n"), gpg_errstr(rc)); - else { - rc = query_trust_record( pk ); /* only as assertion */ - if( rc != -1 ) - log_error_f(fname, _("Oops: key is now in trustdb???\n")); - else { - rc = insert_trust_record_by_pk( pk ); - if( !rc ) - goto repeat; /* update the ownertrust */ - log_error_f(fname, _("insert trust record failed: %s\n"), - gpg_errstr(rc) ); - } - } + else if( rc == -1 ) { /* not found: insert */ + log_info("inserting ownertrust of %u\n", otrust ); + memset (&rec, 0, sizeof rec); + rec.recnum = tdbio_new_recnum (); + rec.rectype = RECTYPE_TRUST; + memcpy (rec.r.trust.fingerprint, fpr, 20); + rec.r.trust.ownertrust = otrust; + write_record (&rec ); + any = 1; } else /* error */ - log_error_f(fname, _("error finding dir record: %s\n"), - gpg_errstr(rc)); + log_error_f(fname, _("error finding trust record: %s\n"), + g10_errstr(rc)); } if( ferror(fp) ) log_error_f(fname, _("read error: %s\n"), strerror(errno) ); if( !is_stdin ) fclose(fp); - do_sync(); - sync_trustdb(); + + if (any) + { + revalidation_mark (); + rc = tdbio_sync (); + if (rc) + log_error (_("trustdb: sync failed: %s\n"), g10_errstr(rc) ); + } + } + diff --git a/g10/tdbio.c b/g10/tdbio.c index 669f66ffc..537e4c0d4 100644 --- a/g10/tdbio.c +++ b/g10/tdbio.c @@ -1,5 +1,5 @@ /* tdbio.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -31,7 +31,7 @@ #include "errors.h" #include "iobuf.h" -#include +#include "memory.h" #include "util.h" #include "options.h" #include "main.h" @@ -39,6 +39,9 @@ #include "trustdb.h" #include "tdbio.h" +#if defined(HAVE_DOSISH_SYSTEM) && !defined(__CYGWIN32__) +#define ftruncate chsize +#endif /**************** * Yes, this is a very simple implementation. We should really @@ -83,6 +86,8 @@ static int db_fd = -1; static int in_transaction; static void open_db(void); +static void migrate_from_v2 (void); + /************************************* @@ -115,13 +120,13 @@ write_cache_item( CACHE_CTRL r ) if( lseek( db_fd, r->recno * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) { log_error(_("trustdb rec %lu: lseek failed: %s\n"), r->recno, strerror(errno) ); - return GPGERR_WRITE_FILE; + return G10ERR_WRITE_FILE; } n = write( db_fd, r->data, TRUST_RECORD_LEN); if( n != TRUST_RECORD_LEN ) { log_error(_("trustdb rec %lu: write failed (n=%d): %s\n"), r->recno, n, strerror(errno) ); - return GPGERR_WRITE_FILE; + return G10ERR_WRITE_FILE; } r->flags.dirty = 0; return 0; @@ -175,7 +180,7 @@ put_record_into_cache( ulong recno, const char *data ) } /* see whether we reached the limit */ if( cache_entries < MAX_CACHE_ENTRIES_SOFT ) { /* no */ - r = gcry_xmalloc( sizeof *r ); + r = m_alloc( sizeof *r ); r->flags.used = 1; r->recno = recno; memcpy( r->data, data, TRUST_RECORD_LEN ); @@ -218,7 +223,7 @@ put_record_into_cache( ulong recno, const char *data ) if( cache_entries < MAX_CACHE_ENTRIES_HARD ) { /* no */ if( opt.debug && !(cache_entries % 100) ) log_debug("increasing tdbio cache size\n"); - r = gcry_xmalloc( sizeof *r ); + r = m_alloc( sizeof *r ); r->flags.used = 1; r->recno = recno; memcpy( r->data, data, TRUST_RECORD_LEN ); @@ -230,7 +235,7 @@ put_record_into_cache( ulong recno, const char *data ) return 0; } log_info(_("trustdb transaction too large\n")); - return GPGERR_RESOURCE_LIMIT; + return G10ERR_RESOURCE_LIMIT; } if( dirty_count ) { int n = dirty_count / 5; /* discard some dirty entries */ @@ -406,6 +411,28 @@ cleanup(void) } } +static int +create_version_record (void) +{ + TRUSTREC rec; + int rc; + + memset( &rec, 0, sizeof rec ); + rec.r.ver.version = 3; + rec.r.ver.created = make_timestamp(); + rec.r.ver.marginals = opt.marginals_needed; + rec.r.ver.completes = opt.completes_needed; + rec.r.ver.cert_depth = opt.max_cert_depth; + rec.rectype = RECTYPE_VER; + rec.recnum = 0; + rc = tdbio_write_record( &rec ); + if( !rc ) + tdbio_sync(); + return rc; +} + + + int tdbio_set_dbname( const char *new_dbname, int create ) { @@ -416,20 +443,23 @@ tdbio_set_dbname( const char *new_dbname, int create ) atexit( cleanup ); initialized = 1; } - fname = new_dbname? gcry_xstrdup( new_dbname ) - : make_filename(opt.homedir, "trustdb.gpg", NULL ); + fname = new_dbname? m_strdup( new_dbname ) + : make_filename(opt.homedir, + "trustdb" EXTSEP_S "gpg", NULL ); + + check_permissions(fname,0,0); if( access( fname, R_OK ) ) { if( errno != ENOENT ) { log_error( _("%s: can't access: %s\n"), fname, strerror(errno) ); - gcry_free(fname); - return GPGERR_TRUSTDB; + m_free(fname); + return G10ERR_TRUSTDB; } if( create ) { FILE *fp; TRUSTREC rec; int rc; - char *p = strrchr( fname, '/' ); + char *p = strrchr( fname, DIRSEP_C ); assert(p); *p = 0; @@ -437,14 +467,22 @@ tdbio_set_dbname( const char *new_dbname, int create ) try_make_homedir( fname ); log_fatal( _("%s: directory does not exist!\n"), fname ); } - *p = '/'; + *p = DIRSEP_C; + m_free(db_name); + db_name = fname; +#ifdef __riscos__ + if( !lockhandle ) + lockhandle = create_dotlock( db_name ); + if( !lockhandle ) + log_fatal( _("%s: can't create lock\n"), db_name ); + if( make_dotlock( lockhandle, -1 ) ) + log_fatal( _("%s: can't make lock\n"), db_name ); +#endif /* __riscos__ */ fp =fopen( fname, "wb" ); if( !fp ) log_fatal( _("%s: can't create: %s\n"), fname, strerror(errno) ); fclose(fp); - gcry_free(db_name); - db_name = fname; #ifdef HAVE_DOSISH_SYSTEM db_fd = open( db_name, O_RDWR | O_BINARY ); #else @@ -453,25 +491,17 @@ tdbio_set_dbname( const char *new_dbname, int create ) if( db_fd == -1 ) log_fatal( _("%s: can't open: %s\n"), db_name, strerror(errno) ); +#ifndef __riscos__ if( !lockhandle ) lockhandle = create_dotlock( db_name ); if( !lockhandle ) log_fatal( _("%s: can't create lock\n"), db_name ); +#endif /* !__riscos__ */ - memset( &rec, 0, sizeof rec ); - rec.r.ver.version = 2; - rec.r.ver.created = make_timestamp(); - rec.r.ver.marginals = opt.marginals_needed; - rec.r.ver.completes = opt.completes_needed; - rec.r.ver.cert_depth = opt.max_cert_depth; - rec.rectype = RECTYPE_VER; - rec.recnum = 0; - rc = tdbio_write_record( &rec ); - if( !rc ) - tdbio_sync(); + rc = create_version_record (); if( rc ) log_fatal( _("%s: failed to create version record: %s"), - fname, gpg_errstr(rc)); + fname, g10_errstr(rc)); /* and read again to check that we are okay */ if( tdbio_read_record( 0, &rec, RECTYPE_VER ) ) log_fatal( _("%s: invalid trustdb created\n"), db_name ); @@ -482,7 +512,7 @@ tdbio_set_dbname( const char *new_dbname, int create ) return 0; } } - gcry_free(db_name); + m_free(db_name); db_name = fname; return 0; } @@ -499,27 +529,45 @@ tdbio_get_dbname() static void open_db() { - TRUSTREC rec; - assert( db_fd == -1 ); + byte buf[10]; + int n; + TRUSTREC rec; - if( !lockhandle ) - lockhandle = create_dotlock( db_name ); - if( !lockhandle ) - log_fatal( _("%s: can't create lock\n"), db_name ); - #ifdef HAVE_DOSISH_SYSTEM - db_fd = open( db_name, O_RDWR | O_BINARY ); - #else - db_fd = open( db_name, O_RDWR ); - #endif - if( db_fd == -1 ) - log_fatal( _("%s: can't open: %s\n"), db_name, strerror(errno) ); - if( tdbio_read_record( 0, &rec, RECTYPE_VER ) ) - log_fatal( _("%s: invalid trustdb\n"), db_name ); + assert( db_fd == -1 ); + + if (!lockhandle ) + lockhandle = create_dotlock( db_name ); + if (!lockhandle ) + log_fatal( _("%s: can't create lock\n"), db_name ); +#ifdef __riscos__ + if (make_dotlock( lockhandle, -1 ) ) + log_fatal( _("%s: can't make lock\n"), db_name ); +#endif /* __riscos__ */ +#ifdef HAVE_DOSISH_SYSTEM + db_fd = open (db_name, O_RDWR | O_BINARY ); +#else + db_fd = open (db_name, O_RDWR ); +#endif + if ( db_fd == -1 ) + log_fatal( _("%s: can't open: %s\n"), db_name, strerror(errno) ); + + /* check whether we need to do a version migration */ + do + n = read (db_fd, buf, 5); + while (n==-1 && errno == EINTR); + if (n == 5 && !memcmp (buf, "\x01gpg\x02", 5)) + { + migrate_from_v2 (); + } + + /* read the version record */ + if (tdbio_read_record (0, &rec, RECTYPE_VER ) ) + log_fatal( _("%s: invalid trustdb\n"), db_name ); } /**************** - * Make a hashtable: type 0 = key hash, 1 = sdir hash + * Make a hashtable: type 0 = trust hash */ static void create_hashtable( TRUSTREC *vr, int type ) @@ -536,9 +584,8 @@ create_hashtable( TRUSTREC *vr, int type ) assert(recnum); /* this is will never be the first record */ if( !type ) - vr->r.ver.keyhashtbl = recnum; - else - vr->r.ver.sdirhashtbl = recnum; + vr->r.ver.trusthashtbl = recnum; + /* Now write the records */ n = (256+ITEMS_PER_HTBL_RECORD-1) / ITEMS_PER_HTBL_RECORD; for(i=0; i < n; i++, recnum++ ) { @@ -548,7 +595,7 @@ create_hashtable( TRUSTREC *vr, int type ) rc = tdbio_write_record( &rec ); if( rc ) log_fatal( _("%s: failed to create hashtable: %s\n"), - db_name, gpg_errstr(rc)); + db_name, g10_errstr(rc)); } /* update the version record */ rc = tdbio_write_record( vr ); @@ -556,7 +603,7 @@ create_hashtable( TRUSTREC *vr, int type ) rc = tdbio_sync(); if( rc ) log_fatal( _("%s: error updating version record: %s\n"), - db_name, gpg_errstr(rc)); + db_name, g10_errstr(rc)); } @@ -572,7 +619,7 @@ tdbio_db_matches_options() rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), - db_name, gpg_errstr(rc) ); + db_name, g10_errstr(rc) ); if( !vr.r.ver.marginals && !vr.r.ver.completes && !vr.r.ver.cert_depth ) @@ -585,7 +632,7 @@ tdbio_db_matches_options() rc = tdbio_sync(); if( rc ) log_error( _("%s: error writing version record: %s\n"), - db_name, gpg_errstr(rc) ); + db_name, g10_errstr(rc) ); } yes_no = vr.r.ver.marginals == opt.marginals_needed @@ -597,105 +644,70 @@ tdbio_db_matches_options() /**************** - * Return the modifiy stamp. - * if modify_down is true, the modify_down stamp will be - * returned, otherwise the modify_up stamp. + * Return the nextstamp value. */ ulong -tdbio_read_modify_stamp( int modify_down ) +tdbio_read_nextcheck () { TRUSTREC vr; int rc; - ulong mod; rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), - db_name, gpg_errstr(rc) ); - - mod = modify_down? vr.r.ver.mod_down : vr.r.ver.mod_up; - - /* Always return at least 1 to make comparison easier; - * this is still far back in history (before Led Zeppelin III :-) */ - return mod ? mod : 1; + db_name, g10_errstr(rc) ); + return vr.r.ver.nextcheck; } -void -tdbio_write_modify_stamp( int up, int down ) +/* Return true when the stamp was actually changed. */ +int +tdbio_write_nextcheck (ulong stamp) { TRUSTREC vr; int rc; - ulong stamp; - - if( !(up || down) ) - return; rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), - db_name, gpg_errstr(rc) ); + db_name, g10_errstr(rc) ); - stamp = make_timestamp(); - if( down ) - vr.r.ver.mod_down = stamp; - if( up ) - vr.r.ver.mod_up = stamp; + if (vr.r.ver.nextcheck == stamp) + return 0; + vr.r.ver.nextcheck = stamp; rc = tdbio_write_record( &vr ); if( rc ) log_fatal( _("%s: error writing version record: %s\n"), - db_name, gpg_errstr(rc) ); + db_name, g10_errstr(rc) ); + return 1; } + /**************** - * Return the record number of the keyhash tbl or create a new one. + * Return the record number of the trusthash tbl or create a new one. */ static ulong -get_keyhashrec(void) +get_trusthashrec(void) { - static ulong keyhashtbl; /* record number of the key hashtable */ + static ulong trusthashtbl; /* record number of the trust hashtable */ - if( !keyhashtbl ) { + if( !trusthashtbl ) { TRUSTREC vr; int rc; rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), - db_name, gpg_errstr(rc) ); - if( !vr.r.ver.keyhashtbl ) + db_name, g10_errstr(rc) ); + if( !vr.r.ver.trusthashtbl ) create_hashtable( &vr, 0 ); - keyhashtbl = vr.r.ver.keyhashtbl; + trusthashtbl = vr.r.ver.trusthashtbl; } - return keyhashtbl; + return trusthashtbl; } -/**************** - * Return the record number of the shadow direcory hash table - * or create a new one. - */ -static ulong -get_sdirhashrec(void) -{ - static ulong sdirhashtbl; /* record number of the hashtable */ - - if( !sdirhashtbl ) { - TRUSTREC vr; - int rc; - - rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); - if( rc ) - log_fatal( _("%s: error reading version record: %s\n"), - db_name, gpg_errstr(rc) ); - if( !vr.r.ver.sdirhashtbl ) - create_hashtable( &vr, 1 ); - - sdirhashtbl = vr.r.ver.sdirhashtbl; - } - return sdirhashtbl; -} /**************** @@ -719,7 +731,7 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_read_record( hashrec, &rec, RECTYPE_HTBL ); if( rc ) { log_error( db_name, "upd_hashtable: read failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } @@ -729,7 +741,7 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_write_record( &rec ); if( rc ) { log_error( db_name, "upd_hashtable: write htbl failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } } @@ -738,7 +750,7 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_read_record( item, &rec, 0 ); if( rc ) { log_error( "upd_hashtable: read item failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } @@ -747,7 +759,7 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) level++; if( level >= keylen ) { log_error( "hashtable has invalid indirections.\n"); - return GPGERR_TRUSTDB; + return G10ERR_TRUSTDB; } goto next_level; } @@ -763,8 +775,8 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_read_record( rec.r.hlst.next, &rec, RECTYPE_HLST); if( rc ) { - log_error( "scan keyhashtbl read hlst failed: %s\n", - gpg_errstr(rc) ); + log_error( "upd_hashtable: read hlst failed: %s\n", + g10_errstr(rc) ); return rc; } } @@ -779,7 +791,7 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_write_record( &rec ); if( rc ) log_error( "upd_hashtable: write hlst failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; /* done */ } } @@ -788,7 +800,7 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) &rec, RECTYPE_HLST ); if( rc ) { log_error( "upd_hashtable: read hlst failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } } @@ -797,7 +809,7 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_write_record( &rec ); if( rc ) { log_error( "upd_hashtable: write hlst failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } memset( &rec, 0, sizeof rec ); @@ -807,14 +819,12 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_write_record( &rec ); if( rc ) log_error( "upd_hashtable: write ext hlst failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; /* done */ } } /* end loop over hlst slots */ } - else if( rec.rectype == RECTYPE_KEY - || rec.rectype == RECTYPE_DIR - || rec.rectype == RECTYPE_SDIR ) { /* insert a list record */ + else if( rec.rectype == RECTYPE_TRUST ) { /* insert a list record */ if( rec.recnum == newrecnum ) { return 0; } @@ -827,7 +837,7 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_write_record( &rec ); if( rc ) { log_error( "upd_hashtable: write new hlst failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } /* update the hashtable record */ @@ -835,14 +845,14 @@ upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) rc = tdbio_write_record( &lastrec ); if( rc ) log_error( "upd_hashtable: update htbl failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; /* ready */ } else { log_error( "hashtbl %lu: %lu/%d points to an invalid record %lu\n", table, hashrec, (msb % ITEMS_PER_HTBL_RECORD), item); list_trustdb(NULL); - return GPGERR_TRUSTDB; + return G10ERR_TRUSTDB; } } @@ -870,7 +880,7 @@ drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum ) rc = tdbio_read_record( hashrec, &rec, RECTYPE_HTBL ); if( rc ) { log_error( db_name, "drop_from_hashtable: read failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } @@ -883,14 +893,14 @@ drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum ) rc = tdbio_write_record( &rec ); if( rc ) log_error( db_name, "drop_from_hashtable: write htbl failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } rc = tdbio_read_record( item, &rec, 0 ); if( rc ) { log_error( "drop_from_hashtable: read item failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } @@ -899,7 +909,7 @@ drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum ) level++; if( level >= keylen ) { log_error( "hashtable has invalid indirections.\n"); - return GPGERR_TRUSTDB; + return G10ERR_TRUSTDB; } goto next_level; } @@ -912,7 +922,7 @@ drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum ) rc = tdbio_write_record( &rec ); if( rc ) log_error( db_name, "drop_from_hashtable: write htbl failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } } @@ -920,8 +930,8 @@ drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum ) rc = tdbio_read_record( rec.r.hlst.next, &rec, RECTYPE_HLST); if( rc ) { - log_error( "scan keyhashtbl read hlst failed: %s\n", - gpg_errstr(rc) ); + log_error( "drop_from_hashtable: read hlst failed: %s\n", + g10_errstr(rc) ); return rc; } } @@ -932,7 +942,7 @@ drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum ) log_error( "hashtbl %lu: %lu/%d points to wrong record %lu\n", table, hashrec, (msb % ITEMS_PER_HTBL_RECORD), item); - return GPGERR_TRUSTDB; + return G10ERR_TRUSTDB; } @@ -958,7 +968,7 @@ lookup_hashtable( ulong table, const byte *key, size_t keylen, hashrec += msb / ITEMS_PER_HTBL_RECORD; rc = tdbio_read_record( hashrec, rec, RECTYPE_HTBL ); if( rc ) { - log_error( db_name, "lookup_hashtable failed: %s\n", gpg_errstr(rc) ); + log_error( db_name, "lookup_hashtable failed: %s\n", g10_errstr(rc) ); return rc; } @@ -968,7 +978,7 @@ lookup_hashtable( ulong table, const byte *key, size_t keylen, rc = tdbio_read_record( item, rec, 0 ); if( rc ) { - log_error( db_name, "hashtable read failed: %s\n", gpg_errstr(rc) ); + log_error( db_name, "hashtable read failed: %s\n", g10_errstr(rc) ); return rc; } if( rec->rectype == RECTYPE_HTBL ) { @@ -976,7 +986,7 @@ lookup_hashtable( ulong table, const byte *key, size_t keylen, level++; if( level >= keylen ) { log_error( db_name, "hashtable has invalid indirections\n"); - return GPGERR_TRUSTDB; + return G10ERR_TRUSTDB; } goto next_level; } @@ -991,7 +1001,7 @@ lookup_hashtable( ulong table, const byte *key, size_t keylen, rc = tdbio_read_record( rec->r.hlst.rnum[i], &tmp, 0 ); if( rc ) { log_error( "lookup_hashtable: read item failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } if( (*cmpfnc)( cmpdata, &tmp ) ) { @@ -1004,7 +1014,7 @@ lookup_hashtable( ulong table, const byte *key, size_t keylen, rc = tdbio_read_record( rec->r.hlst.next, rec, RECTYPE_HLST ); if( rc ) { log_error( "lookup_hashtable: read hlst failed: %s\n", - gpg_errstr(rc) ); + g10_errstr(rc) ); return rc; } } @@ -1021,57 +1031,16 @@ lookup_hashtable( ulong table, const byte *key, size_t keylen, } - - /**************** - * Update the key hashtbl or create the table if it does not exist + * Update the trust hashtbl or create the table if it does not exist */ static int -update_keyhashtbl( TRUSTREC *kr ) +update_trusthashtbl( TRUSTREC *tr ) { - return upd_hashtable( get_keyhashrec(), - kr->r.key.fingerprint, - kr->r.key.fingerprint_len, kr->recnum ); + return upd_hashtable( get_trusthashrec(), + tr->r.trust.fingerprint, 20, tr->recnum ); } -/**************** - * Update the shadow dir hashtbl or create the table if it does not exist - */ -static int -update_sdirhashtbl( TRUSTREC *sr ) -{ - byte key[8]; - - u32tobuf( key , sr->r.sdir.keyid[0] ); - u32tobuf( key+4 , sr->r.sdir.keyid[1] ); - return upd_hashtable( get_sdirhashrec(), key, 8, sr->recnum ); -} - -/**************** - * Drop the records from the key-hashtbl - */ -static int -drop_from_keyhashtbl( TRUSTREC *kr ) -{ - return drop_from_hashtable( get_keyhashrec(), - kr->r.key.fingerprint, - kr->r.key.fingerprint_len, kr->recnum ); -} - -/**************** - * Drop record drom the shadow dir hashtbl - */ -static int -drop_from_sdirhashtbl( TRUSTREC *sr ) -{ - byte key[8]; - - u32tobuf( key , sr->r.sdir.keyid[0] ); - u32tobuf( key+4 , sr->r.sdir.keyid[1] ); - return drop_from_hashtable( get_sdirhashrec(), key, 8, sr->recnum ); -} - - void @@ -1079,7 +1048,6 @@ tdbio_dump_record( TRUSTREC *rec, FILE *fp ) { int i; ulong rnum = rec->recnum; - byte *p; fprintf(fp, "rec %5lu, ", rnum ); @@ -1087,116 +1055,18 @@ tdbio_dump_record( TRUSTREC *rec, FILE *fp ) case 0: fprintf(fp, "blank\n"); break; case RECTYPE_VER: fprintf(fp, - "version, kd=%lu, sd=%lu, free=%lu, m/c/d=%d/%d/%d down=%s", - rec->r.ver.keyhashtbl, rec->r.ver.sdirhashtbl, + "version, td=%lu, f=%lu, m/c/d=%d/%d/%d nc=%lu (%s)\n", + rec->r.ver.trusthashtbl, rec->r.ver.firstfree, rec->r.ver.marginals, rec->r.ver.completes, rec->r.ver.cert_depth, - strtimestamp(rec->r.ver.mod_down) ); - fprintf(fp, ", up=%s\n", strtimestamp(rec->r.ver.mod_up) ); + rec->r.ver.nextcheck, + strtimestamp(rec->r.ver.nextcheck) + ); break; case RECTYPE_FREE: fprintf(fp, "free, next=%lu\n", rec->r.free.next ); break; - case RECTYPE_DIR: - fprintf(fp, "dir %lu, keys=%lu, uids=%lu, t=%02x", - rec->r.dir.lid, - rec->r.dir.keylist, - rec->r.dir.uidlist, - rec->r.dir.ownertrust ); - if( rec->r.dir.valcheck ) - fprintf( fp, ", v=%02x/%s", rec->r.dir.validity, - strtimestamp(rec->r.dir.valcheck) ); - if( rec->r.dir.checkat ) - fprintf( fp, ", a=%s", strtimestamp(rec->r.dir.checkat) ); - if( rec->r.dir.dirflags & DIRF_CHECKED ) { - if( rec->r.dir.dirflags & DIRF_VALID ) - fputs(", valid", fp ); - if( rec->r.dir.dirflags & DIRF_EXPIRED ) - fputs(", expired", fp ); - if( rec->r.dir.dirflags & DIRF_REVOKED ) - fputs(", revoked", fp ); - if( rec->r.dir.dirflags & DIRF_NEWKEYS ) - fputs(", newkeys", fp ); - } - putc('\n', fp); - break; - case RECTYPE_KEY: - fprintf(fp, "key %lu, n=%lu a=%d ", - rec->r.key.lid, - rec->r.key.next, - rec->r.key.pubkey_algo ); - for(i=0; i < rec->r.key.fingerprint_len; i++ ) - fprintf(fp, "%02X", rec->r.key.fingerprint[i] ); - if( rec->r.key.keyflags & KEYF_CHECKED ) { - if( rec->r.key.keyflags & KEYF_VALID ) - fputs(", valid", fp ); - if( rec->r.key.keyflags & KEYF_EXPIRED ) - fputs(", expired", fp ); - if( rec->r.key.keyflags & KEYF_REVOKED ) - fputs(", revoked", fp ); - } - putc('\n', fp); - break; - case RECTYPE_UID: - fprintf(fp, "uid %lu, next=%lu, pref=%lu, sig=%lu, hash=%02X%02X", - rec->r.uid.lid, - rec->r.uid.next, - rec->r.uid.prefrec, - rec->r.uid.siglist, - rec->r.uid.namehash[18], rec->r.uid.namehash[19]); - fprintf( fp, ", v=%02x", rec->r.uid.validity ); - if( rec->r.uid.uidflags & UIDF_CHECKED ) { - if( rec->r.uid.uidflags & UIDF_VALID ) - fputs(", valid", fp ); - if( rec->r.uid.uidflags & UIDF_REVOKED ) - fputs(", revoked", fp ); - } - putc('\n', fp); - break; - case RECTYPE_PREF: - fprintf(fp, "pref %lu, next=%lu,", - rec->r.pref.lid, rec->r.pref.next); - for(i=0,p=rec->r.pref.data; i < ITEMS_PER_PREF_RECORD; i+=2,p+=2 ) { - if( *p ) - fprintf(fp, " %c%d", *p == PREFTYPE_SYM ? 'S' : - *p == PREFTYPE_HASH ? 'H' : - *p == PREFTYPE_COMPR ? 'Z' : '?', p[1]); - } - putc('\n', fp); - break; - case RECTYPE_SIG: - fprintf(fp, "sig %lu, next=%lu,", - rec->r.sig.lid, rec->r.sig.next ); - for(i=0; i < SIGS_PER_RECORD; i++ ) { - if( rec->r.sig.sig[i].lid ) { - fprintf(fp, " %lu:", rec->r.sig.sig[i].lid ); - if( rec->r.sig.sig[i].flag & SIGF_CHECKED ) { - fprintf(fp,"%c%c%c", - (rec->r.sig.sig[i].flag & SIGF_VALID) ? 'V': - (rec->r.sig.sig[i].flag & SIGF_IGNORED) ? 'I':'-', - (rec->r.sig.sig[i].flag & SIGF_EXPIRED) ? 'E':'-', - (rec->r.sig.sig[i].flag & SIGF_REVOKED) ? 'R':'-'); - } - else if( rec->r.sig.sig[i].flag & SIGF_NOPUBKEY) - fputs("?--", fp); - else - fputs("---", fp); - } - } - putc('\n', fp); - break; - case RECTYPE_SDIR: - fprintf(fp, "sdir %lu, keyid=%08lX%08lX, algo=%d, hint=%lu\n", - rec->r.sdir.lid, - (ulong)rec->r.sdir.keyid[0], - (ulong)rec->r.sdir.keyid[1], - rec->r.sdir.pubkey_algo, - (ulong)rec->r.sdir.hintlist ); - break; - case RECTYPE_CACH: - fprintf(fp, "cach\n"); - break; case RECTYPE_HTBL: fprintf(fp, "htbl,"); for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) @@ -1209,6 +1079,20 @@ tdbio_dump_record( TRUSTREC *rec, FILE *fp ) fprintf(fp, " %lu", rec->r.hlst.rnum[i] ); putc('\n', fp); break; + case RECTYPE_TRUST: + fprintf(fp, "trust "); + for(i=0; i < 20; i++ ) + fprintf(fp, "%02X", rec->r.trust.fingerprint[i] ); + fprintf (fp, ", ot=%d, d=%d, vl=%lu\n", rec->r.trust.ownertrust, + rec->r.trust.depth, rec->r.trust.validlist); + break; + case RECTYPE_VALID: + fprintf(fp, "valid "); + for(i=0; i < 20; i++ ) + fprintf(fp, "%02X", rec->r.valid.namehash[i] ); + fprintf (fp, ", v=%d, next=%lu\n", rec->r.valid.validity, + rec->r.valid.next); + break; default: fprintf(fp, "unknown type %d\n", rec->rectype ); break; @@ -1233,7 +1117,7 @@ tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected ) if( !buf ) { if( lseek( db_fd, recnum * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) { log_error(_("trustdb: lseek failed: %s\n"), strerror(errno) ); - return GPGERR_READ_FILE; + return G10ERR_READ_FILE; } n = read( db_fd, readbuf, TRUST_RECORD_LEN); if( !n ) { @@ -1242,7 +1126,7 @@ tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected ) else if( n != TRUST_RECORD_LEN ) { log_error(_("trustdb: read failed (n=%d): %s\n"), n, strerror(errno) ); - return GPGERR_READ_FILE; + return G10ERR_READ_FILE; } buf = readbuf; } @@ -1253,7 +1137,7 @@ tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected ) if( expected && rec->rectype != expected ) { log_error("%lu: read expected rec type %d, got %d\n", recnum, expected, rec->rectype ); - return GPGERR_TRUSTDB; + return G10ERR_TRUSTDB; } p++; /* skip reserved byte */ switch( rec->rectype ) { @@ -1262,123 +1146,35 @@ tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected ) case RECTYPE_VER: /* version record */ if( memcmp(buf+1, "gpg", 3 ) ) { log_error( _("%s: not a trustdb file\n"), db_name ); - rc = GPGERR_TRUSTDB; + rc = G10ERR_TRUSTDB; } - p += 2; /* skip "pgp" */ + p += 2; /* skip "gpg" */ rec->r.ver.version = *p++; rec->r.ver.marginals = *p++; rec->r.ver.completes = *p++; rec->r.ver.cert_depth = *p++; p += 4; /* lock flags */ rec->r.ver.created = buftoulong(p); p += 4; - rec->r.ver.mod_down = buftoulong(p); p += 4; - rec->r.ver.mod_up = buftoulong(p); p += 4; - rec->r.ver.keyhashtbl=buftoulong(p); p += 4; + rec->r.ver.nextcheck = buftoulong(p); p += 4; + p += 4; + p += 4; rec->r.ver.firstfree =buftoulong(p); p += 4; - rec->r.ver.sdirhashtbl =buftoulong(p); p += 4; + p += 4; + rec->r.ver.trusthashtbl =buftoulong(p); p += 4; if( recnum ) { log_error( _("%s: version record with recnum %lu\n"), db_name, (ulong)recnum ); - rc = GPGERR_TRUSTDB; + rc = G10ERR_TRUSTDB; } - else if( rec->r.ver.version != 2 ) { + else if( rec->r.ver.version != 3 ) { log_error( _("%s: invalid file version %d\n"), db_name, rec->r.ver.version ); - rc = GPGERR_TRUSTDB; + rc = G10ERR_TRUSTDB; } break; case RECTYPE_FREE: rec->r.free.next = buftoulong(p); p += 4; break; - case RECTYPE_DIR: /*directory record */ - rec->r.dir.lid = buftoulong(p); p += 4; - rec->r.dir.keylist = buftoulong(p); p += 4; - rec->r.dir.uidlist = buftoulong(p); p += 4; - rec->r.dir.cacherec = buftoulong(p); p += 4; - rec->r.dir.ownertrust = *p++; - rec->r.dir.dirflags = *p++; - rec->r.dir.validity = *p++; - rec->r.dir.valcheck = buftoulong(p); p += 4; - rec->r.dir.checkat = buftoulong(p); p += 4; - switch( rec->r.dir.validity ) { - case 0: - case TRUST_UNDEFINED: - case TRUST_NEVER: - case TRUST_MARGINAL: - case TRUST_FULLY: - case TRUST_ULTIMATE: - break; - default: - log_info("lid %lu: invalid validity value - cleared\n", recnum); - } - if( rec->r.dir.lid != recnum ) { - log_error( "%s: dir LID != recnum (%lu,%lu)\n", - db_name, rec->r.dir.lid, (ulong)recnum ); - rc = GPGERR_TRUSTDB; - } - break; - case RECTYPE_KEY: /* public key record */ - rec->r.key.lid = buftoulong(p); p += 4; - rec->r.key.next = buftoulong(p); p += 4; - p += 7; - rec->r.key.keyflags = *p++; - rec->r.key.pubkey_algo = *p++; - rec->r.key.fingerprint_len = *p++; - if( rec->r.key.fingerprint_len < 1 || rec->r.key.fingerprint_len > 20 ) - rec->r.key.fingerprint_len = 20; - memcpy( rec->r.key.fingerprint, p, 20); - break; - case RECTYPE_UID: /* user id record */ - rec->r.uid.lid = buftoulong(p); p += 4; - rec->r.uid.next = buftoulong(p); p += 4; - rec->r.uid.prefrec = buftoulong(p); p += 4; - rec->r.uid.siglist = buftoulong(p); p += 4; - rec->r.uid.uidflags = *p++; - rec->r.uid.validity = *p++; - switch( rec->r.uid.validity ) { - case 0: - case TRUST_UNDEFINED: - case TRUST_NEVER: - case TRUST_MARGINAL: - case TRUST_FULLY: - case TRUST_ULTIMATE: - break; - default: - log_info("lid %lu: invalid validity value - cleared\n", recnum); - } - memcpy( rec->r.uid.namehash, p, 20); - break; - case RECTYPE_PREF: /* preference record */ - rec->r.pref.lid = buftoulong(p); p += 4; - rec->r.pref.next = buftoulong(p); p += 4; - memcpy( rec->r.pref.data, p, 30 ); - break; - case RECTYPE_SIG: - rec->r.sig.lid = buftoulong(p); p += 4; - rec->r.sig.next = buftoulong(p); p += 4; - for(i=0; i < SIGS_PER_RECORD; i++ ) { - rec->r.sig.sig[i].lid = buftoulong(p); p += 4; - rec->r.sig.sig[i].flag = *p++; - } - break; - case RECTYPE_SDIR: /* shadow directory record */ - rec->r.sdir.lid = buftoulong(p); p += 4; - rec->r.sdir.keyid[0]= buftou32(p); p += 4; - rec->r.sdir.keyid[1]= buftou32(p); p += 4; - rec->r.sdir.pubkey_algo = *p++; - p += 3; - rec->r.sdir.hintlist = buftoulong(p); - if( rec->r.sdir.lid != recnum ) { - log_error( "%s: sdir LID != recnum (%lu,%lu)\n", - db_name, rec->r.sdir.lid, (ulong)recnum ); - rc = GPGERR_TRUSTDB; - } - break; - case RECTYPE_CACH: /* cache record */ - rec->r.cache.lid = buftoulong(p); p += 4; - memcpy(rec->r.cache.blockhash, p, 20); p += 20; - rec->r.cache.trustlevel = *p++; - break; case RECTYPE_HTBL: for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) { rec->r.htbl.item[i] = buftoulong(p); p += 4; @@ -1390,10 +1186,22 @@ tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected ) rec->r.hlst.rnum[i] = buftoulong(p); p += 4; } break; + case RECTYPE_TRUST: + memcpy( rec->r.trust.fingerprint, p, 20); p+=20; + rec->r.trust.ownertrust = *p++; + rec->r.trust.depth = *p++; + p += 2; + rec->r.trust.validlist = buftoulong(p); p += 4; + break; + case RECTYPE_VALID: + memcpy( rec->r.valid.namehash, p, 20); p+=20; + rec->r.valid.validity = *p++; + rec->r.valid.next = buftoulong(p); p += 4; + break; default: log_error( "%s: invalid record type %d at recnum %lu\n", db_name, rec->rectype, (ulong)recnum ); - rc = GPGERR_TRUSTDB; + rc = G10ERR_TRUSTDB; break; } @@ -1430,79 +1238,18 @@ tdbio_write_record( TRUSTREC *rec ) *p++ = rec->r.ver.cert_depth; p += 4; /* skip lock flags */ ulongtobuf(p, rec->r.ver.created); p += 4; - ulongtobuf(p, rec->r.ver.mod_down); p += 4; - ulongtobuf(p, rec->r.ver.mod_up); p += 4; - ulongtobuf(p, rec->r.ver.keyhashtbl); p += 4; + ulongtobuf(p, rec->r.ver.nextcheck); p += 4; + p += 4; + p += 4; ulongtobuf(p, rec->r.ver.firstfree ); p += 4; - ulongtobuf(p, rec->r.ver.sdirhashtbl ); p += 4; + p += 4; + ulongtobuf(p, rec->r.ver.trusthashtbl ); p += 4; break; case RECTYPE_FREE: ulongtobuf(p, rec->r.free.next); p += 4; break; - case RECTYPE_DIR: /*directory record */ - ulongtobuf(p, rec->r.dir.lid); p += 4; - ulongtobuf(p, rec->r.dir.keylist); p += 4; - ulongtobuf(p, rec->r.dir.uidlist); p += 4; - ulongtobuf(p, rec->r.dir.cacherec); p += 4; - *p++ = rec->r.dir.ownertrust; - *p++ = rec->r.dir.dirflags; - *p++ = rec->r.dir.validity; - ulongtobuf(p, rec->r.dir.valcheck); p += 4; - ulongtobuf(p, rec->r.dir.checkat); p += 4; - assert( rec->r.dir.lid == recnum ); - break; - - case RECTYPE_KEY: - ulongtobuf(p, rec->r.key.lid); p += 4; - ulongtobuf(p, rec->r.key.next); p += 4; - p += 7; - *p++ = rec->r.key.keyflags; - *p++ = rec->r.key.pubkey_algo; - *p++ = rec->r.key.fingerprint_len; - memcpy( p, rec->r.key.fingerprint, 20); p += 20; - break; - - case RECTYPE_UID: /* user id record */ - ulongtobuf(p, rec->r.uid.lid); p += 4; - ulongtobuf(p, rec->r.uid.next); p += 4; - ulongtobuf(p, rec->r.uid.prefrec); p += 4; - ulongtobuf(p, rec->r.uid.siglist); p += 4; - *p++ = rec->r.uid.uidflags; - *p++ = rec->r.uid.validity; - memcpy( p, rec->r.uid.namehash, 20 ); p += 20; - break; - - case RECTYPE_PREF: - ulongtobuf(p, rec->r.pref.lid); p += 4; - ulongtobuf(p, rec->r.pref.next); p += 4; - memcpy( p, rec->r.pref.data, 30 ); - break; - - case RECTYPE_SIG: - ulongtobuf(p, rec->r.sig.lid); p += 4; - ulongtobuf(p, rec->r.sig.next); p += 4; - for(i=0; i < SIGS_PER_RECORD; i++ ) { - ulongtobuf(p, rec->r.sig.sig[i].lid); p += 4; - *p++ = rec->r.sig.sig[i].flag; - } - break; - - case RECTYPE_SDIR: - ulongtobuf( p, rec->r.sdir.lid); p += 4; - u32tobuf( p, rec->r.sdir.keyid[0] ); p += 4; - u32tobuf( p, rec->r.sdir.keyid[1] ); p += 4; - *p++ = rec->r.sdir.pubkey_algo; - p += 3; - ulongtobuf( p, rec->r.sdir.hintlist ); - break; - - case RECTYPE_CACH: - ulongtobuf(p, rec->r.cache.lid); p += 4; - memcpy(p, rec->r.cache.blockhash, 20); p += 20; - *p++ = rec->r.cache.trustlevel; - break; case RECTYPE_HTBL: for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) { @@ -1517,6 +1264,20 @@ tdbio_write_record( TRUSTREC *rec ) } break; + case RECTYPE_TRUST: + memcpy( p, rec->r.trust.fingerprint, 20); p += 20; + *p++ = rec->r.trust.ownertrust; + *p++ = rec->r.trust.depth; + p += 2; + ulongtobuf( p, rec->r.trust.validlist); p += 4; + break; + + case RECTYPE_VALID: + memcpy( p, rec->r.valid.namehash, 20); p += 20; + *p++ = rec->r.valid.validity; + ulongtobuf( p, rec->r.valid.next); p += 4; + break; + default: BUG(); } @@ -1524,10 +1285,8 @@ tdbio_write_record( TRUSTREC *rec ) rc = put_record_into_cache( recnum, buf ); if( rc ) ; - else if( rec->rectype == RECTYPE_KEY ) - rc = update_keyhashtbl( rec ); - else if( rec->rectype == RECTYPE_SDIR ) - rc = update_sdirhashtbl( rec ); + else if( rec->rectype == RECTYPE_TRUST ) + rc = update_trusthashtbl( rec ); return rc; } @@ -1542,10 +1301,10 @@ tdbio_delete_record( ulong recnum ) rc = tdbio_read_record( recnum, &rec, 0 ); if( rc ) ; - else if( rec.rectype == RECTYPE_KEY ) - rc = drop_from_keyhashtbl( &rec ); - else if( rec.rectype == RECTYPE_SDIR ) - rc = drop_from_sdirhashtbl( &rec ); + else if( rec.rectype == RECTYPE_TRUST ) { + rc = drop_from_hashtable( get_trusthashrec(), + rec.r.trust.fingerprint, 20, rec.recnum ); + } if( rc ) return rc; @@ -1554,7 +1313,7 @@ tdbio_delete_record( ulong recnum ) rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), - db_name, gpg_errstr(rc) ); + db_name, g10_errstr(rc) ); rec.recnum = recnum; rec.rectype = RECTYPE_FREE; @@ -1581,13 +1340,13 @@ tdbio_new_recnum() rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), - db_name, gpg_errstr(rc) ); + db_name, g10_errstr(rc) ); if( vr.r.ver.firstfree ) { recnum = vr.r.ver.firstfree; rc = tdbio_read_record( recnum, &rec, RECTYPE_FREE ); if( rc ) { log_error( _("%s: error reading free record: %s\n"), - db_name, gpg_errstr(rc) ); + db_name, g10_errstr(rc) ); return rc; } /* update dir record */ @@ -1595,7 +1354,7 @@ tdbio_new_recnum() rc = tdbio_write_record( &vr ); if( rc ) { log_error( _("%s: error writing dir record: %s\n"), - db_name, gpg_errstr(rc) ); + db_name, g10_errstr(rc) ); return rc; } /*zero out the new record */ @@ -1605,7 +1364,7 @@ tdbio_new_recnum() rc = tdbio_write_record( &rec ); if( rc ) log_fatal(_("%s: failed to zero a record: %s\n"), - db_name, gpg_errstr(rc)); + db_name, g10_errstr(rc)); } else { /* not found, append a new record */ offset = lseek( db_fd, 0, SEEK_END ); @@ -1622,131 +1381,193 @@ tdbio_new_recnum() if( lseek( db_fd, recnum * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) { log_error(_("trustdb rec %lu: lseek failed: %s\n"), recnum, strerror(errno) ); - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; } else { int n = write( db_fd, &rec, TRUST_RECORD_LEN); if( n != TRUST_RECORD_LEN ) { log_error(_("trustdb rec %lu: write failed (n=%d): %s\n"), recnum, n, strerror(errno) ); - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; } } if( rc ) log_fatal(_("%s: failed to append a record: %s\n"), - db_name, gpg_errstr(rc)); + db_name, g10_errstr(rc)); } return recnum ; } -/**************** - * Search the trustdb for a key which matches PK and return the dir record - * The local_id of PK is set to the correct value - */ +static int +cmp_trec_fpr ( void *fpr, const TRUSTREC *rec ) +{ + return rec->rectype == RECTYPE_TRUST + && !memcmp( rec->r.trust.fingerprint, fpr, 20); +} + + int -tdbio_search_dir_bypk( PKT_public_key *pk, TRUSTREC *rec ) +tdbio_search_trust_byfpr( const byte *fingerprint, TRUSTREC *rec ) +{ + int rc; + + /* locate the trust record using the hash table */ + rc = lookup_hashtable( get_trusthashrec(), fingerprint, 20, + cmp_trec_fpr, (void*)fingerprint, rec ); + return rc; +} + +int +tdbio_search_trust_bypk (PKT_public_key *pk, TRUSTREC *rec) { byte fingerprint[MAX_FINGERPRINT_LEN]; size_t fingerlen; - u32 keyid[2]; - int rc; - keyid_from_pk( pk, keyid ); fingerprint_from_pk( pk, fingerprint, &fingerlen ); - rc = tdbio_search_dir_byfpr( fingerprint, fingerlen, - pk->pubkey_algo, rec ); - - if( !rc ) { - if( pk->local_id && pk->local_id != rec->recnum ) - log_error("%s: found record, but LID from memory does " - "not match recnum (%lu,%lu)\n", - db_name, pk->local_id, rec->recnum ); - pk->local_id = rec->recnum; - } - return rc; + for (; fingerlen < 20; fingerlen++ ) + fingerprint[fingerlen] = 0; + return tdbio_search_trust_byfpr (fingerprint, rec); } -static int -cmp_krec_fpr( void *dataptr, const TRUSTREC *rec ) -{ - const struct cmp_krec_fpr_struct *d = dataptr; - - return rec->rectype == RECTYPE_KEY - && ( !d->pubkey_algo || rec->r.key.pubkey_algo == d->pubkey_algo ) - && rec->r.key.fingerprint_len == d->fprlen - && !memcmp( rec->r.key.fingerprint, d->fpr, d->fprlen ); -} - -int -tdbio_search_dir_byfpr( const byte *fingerprint, size_t fingerlen, - int pubkey_algo, TRUSTREC *rec ) -{ - struct cmp_krec_fpr_struct cmpdata; - ulong recnum; - int rc; - - assert( fingerlen == 20 || fingerlen == 16 ); - - /* locate the key using the hash table */ - cmpdata.pubkey_algo = pubkey_algo; - cmpdata.fpr = fingerprint; - cmpdata.fprlen = fingerlen; - rc = lookup_hashtable( get_keyhashrec(), fingerprint, fingerlen, - cmp_krec_fpr, &cmpdata, rec ); - if( !rc ) { - recnum = rec->r.key.lid; - /* Now read the dir record */ - rc = tdbio_read_record( recnum, rec, RECTYPE_DIR); - if( rc ) - log_error("%s: can't read dirrec %lu: %s\n", - db_name, recnum, gpg_errstr(rc) ); - } - return rc; -} - - - -static int -cmp_sdir( void *dataptr, const TRUSTREC *rec ) -{ - const struct cmp_xdir_struct *d = dataptr; - - return rec->rectype == RECTYPE_SDIR - && ( !d->pubkey_algo || rec->r.sdir.pubkey_algo == d->pubkey_algo ) - && rec->r.sdir.keyid[0] == d->keyid[0] - && rec->r.sdir.keyid[1] == d->keyid[1]; -} - - -int -tdbio_search_sdir( u32 *keyid, int pubkey_algo, TRUSTREC *rec ) -{ - struct cmp_xdir_struct cmpdata; - int rc; - byte key[8]; - - /* locate the shadow dir record using the hash table */ - u32tobuf( key , keyid[0] ); - u32tobuf( key+4 , keyid[1] ); - cmpdata.pubkey_algo = pubkey_algo; - cmpdata.keyid[0] = keyid[0]; - cmpdata.keyid[1] = keyid[1]; - rc = lookup_hashtable( get_sdirhashrec(), key, 8, - cmp_sdir, &cmpdata, rec ); - return rc; -} - void tdbio_invalid(void) { log_error(_( "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n") ); - gpg_exit(2); + g10_exit(2); +} + +/* + * Migrate the trustdb as just up to gpg 1.0.6 (trustdb version 2) + * to the 2.1 version as used with 1.0.6b - This is pretty trivial as needs + * only to scan the tdb and insert new the new trust records. The old ones are + * obsolte from now on + */ +static void +migrate_from_v2 () +{ + TRUSTREC rec; + int i, n; + struct { + ulong keyrecno; + byte ot; + byte okay; + byte fpr[20]; + } *ottable; + int ottable_size, ottable_used; + byte oldbuf[40]; + ulong recno; + int rc, count; + + ottable_size = 5; + ottable = m_alloc (ottable_size * sizeof *ottable); + ottable_used = 0; + + /* We have some restrictions here. We can't use the version record + * and we can't use any of the old hashtables because we dropped the + * code. So we first collect all ownertrusts and then use a second + * pass fo find the associated keys. We have to do this all without using + * the regular record read functions. + */ + + /* get all the ownertrusts */ + if (lseek (db_fd, 0, SEEK_SET ) == -1 ) + log_fatal ("migrate_from_v2: lseek failed: %s\n", strerror (errno)); + for (recno=0;;recno++) + { + do + n = read (db_fd, oldbuf, 40); + while (n==-1 && errno == EINTR); + if (!n) + break; /* eof */ + if (n != 40) + log_fatal ("migrate_vfrom_v2: read error or short read\n"); + + if (*oldbuf != 2) + continue; + + /* v2 dir record */ + if (ottable_used == ottable_size) + { + ottable_size += 1000; + ottable = m_realloc (ottable, ottable_size * sizeof *ottable); + } + ottable[ottable_used].keyrecno = buftoulong (oldbuf+6); + ottable[ottable_used].ot = oldbuf[18]; + ottable[ottable_used].okay = 0; + memset (ottable[ottable_used].fpr,0, 20); + if (ottable[ottable_used].keyrecno && ottable[ottable_used].ot) + ottable_used++; + } + log_info ("found %d ownertrust records\n", ottable_used); + + /* Read again and find the fingerprints */ + if (lseek (db_fd, 0, SEEK_SET ) == -1 ) + log_fatal ("migrate_from_v2: lseek failed: %s\n", strerror (errno)); + for (recno=0;;recno++) + { + do + n = read (db_fd, oldbuf, 40); + while (n==-1 && errno == EINTR); + if (!n) + break; /* eof */ + if (n != 40) + log_fatal ("migrate_from_v2: read error or short read\n"); + + if (*oldbuf != 3) + continue; + + /* v2 key record */ + for (i=0; i < ottable_used; i++) + { + if (ottable[i].keyrecno == recno) + { + memcpy (ottable[i].fpr, oldbuf+20, 20); + ottable[i].okay = 1; + break; + } + } + } + + /* got everything - create the v3 trustdb */ + if (ftruncate (db_fd, 0)) + log_fatal ("can't truncate `%s': %s\n", db_name, strerror (errno) ); + if (create_version_record ()) + log_fatal ("failed to recreate version record of `%s'\n", db_name); + + /* access the hash table, so it is store just after the version record, + * this is not needed put a dump is more pretty */ + get_trusthashrec (); + + /* And insert the old ownertrust values */ + count = 0; + for (i=0; i < ottable_used; i++) + { + if (!ottable[i].okay) + continue; + + memset (&rec, 0, sizeof rec); + rec.recnum = tdbio_new_recnum (); + rec.rectype = RECTYPE_TRUST; + memcpy(rec.r.trust.fingerprint, ottable[i].fpr, 20); + rec.r.trust.ownertrust = ottable[i].ot; + if (tdbio_write_record (&rec)) + log_fatal ("failed to write trust record of `%s'\n", db_name); + count++; + } + + revalidation_mark (); + rc = tdbio_sync (); + if (rc) + log_fatal ("failed to sync `%s'\n", db_name); + log_info ("migrated %d version 2 ownertrusts\n", count); + m_free (ottable); } + diff --git a/g10/tdbio.h b/g10/tdbio.h index a2e5404f6..f2c6bec1b 100644 --- a/g10/tdbio.h +++ b/g10/tdbio.h @@ -1,5 +1,5 @@ /* tdbio.h - Trust database I/O functions - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -18,8 +18,8 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_TDBIO_H -#define GPG_TDBIO_H +#ifndef G10_TDBIO_H +#define G10_TDBIO_H #include "host2net.h" @@ -35,41 +35,13 @@ #define RECTYPE_VER 1 -#define RECTYPE_DIR 2 -#define RECTYPE_KEY 3 -#define RECTYPE_UID 4 -#define RECTYPE_PREF 5 -#define RECTYPE_SIG 6 -#define RECTYPE_SDIR 8 -#define RECTYPE_CACH 9 #define RECTYPE_HTBL 10 #define RECTYPE_HLST 11 +#define RECTYPE_TRUST 12 +#define RECTYPE_VALID 13 #define RECTYPE_FREE 254 -#define DIRF_CHECKED 1 /* has been checked - bits 1,2,3 are valid */ -#define DIRF_VALID 2 /* This key is valid: There is at least */ - /* one uid with a selfsignature or an revocation */ -#define DIRF_EXPIRED 4 /* the complete key has expired */ -#define DIRF_REVOKED 8 /* the complete key has been revoked */ -#define DIRF_NEWKEYS 128 /* new keys are available: we can check the sigs */ - -#define KEYF_CHECKED 1 /* This key has been checked */ -#define KEYF_VALID 2 /* This is a valid (sub)key */ -#define KEYF_EXPIRED 4 /* this key is expired */ -#define KEYF_REVOKED 8 /* this key has been revoked */ - -#define UIDF_CHECKED 1 /* user id has been checked - other bits are valid */ -#define UIDF_VALID 2 /* this is a valid user id */ -#define UIDF_REVOKED 8 /* this user id has been revoked */ - -#define SIGF_CHECKED 1 /* signature has been checked - bits 0..6 are valid */ -#define SIGF_VALID 2 /* the signature is valid */ -#define SIGF_EXPIRED 4 /* the key of this signature has expired */ -#define SIGF_REVOKED 8 /* this signature has been revoked */ -#define SIGF_IGNORED 64 /* this signature is ignored by the system */ -#define SIGF_NOPUBKEY 128 /* there is no pubkey for this sig */ - struct trust_record { int rectype; int mark; @@ -78,73 +50,21 @@ struct trust_record { ulong recnum; union { struct { /* version record: */ - byte version; /* should be 2 */ + byte version; /* should be 3 */ byte marginals; byte completes; byte cert_depth; ulong created; /* timestamp of trustdb creation */ - ulong mod_down; /* timestamp of last modification downward */ - ulong mod_up; /* timestamp of last modification upward */ - ulong keyhashtbl; + ulong nextcheck; /* timestamp of next scheduled check */ + ulong reserved; + ulong reserved2; ulong firstfree; - ulong sdirhashtbl; + ulong reserved3; + ulong trusthashtbl; } ver; struct { /* free record */ ulong next; } free; - struct { /* directory record */ - ulong lid; - ulong keylist; /* List of keys (the first is the primary key)*/ - ulong uidlist; /* list of uid records */ - ulong cacherec; /* the cache record */ - byte ownertrust; - byte dirflags; - byte validity; /* calculated trustlevel over all uids */ - ulong valcheck; /* timestamp of last validation check */ - ulong checkat; /* Check key when this time has been reached*/ - } dir; - struct { /* primary public key record */ - ulong lid; - ulong next; /* next key */ - byte keyflags; - byte pubkey_algo; - byte fingerprint_len; - byte fingerprint[20]; - } key; - struct { /* user id reord */ - ulong lid; /* point back to the directory record */ - ulong next; /* points to next user id record */ - ulong prefrec; /* recno of preference record */ - ulong siglist; /* list of valid signatures (w/o self-sig)*/ - byte uidflags; - byte validity; /* calculated trustlevel of this uid */ - byte namehash[20]; /* ripemd hash of the username */ - } uid; - struct { /* preference record */ - ulong lid; /* point back to the directory record */ - /* or 0 for a global pref record */ - ulong next; /* points to next pref record */ - byte data[ITEMS_PER_PREF_RECORD]; - } pref; - struct { /* signature record */ - ulong lid; - ulong next; /* recnno of next record or NULL for last one */ - struct { - ulong lid; /* of pubkey record of signator (0=unused) */ - byte flag; /* SIGF_xxxxx */ - } sig[SIGS_PER_RECORD]; - } sig; - struct { - ulong lid; - u32 keyid[2]; - byte pubkey_algo; - u32 hintlist; - } sdir; - struct { /* cache record */ - ulong lid; - byte blockhash[20]; - byte trustlevel; /* calculated trustlevel */ - } cache; struct { ulong item[ITEMS_PER_HTBL_RECORD]; } htbl; @@ -152,25 +72,21 @@ struct trust_record { ulong next; ulong rnum[ITEMS_PER_HLST_RECORD]; /* of another record */ } hlst; + struct { + byte fingerprint[20]; + byte ownertrust; + byte depth; + ulong validlist; + } trust; + struct { + byte namehash[20]; + ulong next; + byte validity; + } valid; } r; }; typedef struct trust_record TRUSTREC; -typedef struct { - ulong lid; /* localid */ - ulong sigrec; - ulong sig_lid; /* returned signatures LID */ - unsigned sig_flag; /* returned signature record flag */ - struct { /* internal data */ - int init_done; - int eof; - TRUSTREC rec; - ulong nextuid; - int index; - } ctl; -} SIGREC_CONTEXT; - - /*-- tdbio.c --*/ int tdbio_set_dbname( const char *new_dbname, int create ); const char *tdbio_get_dbname(void); @@ -178,8 +94,8 @@ void tdbio_dump_record( TRUSTREC *rec, FILE *fp ); int tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected ); int tdbio_write_record( TRUSTREC *rec ); int tdbio_db_matches_options(void); -ulong tdbio_read_modify_stamp( int modify_down ); -void tdbio_write_modify_stamp( int up, int down ); +ulong tdbio_read_nextcheck (void); +int tdbio_write_nextcheck (ulong stamp); int tdbio_is_dirty(void); int tdbio_sync(void); int tdbio_begin_transaction(void); @@ -187,12 +103,9 @@ int tdbio_end_transaction(void); int tdbio_cancel_transaction(void); int tdbio_delete_record( ulong recnum ); ulong tdbio_new_recnum(void); -int tdbio_search_dir_bypk( PKT_public_key *pk, TRUSTREC *rec ); -int tdbio_search_dir_byfpr( const byte *fingerprint, size_t fingerlen, - int pubkey_algo, TRUSTREC *rec ); -int tdbio_search_dir( u32 *keyid, int pubkey_algo, TRUSTREC *rec ); -int tdbio_search_sdir( u32 *keyid, int pubkey_algo, TRUSTREC *rec ); +int tdbio_search_trust_byfpr(const byte *fingerprint, TRUSTREC *rec ); +int tdbio_search_trust_bypk(PKT_public_key *pk, TRUSTREC *rec ); void tdbio_invalid(void); -#endif /*GPG_TDBIO_H*/ +#endif /*G10_TDBIO_H*/ diff --git a/g10/textfilter.c b/g10/textfilter.c index a360ffccb..ded030d79 100644 --- a/g10/textfilter.c +++ b/g10/textfilter.c @@ -1,5 +1,5 @@ /* textfilter.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,9 +25,9 @@ #include #include -#include #include "errors.h" #include "iobuf.h" +#include "memory.h" #include "util.h" #include "filter.h" #include "i18n.h" @@ -133,7 +133,7 @@ text_filter( void *opaque, int control, if( tfx->truncated ) log_error(_("can't handle text lines longer than %d characters\n"), MAX_LINELEN ); - gcry_free( tfx->buffer ); + m_free( tfx->buffer ); tfx->buffer = NULL; } else if( control == IOBUFCTRL_DESC ) @@ -147,7 +147,7 @@ text_filter( void *opaque, int control, * md is updated as required by rfc2440 */ int -copy_clearsig_text( IOBUF out, IOBUF inp, GCRY_MD_HD md, +copy_clearsig_text( IOBUF out, IOBUF inp, MD_HANDLE md, int escape_dash, int escape_from, int pgp2mode ) { unsigned maxlen; @@ -175,15 +175,15 @@ copy_clearsig_text( IOBUF out, IOBUF inp, GCRY_MD_HD md, /* update the message digest */ if( escape_dash ) { if( pending_lf ) { - gcry_md_putc( md, '\r' ); - gcry_md_putc( md, '\n' ); + md_putc( md, '\r' ); + md_putc( md, '\n' ); } - gcry_md_write( md, buffer, + md_write( md, buffer, len_without_trailing_chars( buffer, n, pgp2mode? " \r\n":" \t\r\n")); } else - gcry_md_write( md, buffer, n ); + md_write( md, buffer, n ); pending_lf = buffer[n-1] == '\n'; /* write the output */ @@ -224,7 +224,7 @@ copy_clearsig_text( IOBUF out, IOBUF inp, GCRY_MD_HD md, if( !pending_lf ) { /* make sure that the file ends with a LF */ iobuf_writestr( out, LF ); if( !escape_dash ) - gcry_md_putc( md, '\n' ); + md_putc( md, '\n' ); } if( truncated ) diff --git a/g10/trustdb.c b/g10/trustdb.c index 1fd2383c0..85b7dbcb9 100644 --- a/g10/trustdb.c +++ b/g10/trustdb.c @@ -1,5 +1,5 @@ /* trustdb.c - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -22,601 +22,355 @@ #include #include #include -#include -#include #include -#include -#include -#include -#include #include "errors.h" #include "iobuf.h" #include "keydb.h" -#include +#include "memory.h" #include "util.h" -#include "trustdb.h" #include "options.h" #include "packet.h" #include "main.h" #include "i18n.h" #include "tdbio.h" -#include "ttyio.h" +#include "trustdb.h" -#if MAX_FINGERPRINT_LEN > 20 - #error Must change structure of trustdb -#endif -struct keyid_list { - struct keyid_list *next; - u32 keyid[2]; -}; - -struct local_id_item { - struct local_id_item *next; - ulong lid; - unsigned flag; -}; - -struct local_id_table { - struct local_id_table *next; /* only used to keep a list of unused tables */ - struct local_id_item *items[16]; +/* + * A structure to store key identification as well as some stuff needed + * for validation + */ +struct key_item { + struct key_item *next; + unsigned int ownertrust; + u32 kid[2]; }; -typedef struct local_id_table *LOCAL_ID_TABLE; +typedef struct key_item **KeyHashTable; /* see new_key_hash_table() */ - -struct enum_cert_paths_ctx { - int init; - int idx; +/* + * Structure to keep track of keys, this is used as an array wherre + * the item right after the last one has a keyblock set to NULL. + * Maybe we can drop this thing and replace it by key_item + */ +struct key_array { + KBNODE keyblock; }; -struct recno_list_struct { - struct recno_list_struct *next; - ulong recno; - int type; -}; -typedef struct recno_list_struct *RECNO_LIST; - - - -typedef struct trust_node *TN; -struct trust_node { - TN back; /* parent */ - TN list; /* list of other node (should all be of the same type)*/ - TN next; /* used to build the list */ - int is_uid; /* set if this is an uid node */ - ulong lid; /* key or uid recordnumber */ - union { - struct { - int ownertrust; - int validity; - /* helper */ - int buckstop; - } k; - struct { - int marginal_count; - int fully_count; - int validity; - } u; - } n; -}; - - -static TN used_tns; -static int alloced_tns; -static int max_alloced_tns; - -static struct keyid_list *trusted_key_list; - -static LOCAL_ID_TABLE new_lid_table(void); -static int ins_lid_table_item( LOCAL_ID_TABLE tbl, ulong lid, unsigned flag ); -static int qry_lid_table_flag( LOCAL_ID_TABLE tbl, ulong lid, unsigned *flag ); - - -static int propagate_validity( TN root, TN node, - int (*add_fnc)(ulong), unsigned *retflgs ); - -static void print_user_id( FILE *fp, const char *text, u32 *keyid ); -static int do_check( TRUSTREC *drec, unsigned *trustlevel, - const char *nhash, int (*add_fnc)(ulong), - unsigned *retflgs); -static int get_dir_record( PKT_public_key *pk, TRUSTREC *rec ); -static int do_update_trust_record( KBNODE keyblock, TRUSTREC *drec, - int sigs_only, int *modified ); -static int check_trust_record( TRUSTREC *drec, int sigs_only ); -static void mark_fresh_keys(void); - -/* a table used to keep track of ultimately trusted keys - * which are the ones from our secrings and the trusted keys */ -static LOCAL_ID_TABLE ultikey_table; - - -/* a table to keep track of newly importted keys. This one is - * create by the insert_trust_record function and from time to time - * used to verify key signature which have been done with these new keys */ -static LOCAL_ID_TABLE fresh_imported_keys; -static int fresh_imported_keys_count; -#define FRESH_KEY_CHECK_THRESHOLD 200 - -/* list of unused lid items and tables */ -static LOCAL_ID_TABLE unused_lid_tables; -static struct local_id_item *unused_lid_items; - +/* control information for the trust DB */ static struct { int init; int level; char *dbname; } trustdb_args; +/* some globals */ +static struct key_item *user_utk_list; /* temp. used to store --trusted-keys */ +static struct key_item *utk_list; /* all ultimately trusted keys */ + +static int pending_check_trustdb; + +static int validate_keys (int interactive); + /********************************************** - *********** record read write ************** + ************* some helpers ******************* **********************************************/ +static struct key_item * +new_key_item (void) +{ + struct key_item *k; + + k = m_alloc_clear (sizeof *k); + return k; +} + +static void +release_key_items (struct key_item *k) +{ + struct key_item *k2; + + for (; k; k = k2) + { + k2 = k->next; + m_free (k); + } +} + +/* + * For fast keylook up we need a hash table. Each byte of a KeyIDs + * should be distributed equally over the 256 possible values (except + * for v3 keyIDs but we consider them as not important here). So we + * can just use 10 bits to index a table of 1024 key items. + * Possible optimization: Don not use key_items but other hash_table when the + * duplicates lists gets too large. + */ +static KeyHashTable +new_key_hash_table (void) +{ + struct key_item **tbl; + + tbl = m_alloc_clear (1024 * sizeof *tbl); + return tbl; +} + +static void +release_key_hash_table (KeyHashTable tbl) +{ + int i; + + if (!tbl) + return; + for (i=0; i < 1024; i++) + release_key_items (tbl[i]); + m_free (tbl); +} + +/* + * Returns: True if the keyID is in the given hash table + */ +static int +test_key_hash_table (KeyHashTable tbl, u32 *kid) +{ + struct key_item *k; + + for (k = tbl[(kid[1] & 0x03ff)]; k; k = k->next) + if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) + return 1; + return 0; +} + +/* + * Add a new key to the hash table. The key is identified by its key ID. + */ +static void +add_key_hash_table (KeyHashTable tbl, u32 *kid) +{ + struct key_item *k, *kk; + + for (k = tbl[(kid[1] & 0x03ff)]; k; k = k->next) + if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) + return; /* already in table */ + + kk = new_key_item (); + kk->kid[0] = kid[0]; + kk->kid[1] = kid[1]; + kk->next = tbl[(kid[1] & 0x03ff)]; + tbl[(kid[1] & 0x03ff)] = kk; +} + +/* + * Release a key_array + */ +static void +release_key_array ( struct key_array *keys ) +{ + struct key_array *k; + + if (keys) { + for (k=keys; k->keyblock; k++) + release_kbnode (k->keyblock); + m_free (keys); + } +} + + +/********************************************* + ********** Initialization ***************** + *********************************************/ + + + +/* + * Used to register extra ultimately trusted keys - this has to be done + * before initializing the validation module. + * FIXME: Should be replaced by a function to add those keys to the trustdb. + */ +void +register_trusted_key( const char *string ) +{ + KEYDB_SEARCH_DESC desc; + struct key_item *k; + + if (classify_user_id (string, &desc) != KEYDB_SEARCH_MODE_LONG_KID ) { + log_error(_("`%s' is not a valid long keyID\n"), string ); + return; + } + + k = new_key_item (); + k->kid[0] = desc.u.kid[0]; + k->kid[1] = desc.u.kid[1]; + k->next = user_utk_list; + user_utk_list = k; +} + +/* + * Helper to add a key to the global list of ultimately trusted keys. + * Retruns: true = inserted, false = already in in list. + */ +static int +add_utk (u32 *kid) +{ + struct key_item *k; + + for (k = utk_list; k; k = k->next) + { + if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) + { + return 0; + } + } + + k = new_key_item (); + k->kid[0] = kid[0]; + k->kid[1] = kid[1]; + k->ownertrust = TRUST_ULTIMATE; + k->next = utk_list; + utk_list = k; + if( opt.verbose > 1 ) + log_info(_("key %08lX: accepted as trusted key\n"), (ulong)kid[1]); + return 1; +} + /**************** + * Verify that all our secret keys are usable and put them into the utk_list. + */ +static void +verify_own_keys(void) +{ + TRUSTREC rec; + ulong recnum; + int rc; + struct key_item *k; + int hint_shown = 0; + + if (utk_list) + return; + + /* scan the trustdb to find all ultimately trusted keys */ + for (recnum=1; !tdbio_read_record (recnum, &rec, 0); recnum++ ) + { + if ( rec.rectype == RECTYPE_TRUST + && (rec.r.trust.ownertrust & TRUST_MASK) == TRUST_ULTIMATE) + { + byte *fpr = rec.r.trust.fingerprint; + int fprlen; + u32 kid[2]; + + /* Problem: We do only use fingerprints in the trustdb but + * we need the keyID here to indetify the key; we can only + * use that ugly hack to distinguish between 16 and 20 + * butes fpr - it does not work always so we better change + * the whole validation code to only work with + * fingerprints */ + fprlen = (!fpr[16] && !fpr[17] && !fpr[18] && !fpr[19])? 16:20; + keyid_from_fingerprint (fpr, fprlen, kid); + if (!add_utk (kid)) + log_info(_("key %08lX occurs more than once in the trustdb\n"), + (ulong)kid[1]); + } + } + + /* the --trusted-key option is again deprecated; however we automagically + * add those keys to the trustdb */ + for (k = user_utk_list; k; k = k->next) + { + if ( add_utk (k->kid) ) + { /* not yet in trustDB as ultimately trusted */ + PKT_public_key pk; + + memset (&pk, 0, sizeof pk); + rc = get_pubkey (&pk, k->kid); + if (rc) { + log_info(_("key %08lX: no public key for trusted key - skipped\n"), + (ulong)k->kid[1] ); + } + else { + update_ownertrust (&pk, + ((get_ownertrust (&pk) & ~TRUST_MASK) + | TRUST_ULTIMATE )); + release_public_key_parts (&pk); + } + if (!hint_shown) + { + log_info ("the --trusted-key option is now obsolete; " + "use the --edit command instead.\n"); + log_info ("given keys will be marked as trusted\n"); + hint_shown = 1; + } + log_info ("key %08lX marked as ultimately trusted\n", + (ulong)k->kid[1]); + } + } + + + /* release the helper table table */ + release_key_items (user_utk_list); + user_utk_list = NULL; + return; +} + + +/********************************************* + *********** TrustDB stuff ******************* + *********************************************/ + +/* * Read a record but die if it does not exist */ static void -read_record( ulong recno, TRUSTREC *rec, int rectype ) +read_record (ulong recno, TRUSTREC *rec, int rectype ) { - int rc = tdbio_read_record( recno, rec, rectype ); - if( !rc ) - return; - log_error(_("trust record %lu, req type %d: read failed: %s\n"), - recno, rectype, gpg_errstr(rc) ); - tdbio_invalid(); + int rc = tdbio_read_record (recno, rec, rectype); + if (rc) + { + log_error(_("trust record %lu, req type %d: read failed: %s\n"), + recno, rec->rectype, g10_errstr(rc) ); + tdbio_invalid(); + } + if (rectype != rec->rectype) + { + log_error(_("trust record %lu is not of requested type %d\n"), + rec->recnum, rectype); + tdbio_invalid(); + } } - -/**************** - * Wirte a record but die on error +/* + * Write a record and die on error */ static void -write_record( TRUSTREC *rec ) +write_record (TRUSTREC *rec) { - int rc = tdbio_write_record( rec ); - if( !rc ) - return; - log_error(_("trust record %lu, type %d: write failed: %s\n"), - rec->recnum, rec->rectype, gpg_errstr(rc) ); - tdbio_invalid(); + int rc = tdbio_write_record (rec); + if (rc) + { + log_error(_("trust record %lu, type %d: write failed: %s\n"), + rec->recnum, rec->rectype, g10_errstr(rc) ); + tdbio_invalid(); + } } -/**************** - * Delete a record but die on error - */ -static void -delete_record( ulong recno ) -{ - int rc = tdbio_delete_record( recno ); - if( !rc ) - return; - log_error(_("trust record %lu: delete failed: %s\n"), - recno, gpg_errstr(rc) ); - tdbio_invalid(); -} - -/**************** - * sync the db +/* + * sync the TrustDb and die on error */ static void do_sync(void) { - int rc = tdbio_sync(); - if( !rc ) - return; - log_error(_("trustdb: sync failed: %s\n"), gpg_errstr(rc) ); - gpg_exit(2); + int rc = tdbio_sync (); + if(rc) + { + log_error (_("trustdb: sync failed: %s\n"), g10_errstr(rc) ); + g10_exit(2); + } } - -/********************************************** - ***************** helpers ****************** - **********************************************/ - - -static LOCAL_ID_TABLE -new_lid_table(void) -{ - LOCAL_ID_TABLE a; - - a = unused_lid_tables; - if( a ) { - unused_lid_tables = a->next; - memset( a, 0, sizeof *a ); - } - else - a = gcry_xcalloc( 1, sizeof *a ); - return a; -} - -#if 0 -static void -release_lid_table( LOCAL_ID_TABLE tbl ) -{ - struct local_id_item *a, *a2; - int i; - - for(i=0; i < 16; i++ ) { - for(a=tbl->items[i]; a; a = a2 ) { - a2 = a->next; - a->next = unused_lid_items; - unused_lid_items = a; - } - } - tbl->next = unused_lid_tables; - unused_lid_tables = tbl; -} -#endif - - -/**************** - * Remove all items from a LID table - */ -static void -clear_lid_table( LOCAL_ID_TABLE tbl ) -{ - struct local_id_item *a, *a2; - int i; - - for(i=0; i < 16; i++ ) { - for(a=tbl->items[i]; a; a = a2 ) { - a2 = a->next; - a->next = unused_lid_items; - unused_lid_items = a; - } - tbl->items[i] = NULL; - } -} - - -/**************** - * Add a new item to the table or return 1 if we already have this item - */ -static int -ins_lid_table_item( LOCAL_ID_TABLE tbl, ulong lid, unsigned flag ) -{ - struct local_id_item *a; - - for( a = tbl->items[lid & 0x0f]; a; a = a->next ) - if( a->lid == lid ) - return 1; - a = unused_lid_items; - if( a ) - unused_lid_items = a->next; - else - a = gcry_xmalloc( sizeof *a ); - a->lid = lid; - a->flag = flag; - a->next = tbl->items[lid & 0x0f]; - tbl->items[lid & 0x0f] = a; - return 0; -} - -static int -qry_lid_table_flag( LOCAL_ID_TABLE tbl, ulong lid, unsigned *flag ) -{ - struct local_id_item *a; - - for( a = tbl->items[lid & 0x0f]; a; a = a->next ) - if( a->lid == lid ) { - if( flag ) - *flag = a->flag; - return 0; - } - return -1; -} - - -static TN -new_tn(void) -{ - TN t; - - if( used_tns ) { - t = used_tns; - used_tns = t->next; - memset( t, 0, sizeof *t ); - } - else - t = gcry_xcalloc( 1, sizeof *t ); - if( ++alloced_tns > max_alloced_tns ) - max_alloced_tns = alloced_tns; - return t; -} - - -static void -release_tn( TN t ) -{ - if( t ) { - t->next = used_tns; - used_tns = t; - alloced_tns--; - } -} - - -static void -release_tn_tree( TN kr ) -{ - TN kr2; - - for( ; kr; kr = kr2 ) { - release_tn_tree( kr->list ); - kr2 = kr->next; - release_tn( kr ); - } -} - - - - -/********************************************** - ****** access by LID and other helpers ******* - **********************************************/ - -/**************** - * Return the keyid from the primary key identified by LID. - */ -int -keyid_from_lid( ulong lid, u32 *keyid ) -{ - TRUSTREC rec; - int rc; - - init_trustdb(); - keyid[0] = keyid[1] = 0; - rc = tdbio_read_record( lid, &rec, 0 ); - if( rc ) { - log_error(_("error reading dir record for LID %lu: %s\n"), - lid, gpg_errstr(rc)); - return GPGERR_TRUSTDB; - } - if( rec.rectype == RECTYPE_SDIR ) - return 0; - if( rec.rectype != RECTYPE_DIR ) { - log_error(_("lid %lu: expected dir record, got type %d\n"), - lid, rec.rectype ); - return GPGERR_TRUSTDB; - } - if( !rec.r.dir.keylist ) { - log_error(_("no primary key for LID %lu\n"), lid ); - return GPGERR_TRUSTDB; - } - rc = tdbio_read_record( rec.r.dir.keylist, &rec, RECTYPE_KEY ); - if( rc ) { - log_error(_("error reading primary key for LID %lu: %s\n"), - lid, gpg_errstr(rc)); - return GPGERR_TRUSTDB; - } - keyid_from_fingerprint( rec.r.key.fingerprint, rec.r.key.fingerprint_len, - keyid ); - - return 0; -} - - -ulong -lid_from_keyblock( KBNODE keyblock ) -{ - KBNODE node = find_kbnode( keyblock, PKT_PUBLIC_KEY ); - PKT_public_key *pk; - if( !node ) - BUG(); - pk = node->pkt->pkt.public_key; - if( !pk->local_id ) { - TRUSTREC rec; - init_trustdb(); - - get_dir_record( pk, &rec ); - } - return pk->local_id; -} - - -static int -get_dir_record( PKT_public_key *pk, TRUSTREC *rec ) -{ - int rc=0; - - if( pk->local_id ) { - read_record( pk->local_id, rec, RECTYPE_DIR ); - } - else { /* no local_id: scan the trustdb */ - if( (rc=tdbio_search_dir_bypk( pk, rec )) && rc != -1 ) - log_error(_("get_dir_record: search_record failed: %s\n"), - gpg_errstr(rc)); - } - return rc; -} - -static ulong -lid_from_keyid_no_sdir( u32 *keyid ) -{ - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - TRUSTREC rec; - ulong lid = 0; - int rc; - - rc = get_pubkey( pk, keyid ); - if( !rc ) { - if( pk->local_id ) - lid = pk->local_id; - else { - rc = tdbio_search_dir_bypk( pk, &rec ); - if( !rc ) - lid = rec.recnum; - } - } - free_public_key( pk ); - return lid; -} - - - -/*********************************************** - ************* Initialization **************** - ***********************************************/ - -void -register_trusted_key( const char *string ) -{ - u32 keyid[2]; - struct keyid_list *r; - - if( classify_user_id( string, keyid, NULL, NULL, NULL ) != 11 ) { - log_error(_("'%s' is not a valid long keyID\n"), string ); - return; - } - - for( r = trusted_key_list; r; r = r->next ) - if( r->keyid[0] == keyid[0] && r->keyid[1] == keyid[1] ) - return; - r = gcry_xmalloc( sizeof *r ); - r->keyid[0] = keyid[0]; - r->keyid[1] = keyid[1]; - r->next = trusted_key_list; - trusted_key_list = r; -} - - - -static void -add_ultimate_key( PKT_public_key *pk, u32 *keyid ) -{ - int rc; - - /* first make sure that the pubkey is in the trustdb */ - rc = query_trust_record( pk ); - if( rc == -1 && opt.dry_run ) - return; - if( rc == -1 ) { /* put it into the trustdb */ - rc = insert_trust_record_by_pk( pk ); - if( rc ) { - log_error(_("key %08lX: can't put it into the trustdb\n"), - (ulong)keyid[1] ); - return; - } - } - else if( rc ) { - log_error(_("key %08lX: query record failed\n"), (ulong)keyid[1] ); - return; - } - - if( DBG_TRUST ) - log_debug("key %08lX.%lu: stored into ultikey_table\n", - (ulong)keyid[1], pk->local_id ); - - if( ins_lid_table_item( ultikey_table, pk->local_id, 0 ) ) - log_error(_("key %08lX: already in trusted key table\n"), - (ulong)keyid[1]); - else if( opt.verbose > 1 ) - log_info(_("key %08lX: accepted as trusted key.\n"), - (ulong)keyid[1]); - -} - -/**************** - * Verify that all our public keys are in the trustdb. - */ -static int -verify_own_keys(void) -{ - int rc; - void *enum_context = NULL; - PKT_secret_key *sk = gcry_xcalloc( 1, sizeof *sk ); - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - u32 keyid[2]; - struct keyid_list *kl; - - - /* put the trusted keys into the ultikey table */ - for( kl = trusted_key_list; kl; kl = kl->next ) { - keyid[0] = kl->keyid[0]; - keyid[1] = kl->keyid[1]; - /* get the public key */ - memset( pk, 0, sizeof *pk ); - rc = get_pubkey( pk, keyid ); - if( rc ) { - log_info(_("key %08lX: no public key for trusted key - skipped\n"), - (ulong)keyid[1] ); - } - else { - add_ultimate_key( pk, keyid ); - release_public_key_parts( pk ); - } - } - - /* And now add all secret keys to the ultikey table */ - while( !(rc=enum_secret_keys( &enum_context, sk, 0 ) ) ) { - int have_pk = 0; - - keyid_from_sk( sk, keyid ); - - if( DBG_TRUST ) - log_debug("key %08lX: checking secret key\n", (ulong)keyid[1] ); - - if( !opt.quiet && is_secret_key_protected( sk ) < 1 ) - log_info(_("NOTE: secret key %08lX is NOT protected.\n"), - (ulong)keyid[1] ); - - for( kl = trusted_key_list; kl; kl = kl->next ) { - if( kl->keyid[0] == keyid[0] && kl->keyid[1] == keyid[1] ) - goto skip; /* already in trusted key table */ - } - - /* see whether we can access the public key of this secret key */ - memset( pk, 0, sizeof *pk ); - rc = get_pubkey( pk, keyid ); - if( rc ) { - log_info(_("key %08lX: secret key without public key - skipped\n"), - (ulong)keyid[1] ); - goto skip; - } - have_pk=1; - - if( cmp_public_secret_key( pk, sk ) ) { - log_info(_("key %08lX: secret and public key don't match\n"), - (ulong)keyid[1] ); - goto skip; - } - - add_ultimate_key( pk, keyid ); - - skip: - release_secret_key_parts( sk ); - if( have_pk ) - release_public_key_parts( pk ); - } - if( rc != -1 ) - log_error(_("enumerate secret keys failed: %s\n"), gpg_errstr(rc) ); - else - rc = 0; - - /* release the trusted keyid table */ - { struct keyid_list *kl2; - for( kl = trusted_key_list; kl; kl = kl2 ) { - kl2 = kl->next; - gcry_free( kl ); - } - trusted_key_list = NULL; - } - - enum_secret_keys( &enum_context, NULL, 0 ); /* free context */ - free_secret_key( sk ); - free_public_key( pk ); - return rc; -} - - - - /**************** * Perform some checks over the trustdb * level 0: only open the db @@ -629,1919 +383,484 @@ setup_trustdb( int level, const char *dbname ) if( trustdb_args.init ) return 0; trustdb_args.level = level; - trustdb_args.dbname = dbname? gcry_xstrdup(dbname): NULL; + trustdb_args.dbname = dbname? m_strdup(dbname): NULL; return 0; } void init_trustdb() { - int rc=0; - int level = trustdb_args.level; - const char* dbname = trustdb_args.dbname; + int rc=0; + int level = trustdb_args.level; + const char* dbname = trustdb_args.dbname; - if( trustdb_args.init ) - return; + if( trustdb_args.init ) + return; - trustdb_args.init = 1; + trustdb_args.init = 1; - if( !ultikey_table ) - ultikey_table = new_lid_table(); - - if( !level || level==1 ) { - rc = tdbio_set_dbname( dbname, !!level ); - if( !rc ) { - if( !level ) - return; - - /* verify that our own keys are in the trustDB - * or move them to the trustdb. */ - rc = verify_own_keys(); - - /* should we check whether there is no other ultimately trusted - * key in the database? */ - } + if ( !level || level==1) + { + rc = tdbio_set_dbname( dbname, !!level ); + if( !rc ) + { + if( !level ) + return; + + /* verify that our own keys are in the trustDB + * or move them to the trustdb. */ + verify_own_keys(); + + /* should we check whether there is no other ultimately trusted + * key in the database? */ + } } - else - BUG(); - if( rc ) - log_fatal("can't init trustdb: %s\n", gpg_errstr(rc) ); + else + BUG(); + if( rc ) + log_fatal("can't init trustdb: %s\n", g10_errstr(rc) ); } -/**************** - * This function should be called in certain cases to sync the internal state - * of the trustdb with the file image. Currently it is needed after - * a sequence of insert_trust_record() calls. - */ -void -sync_trustdb() -{ - if( fresh_imported_keys && fresh_imported_keys_count ) - mark_fresh_keys(); -} - - /*********************************************** ************* Print helpers **************** ***********************************************/ -static void -print_user_id( FILE *fp, const char *text, u32 *keyid ) -{ - char *p; - size_t n; - - p = get_user_id( keyid, &n ); - if( fp ) { - fprintf( fp, "%s \"", text ); - print_utf8_string( fp, p, n ); - putc('\"', fp); - putc('\n', fp); - } - else { - tty_printf( "%s \"", text ); - tty_print_utf8_string( p, n ); - tty_printf( "\"\n" ); - } - gcry_free(p); -} - - /**************** * This function returns a letter for a trustvalue Trust flags * are ignore. */ int -trust_letter( unsigned value ) +trust_letter (unsigned int value) { - switch( (value & TRUST_MASK) ) { - case TRUST_UNKNOWN: return '-'; - case TRUST_EXPIRED: return 'e'; - case TRUST_UNDEFINED: return 'q'; - case TRUST_NEVER: return 'n'; - case TRUST_MARGINAL: return 'm'; - case TRUST_FULLY: return 'f'; - case TRUST_ULTIMATE: return 'u'; - default: return 0 ; + switch( (value & TRUST_MASK) ) + { + case TRUST_UNKNOWN: return '-'; + case TRUST_EXPIRED: return 'e'; + case TRUST_UNDEFINED: return 'q'; + case TRUST_NEVER: return 'n'; + case TRUST_MARGINAL: return 'm'; + case TRUST_FULLY: return 'f'; + case TRUST_ULTIMATE: return 'u'; + default: return 0; } } -#if 0 -static void -print_path( int pathlen, TN ME .........., FILE *fp, ulong highlight ) -{ - int rc, c, i; - u32 keyid[2]; - char *p; - size_t n; - - for( i = 0; i < pathlen; i++ ) { - if( highlight ) - fputs(highlight == path[i].lid? "* ":" ", fp ); - rc = keyid_from_lid( path[i].lid, keyid ); - if( rc ) - fprintf(fp, "????????.%lu:", path[i].lid ); - else - fprintf(fp,"%08lX.%lu:", (ulong)keyid[1], path[i].lid ); - c = trust_letter(path[i].otrust); - if( c ) - putc( c, fp ); - else - fprintf( fp, "%02x", path[i].otrust ); - putc('/', fp); - c = trust_letter(path[i].trust); - if( c ) - putc( c, fp ); - else - fprintf( fp, "%02x", path[i].trust ); - putc(' ', fp); - p = get_user_id( keyid, &n ); - putc(' ', fp); - putc('\"', fp); - print_utf8_string( fp, p, n > 40? 40:n ); - putc('\"', fp); - gcry_free(p); - putc('\n', fp ); - } -} -#endif - - -static void -print_default_uid( FILE *fp, ulong lid ) -{ - u32 keyid[2]; - - if( !keyid_from_lid( lid, keyid ) ) - print_user_id( fp, "", keyid ); -} - - -static void -print_uid_from_keyblock( FILE *fp, KBNODE keyblock, ulong urecno ) -{ - TRUSTREC urec; - KBNODE node; - byte uhash[20]; - - read_record( urecno, &urec, RECTYPE_UID ); - for( node=keyblock; node; node = node->next ) { - if( node->pkt->pkttype == PKT_USER_ID ) { - PKT_user_id *uidpkt = node->pkt->pkt.user_id; - - if( uidpkt->photo ) { - gcry_md_hash_buffer( GCRY_MD_RMD160, uhash, - uidpkt->photo, uidpkt->photolen ); - } - else { - gcry_md_hash_buffer( GCRY_MD_RMD160, uhash, - uidpkt->name, uidpkt->len ); - } - if( !memcmp( uhash, urec.r.uid.namehash, 20 ) ) { - print_string( fp, uidpkt->name, uidpkt->len, ':' ); - return; - } - } - } - - fputs("[?]", fp ); -} - - - -static void -dump_tn_tree( FILE *fp, int level, TN tree ) -{ - TN kr, ur; - - for( kr=tree; kr; kr = kr->next ) { - if( fp ) { - fprintf( fp, "%*s", level*4, "" ); - fprintf( fp, "K%lu(ot=%d,val=%d) ", kr->lid, - kr->n.k.ownertrust, - kr->n.k.validity ); - } - else { - tty_printf("%*s", level*4, "" ); - tty_printf("K%lu(ot=%d,val=%d) ", kr->lid, - kr->n.k.ownertrust, - kr->n.k.validity ); - } - print_default_uid( fp, kr->lid ); - for( ur=kr->list; ur; ur = ur->next ) { - if( fp ) { - fprintf(fp, "%*s ", level*4, "" ); - fprintf(fp, "U%lu(mc=%d,fc=%d,val=%d)\n", ur->lid, - ur->n.u.marginal_count, - ur->n.u.fully_count, - ur->n.u.validity - ); - } - else { - tty_printf("%*s ", level*4, "" ); - tty_printf("U%lu(mc=%d,fc=%d,val=%d)\n", ur->lid, - ur->n.u.marginal_count, - ur->n.u.fully_count, - ur->n.u.validity - ); - } - dump_tn_tree( fp, level+1, ur->list ); - } - } -} - /**************** - * Special version of dump_tn_tree, which prints it colon delimited. - * Format: - * level:keyid:type:recno:ot:val:mc:cc:name: - * With TYPE = U for a user ID - * K for a key - * The RECNO is either the one of the dir record or the one of the uid record. - * OT is the the usual trust letter and only availabel on K lines. - * VAL is the calcualted validity - * MC is the marginal trust counter and only available on U lines - * CC is the same for the complete count - * NAME ist the username and only printed on U lines + * Recreate the WoT but do not ask for new ownertrusts. Special + * feature: In batch mode and without a forced yes, this is only done + * when a check is due. This can be used to run the check from a crontab */ -static void -dump_tn_tree_with_colons( int level, TN tree ) +void +check_trustdb () { - TN kr, ur; + init_trustdb(); + if (opt.batch && !opt.answer_yes) + { + ulong scheduled; - for( kr=tree; kr; kr = kr->next ) { - KBNODE kb = NULL; - u32 kid[2]; + scheduled = tdbio_read_nextcheck (); + if (!scheduled) + { + log_info (_("no need for a trustdb check\n")); + return; + } - keyid_from_lid( kr->lid, kid ); - get_keyblock_bylid( &kb, kr->lid ); - - printf( "%d:%08lX%08lX:K:%lu:%c:%c::::\n", - level, (ulong)kid[0], (ulong)kid[1], kr->lid, - trust_letter( kr->n.k.ownertrust ), - trust_letter( kr->n.k.validity ) ); - for( ur=kr->list; ur; ur = ur->next ) { - printf( "%d:%08lX%08lX:U:%lu::%c:%d:%d:", - level, (ulong)kid[0], (ulong)kid[1], ur->lid, - trust_letter( kr->n.u.validity ), - ur->n.u.marginal_count, - ur->n.u.fully_count ); - print_uid_from_keyblock( stdout, kb, ur->lid ); - putchar(':'); - putchar('\n'); - dump_tn_tree_with_colons( level+1, ur->list ); - } - release_kbnode( kb ); + if (scheduled > make_timestamp ()) + { + log_info (_("next trustdb check due at %s\n"), + strtimestamp (scheduled)); + return; + } } + + validate_keys (0); } - -/*********************************************** - ************* trustdb maintenance *********** - ***********************************************/ - -/**************** - * Create or update shadow dir record and return the LID of the record - */ -static ulong -create_shadow_dir( PKT_signature *sig ) -{ - TRUSTREC sdir; - int rc; - - /* first see whether we already have such a record */ - rc = tdbio_search_sdir( sig->keyid, sig->pubkey_algo, &sdir ); - if( rc && rc != -1 ) { - log_error("tdbio_search_sdir failed: %s\n", gpg_errstr(rc)); - tdbio_invalid(); - } - if( rc == -1 ) { /* not found: create */ - memset( &sdir, 0, sizeof sdir ); - sdir.recnum = tdbio_new_recnum(); - sdir.rectype= RECTYPE_SDIR; - sdir.r.sdir.lid = sdir.recnum; - sdir.r.sdir.keyid[0] = sig->keyid[0]; - sdir.r.sdir.keyid[1] = sig->keyid[1]; - sdir.r.sdir.pubkey_algo = sig->pubkey_algo; - write_record( &sdir ); - } - return sdir.recnum; -} - - -static ulong -find_or_create_lid( PKT_signature *sig ) -{ - ulong lid; - - lid = lid_from_keyid_no_sdir( sig->keyid ); - if( !lid ) - lid = create_shadow_dir( sig ); - return lid; -} - - - -/**************** - * Check the validity of a key and calculate the keyflags - * keynode points to - * a node with a [sub]key. mainkid has the key ID of the primary key - * keyblock is the complete keyblock which is needed for signature - * checking. LID and PK is only used in verbose mode. - */ -static unsigned int -check_keybinding( KBNODE keyblock, KBNODE keynode, u32 *mainkid, - ulong lid, PKT_public_key *pk ) -{ - KBNODE node; - int keybind_seen = 0; - int revoke_seen = 0; - unsigned int keyflags=0; - int is_main = (keynode->pkt->pkttype == PKT_PUBLIC_KEY); - int rc; - - if( DBG_TRUST ) - log_debug("check_keybinding: %08lX.%lu\n", - (ulong)mainkid[1], lid ); - - if( is_main ) { - /* a primary key is always valid (user IDs are handled elsewhere)*/ - keyflags = KEYF_CHECKED | KEYF_VALID; - } - - for( node=keynode->next; node; node = node->next ) { - PKT_signature *sig; - - if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) - break; /* ready */ - if( node->pkt->pkttype != PKT_SIGNATURE ) - continue; /* don't care about other packets */ - - sig = node->pkt->pkt.signature; - - if( mainkid[0] != sig->keyid[0] || mainkid[1] != sig->keyid[1] ) - continue; /* we only care about self-signatures */ - - if( sig->sig_class == 0x18 && !keybind_seen && !is_main ) { - /* check until we find a valid keybinding */ - rc = check_key_signature( keyblock, node, NULL ); - if( !rc ) { - if( opt.verbose ) - log_info(_("key %08lX.%lu: Good subkey binding\n"), - (ulong)keyid_from_pk(pk,NULL), lid ); - keyflags |= KEYF_CHECKED | KEYF_VALID; - } - else { - log_info(_( - "key %08lX.%lu: Invalid subkey binding: %s\n"), - (ulong)keyid_from_pk(pk,NULL), lid, gpg_errstr(rc) ); - keyflags |= KEYF_CHECKED; - keyflags &= ~KEYF_VALID; - } - keybind_seen = 1; - } - else if( sig->sig_class == 0x20 && !revoke_seen ) { - /* this is a key revocation certificate: check it */ - rc = check_key_signature( keyblock, node, NULL ); - if( !rc ) { - if( opt.verbose ) - log_info(_("key %08lX.%lu: Valid key revocation\n"), - (ulong)keyid_from_pk(pk, NULL), lid ); - keyflags |= KEYF_REVOKED; - } - else { - log_info(_( - "key %08lX.%lu: Invalid key revocation: %s\n"), - (ulong)keyid_from_pk(pk,NULL), lid, gpg_errstr(rc) ); - } - revoke_seen = 1; - } - else if( sig->sig_class == 0x28 && !revoke_seen && !is_main ) { - /* this is a subkey revocation certificate: check it */ - rc = check_key_signature( keyblock, node, NULL ); - if( !rc ) { - if( opt.verbose ) - log_info(_( - "key %08lX.%lu: Valid subkey revocation\n"), - (ulong)keyid_from_pk(pk,NULL), lid ); - keyflags |= KEYF_REVOKED; - } - else { - log_info(_( - "key %08lX.%lu: Invalid subkey binding: %s\n"), - (ulong)keyid_from_pk(pk,NULL), lid, gpg_errstr(rc) ); - } - revoke_seen = 1; - } - /* Hmmm: should we handle direct key signatures here? */ - } - - return keyflags; -} - - -static ulong -make_key_records( KBNODE keyblock, ulong lid, u32 *keyid, int *mainrev ) -{ - TRUSTREC *krecs, **kend, *k, *k2; - KBNODE node; - PKT_public_key *pk; - byte fpr[MAX_FINGERPRINT_LEN]; - size_t fprlen; - ulong keyrecno; - - *mainrev = 0; - krecs = NULL; kend = &krecs; - for( node=keyblock; node; node = node->next ) { - if( node->pkt->pkttype != PKT_PUBLIC_KEY - && node->pkt->pkttype != PKT_PUBLIC_SUBKEY ) - continue; - pk = node->pkt->pkt.public_key; - fingerprint_from_pk( pk, fpr, &fprlen ); - - /* create the key record */ - k = gcry_xcalloc( 1, sizeof *k ); - k->rectype = RECTYPE_KEY; - k->r.key.lid = lid; - k->r.key.pubkey_algo = pk->pubkey_algo; - k->r.key.fingerprint_len = fprlen; - memcpy(k->r.key.fingerprint, fpr, fprlen ); - k->recnum = tdbio_new_recnum(); - *kend = k; - kend = &k->next; - - k->r.key.keyflags = check_keybinding( keyblock, node, keyid, lid, pk ); - if( (k->r.key.keyflags & KEYF_REVOKED) - && node->pkt->pkttype == PKT_PUBLIC_KEY ) - *mainrev = 1; - } - - keyrecno = krecs? krecs->recnum : 0; - /* write the keylist and release the memory */ - for( k = krecs; k ; k = k2 ) { - if( k->next ) - k->r.key.next = k->next->recnum; - write_record( k ); - k2 = k->next; - gcry_free( k ); - } - return keyrecno; -} - - -/**************** - * Check the validity of a user ID and calculate the uidflags - * keynode points to a node with a user ID. - * mainkid has the key ID of the primary key, keyblock is the complete - * keyblock which is needed for signature checking. - * Returns: The uid flags and the self-signature which is considered to - * be the most current. - */ -static unsigned int -check_uidsigs( KBNODE keyblock, KBNODE keynode, u32 *mainkid, ulong lid, - PKT_signature **bestsig ) -{ - KBNODE node; - unsigned int uidflags = 0; - PKT_signature *sig; - PKT_signature *selfsig = NULL; /* the latest valid self signature */ - int rc; - - if( DBG_TRUST ) { - PKT_user_id *uid; - log_debug("check_uidsigs: %08lX.%lu \"", - (ulong)mainkid[1], lid ); - assert(keynode->pkt->pkttype == PKT_USER_ID ); - uid = keynode->pkt->pkt.user_id; - print_string( log_stream(), uid->name, uid->len, '\"' ); - fputs("\"\n", log_stream()); - } - - /* first we check only the selfsignatures */ - for( node=keynode->next; node; node = node->next ) { - if( node->pkt->pkttype == PKT_USER_ID - || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) - break; /* ready */ - if( node->pkt->pkttype != PKT_SIGNATURE ) - continue; /* don't care about other packets */ - sig = node->pkt->pkt.signature; - if( mainkid[0] != sig->keyid[0] || mainkid[1] != sig->keyid[1] ) - continue; /* we only care about self-signatures for now */ - - if( (sig->sig_class&~3) == 0x10 ) { /* regular self signature */ - rc = check_key_signature( keyblock, node, NULL ); - if( !rc ) { - if( opt.verbose ) - log_info( "uid %08lX.%lu: %s\n", - (ulong)mainkid[1], lid, _("Good self-signature") ); - uidflags |= UIDF_CHECKED | UIDF_VALID; - if( !selfsig ) - selfsig = sig; /* use the first valid sig */ - else if( sig->timestamp > selfsig->timestamp - && sig->sig_class >= selfsig->sig_class ) - selfsig = sig; /* but this one is newer */ - } - else { - log_info( "uid %08lX: %s: %s\n", - (ulong)mainkid[1], _("Invalid self-signature"), - gpg_errstr(rc) ); - uidflags |= UIDF_CHECKED; - } - } - } - - /* and now check for revocations - we must do this after the - * self signature check because a self-signature which is newer - * than a revocation makes the revocation invalid. - * RFC2440 is quiet about tis but I feel this is reasonable for - * non-primary-key revocations. */ - for( node=keynode->next; node; node = node->next ) { - if( node->pkt->pkttype == PKT_USER_ID - || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) - break; /* ready */ - if( node->pkt->pkttype != PKT_SIGNATURE ) - continue; /* don't care about other packets */ - sig = node->pkt->pkt.signature; - if( mainkid[0] != sig->keyid[0] || mainkid[1] != sig->keyid[1] ) - continue; /* we only care about self-signatures for now */ - - if( sig->sig_class == 0x30 ) { /* cert revocation */ - rc = check_key_signature( keyblock, node, NULL ); - if( !rc && selfsig && selfsig->timestamp > sig->timestamp ) { - log_info( "uid %08lX.%lu: %s\n", - (ulong)mainkid[1], lid, - _("Valid user ID revocation skipped " - "due to a newer self signature") ); - } - else if( !rc ) { - if( opt.verbose ) - log_info( "uid %08lX.%lu: %s\n", - (ulong)mainkid[1], lid, _("Valid user ID revocation") ); - uidflags |= UIDF_CHECKED | UIDF_VALID | UIDF_REVOKED; - } - else { - log_info("uid %08lX: %s: %s\n", - (ulong)mainkid[1], _("Invalid user ID revocation"), - gpg_errstr(rc) ); - } - } - } - - *bestsig = selfsig; - return uidflags; -} - - -static unsigned int -check_sig_record( KBNODE keyblock, KBNODE signode, - ulong siglid, int sigidx, u32 *keyid, ulong lid, - u32 *r_expiretime, int *mod_down, int *mod_up ) -{ - PKT_signature *sig = signode->pkt->pkt.signature; - unsigned int sigflag = 0; - TRUSTREC tmp; - int revocation=0, expired=0, rc; - - if( DBG_TRUST ) - log_debug("check_sig_record: %08lX.%lu %lu[%d]\n", - (ulong)keyid[1], lid, siglid, sigidx ); - *r_expiretime = 0; - if( (sig->sig_class&~3) == 0x10 ) /* regular certification */ - ; - else if( sig->sig_class == 0x30 ) /* cert revocation */ - revocation = 1; - else - return SIGF_CHECKED | SIGF_IGNORED; - - read_record( siglid, &tmp, 0 ); - if( tmp.rectype == RECTYPE_DIR ) { - /* the public key is in the trustdb: check sig */ - rc = check_key_signature2( keyblock, signode, NULL, - r_expiretime, &expired ); - if( !rc ) { /* valid signature */ - if( opt.verbose ) - log_info("sig %08lX.%lu/%lu[%d]/%08lX: %s\n", - (ulong)keyid[1], lid, siglid, sigidx, - (ulong)sig->keyid[1], - revocation? _("Valid certificate revocation") - : _("Good certificate") ); - sigflag |= SIGF_CHECKED | SIGF_VALID; - if( expired ) { - sigflag |= SIGF_EXPIRED; - /* We have to reset the expiretime, so that this signature - * does not get checked over and over due to the reached - * expiretime */ - *r_expiretime = 0; - } - if( revocation ) { - sigflag |= SIGF_REVOKED; - *mod_down = 1; - } - else - *mod_up = 1; - } - else if( rc == GPGERR_NO_PUBKEY ) { - /* This may happen if the key is still in the trustdb - * but not available in the keystorage */ - sigflag |= SIGF_NOPUBKEY; - *mod_down = 1; - if( revocation ) - sigflag |= SIGF_REVOKED; - } - else { - log_info("sig %08lX.%lu/%lu[%d]/%08lX: %s: %s\n", - (ulong)keyid[1], lid, siglid, sigidx, - (ulong)sig->keyid[1], - revocation? _("Invalid certificate revocation") - : _("Invalid certificate"), - gpg_errstr(rc)); - sigflag |= SIGF_CHECKED; - if( revocation ) { - sigflag |= SIGF_REVOKED; - *mod_down = 1; - } - } - } - else if( tmp.rectype == RECTYPE_SDIR ) { - /* better check that it is the right one */ - if( tmp.r.sdir.keyid[0] == sig->keyid[0] - && tmp.r.sdir.keyid[1] == sig->keyid[1] - && (!tmp.r.sdir.pubkey_algo - || tmp.r.sdir.pubkey_algo == sig->pubkey_algo )) - sigflag |= SIGF_NOPUBKEY; - else - log_error(_("sig record %lu[%d] points to wrong record.\n"), - siglid, sigidx ); - } - else { - log_error(_("sig record %lu[%d] points to wrong record.\n"), - siglid, sigidx ); - tdbio_invalid(); - } - - return sigflag; -} - -/**************** - * Make the sig records for the given uid record - * We don't set flags here or even check the signatures; this will - * happen latter. - */ -static ulong -make_sig_records( KBNODE keyblock, KBNODE uidnode, - ulong lid, u32 *mainkid, u32 *min_expire, - int *mod_down, int *mod_up ) -{ - TRUSTREC *srecs, **s_end, *s=NULL, *s2; - KBNODE node; - PKT_signature *sig; - ulong sigrecno, siglid; - int i, sigidx = 0; - u32 expiretime; - - srecs = NULL; s_end = &srecs; - for( node=uidnode->next; node; node = node->next ) { - if( node->pkt->pkttype == PKT_USER_ID - || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) - break; /* ready */ - if( node->pkt->pkttype != PKT_SIGNATURE ) - continue; /* don't care about other packets */ - sig = node->pkt->pkt.signature; - if( mainkid[0] == sig->keyid[0] && mainkid[1] == sig->keyid[1] ) - continue; /* we don't care about self-signatures here */ - - siglid = find_or_create_lid( sig ); - /* smash dups */ - /* FIXME: Here we have a problem: - * We can't distinguish between a certification and a certification - * revocation without looking at class of the signature - we have - * to see how we can store the sigclass in the sigrecord.. - * Argg- I hope I can get rid of this ugly trustdb ASAP. - */ - for( s2 = s; s2 ; s2 = s2->next ) { - for(i=0; i < sigidx; i++ ) { - if( s2->r.sig.sig[i].lid == siglid ) - goto leaveduptest; - } - } - for( s2 = srecs; s2 ; s2 = s2->next ) { - for(i=0; i < SIGS_PER_RECORD; i++ ) { - if( s2->r.sig.sig[i].lid == siglid ) - goto leaveduptest; - } - } - leaveduptest: - if( s2 ) { - log_info( "sig %08lX.%lu: %s\n", (ulong)mainkid[1], lid, - _("duplicated certificate - deleted") ); - continue; - } - - /* create the sig record */ - if( !sigidx ) { - s = gcry_xcalloc( 1, sizeof *s ); - s->rectype = RECTYPE_SIG; - s->r.sig.lid = lid; - } - s->r.sig.sig[sigidx].lid = siglid; - s->r.sig.sig[sigidx].flag= check_sig_record( keyblock, node, - siglid, sigidx, - mainkid, lid, &expiretime, - mod_down, mod_up ); - - sigidx++; - if( sigidx == SIGS_PER_RECORD ) { - s->recnum = tdbio_new_recnum(); - *s_end = s; - s_end = &s->next; - sigidx = 0; - } - /* keep track of signers pk expire time */ - if( expiretime && (!*min_expire || *min_expire > expiretime ) ) - *min_expire = expiretime; - } - if( sigidx ) { - s->recnum = tdbio_new_recnum(); - *s_end = s; - s_end = &s->next; - } - - sigrecno = srecs? srecs->recnum : 0; - /* write the keylist and release the memory */ - for( s = srecs; s ; s = s2 ) { - if( s->next ) - s->r.sig.next = s->next->recnum; - write_record( s ); - s2 = s->next; - gcry_free( s ); - } - return sigrecno; -} - - - -/**************** - * Make a preference record (or a list of them) according to the supplied - * signature. - * Returns: The record number of the first pref record. - */ -static ulong -make_pref_record( PKT_signature *sig, ulong lid ) -{ - static struct { - sigsubpkttype_t subpkttype; - int preftype; - } ptable[] = { - { SIGSUBPKT_PREF_SYM, PREFTYPE_SYM }, - { SIGSUBPKT_PREF_HASH, PREFTYPE_HASH }, - { SIGSUBPKT_PREF_COMPR, PREFTYPE_COMPR }, - { 0, 0 } - }; - TRUSTREC *precs, **p_end, *p=NULL, *p2; - ulong precno; - int k, idx=0; - const byte *s; - size_t n; - - #if (ITEMS_PER_PREF_RECORD % 2) != 0 - #error ITEMS_PER_PREF_RECORD must have an even value - #endif - - precs = NULL; p_end = &precs; - for(k=0; ptable[k].subpkttype; k++ ) { - s = parse_sig_subpkt2( sig, ptable[k].subpkttype, &n ); - if( !s ) - continue; - for( ; n; n--, s++ ) { - if( !idx ) { - p = gcry_xcalloc( 1, sizeof *p ); - p->rectype = RECTYPE_PREF; - p->r.pref.lid = lid; - } - p->r.pref.data[idx++] = ptable[k].preftype; - p->r.pref.data[idx++] = *s; - if( idx >= ITEMS_PER_PREF_RECORD ) { - p->recnum = tdbio_new_recnum(); - *p_end = p; - p_end = &p->next; - idx = 0; - } - } - } - if( idx ) { - p->recnum = tdbio_new_recnum(); - *p_end = p; - p_end = &p->next; - } - - precno = precs? precs->recnum : 0; - /* write the precs and release the memory */ - for( p = precs; p ; p = p2 ) { - if( p->next ) - p->r.pref.next = p->next->recnum; - write_record( p ); - p2 = p->next; - gcry_free( p ); - } - return precno; -} - - -static ulong -make_uid_records( KBNODE keyblock, ulong lid, u32 *keyid, u32 *min_expire, - int *mod_down, int *mod_up ) -{ - TRUSTREC *urecs, **uend, *u, *u2; - KBNODE node; - PKT_user_id *uid; - byte uidhash[20]; - ulong uidrecno; - - urecs = NULL; uend = &urecs; - for( node=keyblock; node; node = node->next ) { - PKT_signature *bestsig; - - if( node->pkt->pkttype != PKT_USER_ID ) - continue; - uid = node->pkt->pkt.user_id; - if( uid->photo ) { - gcry_md_hash_buffer( GCRY_MD_RMD160, uidhash, - uid->photo, uid->photolen ); - } - else { - gcry_md_hash_buffer( GCRY_MD_RMD160, uidhash, - uid->name, uid->len ); - } - - /* create the uid record */ - u = gcry_xcalloc( 1, sizeof *u ); - u->rectype = RECTYPE_UID; - u->r.uid.lid = lid; - memcpy(u->r.uid.namehash, uidhash, 20 ); - u->recnum = tdbio_new_recnum(); - *uend = u; - uend = &u->next; - - u->r.uid.uidflags = check_uidsigs( keyblock, node, keyid, - lid, &bestsig ); - if( (u->r.uid.uidflags & UIDF_CHECKED) - && (u->r.uid.uidflags & UIDF_VALID) ) { - u->r.uid.prefrec = bestsig? make_pref_record( bestsig, lid ) : 0; - } - - /* the next test is really bad because we should modify - * out modification timestamps only if we really have a change. - * But because we are deleting the uid records first it is somewhat - * difficult to track those changes. fixme */ - if( !( u->r.uid.uidflags & UIDF_VALID ) - || ( u->r.uid.uidflags & UIDF_REVOKED ) ) - *mod_down=1; - else - *mod_up=1; - - /* create the list of signatures */ - u->r.uid.siglist = make_sig_records( keyblock, node, - lid, keyid, min_expire, - mod_down, mod_up ); - } - - uidrecno = urecs? urecs->recnum : 0; - /* write the uidlist and release the memory */ - for( u = urecs; u ; u = u2 ) { - if( u->next ) - u->r.uid.next = u->next->recnum; - write_record( u ); - u2 = u->next; - gcry_free( u ); - } - return uidrecno; -} - - - -/**************** - * Update all the info from the public keyblock. - * The key must already exist in the keydb. - */ -int -update_trust_record( KBNODE keyblock, int recheck, int *modified ) -{ - TRUSTREC drec; - int rc; - - /* NOTE: We don't need recheck anymore, but this might chnage again in - * the future */ - if( opt.dry_run ) - return 0; - if( modified ) - *modified = 0; - init_trustdb(); - rc = get_dir_record( find_kbnode( keyblock, PKT_PUBLIC_KEY ) - ->pkt->pkt.public_key, &drec ); - if( rc ) - return rc; - - rc = do_update_trust_record( keyblock, &drec, 0, modified ); - return rc; -} - -/**************** - * Same as update_trust_record, but this functions expects the dir record. - * On exit the dir record will reflect any changes made. - * With sigs_only set only foreign key signatures are checked. - */ -static int -do_update_trust_record( KBNODE keyblock, TRUSTREC *drec, - int sigs_only, int *modified ) -{ - PKT_public_key *primary_pk; - TRUSTREC krec, urec, prec, helprec; - int i, rc = 0; - u32 keyid[2]; /* keyid of primary key */ - int mod_up = 0; - int mod_down = 0; - ulong recno, r2; - u32 expiretime; - - primary_pk = find_kbnode( keyblock, PKT_PUBLIC_KEY )->pkt->pkt.public_key; - if( !primary_pk->local_id ) - primary_pk->local_id = drec->recnum; - - keyid_from_pk( primary_pk, keyid ); - if( DBG_TRUST ) - log_debug("do_update_trust_record: %08lX.%lu\n", - (ulong)keyid[1], drec->recnum ); - - rc = tdbio_begin_transaction(); - if( rc ) - return rc; - - /* delete the old stuff FIXME: implementend sigs_only */ - for( recno=drec->r.dir.keylist; recno; recno = krec.r.key.next ) { - read_record( recno, &krec, RECTYPE_KEY ); - delete_record( recno ); - } - drec->r.dir.keylist = 0; - for( recno=drec->r.dir.uidlist; recno; recno = urec.r.uid.next ) { - read_record( recno, &urec, RECTYPE_UID ); - for(r2=urec.r.uid.prefrec ; r2; r2 = prec.r.pref.next ) { - read_record( r2, &prec, RECTYPE_PREF ); - delete_record( r2 ); - } - for(r2=urec.r.uid.siglist ; r2; r2 = helprec.r.sig.next ) { - read_record( r2, &helprec, RECTYPE_SIG ); - delete_record( r2 ); - } - delete_record( recno ); - } - drec->r.dir.uidlist = 0; - - - /* insert new stuff */ - drec->r.dir.dirflags &= ~DIRF_REVOKED; - drec->r.dir.dirflags &= ~DIRF_NEWKEYS; - drec->r.dir.keylist = make_key_records( keyblock, drec->recnum, keyid, &i ); - if( i ) /* primary key has been revoked */ - drec->r.dir.dirflags |= DIRF_REVOKED; - expiretime = 0; - drec->r.dir.uidlist = make_uid_records( keyblock, drec->recnum, keyid, - &expiretime, &mod_down, &mod_up ); - if( rc ) - rc = tdbio_cancel_transaction(); - else { - if( modified && tdbio_is_dirty() ) - *modified = 1; - drec->r.dir.dirflags |= DIRF_CHECKED; - drec->r.dir.valcheck = 0; - drec->r.dir.checkat = expiretime; - write_record( drec ); - tdbio_write_modify_stamp( mod_up, mod_down ); - rc = tdbio_end_transaction(); - } - return rc; -} - - - -/**************** - * Insert a trust record into the TrustDB - * This function assumes that the record does not yet exist. - */ -int -insert_trust_record( KBNODE keyblock ) -{ - TRUSTREC dirrec; - TRUSTREC shadow; - KBNODE node; - int rc = 0; - PKT_public_key *pk; - - - if( opt.dry_run ) - return 0; - - init_trustdb(); - - pk = find_kbnode( keyblock, PKT_PUBLIC_KEY )->pkt->pkt.public_key; - if( pk->local_id ) { - log_debug("insert_trust_record with pk->local_id=%lu (2)\n", - pk->local_id ); - rc = update_trust_record( keyblock, 1, NULL ); - return rc; - } - - /* We have to look for a shadow dir record which must be reused - * as the dir record. */ - rc = tdbio_search_sdir( pk->keyid, pk->pubkey_algo, &shadow ); - if( rc && rc != -1 ) { - log_error(_("tdbio_search_dir failed: %s\n"), gpg_errstr(rc)); - tdbio_invalid(); - } - memset( &dirrec, 0, sizeof dirrec ); - dirrec.rectype = RECTYPE_DIR; - if( !rc ) /* we have a shadow dir record - convert to dir record */ - dirrec.recnum = shadow.recnum; - else - dirrec.recnum = tdbio_new_recnum(); - dirrec.r.dir.lid = dirrec.recnum; - write_record( &dirrec ); - - /* put the LID into the keyblock */ - pk->local_id = dirrec.r.dir.lid; - for( node=keyblock; node; node = node->next ) { - if( node->pkt->pkttype == PKT_PUBLIC_KEY - || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { - PKT_public_key *a_pk = node->pkt->pkt.public_key; - a_pk->local_id = dirrec.r.dir.lid; - } - else if( node->pkt->pkttype == PKT_SIGNATURE ) { - PKT_signature *a_sig = node->pkt->pkt.signature; - a_sig->local_id = dirrec.r.dir.lid; - } - } - - - /* mark tdb as modified upwards */ - tdbio_write_modify_stamp( 1, 0 ); - - /* and put all the other stuff into the keydb */ - rc = do_update_trust_record( keyblock, &dirrec, 0, NULL ); - - do_sync(); - - /* keep track of new keys */ - if( !fresh_imported_keys ) - fresh_imported_keys = new_lid_table(); - ins_lid_table_item( fresh_imported_keys, pk->local_id, 0 ); - if( ++fresh_imported_keys_count > FRESH_KEY_CHECK_THRESHOLD ) - mark_fresh_keys(); - - return rc; -} - - - - -/**************** - * Insert a trust record indentified by a PK into the TrustDB - */ -int -insert_trust_record_by_pk( PKT_public_key *pk ) -{ - KBNODE keyblock = NULL; - byte fingerprint[MAX_FINGERPRINT_LEN]; - size_t fingerlen; - int rc; - - /* get the keyblock */ - fingerprint_from_pk( pk, fingerprint, &fingerlen ); - rc = get_keyblock_byfprint( &keyblock, fingerprint, fingerlen ); - if( rc ) { /* that should never happen */ - log_debug( "insert_trust_record_by_pk: keyblock not found: %s\n", - gpg_errstr(rc) ); - } - else { - rc = insert_trust_record( keyblock ); - if( !rc ) /* copy the LID into the PK */ - pk->local_id = find_kbnode( keyblock, PKT_PUBLIC_KEY ) - ->pkt->pkt.public_key->local_id; - } - - release_kbnode( keyblock ); - return rc; -} - - -/**************** - * Check one trust record. This function is called for every - * directory record which is to be checked. The supplied - * dir record is modified according to the performed actions. - * Currently we only do an update_trust_record. - */ -static int -check_trust_record( TRUSTREC *drec, int sigs_only ) -{ - KBNODE keyblock; - int modified, rc; - - rc = get_keyblock_bylid( &keyblock, drec->recnum ); - if( rc ) { - log_debug( "check_trust_record %lu: keyblock not found: %s\n", - drec->recnum, gpg_errstr(rc) ); - return rc; - } - - rc = do_update_trust_record( keyblock, drec, sigs_only, &modified ); - release_kbnode( keyblock ); - - return rc; -} - - -/**************** - * Walk over the keyrings and create trustdb records for all keys - * which are not currently in the trustdb. - * It is intended to be used after a fast-import operation. +/* + * Recreate the WoT. */ void update_trustdb() { - KBNODE keyblock = NULL; - KBPOS kbpos; - int rc; + init_trustdb(); + validate_keys (1); +} - if( opt.dry_run ) - return; +void +revalidation_mark (void) +{ + init_trustdb(); + /* we simply set the time for the next check to 1 (far back in 1970) + * so that a --update-trustdb will be scheduled */ + if (tdbio_write_nextcheck (1)) + do_sync (); + pending_check_trustdb = 1; +} - init_trustdb(); - rc = enum_keyblocks_begin( &kbpos, 0 ); - if( !rc ) { - ulong count=0, err_count=0, new_count=0; + +/*********************************************** + *********** Ownertrust et al. **************** + ***********************************************/ - while( !(rc = enum_keyblocks_next( kbpos, 1, &keyblock )) ) { - /*int modified;*/ - TRUSTREC drec; - PKT_public_key *pk = find_kbnode( keyblock, PKT_PUBLIC_KEY ) - ->pkt->pkt.public_key; - - rc = get_dir_record( pk, &drec ); - if( rc == -1 ) { /* not in trustdb: insert */ - rc = insert_trust_record( keyblock ); - if( rc && !pk->local_id ) { - log_error(_("lid ?: insert failed: %s\n"), - gpg_errstr(rc) ); - err_count++; - } - else if( rc ) { - log_error(_("lid %lu: insert failed: %s\n"), - pk->local_id, gpg_errstr(rc) ); - err_count++; - } - else { - if( opt.verbose ) - log_info(_("lid %lu: inserted\n"), pk->local_id ); - new_count++; - } - } - else if( rc ) { - log_error(_("error reading dir record: %s\n"), gpg_errstr(rc)); - err_count++; - } - - release_kbnode( keyblock ); keyblock = NULL; - if( !(++count % 100) ) - log_info(_("%lu keys so far processed\n"), count); - } - log_info(_("%lu keys processed\n"), count); - if( err_count ) - log_info(_("\t%lu keys with errors\n"), err_count); - if( new_count ) - log_info(_("\t%lu keys inserted\n"), new_count); +static int +read_trust_record (PKT_public_key *pk, TRUSTREC *rec) +{ + int rc; + + init_trustdb(); + rc = tdbio_search_trust_bypk (pk, rec); + if (rc == -1) + return -1; /* no record yet */ + if (rc) + { + log_error ("trustdb: searching trust record failed: %s\n", + g10_errstr (rc)); + return rc; } - if( rc && rc != -1 ) - log_error(_("enumerate keyblocks failed: %s\n"), gpg_errstr(rc)); - - enum_keyblocks_end( kbpos ); - release_kbnode( keyblock ); + + if (rec->rectype != RECTYPE_TRUST) + { + log_error ("trustdb: record %lu is not a trust record\n", + rec->recnum); + return G10ERR_TRUSTDB; + } + + return 0; } - /**************** - * Do all required checks in the trustdb. This function walks over all - * records in the trustdb and does scheduled processing. + * Return the assigned ownertrust value for the given public key. + * The key should be the primary key. + */ +unsigned int +get_ownertrust ( PKT_public_key *pk) +{ + TRUSTREC rec; + int rc; + + rc = read_trust_record (pk, &rec); + if (rc == -1) + return TRUST_UNKNOWN; /* no record yet */ + if (rc) + { + tdbio_invalid (); + return rc; /* actually never reached */ + } + + return rec.r.trust.ownertrust; +} + +/* + * Same as get_ownertrust but return a trust letter instead of an value. + */ +int +get_ownertrust_info (PKT_public_key *pk) +{ + unsigned int otrust; + int c; + + otrust = get_ownertrust (pk); + c = trust_letter( (otrust & TRUST_MASK) ); + if( !c ) + c = '?'; + return c; +} + +/* + * Set the trust value of the given public key to the new value. + * The key should be a primary one. */ void -check_trustdb( const char *username ) +update_ownertrust (PKT_public_key *pk, unsigned int new_trust ) { - TRUSTREC rec; - ulong recnum; - ulong count=0, upd_count=0, err_count=0, skip_count=0, sigonly_count=0; - ulong current_time = make_timestamp(); - - if( username ) - log_info("given user IDs ignored in check_trustdb\n"); - - init_trustdb(); - - for(recnum=0; !tdbio_read_record( recnum, &rec, 0); recnum++ ) { - int sigs_only; - - if( rec.rectype != RECTYPE_DIR ) - continue; /* we only want the dir records */ - - if( count && !(count % 100) && !opt.quiet ) - log_info(_("%lu keys so far processed\n"), count); - count++; - sigs_only = 0; - - if( !(rec.r.dir.dirflags & DIRF_CHECKED) ) - ; - else if( !rec.r.dir.checkat || rec.r.dir.checkat > current_time ) { - if( !(rec.r.dir.dirflags & DIRF_NEWKEYS) ) { - skip_count++; - continue; /* not scheduled for checking */ - } - sigs_only = 1; /* new public keys - check them */ - sigonly_count++; - } - - if( !rec.r.dir.keylist ) { - log_info(_("lid %lu: dir record w/o key - skipped\n"), recnum); - skip_count++; - continue; - } - - check_trust_record( &rec, sigs_only ); + TRUSTREC rec; + int rc; + + rc = read_trust_record (pk, &rec); + if (!rc) + { + if (DBG_TRUST) + log_debug ("update ownertrust from %u to %u\n", + (unsigned int)rec.r.trust.ownertrust, new_trust ); + if (rec.r.trust.ownertrust != new_trust) + { + rec.r.trust.ownertrust = new_trust; + write_record( &rec ); + revalidation_mark (); + do_sync (); + } } + else if (rc == -1) + { /* no record yet - create a new one */ + size_t dummy; - log_info(_("%lu keys processed\n"), count); - if( sigonly_count ) - log_info(_("\t%lu due to new pubkeys\n"), sigonly_count); - if( skip_count ) - log_info(_("\t%lu keys skipped\n"), skip_count); - if( err_count ) - log_info(_("\t%lu keys with errors\n"), err_count); - if( upd_count ) - log_info(_("\t%lu keys updated\n"), upd_count); + if (DBG_TRUST) + log_debug ("insert ownertrust %u\n", new_trust ); + + memset (&rec, 0, sizeof rec); + rec.recnum = tdbio_new_recnum (); + rec.rectype = RECTYPE_TRUST; + fingerprint_from_pk (pk, rec.r.trust.fingerprint, &dummy); + rec.r.trust.ownertrust = new_trust; + write_record (&rec); + revalidation_mark (); + do_sync (); + rc = 0; + } + else + { + tdbio_invalid (); + } } - - -/*********************************************** - ********* Trust calculation ***************** - ***********************************************/ - -/**************** - * Find all certification paths of a given LID. - * Limit the search to MAX_DEPTH. stack is a helper variable which - * should have been allocated with size max_depth, stack[0] should - * be setup to the key we are investigating, so the minimal depth - * we should ever see in this function is 1. - * Returns: a new tree - * certchain_set must be a valid set or point to NULL; this function - * may modifiy it. - * - * Hmmm: add a fastscan mode which stops at valid validity nodes. - */ -static TN -build_cert_tree( ulong lid, int depth, int max_depth, TN helproot ) +/* Clear the ownertrust value. Return true if a changed actually happend. */ +int +clear_ownertrust (PKT_public_key *pk) { - TRUSTREC dirrec; - TRUSTREC uidrec; - ulong uidrno; - TN keynode; - - if( depth >= max_depth ) - return NULL; - - keynode = new_tn(); - if( !helproot ) - helproot = keynode; - keynode->lid = lid; - if( !qry_lid_table_flag( ultikey_table, lid, NULL ) ) { - /* this is an ultimately trusted key; - * which means that we have found the end of the chain: - * We do this here prior to reading the dir record - * because we don't really need the info from that record */ - keynode->n.k.ownertrust = TRUST_ULTIMATE; - keynode->n.k.buckstop = 1; - return keynode; + TRUSTREC rec; + int rc; + + rc = read_trust_record (pk, &rec); + if (!rc) + { + if (DBG_TRUST) + log_debug ("clearing ownertrust (old value %u)\n", + (unsigned int)rec.r.trust.ownertrust); + if (rec.r.trust.ownertrust) + { + rec.r.trust.ownertrust = 0; + write_record( &rec ); + revalidation_mark (); + do_sync (); + return 1; + } } - read_record( lid, &dirrec, 0 ); - if( dirrec.rectype != RECTYPE_DIR ) { - if( dirrec.rectype != RECTYPE_SDIR ) - log_debug("lid %lu, has rectype %d" - " - skipped\n", lid, dirrec.rectype ); - gcry_free(keynode); - return NULL; + else if (rc != -1) + { + tdbio_invalid (); } - - if( dirrec.r.dir.checkat && dirrec.r.dir.checkat <= make_timestamp() ) { - check_trust_record( &dirrec, 0 ); - } - else if( (dirrec.r.dir.dirflags & DIRF_NEWKEYS) ) { - check_trust_record( &dirrec, 1 ); - } - - keynode->n.k.ownertrust = dirrec.r.dir.ownertrust & TRUST_MASK; - - /* loop over all user ids */ - for( uidrno = dirrec.r.dir.uidlist; uidrno; uidrno = uidrec.r.uid.next ) { - TRUSTREC sigrec; - ulong sigrno; - TN uidnode = NULL; - - read_record( uidrno, &uidrec, RECTYPE_UID ); - - if( !(uidrec.r.uid.uidflags & UIDF_CHECKED) ) - continue; /* user id has not been checked */ - if( !(uidrec.r.uid.uidflags & UIDF_VALID) ) - continue; /* user id is not valid */ - if( (uidrec.r.uid.uidflags & UIDF_REVOKED) ) - continue; /* user id has been revoked */ - - /* loop over all signature records */ - for(sigrno=uidrec.r.uid.siglist; sigrno; sigrno = sigrec.r.sig.next ) { - int i; - TN tn; - - read_record( sigrno, &sigrec, RECTYPE_SIG ); - - for(i=0; i < SIGS_PER_RECORD; i++ ) { - if( !sigrec.r.sig.sig[i].lid ) - continue; /* skip deleted sigs */ - if( !(sigrec.r.sig.sig[i].flag & SIGF_CHECKED) ) - continue; /* skip unchecked signatures */ - if( !(sigrec.r.sig.sig[i].flag & SIGF_VALID) ) - continue; /* skip invalid signatures */ - if( (sigrec.r.sig.sig[i].flag & SIGF_EXPIRED) ) - continue; /* skip expired signatures */ - if( (sigrec.r.sig.sig[i].flag & SIGF_REVOKED) ) - continue; /* skip revoked signatures */ - /* check for cycles */ - for( tn=keynode; tn && tn->lid != sigrec.r.sig.sig[i].lid; - tn = tn->back ) - ; - if( tn ) - continue; /* cycle found */ - - tn = build_cert_tree( sigrec.r.sig.sig[i].lid, - depth+1, max_depth, helproot ); - if( !tn ) - continue; /* cert chain too deep or error */ - - if( !uidnode ) { - uidnode = new_tn(); - uidnode->back = keynode; - uidnode->lid = uidrno; - uidnode->is_uid = 1; - uidnode->next = keynode->list; - keynode->list = uidnode; - } - - tn->back = uidnode; - tn->next = uidnode->list; - uidnode->list = tn; - if( tn->n.k.buckstop ) { - /* ultimately trusted key found: - * no need to check more signatures of this uid */ - sigrec.r.sig.next = 0; - break; - } - } - } /* end loop over sig recs */ - } /* end loop over user ids */ - - if( !keynode->list ) { - release_tn_tree( keynode ); - keynode = NULL; - } - - return keynode; + return 0; } - -static void -upd_one_ownertrust( ulong lid, unsigned new_trust, unsigned *retflgs ) -{ - TRUSTREC rec; - - read_record( lid, &rec, RECTYPE_DIR ); - if( DBG_TRUST ) - log_debug("upd_one_ownertrust of %lu from %u to %u\n", - lid, (unsigned)rec.r.dir.ownertrust, new_trust ); - if( retflgs ) { - if( (new_trust & TRUST_MASK) > (rec.r.dir.ownertrust & TRUST_MASK) ) - *retflgs |= 16; /* modified up */ - else - *retflgs |= 32; /* modified down */ - } - - /* we preserve the disabled state here */ - if( (rec.r.dir.ownertrust & TRUST_FLAG_DISABLED) ) - rec.r.dir.ownertrust = new_trust | TRUST_FLAG_DISABLED; - else - rec.r.dir.ownertrust = new_trust & ~TRUST_FLAG_DISABLED; - write_record( &rec ); -} - -/**************** - * Update the ownertrust in the complete tree. +/* + * Note: Caller has to do a sync */ static void -propagate_ownertrust( TN kr, ulong lid, unsigned trust ) +update_validity (PKT_public_key *pk, const byte *namehash, + int depth, int validity) { - TN ur; - - for( ; kr; kr = kr->next ) { - if( kr->lid == lid ) - kr->n.k.ownertrust = trust; - for( ur=kr->list; ur; ur = ur->next ) - propagate_ownertrust( ur->list, lid, trust ); + TRUSTREC trec, vrec; + int rc; + ulong recno; + + rc = read_trust_record (pk, &trec); + if (rc && rc != -1) + { + tdbio_invalid (); + return; } + if (rc == -1) /* no record yet - create a new one */ + { + size_t dummy; + + rc = 0; + memset (&trec, 0, sizeof trec); + trec.recnum = tdbio_new_recnum (); + trec.rectype = RECTYPE_TRUST; + fingerprint_from_pk (pk, trec.r.trust.fingerprint, &dummy); + trec.r.trust.ownertrust = 0; + } + + /* locate an existing one */ + recno = trec.r.trust.validlist; + while (recno) + { + read_record (recno, &vrec, RECTYPE_VALID); + if ( !memcmp (vrec.r.valid.namehash, namehash, 20) ) + break; + recno = vrec.r.valid.next; + } + + if (!recno) /* insert a new validity record */ + { + memset (&vrec, 0, sizeof vrec); + vrec.recnum = tdbio_new_recnum (); + vrec.rectype = RECTYPE_VALID; + memcpy (vrec.r.valid.namehash, namehash, 20); + vrec.r.valid.next = trec.r.trust.validlist; + } + vrec.r.valid.validity = validity; + write_record (&vrec); + trec.r.trust.depth = depth; + trec.r.trust.validlist = vrec.recnum; + write_record (&trec); } -/**************** - * Calculate the validity of all keys in the tree and especially - * the one of the top key. If add_fnc is not NULL, it is used to - * ask for missing ownertrust values (but only if this will help - * us to increase the validity. - * add_fnc is expected to take the LID of the key under question - * and return a ownertrust value or an error: positive values - * are assumed to be the new ownertrust value; a 0 does mean no change, - * a -1 is a request to cancel this validation procedure, a -2 requests - * a listing of the sub-tree using the tty functions. - * - * - * Returns: 0 = okay - */ + +/* reset validity for all user IDs. Caller must sync. */ static int -propagate_validity( TN root, TN node, int (*add_fnc)(ulong), unsigned *retflgs ) +clear_validity (PKT_public_key *pk) { - TN kr, ur; - int max_validity = 0; - - assert( !node->is_uid ); - if( node->n.k.ownertrust == TRUST_ULTIMATE ) { - /* this is one of our keys */ - assert( !node->list ); /* it should be a leaf */ - node->n.k.validity = TRUST_ULTIMATE; - if( retflgs ) - *retflgs |= 1; /* found a path to an ultimately trusted key */ - return 0; + TRUSTREC trec, vrec; + int rc; + ulong recno; + int any = 0; + + rc = read_trust_record (pk, &trec); + if (rc && rc != -1) + { + tdbio_invalid (); + return 0; } - - /* loop over all user ids */ - for( ur=node->list; ur && max_validity <= TRUST_FULLY; ur = ur->next ) { - assert( ur->is_uid ); - /* loop over all signators */ - for(kr=ur->list; kr && max_validity <= TRUST_FULLY; kr = kr->next ) { - if( propagate_validity( root, kr, add_fnc, retflgs ) ) - return -1; /* quit */ - if( kr->n.k.validity == TRUST_ULTIMATE ) { - ur->n.u.fully_count = opt.completes_needed; - } - else if( kr->n.k.validity == TRUST_FULLY ) { - if( add_fnc && !kr->n.k.ownertrust ) { - int rc; - - if( retflgs ) - *retflgs |= 2; /* found key with undefined ownertrust*/ - do { - rc = add_fnc( kr->lid ); - switch( rc ) { - case TRUST_NEVER: - case TRUST_MARGINAL: - case TRUST_FULLY: - propagate_ownertrust( root, kr->lid, rc ); - upd_one_ownertrust( kr->lid, rc, retflgs ); - if( retflgs ) - *retflgs |= 4; /* changed */ - break; - case -1: - return -1; /* cancel */ - case -2: - dump_tn_tree( NULL, 0, kr ); - tty_printf("\n"); - break; - default: - break; - } - } while( rc == -2 ); - } - if( kr->n.k.ownertrust == TRUST_FULLY ) - ur->n.u.fully_count++; - else if( kr->n.k.ownertrust == TRUST_MARGINAL ) - ur->n.u.marginal_count++; - } - - if( ur->n.u.fully_count >= opt.completes_needed - || ur->n.u.marginal_count >= opt.marginals_needed ) - ur->n.u.validity = TRUST_FULLY; - else if( ur->n.u.fully_count || ur->n.u.marginal_count ) - ur->n.u.validity = TRUST_MARGINAL; - - if( ur->n.u.validity >= max_validity ) - max_validity = ur->n.u.validity; - } - } - - node->n.k.validity = max_validity; + if (rc == -1) /* no record yet - no need to clerar it then ;-) */ return 0; + + /* reset validity for all user IDs */ + recno = trec.r.trust.validlist; + while (recno) + { + read_record (recno, &vrec, RECTYPE_VALID); + if ((vrec.r.valid.validity & TRUST_MASK)) + { + vrec.r.valid.validity &= ~TRUST_MASK; + write_record (&vrec); + any = 1; + } + recno = vrec.r.valid.next; + } + + return any; } - -/**************** - * Given the directory record of a key, check whether we can - * find a path to an ultimately trusted key. We do this by - * checking all key signatures up to a some depth. - */ -static int -verify_key( int max_depth, TRUSTREC *drec, const char *namehash, - int (*add_fnc)(ulong), unsigned *retflgs ) -{ - TN tree; - int keytrust; - int pv_result; - - tree = build_cert_tree( drec->r.dir.lid, 0, opt.max_cert_depth, NULL ); - if( !tree ) - return TRUST_UNDEFINED; - pv_result = propagate_validity( tree, tree, add_fnc, retflgs ); - if( namehash && tree->n.k.validity != TRUST_ULTIMATE ) { - /* find the matching user id. - * We don't do this here if the key is ultimately trusted; in - * this case there will be no lids for the user IDs and frankly - * it does not make sense to compare by the name if we do - * have the secret key. - * fixme: the way we handle this is too inefficient */ - TN ur; - TRUSTREC rec; - - keytrust = 0; - for( ur=tree->list; ur; ur = ur->next ) { - read_record( ur->lid, &rec, RECTYPE_UID ); - if( !memcmp( namehash, rec.r.uid.namehash, 20 ) ) { - keytrust = ur->n.u.validity; - break; - } - } - } - else - keytrust = tree->n.k.validity; - - /* update the cached validity values */ - if( !pv_result - && keytrust >= TRUST_UNDEFINED - && tdbio_db_matches_options() - && ( !drec->r.dir.valcheck || drec->r.dir.validity != keytrust ) ) { - TN ur; - TRUSTREC rec; - - for( ur=tree->list; ur; ur = ur->next ) { - read_record( ur->lid, &rec, RECTYPE_UID ); - if( rec.r.uid.validity != ur->n.u.validity ) { - rec.r.uid.validity = ur->n.u.validity; - write_record( &rec ); - } - } - - drec->r.dir.validity = tree->n.k.validity; - drec->r.dir.valcheck = make_timestamp(); - write_record( drec ); - do_sync(); - } - - release_tn_tree( tree ); - return keytrust; -} - - -/**************** - * we have the pubkey record and all needed informations are in the trustdb - * but nothing more is known. - */ -static int -do_check( TRUSTREC *dr, unsigned *validity, - const char *namehash, int (*add_fnc)(ulong), unsigned *retflgs ) -{ - if( !dr->r.dir.keylist ) { - log_error(_("Ooops, no keys\n")); - return GPGERR_TRUSTDB; - } - if( !dr->r.dir.uidlist ) { - log_error(_("Ooops, no user IDs\n")); - return GPGERR_TRUSTDB; - } - - if( retflgs ) - *retflgs &= ~(16|32); /* reset the 2 special flags */ - - if( (dr->r.dir.ownertrust & TRUST_FLAG_DISABLED) ) - *validity = 0; /* no need to check further */ - else if( namehash ) { - /* Fixme: use a cache */ - *validity = verify_key( opt.max_cert_depth, dr, namehash, - add_fnc, retflgs ); - } - else if( !add_fnc - && tdbio_db_matches_options() - /* FIXME, TODO: This comparision is WRONG ! */ - && dr->r.dir.valcheck - > tdbio_read_modify_stamp( (dr->r.dir.validity < TRUST_FULLY) ) - && dr->r.dir.validity ) - *validity = dr->r.dir.validity; - else - *validity = verify_key( opt.max_cert_depth, dr, NULL, - add_fnc, retflgs ); - - if( !(*validity & TRUST_MASK) ) - *validity = TRUST_UNDEFINED; - - if( (dr->r.dir.ownertrust & TRUST_FLAG_DISABLED) ) - *validity |= TRUST_FLAG_DISABLED; - - if( dr->r.dir.dirflags & DIRF_REVOKED ) - *validity |= TRUST_FLAG_REVOKED; - - /* If we have changed some ownertrusts, set the trustdb timestamps - * and do a sync */ - if( retflgs && (*retflgs & (16|32)) ) { - tdbio_write_modify_stamp( (*retflgs & 16), (*retflgs & 32) ); - do_sync(); - } - - - return 0; -} - - - -/*********************************************** - ********* Change trustdb values ************** - ***********************************************/ - -int -update_ownertrust( ulong lid, unsigned new_trust ) -{ - TRUSTREC rec; - - init_trustdb(); - read_record( lid, &rec, RECTYPE_DIR ); - if( DBG_TRUST ) - log_debug("update_ownertrust of %lu from %u to %u\n", - lid, (unsigned)rec.r.dir.ownertrust, new_trust ); - rec.r.dir.ownertrust = new_trust; - write_record( &rec ); - do_sync(); - return 0; -} - - -int -clear_trust_checked_flag( PKT_public_key *pk ) -{ - TRUSTREC rec; - int rc; - - if( opt.dry_run ) - return 0; - - init_trustdb(); - rc = get_dir_record( pk, &rec ); - if( rc ) - return rc; - - /* check whether they are already reset */ - if( !(rec.r.dir.dirflags & DIRF_CHECKED) && !rec.r.dir.valcheck ) - return 0; - - /* reset the flag */ - rec.r.dir.dirflags &= ~DIRF_CHECKED; - rec.r.dir.valcheck = 0; - write_record( &rec ); - do_sync(); - return 0; -} - - - - /*********************************************** ********* Query trustdb values ************** ***********************************************/ - -/**************** - * This function simply looks for the key in the trustdb - * and makes sure that pk->local_id is set to the correct value. - * Return: 0 = found - * -1 = not found - * other = error +/* + * Return the validity information for PK. If the namehash is not + * NULL, the validity of the corresponsing user ID is returned, + * otherwise, a reasonable value for the entire key is returned. */ -int -query_trust_record( PKT_public_key *pk ) +unsigned int +get_validity (PKT_public_key *pk, const byte *namehash) { - TRUSTREC rec; - init_trustdb(); - return get_dir_record( pk, &rec ); + static int did_nextcheck; + TRUSTREC trec, vrec; + int rc; + ulong recno; + unsigned int validity; + u32 kid[2]; + PKT_public_key *main_pk; + + init_trustdb (); + if (!did_nextcheck) + { + ulong scheduled; + + did_nextcheck = 1; + scheduled = tdbio_read_nextcheck (); + if (scheduled && scheduled <= make_timestamp ()) + { + if (opt.no_auto_check_trustdb) + { + pending_check_trustdb = 1; + log_info ("please do a --check-trustdb\n"); + } + else + { + log_info (_("checking the trustdb\n")); + validate_keys (0); + } + } + } + + keyid_from_pk (pk, kid); + if (pk->main_keyid[0] != kid[0] || pk->main_keyid[1] != kid[1]) + { /* this is a subkey - get the mainkey */ + main_pk = m_alloc_clear (sizeof *main_pk); + rc = get_pubkey (main_pk, pk->main_keyid); + if (rc) + { + log_error ("error getting main key %08lX of subkey %08lX: %s\n", + (ulong)pk->main_keyid[1], (ulong)kid[1], g10_errstr(rc)); + validity = TRUST_UNKNOWN; + goto leave; + } + } + else + main_pk = pk; + + rc = read_trust_record (main_pk, &trec); + if (rc && rc != -1) + { + tdbio_invalid (); + return 0; + } + if (rc == -1) /* no record found */ + { + validity = TRUST_UNKNOWN; + goto leave; + } + + /* loop over all user IDs */ + recno = trec.r.trust.validlist; + validity = 0; + while (recno) + { + read_record (recno, &vrec, RECTYPE_VALID); + if ( validity < (vrec.r.valid.validity & TRUST_MASK) ) + validity = (vrec.r.valid.validity & TRUST_MASK); + if ( namehash && !memcmp (vrec.r.valid.namehash, namehash, 20) ) + break; + recno = vrec.r.valid.next; + } + + if (recno) /* okay, use the user ID associated one */ + validity = (vrec.r.valid.validity & TRUST_MASK); + + if ( (trec.r.trust.ownertrust & TRUST_FLAG_DISABLED) ) + validity |= TRUST_FLAG_DISABLED; + + leave: + /* set some flags direct from the key */ + if (main_pk->is_revoked) + validity |= TRUST_FLAG_REVOKED; + if (main_pk != pk && pk->is_revoked) + validity |= TRUST_FLAG_SUB_REVOKED; + /* Note: expiration is a trust value and not a flag - don't know why + * I initially designed it that way */ + if (main_pk->has_expired || pk->has_expired) + validity = (validity & ~TRUST_MASK) | TRUST_EXPIRED; + + if (pending_check_trustdb) + validity |= TRUST_FLAG_PENDING_CHECK; + + if (main_pk != pk) + free_public_key (main_pk); + return validity; } -/**************** - * Get the trustlevel for this PK. - * Note: This does not ask any questions - * Returns: 0 okay of an errorcode - * - * It operates this way: - * locate the pk in the trustdb - * found: - * Do we have a valid cache record for it? - * yes: return trustlevel from cache - * no: make a cache record and all the other stuff - * not found: - * try to insert the pubkey into the trustdb and check again - * - * Problems: How do we get the complete keyblock to check that the - * cache record is actually valid? Think we need a clever - * cache in getkey.c to keep track of this stuff. Maybe it - * is not necessary to check this if we use a local pubring. Hmmmm. - */ int -check_trust( PKT_public_key *pk, unsigned *r_trustlevel, - const byte *namehash, int (*add_fnc)(ulong), unsigned *retflgs ) +get_validity_info (PKT_public_key *pk, const byte *namehash) { - TRUSTREC rec; - unsigned trustlevel = TRUST_UNKNOWN; - int rc=0; - u32 cur_time; - u32 keyid[2]; - - - init_trustdb(); - keyid_from_pk( pk, keyid ); - - /* get the pubkey record */ - if( pk->local_id ) { - read_record( pk->local_id, &rec, RECTYPE_DIR ); - } - else { /* no local_id: scan the trustdb */ - if( (rc=tdbio_search_dir_bypk( pk, &rec )) && rc != -1 ) { - log_error(_("check_trust: search dir record failed: %s\n"), - gpg_errstr(rc)); - return rc; - } - else if( rc == -1 && opt.dry_run ) - return GPGERR_GENERAL; - else if( rc == -1 ) { /* not found - insert */ - rc = insert_trust_record_by_pk( pk ); - if( rc ) { - log_error(_("key %08lX: insert trust record failed: %s\n"), - (ulong)keyid[1], gpg_errstr(rc)); - goto leave; - } - log_info(_("key %08lX.%lu: inserted into trustdb\n"), - (ulong)keyid[1], pk->local_id ); - /* and re-read the dir record */ - read_record( pk->local_id, &rec, RECTYPE_DIR ); - } - } - cur_time = make_timestamp(); - if( pk->timestamp > cur_time ) { - log_info(_("key %08lX.%lu: created in future " - "(time warp or clock problem)\n"), - (ulong)keyid[1], pk->local_id ); - if( !opt.ignore_time_conflict ) - return GPGERR_TIME_CONFLICT; - } - - if( !(rec.r.dir.dirflags & DIRF_CHECKED) ) - check_trust_record( &rec, 0 ); - else if( rec.r.dir.checkat && rec.r.dir.checkat <= cur_time ) - check_trust_record( &rec, 0 ); - else if( (rec.r.dir.dirflags & DIRF_NEWKEYS) ) - check_trust_record( &rec, 1 ); - - if( pk->expiredate && pk->expiredate <= cur_time ) { - log_info(_("key %08lX.%lu: expired at %s\n"), - (ulong)keyid[1], pk->local_id, - asctimestamp( pk->expiredate) ); - trustlevel = TRUST_EXPIRED; - } - else { - rc = do_check( &rec, &trustlevel, namehash, add_fnc, retflgs ); - if( rc ) { - log_error(_("key %08lX.%lu: trust check failed: %s\n"), - (ulong)keyid[1], pk->local_id, gpg_errstr(rc)); - return rc; - } - } - - /* is a subkey has been requested, we have to check its keyflags */ - if( !rc ) { - TRUSTREC krec; - byte fpr[MAX_FINGERPRINT_LEN] = {0}; /* to avoid compiler warnings */ - size_t fprlen = 0; - ulong recno; - int kcount=0; - - for( recno = rec.r.dir.keylist; recno; recno = krec.r.key.next ) { - read_record( recno, &krec, RECTYPE_KEY ); - if( ++kcount == 1 ) - continue; /* skip the primary key */ - if( kcount == 2 ) /* now we need the fingerprint */ - fingerprint_from_pk( pk, fpr, &fprlen ); - - if( krec.r.key.fingerprint_len == fprlen - && !memcmp( krec.r.key.fingerprint, fpr, fprlen ) ) { - /* found the subkey */ - if( (krec.r.key.keyflags & KEYF_REVOKED) ) - trustlevel |= TRUST_FLAG_SUB_REVOKED; - /* should we check for keybinding here??? */ - /* Hmmm: Maybe this whole checking stuff should not go - * into the trustdb, but be done direct from the keyblock. - * Chnage this all when we add an abstarction layer around - * the way certificates are handled by different standards */ - break; - } - } - } - - - leave: - if( DBG_TRUST ) - log_debug("check_trust() returns trustlevel %04x.\n", trustlevel); - *r_trustlevel = trustlevel; - return 0; -} - - -/**************** - * scan the whole trustdb and mark all signature records whose keys - * are freshly imported. - */ -static void -mark_fresh_keys() -{ - TRUSTREC dirrec, rec; - ulong recnum, lid; - int i; - - memset( &dirrec, 0, sizeof dirrec ); - - for(recnum=0; !tdbio_read_record( recnum, &rec, 0); recnum++ ) { - if( rec.rectype != RECTYPE_SIG ) - continue; - /* if we have already have the dir record, we can check it now */ - if( dirrec.recnum == rec.r.sig.lid - && (dirrec.r.dir.dirflags & DIRF_NEWKEYS) ) - continue; /* flag is already set */ - - for(i=0; i < SIGS_PER_RECORD; i++ ) { - if( !(lid=rec.r.sig.sig[i].lid) ) - continue; /* skip deleted sigs */ - if( !(rec.r.sig.sig[i].flag & SIGF_CHECKED) ) - continue; /* skip checked signatures */ - if( qry_lid_table_flag( fresh_imported_keys, lid, NULL ) ) - continue; /* not in the list of new keys */ - read_record( rec.r.sig.lid, &dirrec, RECTYPE_DIR ); - if( !(dirrec.r.dir.dirflags & DIRF_NEWKEYS) ) { - dirrec.r.dir.dirflags |= DIRF_NEWKEYS; - write_record( &dirrec ); - } - break; - } - } - - do_sync(); - - clear_lid_table( fresh_imported_keys ); - fresh_imported_keys_count = 0; -} - - - -int -query_trust_info( PKT_public_key *pk, const byte *namehash ) -{ - unsigned trustlevel; + int trustlevel; int c; - init_trustdb(); - if( check_trust( pk, &trustlevel, namehash, NULL, NULL ) ) - return '?'; + trustlevel = get_validity (pk, namehash); if( trustlevel & TRUST_FLAG_DISABLED ) return 'd'; if( trustlevel & TRUST_FLAG_REVOKED ) return 'r'; - c = trust_letter( (trustlevel & TRUST_MASK) ); + c = trust_letter ( (trustlevel & TRUST_MASK) ); if( !c ) c = '?'; return c; @@ -2549,76 +868,10 @@ query_trust_info( PKT_public_key *pk, const byte *namehash ) -/**************** - * Return the assigned ownertrust value for the given LID - */ -unsigned -get_ownertrust( ulong lid ) -{ - TRUSTREC rec; - - init_trustdb(); - read_record( lid, &rec, RECTYPE_DIR ); - return rec.r.dir.ownertrust; -} - -int -get_ownertrust_info( ulong lid ) -{ - unsigned otrust; - int c; - - init_trustdb(); - otrust = get_ownertrust( lid ); - c = trust_letter( (otrust & TRUST_MASK) ); - if( !c ) - c = '?'; - return c; -} - - void list_trust_path( const char *username ) { - int rc; - ulong lid; - TRUSTREC rec; - TN tree; - PKT_public_key *pk = gcry_xcalloc( 1, sizeof *pk ); - - init_trustdb(); - if( (rc = get_pubkey_byname(NULL, pk, username, NULL )) ) - log_error(_("user '%s' not found: %s\n"), username, gpg_errstr(rc) ); - else if( (rc=tdbio_search_dir_bypk( pk, &rec )) && rc != -1 ) - log_error(_("problem finding '%s' in trustdb: %s\n"), - username, gpg_errstr(rc)); - else if( rc == -1 ) { - log_info(_("user '%s' not in trustdb - inserting\n"), username); - rc = insert_trust_record_by_pk( pk ); - if( rc ) - log_error(_("failed to put '%s' into trustdb: %s\n"), - username, gpg_errstr(rc)); - else { - assert( pk->local_id ); - } - } - lid = pk->local_id; - - tree = build_cert_tree( lid, 0, opt.max_cert_depth, NULL ); - if( tree ) - propagate_validity( tree, tree, NULL, NULL ); - if( opt.with_colons ) - dump_tn_tree_with_colons( 0, tree ); - else - dump_tn_tree( stdout, 0, tree ); - /*printf("(alloced tns=%d max=%d)\n", alloced_tns, max_alloced_tns );*/ - release_tn_tree( tree ); - /*printf("Ownertrust=%c Validity=%c\n", get_ownertrust_info( lid ), - query_trust_info( pk, NULL ) ); */ - - free_public_key( pk ); - } @@ -2647,67 +900,6 @@ enum_cert_paths( void **context, ulong *lid, unsigned *ownertrust, unsigned *validity ) { return -1; - #if 0 - struct enum_cert_paths_ctx *ctx; - fixme: ..... tsl; - - init_trustdb(); - if( !lid ) { /* release the context */ - if( *context ) { - FIXME: ........tsl2; - - ctx = *context; - for(tsl = ctx->tsl_head; tsl; tsl = tsl2 ) { - tsl2 = tsl->next; - gcry_free( tsl ); - } - *context = NULL; - } - return -1; - } - - if( !*context ) { - FIXME .... *tmppath; - TRUSTREC rec; - - if( !*lid ) - return -1; - - ctx = gcry_xcalloc( 1, sizeof *ctx ); - *context = ctx; - /* collect the paths */ - #if 0 - read_record( *lid, &rec, RECTYPE_DIR ); - tmppath = gcry_xcalloc( 1, (opt.max_cert_depth+1)* sizeof *tmppath ); - tsl = NULL; - collect_paths( 0, opt.max_cert_depth, 1, &rec, tmppath, &tsl ); - gcry_free( tmppath ); - sort_tsl_list( &tsl ); - #endif - /* setup the context */ - ctx->tsl_head = tsl; - ctx->tsl = ctx->tsl_head; - ctx->idx = 0; - } - else - ctx = *context; - - while( ctx->tsl && ctx->idx >= ctx->tsl->pathlen ) { - ctx->tsl = ctx->tsl->next; - ctx->idx = 0; - } - tsl = ctx->tsl; - if( !tsl ) - return -1; /* eof */ - - if( ownertrust ) - *ownertrust = tsl->path[ctx->idx].otrust; - if( validity ) - *validity = tsl->path[ctx->idx].trust; - *lid = tsl->path[ctx->idx].lid; - ctx->idx++; - return ctx->idx-1; - #endif } @@ -2719,108 +911,740 @@ enum_cert_paths_print( void **context, FILE *fp, int refresh, ulong selected_lid ) { return; - #if 0 - struct enum_cert_paths_ctx *ctx; - FIXME......... tsl; +} - if( !*context ) - return; - init_trustdb(); - ctx = *context; - if( !ctx->tsl ) - return; - tsl = ctx->tsl; - if( !fp ) - fp = stderr; + +/**************************************** + *********** NEW NEW NEW **************** + ****************************************/ - if( refresh ) { /* update the ownertrust and if possible the validity */ - int i; - int match = tdbio_db_matches_options(); +static int +ask_ownertrust (u32 *kid) +{ + PKT_public_key *pk; + int rc; + int ot; - for( i = 0; i < tsl->pathlen; i++ ) { - TRUSTREC rec; + pk = m_alloc_clear (sizeof *pk); + rc = get_pubkey (pk, kid); + if (rc) + { + log_error (_("public key %08lX not found: %s\n"), + (ulong)kid[1], g10_errstr(rc) ); + return TRUST_UNKNOWN; + } + + ot=edit_ownertrust(pk,0); + if(ot>0) + ot = get_ownertrust (pk); + else if(ot==0) + ot = TRUST_UNDEFINED; + else + ot = -1; /* quit */ + free_public_key( pk ); + return ot; +} - read_record( tsl->path[i].lid, &rec, RECTYPE_DIR ); - tsl->path[i].otrust = rec.r.dir.ownertrust; - /* update validity only if we have it in the cache - * calculation is too time consuming */ - if( match && rec.r.dir.valcheck && rec.r.dir.validity ) { - tsl->path[i].trust = rec.r.dir.validity; - if( rec.r.dir.dirflags & DIRF_REVOKED ) - tsl->path[i].trust = TRUST_FLAG_REVOKED; - } - } + +static void +mark_keyblock_seen (KeyHashTable tbl, KBNODE node) +{ + for ( ;node; node = node->next ) + if (node->pkt->pkttype == PKT_PUBLIC_KEY + || node->pkt->pkttype == PKT_PUBLIC_SUBKEY) + { + u32 aki[2]; + + keyid_from_pk (node->pkt->pkt.public_key, aki); + add_key_hash_table (tbl, aki); + } +} + + + +static void +dump_key_array (int depth, struct key_array *keys) +{ + struct key_array *kar; + + for (kar=keys; kar->keyblock; kar++) + { + KBNODE node = kar->keyblock; + u32 kid[2]; + + keyid_from_pk(node->pkt->pkt.public_key, kid); + printf ("%d:%08lX%08lX:K::%c::::\n", + depth, (ulong)kid[0], (ulong)kid[1], '?'); + + for (; node; node = node->next) + { + if (node->pkt->pkttype == PKT_USER_ID) + { + int len = node->pkt->pkt.user_id->len; + + if (len > 30) + len = 30; + printf ("%d:%08lX%08lX:U:::%c:::", + depth, (ulong)kid[0], (ulong)kid[1], + (node->flag & 4)? 'f': + (node->flag & 2)? 'm': + (node->flag & 1)? 'q':'-'); + print_string (stdout, node->pkt->pkt.user_id->name, len, ':'); + putchar (':'); + putchar ('\n'); + } + } + } +} + + +static void +store_validation_status (int depth, KBNODE keyblock) +{ + KBNODE node; + byte namehash[20]; + int status; + int any = 0; + + for (node=keyblock; node; node = node->next) + { + if (node->pkt->pkttype == PKT_USER_ID) + { + PKT_user_id *uid = node->pkt->pkt.user_id; + + if (node->flag & 4) + status = TRUST_FULLY; + else if (node->flag & 2) + status = TRUST_MARGINAL; + else if (node->flag & 1) + status = TRUST_UNDEFINED; + else + status = 0; + + if (status) + { + if( uid->attrib_data ) + rmd160_hash_buffer (namehash,uid->attrib_data,uid->attrib_len); + else + rmd160_hash_buffer (namehash, uid->name, uid->len ); + + update_validity (keyblock->pkt->pkt.public_key, + namehash, depth, status); + any = 1; + } + } } - print_path( tsl->pathlen, tsl->path, fp, selected_lid ); - #endif + if (any) + do_sync (); +} + +/* + * check whether the signature sig is in the klist k + */ +static struct key_item * +is_in_klist (struct key_item *k, PKT_signature *sig) +{ + for (; k; k = k->next) + { + if (k->kid[0] == sig->keyid[0] && k->kid[1] == sig->keyid[1]) + return k; + } + return NULL; +} + +/* + * Mark the signature of the given UID which are used to certify it. + * To do this, we first revmove all signatures which are not valid and + * from the remain ones we look for the latest one. If this is not a + * certification revocation signature we mark the signature by setting + * node flag bit 8. Note that flag bits 9 and 10 are used for internal + * purposes. + */ +static void +mark_usable_uid_certs (KBNODE keyblock, KBNODE uidnode, + u32 *main_kid, struct key_item *klist, + u32 curtime, u32 *next_expire) +{ + KBNODE node; + PKT_signature *sig; + + /* first check all signatures */ + for (node=uidnode->next; node; node = node->next) + { + node->flag &= ~(1<<8 | 1<<9 | 1<<10); + if (node->pkt->pkttype == PKT_USER_ID + || node->pkt->pkttype == PKT_PUBLIC_SUBKEY) + break; /* ready */ + if (node->pkt->pkttype != PKT_SIGNATURE) + continue; + + sig = node->pkt->pkt.signature; + if (sig->keyid[0] == main_kid[0] && sig->keyid[1] == main_kid[1]) + continue; /* ignore self-signatures */ + if (!IS_UID_SIG(sig) && !IS_UID_REV(sig)) + continue; /* we only look at these signature classes */ + if (!is_in_klist (klist, sig)) + continue; /* no need to check it then */ + if (check_key_signature (keyblock, node, NULL)) + continue; /* ignore invalid signatures */ + node->flag |= 1<<9; + } + /* reset the remaining flags */ + for (; node; node = node->next) + node->flag &= ~(1<<8 | 1<<9 | 1 << 10); + + /* kbnode flag usage: bit 9 is here set for signatures to consider, + * bit 10 will be set by the loop to keep track of keyIDs already + * processed, bit 8 will be set for the usable signatures */ + + /* for each cert figure out the latest valid one */ + for (node=uidnode->next; node; node = node->next) + { + KBNODE n, signode; + u32 kid[2]; + u32 sigdate; + + if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) + break; + if ( !(node->flag & (1<<9)) ) + continue; /* not a node to look at */ + if ( (node->flag & (1<<10)) ) + continue; /* signature with a keyID already processed */ + node->flag |= (1<<10); /* mark this node as processed */ + sig = node->pkt->pkt.signature; + signode = node; + sigdate = sig->timestamp; + kid[0] = sig->keyid[0]; kid[1] = sig->keyid[1]; + for (n=uidnode->next; n; n = n->next) + { + if (n->pkt->pkttype == PKT_PUBLIC_SUBKEY) + break; + if ( !(n->flag & (1<<9)) ) + continue; + if ( (n->flag & (1<<10)) ) + continue; /* shortcut already processed signatures */ + sig = n->pkt->pkt.signature; + if (kid[0] != sig->keyid[0] || kid[1] != sig->keyid[1]) + continue; + n->flag |= (1<<10); /* mark this node as processed */ + + /* If signode is nonrevocable and unexpired and n isn't, + then take signode (skip). It doesn't matter which is + older: if signode was older then we don't want to take n + as signode is nonrevocable. If n was older then we're + automatically fine. */ + + if(((IS_UID_SIG(signode->pkt->pkt.signature) && + !signode->pkt->pkt.signature->flags.revocable && + (signode->pkt->pkt.signature->expiredate==0 || + signode->pkt->pkt.signature->expiredate>curtime))) && + (!(IS_UID_SIG(n->pkt->pkt.signature) && + !n->pkt->pkt.signature->flags.revocable && + (n->pkt->pkt.signature->expiredate==0 || + n->pkt->pkt.signature->expiredate>curtime)))) + continue; + + /* If n is nonrevocable and unexpired and signode isn't, + then take n. Again, it doesn't matter which is older: if + n was older then we don't want to take signode as n is + nonrevocable. If signode was older then we're + automatically fine. */ + + if((!(IS_UID_SIG(signode->pkt->pkt.signature) && + !signode->pkt->pkt.signature->flags.revocable && + (signode->pkt->pkt.signature->expiredate==0 || + signode->pkt->pkt.signature->expiredate>curtime))) && + ((IS_UID_SIG(n->pkt->pkt.signature) && + !n->pkt->pkt.signature->flags.revocable && + (n->pkt->pkt.signature->expiredate==0 || + n->pkt->pkt.signature->expiredate>curtime)))) + { + signode = n; + sigdate = sig->timestamp; + continue; + } + + /* At this point, if it's newer, it goes in as the only + remaining possibilities are signode and n are both either + revocable or expired or both nonrevocable and unexpired. + If the timestamps are equal take the later ordered + packet, presuming that the key packets are hopefully in + their original order. */ + + if (sig->timestamp >= sigdate) + { + signode = n; + sigdate = sig->timestamp; + } + } + sig = signode->pkt->pkt.signature; + if (IS_UID_SIG (sig)) + { /* this seems to be a usable one which is not revoked. + * Just need to check whether there is an expiration time, + * We do the expired certification after finding a suitable + * certification, the assumption is that a signator does not + * want that after the expiration of his certificate the + * system falls back to an older certification which has a + * different expiration time */ + const byte *p; + u32 expire; + + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_SIG_EXPIRE, NULL ); + expire = p? sig->timestamp + buffer_to_u32(p) : 0; + + if (expire==0 || expire > curtime ) + { + signode->flag |= (1<<8); /* yeah, found a good cert */ + if (expire && expire < *next_expire) + *next_expire = expire; + } + } + } } /* - * Return an allocated buffer with the preference values for - * the key with LID and the userid which is identified by the - * HAMEHASH or the first one if namehash is NULL. ret_n receives - * the length of the allocated buffer. Structure of the buffer is - * a repeated sequences of 2 bytes; where the first byte describes the - * type of the preference and the second one the value. The constants - * PREFTYPE_xxxx should be used to reference a type. + * Return true if the key is signed by one of the keys in the given + * key ID list. User IDs with a valid signature are marked by node + * flags as follows: + * flag bit 0: There is at least one signature + * 1: There is marginal confidence that this is a legitimate uid + * 2: There is full confidence that this is a legitimate uid. + * 8: Used for internal purposes. + * 9: Ditto (in mark_usable_uid_certs()) + * 10: Ditto (ditto) + * This function assumes that all kbnode flags are cleared on entry. */ -byte * -get_pref_data( ulong lid, const byte *namehash, size_t *ret_n ) +static int +validate_one_keyblock (KBNODE kb, struct key_item *klist, + u32 curtime, u32 *next_expire) { - TRUSTREC rec; - ulong recno; + struct key_item *kr; + KBNODE node, uidnode=NULL; + PKT_public_key *pk = kb->pkt->pkt.public_key; + u32 main_kid[2]; + int issigned=0, any_signed = 0, fully_count =0, marginal_count = 0; - init_trustdb(); - read_record( lid, &rec, RECTYPE_DIR ); - for( recno=rec.r.dir.uidlist; recno; recno = rec.r.uid.next ) { - read_record( recno, &rec, RECTYPE_UID ); - if( rec.r.uid.prefrec - && ( !namehash || !memcmp(namehash, rec.r.uid.namehash, 20) )) { - byte *buf; - /* found the correct one or the first one */ - read_record( rec.r.uid.prefrec, &rec, RECTYPE_PREF ); - if( rec.r.pref.next ) - log_info(_("WARNING: can't yet handle long pref records\n")); - buf = gcry_xmalloc( ITEMS_PER_PREF_RECORD ); - memcpy( buf, rec.r.pref.data, ITEMS_PER_PREF_RECORD ); - *ret_n = ITEMS_PER_PREF_RECORD; - return buf; - } + keyid_from_pk(pk, main_kid); + for (node=kb; node; node = node->next) + { + if (node->pkt->pkttype == PKT_USER_ID) + { + if (uidnode && issigned) + { + if (fully_count >= opt.completes_needed + || marginal_count >= opt.marginals_needed ) + uidnode->flag |= 4; + else if (fully_count || marginal_count) + uidnode->flag |= 2; + uidnode->flag |= 1; + any_signed = 1; + } + uidnode = node; + issigned = 0; + fully_count = marginal_count = 0; + mark_usable_uid_certs (kb, uidnode, main_kid, klist, + curtime, next_expire); + } + else if (node->pkt->pkttype == PKT_SIGNATURE + && (node->flag & (1<<8)) ) + { + PKT_signature *sig = node->pkt->pkt.signature; + + kr = is_in_klist (klist, sig); + if (kr) + { + if (kr->ownertrust == TRUST_ULTIMATE) + fully_count = opt.completes_needed; + else if (kr->ownertrust == TRUST_FULLY) + fully_count++; + else if (kr->ownertrust == TRUST_MARGINAL) + marginal_count++; + issigned = 1; + } + } } - return NULL; + + if (uidnode && issigned) + { + if (fully_count >= opt.completes_needed + || marginal_count >= opt.marginals_needed ) + uidnode->flag |= 4; + else if (fully_count || marginal_count) + uidnode->flag |= 2; + uidnode->flag |= 1; + any_signed = 1; + } + + return any_signed; } - -/**************** - * Check whether the algorithm is in one of the pref records - */ -int -is_algo_in_prefs( ulong lid, int preftype, int algo ) +static int +search_skipfnc (void *opaque, u32 *kid) { - TRUSTREC rec; - ulong recno; - int i; - byte *pref; + return test_key_hash_table ((KeyHashTable)opaque, kid); +} - init_trustdb(); - read_record( lid, &rec, RECTYPE_DIR ); - for( recno=rec.r.dir.uidlist; recno; recno = rec.r.uid.next ) { - read_record( recno, &rec, RECTYPE_UID ); - if( rec.r.uid.prefrec ) { - read_record( rec.r.uid.prefrec, &rec, RECTYPE_PREF ); - if( rec.r.pref.next ) - log_info(_("WARNING: can't yet handle long pref records\n")); - pref = rec.r.pref.data; - for(i=0; i+1 < ITEMS_PER_PREF_RECORD; i+=2 ) { - if( pref[i] == preftype && pref[i+1] == algo ) - return 1; + +/* + * Scan all keys and return a key_array of all suitable keys from + * kllist. The caller has to pass keydb handle so that we don't use + * to create our own. Returns either a key_array or NULL in case of + * an error. No results found are indicated by an empty array. + * Caller hast to release the returned array. + */ +static struct key_array * +validate_key_list (KEYDB_HANDLE hd, KeyHashTable visited, + struct key_item *klist, u32 curtime, u32 *next_expire) +{ + KBNODE keyblock = NULL; + struct key_array *keys = NULL; + size_t nkeys, maxkeys; + int rc; + KEYDB_SEARCH_DESC desc; + + maxkeys = 1000; + keys = m_alloc ((maxkeys+1) * sizeof *keys); + nkeys = 0; + + rc = keydb_search_reset (hd); + if (rc) + { + log_error ("keydb_search_reset failed: %s\n", g10_errstr(rc)); + m_free (keys); + return NULL; + } + + memset (&desc, 0, sizeof desc); + desc.mode = KEYDB_SEARCH_MODE_FIRST; + desc.skipfnc = search_skipfnc; + desc.skipfncvalue = visited; + rc = keydb_search (hd, &desc, 1); + if (rc == -1) + { + keys[nkeys].keyblock = NULL; + return keys; + } + if (rc) + { + log_error ("keydb_search_first failed: %s\n", g10_errstr(rc)); + m_free (keys); + return NULL; + } + + desc.mode = KEYDB_SEARCH_MODE_NEXT; /* change mode */ + do + { + PKT_public_key *pk; + + rc = keydb_get_keyblock (hd, &keyblock); + if (rc) + { + log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); + m_free (keys); + return NULL; + } + + if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY) + { + log_debug ("ooops: invalid pkttype %d encountered\n", + keyblock->pkt->pkttype); + dump_kbnode (keyblock); + release_kbnode(keyblock); + continue; + } + + /* prepare the keyblock for further processing */ + merge_keys_and_selfsig (keyblock); + clear_kbnode_flags (keyblock); + pk = keyblock->pkt->pkt.public_key; + if (pk->has_expired || pk->is_revoked) + { + /* it does not make sense to look further at those keys */ + mark_keyblock_seen (visited, keyblock); + } + else if (validate_one_keyblock (keyblock, klist, curtime, next_expire)) + { + if (pk->expiredate && pk->expiredate >= curtime + && pk->expiredate < *next_expire) + *next_expire = pk->expiredate; + + if (nkeys == maxkeys) { + maxkeys += 1000; + keys = m_realloc (keys, (maxkeys+1) * sizeof *keys); + } + keys[nkeys++].keyblock = keyblock; + /* this key is signed - don't check it again */ + mark_keyblock_seen (visited, keyblock); + keyblock = NULL; + } + + release_kbnode (keyblock); + keyblock = NULL; + } + while ( !(rc = keydb_search (hd, &desc, 1)) ); + if (rc && rc != -1) + { + log_error ("keydb_search_next failed: %s\n", g10_errstr(rc)); + m_free (keys); + return NULL; + } + + keys[nkeys].keyblock = NULL; + return keys; +} + + +static void +reset_unconnected_keys (KEYDB_HANDLE hd, KeyHashTable visited) +{ + int rc; + KBNODE keyblock = NULL; + KEYDB_SEARCH_DESC desc; + int count = 0, nreset = 0; + + rc = keydb_search_reset (hd); + if (rc) + { + log_error ("keydb_search_reset failed: %s\n", g10_errstr(rc)); + return; + } + + memset (&desc, 0, sizeof desc); + desc.mode = KEYDB_SEARCH_MODE_FIRST; + desc.skipfnc = search_skipfnc; + desc.skipfncvalue = visited; + rc = keydb_search (hd, &desc, 1); + if (rc && rc != -1 ) + log_error ("keydb_search_first failed: %s\n", g10_errstr(rc)); + else if (!rc) + { + desc.mode = KEYDB_SEARCH_MODE_NEXT; /* change mode */ + do + { + rc = keydb_get_keyblock (hd, &keyblock); + if (rc) + { + log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); + break; + } + count++; + + if (keyblock->pkt->pkttype == PKT_PUBLIC_KEY) /* paranoid assertion*/ + { + nreset += clear_validity (keyblock->pkt->pkt.public_key); + release_kbnode (keyblock); + } + } + while ( !(rc = keydb_search (hd, &desc, 1)) ); + if (rc && rc != -1) + log_error ("keydb_search_next failed: %s\n", g10_errstr(rc)); + } + if (opt.verbose) + log_info ("%d unconnected keys (%d trust records cleared)\n", + count, nreset); + do_sync (); +} + + +/* + * Run the key validation procedure. + * + * This works this way: + * Step 1: Find all ultimately trusted keys (UTK). + * mark them all as seen and put them into klist. + * Step 2: loop max_cert_times + * Step 3: if OWNERTRUST of any key in klist is undefined + * ask user to assign ownertrust + * Step 4: Loop over all keys in the keyDB which are not marked seen + * Step 5: if key is revoked or expired + * mark key as seen + * continue loop at Step 4 + * Step 6: For each user ID of that key signed by a key in klist + * Calculate validity by counting trusted signatures. + * Set validity of user ID + * Step 7: If any signed user ID was found + * mark key as seen + * End Loop + * Step 8: Build a new klist from all fully trusted keys from step 6 + * End Loop + * Ready + * + */ +static int +validate_keys (int interactive) +{ + int rc = 0; + int quit=0; + struct key_item *klist = NULL; + struct key_item *k; + struct key_array *keys = NULL; + struct key_array *kar; + KEYDB_HANDLE kdb = NULL; + KBNODE node; + int depth; + int key_count; + int ot_unknown, ot_undefined, ot_never, ot_marginal, ot_full, ot_ultimate; + KeyHashTable visited; + u32 start_time, next_expire; + + start_time = make_timestamp (); + next_expire = 0xffffffff; /* set next expire to the year 2106 */ + visited = new_key_hash_table (); + /* Fixme: Instead of always building a UTK list, we could just build it + * here when needed */ + if (!utk_list) + { + log_info ("no ultimately trusted keys found\n"); + goto leave; + } + + + /* mark all UTKs as visited and set validity to ultimate */ + for (k=utk_list; k; k = k->next) + { + KBNODE keyblock; + PKT_public_key *pk; + + keyblock = get_pubkeyblock (k->kid); + if (!keyblock) + { + log_error (_("public key of ultimately" + " trusted key %08lX not found\n"), (ulong)k->kid[1]); + continue; + } + mark_keyblock_seen (visited, keyblock); + pk = keyblock->pkt->pkt.public_key; + for (node=keyblock; node; node = node->next) + { + if (node->pkt->pkttype == PKT_USER_ID) + { + byte namehash[20]; + PKT_user_id *uid = node->pkt->pkt.user_id; + + if( uid->attrib_data ) + rmd160_hash_buffer (namehash,uid->attrib_data,uid->attrib_len); + else + rmd160_hash_buffer (namehash, uid->name, uid->len ); + update_validity (pk, namehash, 0, TRUST_ULTIMATE); + } + } + if ( pk->expiredate && pk->expiredate >= start_time + && pk->expiredate < next_expire) + next_expire = pk->expiredate; + + release_kbnode (keyblock); + do_sync (); + } + + + klist = utk_list; + kdb = keydb_new (0); + + for (depth=0; depth < opt.max_cert_depth; depth++) + { + /* See whether we should assign ownertrust values to the keys in + utk_list. */ + ot_unknown = ot_undefined = ot_never = 0; + ot_marginal = ot_full = ot_ultimate = 0; + for (k=klist; k; k = k->next) + { + if (interactive && k->ownertrust == TRUST_UNKNOWN) + k->ownertrust = ask_ownertrust (k->kid); + if (k->ownertrust == -1) + { + quit=1; + goto leave; } - } + else if (k->ownertrust == TRUST_UNKNOWN) + ot_unknown++; + else if (k->ownertrust == TRUST_UNDEFINED) + ot_undefined++; + else if (k->ownertrust == TRUST_NEVER) + ot_never++; + else if (k->ownertrust == TRUST_MARGINAL) + ot_marginal++; + else if (k->ownertrust == TRUST_FULLY) + ot_full++; + else if (k->ownertrust == TRUST_ULTIMATE) + ot_ultimate++; + } + + /* Find all keys which are signed by a key in kdlist */ + keys = validate_key_list (kdb, visited, klist, start_time, &next_expire); + if (!keys) + { + log_error ("validate_key_list failed\n"); + rc = G10ERR_GENERAL; + goto leave; + } + + + for (key_count=0, kar=keys; kar->keyblock; kar++, key_count++) + ; + + /* Store the calculated valididation status somewhere */ + if (opt.verbose > 1) + dump_key_array (depth, keys); + + log_info (_("checking at depth %d signed=%d" + " ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"), + depth, key_count, ot_unknown, ot_undefined, + ot_never, ot_marginal, ot_full, ot_ultimate ); + + for (kar=keys; kar->keyblock; kar++) + store_validation_status (depth, kar->keyblock); + + /* Build a new kdlist from all fully valid keys in KEYS */ + if (klist != utk_list) + release_key_items (klist); + klist = NULL; + for (kar=keys; kar->keyblock; kar++) + { + for (node=kar->keyblock; node; node = node->next) + { + if (node->pkt->pkttype == PKT_USER_ID && (node->flag & 4)) + { + k = new_key_item (); + keyid_from_pk (kar->keyblock->pkt->pkt.public_key, k->kid); + k->ownertrust = get_ownertrust (kar->keyblock + ->pkt->pkt.public_key); + k->next = klist; + klist = k; + break; + } + } + } + release_key_array (keys); + keys = NULL; + if (!klist) + break; /* no need to dive in deeper */ } - return 0; + + reset_unconnected_keys (kdb, visited); + + leave: + keydb_release (kdb); + release_key_array (keys); + release_key_items (klist); + release_key_hash_table (visited); + if (!rc && !quit) /* mark trustDB as checked */ + { + if (next_expire == 0xffffffff || next_expire < start_time ) + tdbio_write_nextcheck (0); + else + { + tdbio_write_nextcheck (next_expire); + log_info (_("next trustdb check due at %s\n"), + strtimestamp (next_expire)); + } + do_sync (); + pending_check_trustdb = 0; + } + return rc; } + diff --git a/g10/trustdb.h b/g10/trustdb.h index 1279edb0f..c94a2daa1 100644 --- a/g10/trustdb.h +++ b/g10/trustdb.h @@ -1,5 +1,5 @@ /* trustdb.h - Trust database - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -18,13 +18,13 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#ifndef GPG_TRUSTDB_H -#define GPG_TRUSTDB_H +#ifndef G10_TRUSTDB_H +#define G10_TRUSTDB_H /* Trust values must be sorted in ascending order */ #define TRUST_MASK 15 -#define TRUST_UNKNOWN 0 /* o: not yet calculated */ +#define TRUST_UNKNOWN 0 /* o: not yet calculated/assigned */ #define TRUST_EXPIRED 1 /* e: calculation may be invalid */ #define TRUST_UNDEFINED 2 /* q: not enough information for calculation */ #define TRUST_NEVER 3 /* n: never trust this pubkey */ @@ -33,43 +33,37 @@ #define TRUST_ULTIMATE 6 /* u: ultimately trusted */ /* trust values not covered by the mask */ #define TRUST_FLAG_REVOKED 32 /* r: revoked */ -#define TRUST_FLAG_SUB_REVOKED 64 +#define TRUST_FLAG_SUB_REVOKED 64 /* r: revoked but for subkeys */ #define TRUST_FLAG_DISABLED 128 /* d: key/uid disabled */ - - -#define PREFTYPE_SYM 1 -#define PREFTYPE_HASH 2 -#define PREFTYPE_COMPR 3 - +#define TRUST_FLAG_PENDING_CHECK 256 /* a check-trustdb is pending */ /*-- trustdb.c --*/ -void list_trust_path( const char *username ); void register_trusted_key( const char *string ); -void check_trustdb( const char *username ); -void update_trustdb( void ); +void check_trustdb (void); +void update_trustdb (void); int setup_trustdb( int level, const char *dbname ); void init_trustdb( void ); void sync_trustdb( void ); -int check_trust( PKT_public_key *pk, unsigned *r_trustlevel, - const byte* nh, int (*add_fnc)(ulong), unsigned *retflgs ); -int query_trust_info( PKT_public_key *pk, const byte *nh ); + +int trust_letter( unsigned value ); + +void revalidation_mark (void); + +unsigned int get_validity (PKT_public_key *pk, const byte *namehash); +int get_validity_info (PKT_public_key *pk, const byte *namehash); + +void list_trust_path( const char *username ); + int enum_cert_paths( void **context, ulong *lid, unsigned *ownertrust, unsigned *validity ); void enum_cert_paths_print( void **context, FILE *fp, int refresh, ulong selected_lid ); -unsigned get_ownertrust( ulong lid ); -int get_ownertrust_info( ulong lid ); -byte *get_pref_data( ulong lid, const byte *namehash, size_t *ret_n ); -int is_algo_in_prefs( ulong lid, int preftype, int algo ); -int keyid_from_lid( ulong lid, u32 *keyid ); -ulong lid_from_keyblock( KBNODE keyblock ); -int query_trust_record( PKT_public_key *pk ); -int clear_trust_checked_flag( PKT_public_key *pk ); -int update_trust_record( KBNODE keyblock, int fast, int *modified ); -int insert_trust_record( KBNODE keyblock ); -int insert_trust_record_by_pk( PKT_public_key *pk ); -int update_ownertrust( ulong lid, unsigned new_trust ); -int trust_letter( unsigned value ); + +unsigned int get_ownertrust (PKT_public_key *pk); +int get_ownertrust_info (PKT_public_key *pk); +void update_ownertrust (PKT_public_key *pk, unsigned int new_trust ); +int clear_ownertrust (PKT_public_key *pk); + /*-- tdbdump.c --*/ void list_trustdb(const char *username); @@ -77,6 +71,6 @@ void export_ownertrust(void); void import_ownertrust(const char *fname); /*-- pkclist.c --*/ -int edit_ownertrust( ulong lid, int mode ); +int edit_ownertrust (PKT_public_key *pk, int mode ); -#endif /*GPG_TRUSTDB_H*/ +#endif /*G10_TRUSTDB_H*/ diff --git a/g10/verify.c b/g10/verify.c index f3f9a36eb..7ab20c140 100644 --- a/g10/verify.c +++ b/g10/verify.c @@ -1,5 +1,5 @@ /* verify.c - verify signed data - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,13 +24,14 @@ #include #include #include +#include /* for isatty() */ -#include #include "options.h" #include "packet.h" #include "errors.h" #include "iobuf.h" #include "keydb.h" +#include "memory.h" #include "util.h" #include "main.h" #include "status.h" @@ -60,13 +61,38 @@ verify_signatures( int nfiles, char **files ) STRLIST sl; memset( &afx, 0, sizeof afx); + /* decide whether we should handle a detached or a normal signature, + * which is needed so that the code later can hash the correct data and + * not have a normal signature act as detached signature and ignoring the + * indended signed material from the 2nd file or stdin. + * 1. gpg + + * ja.po: Updated, also a bit too late for the release. + +2002-04-29 Werner Koch + + * pl.po: Update. + * el.po: Updated, removed one entry due to non-matching printf and + one removed one printf specifier. + + Fixed fuzzy entries due to the change of (y/N) to (Y/n) in most files. + +2002-04-25 gettextize + + * Makefile.in.in: Upgrade to gettext-0.10.40. + +2002-04-22 Werner Koch + + * et.po, tr.po, cs.po, it.po, id.po: Updated. + +2002-04-19 Werner Koch + + * de.po: Fixed fuzzies and added a few translations. + +2002-04-18 Werner Koch + + * eo.po: Updated. + +2002-04-10 Werner Koch + + * pl.po: Updated. + +2002-04-09 Werner Koch + + * pt_BR.po: Updated the info entry + + * es.po: Fixed a c-format problem; for unknown reasons msgfmt -c + can't cope with swapped arguments. + + * de.po: Fuzzy fixes and a few new translations. + + * id.po: Fixed a format string mismatch. + + * eo.po, it.po, ja.po, sv.po: Updated with a somewhat newer + version from the TP. + + * es_ES.po: Removed + * es.po: and replaced with this updated version from the TP. + + * cs.po: New. Fixed for format string mismatches. + + * el.po, gl.po: New from TP. + +2002-04-06 Werner Koch + + * fr.po: Updated. + +2002-04-02 Werner Koch + + * de.po, de.glo: Updated. + +2002-03-08 Werner Koch + + * et.po: Updated. + +2002-03-06 Werner Koch + + * pt_PT.po: Removed. + * pt.po: and replaced by this updated one. My machine voted 30 to + 2 for just pt. So we go with the crowd. Thanks for Pedro Morais + for suggesting this. + +2002-03-05 Werner Koch + + * tr.po, id.po: Updated. + +2002-03-03 gettextize + + * Makefile.in.in: Upgrade to gettext-0.10.40. + +2002-03-03 gettextize + + * Makefile.in.in: Upgrade to gettext-0.10.40. + +2001-10-23 gettextize + + * Makefile.in.in: Upgrade to gettext-0.10.40. + +2001-09-07 Werner Koch + + * POTFILES.in: Added new files. + +2001-07-26 gettextize + + * Makefile.in.in: Upgrade to gettext-0.10.38. + +2001-07-05 Werner Koch + + * id.po: Updated + +2001-05-28 Werner Koch + + * ru.po: Removed - too many format string bugs. + +2001-05-27 gettextize + + * Makefile.in.in: Upgrade to gettext-0.10.38. + * cat-id-tbl.c: Remove file. + * stamp-cat-id: Remove file. + +2001-05-27 Werner Koch + + * tr.po: New copy from the TP Robot. + * da.po, de.po, eo.po, es_ES.po, et.po, id.po, ja.po, nl.po, + pt_BR.po, sv.po: Fixes to format string errors by Kurt Garloff. + It is not cleare whether they are all correct but at least they + won't give segv and minimize the risk of format string exploits. + * ru.po: Fixed the header entry. + + Fixed some fuzzy entries in all files. + +2001-05-06 Werner Koch + + * id.po: Updated + +2001-04-27 Werner Koch + + * de.po: Removed an extra "%s". + +2001-04-25 Werner Koch + + * fr.po: Updated. + +2001-04-23 Werner Koch + + * eo.po: Updated. + + * it.po: Updated. + +2001-04-22 Werner Koch + + * pl.po: Updated. + +2001-04-17 Werner Koch + + * et.po: New. + + * de.po: Updated. + +2001-04-16 Werner Koch + + * pt_PT.po: Updated. + +2001-04-06 Werner Koch + + * tr.po: New. + +2001-03-18 Werner Koch + + * de.po, de.glo: Updated. + +2001-02-22 Werner Koch + + * de.po, de.glo: Updated. + +2001-01-23 Werner Koch + + * de.po: Removed superfluous \r. + +2001-01-14 Werner Koch + + * de.po, de.glo: Updated. + +2000-12-19 Werner Koch + + * pl.po: Updated. + + * ja.po: Justified one message. + +2000-10-23 Werner Koch + + * ja.po: Updated. + +2000-10-19 Werner Koch + + Fixed a typo in all files. + +2000-10-16 Werner Koch + + * de.po, de.glo: Updated. + +Thu Sep 14 17:45:11 CEST 2000 Werner Koch + + * eo.po: Updated. + +Wed Jul 12 13:32:06 CEST 2000 Werner Koch + + * da.po: New from the TP server + * eo.po: Updated from the TP server + * pl.po: Ditto. + * sv.po: Ditto. + + Small English spelling correction in all files. + +Wed Jul 5 13:28:45 CEST 2000 Werner Koch + + * fr.po: Minor changes by Gael + +Wed Jun 14 12:27:09 CEST 2000 Werner Koch + + * de.po, de.glo: Updated. + +2000-06-07 18:26:58 Werner Koch (wk@habibti.openit.de) + + * fr.po: New version from Gaël + +2000-05-02 10:44:42 Werner Koch (wk@habibti.openit.de) + + * fr.po: New version from the TP Robot. + +2000-05-01 14:19:52 Werner Koch (wk@habibti.openit.de) + + * de.po: Updated. + * de.glo: Ditto. + +2000-03-15 15:37:08 Werner Koch (wk@habibti.openit.de) + + * de.po: Updated. + +Wed Feb 23 10:07:57 CET 2000 Werner Koch + + * nl.po: New. By Ivo Timmermans. + +Wed Feb 16 16:25:09 CET 2000 Werner Koch + + * eo.po : New. By Edmund. + +Wed Feb 16 14:09:00 CET 2000 Werner Koch + + * ja.po: New. By Yosiaki + + * sv.po: New. By Daniel. + +Fri Feb 11 17:44:40 CET 2000 Werner Koch + + * id.po: Updated. + +Thu Jan 6 16:56:18 CET 2000 Werner Koch + + * Makefile.in.in: Is not longer maintained as a symlink because we + have a patch to work around a bug in non-gnu Make. + Fixed by Dave Dykstra. + +Thu Dec 16 10:07:58 CET 1999 Werner Koch + + * pt_PT.po: Updated. + * de.po: Updated. + * it.po: Updated. + +Thu Dec 9 10:31:05 CET 1999 Werner Koch + + * de.po: Updated. + * pt_BR.po: Updated. + +Fri Nov 12 20:33:19 CET 1999 Werner Koch + + * es_ES.po: Fixed 3 \n mismatches. + + * de.po: Updated. + +Thu Oct 28 16:08:20 CEST 1999 Werner Koch + + * es_ES.po: Updated. + + * pt_BR.po: Updated. + +Fri Oct 8 20:32:01 CEST 1999 Werner Koch + + * fr.po: Updated for 1.0.0d. + +Mon Oct 4 21:23:04 CEST 1999 Werner Koch + + * pl.po: New version by Alex. + +Thu Sep 23 06:26:28 1999 Werner Koch (wk@gnupg.org) + + * fr.po: Updated by Gaël. + +Sat Sep 18 11:49:51 1999 Werner Koch (wk@gnupg.org) + + * id.po: New. Done by Tedi Heriyanto. + Wed Sep 15 16:22:17 CEST 1999 Werner Koch * pt_PT.po: New. Done by Pedro Morais. @@ -183,3 +475,15 @@ Fri Mar 13 09:43:19 1998 Werner Koch (wk@isil.d.shuttle.de) * it.po: New + + Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + diff --git a/po/Makefile.in.in b/po/Makefile.in.in index 746d521d9..28726a21f 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -1,14 +1,18 @@ # Makefile for program source directory in GNU NLS utilities package. -# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper +# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can -# be used in projects which are not available under the GNU Public License +# be used in projects which are not available under the GNU General Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. PACKAGE = @PACKAGE@ VERSION = @VERSION@ +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + SHELL = /bin/sh @SET_MAKE@ @@ -18,22 +22,20 @@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ -datadir = $(prefix)/@DATADIRNAME@ +datadir = @datadir@ localedir = $(datadir)/locale -gnulocaledir = $(prefix)/share/locale -gettextsrcdir = $(prefix)/share/gettext/po -subdir = po +gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` CC = @CC@ -GENCAT = @GENCAT@ -GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ +GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ -XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ -MSGMERGE = PATH=../src:$$PATH msgmerge +XGETTEXT = @XGETTEXT@ +MSGMERGE = msgmerge DEFS = @DEFS@ CFLAGS = @CFLAGS@ @@ -43,26 +45,23 @@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) -SOURCES = cat-id-tbl.c POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ -stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) +$(POFILES) $(GMOFILES) POTFILES = \ CATALOGS = @CATALOGS@ -CATOBJEXT = @CATOBJEXT@ -INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: -.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat +.SUFFIXES: .c .o .po .pox .gmo .mo .c.o: $(COMPILE) $< .po.pox: - $(MAKE) $(srcdir)/$(PACKAGE).pot + $(MAKE) $(PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox .po.mo: @@ -70,19 +69,19 @@ INSTOBJEXT = @INSTOBJEXT@ .po.gmo: file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ - && rm -f $$file && $(GMSGFMT) -o $$file $< - -.po.cat: - sed -f ../intl/po2msg.sed < $< > $*.msg \ - && rm -f $@ && $(GENCAT) $@ $*.msg + && rm -f $$file && $(GMSGFMT) --statistics -o $$file $< all: all-@USE_NLS@ -all-yes: $(srcdir)/cat-id-tbl.c $(CATALOGS) +all-yes: $(CATALOGS) all-no: -$(srcdir)/$(PACKAGE).pot: $(POTFILES) +# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ --add-comments --keyword=_ --keyword=N_ \ --files-from=$(srcdir)/POTFILES.in \ @@ -90,78 +89,35 @@ $(srcdir)/$(PACKAGE).pot: $(POTFILES) || ( rm -f $(srcdir)/$(PACKAGE).pot \ && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) -$(srcdir)/cat-id-tbl.c: $(srcdir)/stamp-cat-id; @: -$(srcdir)/stamp-cat-id: $(srcdir)/$(PACKAGE).pot - rm -f cat-id-tbl.tmp - sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ - | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp - if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ - rm cat-id-tbl.tmp; \ - else \ - echo cat-id-tbl.c changed; \ - rm -f $(srcdir)/cat-id-tbl.c; \ - mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ - fi - cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id - install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ -install-data-no: all -install-data-yes: all - if test -r "$(MKINSTALLDIRS)"; then \ - $(MKINSTALLDIRS) $(datadir); \ - else \ - $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \ - fi - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - case "$$cat" in \ - *.gmo) destdir=$(gnulocaledir);; \ - *) destdir=$(localedir);; \ - esac; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - dir=$$destdir/$$lang/LC_MESSAGES; \ - if test -r "$(MKINSTALLDIRS)"; then \ - $(MKINSTALLDIRS) $$dir; \ - else \ - $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ - fi; \ - if test -r $$cat; then \ - $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - else \ - $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - fi; \ - if test -r $$cat.m; then \ - $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - if test -r $(srcdir)/$$cat.m ; then \ - $(INSTALL_DATA) $(srcdir)/$$cat.m \ - $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - true; \ - fi; \ - fi; \ - done if test "$(PACKAGE)" = "gettext"; then \ - if test -r "$(MKINSTALLDIRS)"; then \ - $(MKINSTALLDIRS) $(gettextsrcdir); \ - else \ - $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ - fi; \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ - $(gettextsrcdir)/Makefile.in.in; \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi +install-data-no: all +install-data-yes: all + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ + echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ + echo "installing $(srcdir)/$$cat as" \ + "$(DESTDIR)$$dir/$(PACKAGE).mo"; \ + fi; \ + done # Define this as empty until I found a useful application. installcheck: @@ -170,77 +126,68 @@ uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ - rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ - rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ - rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + lang=`echo $$cat | sed 's/\.gmo$$//'`; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done - rm -f $(gettextsrcdir)/po-Makefile.in.in + if test "$(PACKAGE)" = "gettext"; then \ + rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi check: all -cat-id-tbl.o: $(srcdir)/cat-id-tbl.c $(top_srcdir)/intl/libgettext.h - $(COMPILE) $(srcdir)/cat-id-tbl.c - dvi info tags TAGS ID: mostlyclean: - rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp + rm -f core core.* *.pox $(PACKAGE).po *.new.po rm -fr *.o clean: mostlyclean distclean: clean - rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m + rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." - rm -f $(GMOFILES) cat-id-tbl.c stamp-cat-id + rm -f $(GMOFILES) -distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: update-po $(DISTFILES) +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ - ln $(srcdir)/$$file $(distdir) 2> /dev/null \ - || cp -p $(srcdir)/$$file $(distdir); \ + if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ + cp -p $$dir/$$file $(distdir); \ done update-po: Makefile - $(MAKE) $(srcdir)/$(PACKAGE).pot - PATH=`pwd`/../src:$$PATH; \ + $(MAKE) $(PACKAGE).pot + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \ cd $(srcdir); \ - catalogs='$(CATALOGS)'; \ + catalogs='$(GMOFILES)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - mv $$lang.po $$lang.old.po; \ + lang=`echo $$cat | sed 's/\.gmo$$//'`; \ echo "$$lang:"; \ - if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ - rm -f $$lang.old.po; \ + if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \ + mv -f $$lang.new.po $$lang.po; \ else \ echo "msgmerge for $$cat failed!"; \ - rm -f $$lang.po; \ - mv $$lang.old.po $$lang.po; \ + rm -f $$lang.new.po; \ fi; \ done + $(MAKE) update-gmo -POTFILES: POTFILES.in - ( if test 'x$(srcdir)' != 'x.'; then \ - posrcprefix='$(top_srcdir)/'; \ - else \ - posrcprefix="../"; \ - fi; \ - rm -f $@-t $@ \ - && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ - -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ - | sed -e '$$s/\\$$//') > $@-t \ - && chmod a-w $@-t \ - && mv $@-t $@ ) +update-gmo: Makefile $(GMOFILES) + @: -Makefile: Makefile.in.in ../config.status POTFILES - cd .. \ +Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in + cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status diff --git a/po/POTFILES.in b/po/POTFILES.in index 526891ed5..df5c9fec2 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -2,23 +2,19 @@ # Copyright (c) 1998 by Werner Koch (dd9jn) # utility +util/secmem.c +util/argparse.c util/miscutil.c util/errors.c util/logger.c -# jnlib -jnlib/argparse.c - # cipher -#cipher/random.c -#cipher/rndlinux.c - -# gcrypt -#gcrypt/secmem.c +cipher/random.c +cipher/rndlinux.c # main program -g10/gpg.c +g10/g10.c g10/armor.c g10/pkclist.c g10/keygen.c @@ -43,7 +39,6 @@ g10/textfilter.c g10/tdbio.c g10/trustdb.c g10/verify.c -g10/ringedit.c g10/skclist.c g10/status.c g10/pubkey-enc.c @@ -52,3 +47,5 @@ g10/encr-data.c g10/seskey.c g10/delkey.c g10/helptext.c +g10/keydb.c +g10/keyring.c diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 000000000..6cd170f22 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,4382 @@ +# GnuPG Czech translation +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Magda Procházková , Roman Pavlik 2001, 2002. +msgid "" +msgstr "" +"Project-Id-Version: gnupg-1.0.7\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-20 10:20+0200\n" +"Last-Translator: Roman Pavlik \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "VAROVÁNÍ: Pou¾ívaná pamì» není bezpeèná!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "Více informací naleznete na adrese http://www.gnupg.cz/faq.html\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "provést operaci není mo¾né bez inicializované bezpeèné pamìti\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(pravdìpodobnì jste pro tento úkol pou¾ili nesprávný program)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 +msgid "yes" +msgstr "ano" + +#: util/miscutil.c:297 util/miscutil.c:334 +msgid "yY" +msgstr "aAyY" + +#: util/miscutil.c:298 util/miscutil.c:332 +msgid "no" +msgstr "ne" + +#: util/miscutil.c:299 util/miscutil.c:335 +msgid "nN" +msgstr "nN" + +#: g10/keyedit.c:815 util/miscutil.c:333 +msgid "quit" +msgstr "ukonèit" + +#: util/miscutil.c:336 +msgid "qQ" +msgstr "uUqQ" + +#: util/errors.c:54 +msgid "general error" +msgstr "obecná chyba" + +#: util/errors.c:55 +msgid "unknown packet type" +msgstr "neznámý typ paketu" + +#: util/errors.c:56 +msgid "unknown version" +msgstr "neznámá verze" + +#: util/errors.c:57 +msgid "unknown pubkey algorithm" +msgstr "neznámý algoritmus veøejného klíèe" + +#: util/errors.c:58 +msgid "unknown digest algorithm" +msgstr "neznámý hashovací algoritmus" + +#: util/errors.c:59 +msgid "bad public key" +msgstr "¹patný veøejný klíè" + +#: util/errors.c:60 +msgid "bad secret key" +msgstr "¹patný tajný klíè" + +#: util/errors.c:61 +msgid "bad signature" +msgstr "¹patný podpis" + +#: util/errors.c:62 +msgid "checksum error" +msgstr "chyba kontrolního souètu" + +#: util/errors.c:63 +msgid "bad passphrase" +msgstr "¹patné heslo" + +#: util/errors.c:64 +msgid "public key not found" +msgstr "veøejný klíè nenalezen" + +#: util/errors.c:65 +msgid "unknown cipher algorithm" +msgstr "neznámý ¹ifrovací algoritmus" + +#: util/errors.c:66 +msgid "can't open the keyring" +msgstr "nemohu otevøít soubor klíèù" + +#: util/errors.c:67 +msgid "invalid packet" +msgstr "neplatný paket" + +#: util/errors.c:68 +msgid "invalid armor" +msgstr "neplatný zpùsob reprezentace v ASCII" + +#: util/errors.c:69 +msgid "no such user id" +msgstr "neexistuje u¾ivatel s tímto id" + +#: util/errors.c:70 +msgid "secret key not available" +msgstr "tajný klíè není dostupný" + +#: util/errors.c:71 +msgid "wrong secret key used" +msgstr "je pou¾it ¹patný tajný klíè" + +#: util/errors.c:72 +msgid "not supported" +msgstr "nepodporováno" + +#: util/errors.c:73 +msgid "bad key" +msgstr "¹patný klíè" + +#: util/errors.c:74 +msgid "file read error" +msgstr "chyba pøi ètení souboru" + +#: util/errors.c:75 +msgid "file write error" +msgstr "chyba pøi zápisu souboru" + +#: util/errors.c:76 +msgid "unknown compress algorithm" +msgstr "neznámý kompresní algoritmus" + +#: util/errors.c:77 +msgid "file open error" +msgstr "chyba pøi otvírání souboru" + +#: util/errors.c:78 +msgid "file create error" +msgstr "chyba pøi vytváøení souboru" + +#: util/errors.c:79 +msgid "invalid passphrase" +msgstr "nesprávné heslo" + +#: util/errors.c:80 +msgid "unimplemented pubkey algorithm" +msgstr "algoritmus veøejného klíèe není implementován" + +#: util/errors.c:81 +msgid "unimplemented cipher algorithm" +msgstr "¹ifrovací algoritmus není implementován" + +#: util/errors.c:82 +msgid "unknown signature class" +msgstr "neznámá tøída podpisu" + +#: util/errors.c:83 +msgid "trust database error" +msgstr "chyba v databázi dùvìry" + +#: util/errors.c:84 +msgid "bad MPI" +msgstr "¹patné MPI" + +#: util/errors.c:85 +msgid "resource limit" +msgstr "omezení zdrojù" + +#: util/errors.c:86 +msgid "invalid keyring" +msgstr "neplatný soubor klíèù" + +#: util/errors.c:87 +msgid "bad certificate" +msgstr "¹patný certifikát" + +#: util/errors.c:88 +msgid "malformed user id" +msgstr "¹patný formát id u¾ivatele" + +#: util/errors.c:89 +msgid "file close error" +msgstr "chyba pøi zavírání souboru" + +#: util/errors.c:90 +msgid "file rename error" +msgstr "chyba pøi pøejmenování souboru" + +#: util/errors.c:91 +msgid "file delete error" +msgstr "chyba pøi mazání souboru" + +#: util/errors.c:92 +msgid "unexpected data" +msgstr "neoèekávaná data" + +#: util/errors.c:93 +msgid "timestamp conflict" +msgstr "konflikt èasového razítka" + +#: util/errors.c:94 +msgid "unusable pubkey algorithm" +msgstr "nepou¾itelný algoritmus s veøejným klíèem" + +#: util/errors.c:95 +msgid "file exists" +msgstr "soubor existuje" + +#: util/errors.c:96 +msgid "weak key" +msgstr "slabý klíè" + +#: util/errors.c:97 +msgid "invalid argument" +msgstr "neplatný argument" + +#: util/errors.c:98 +msgid "bad URI" +msgstr "¹patné URI" + +#: util/errors.c:99 +msgid "unsupported URI" +msgstr "toto URI není podporováno" + +#: util/errors.c:100 +msgid "network error" +msgstr "chyba sítì" + +#: util/errors.c:102 +msgid "not encrypted" +msgstr "neza¹ifrováno" + +#: util/errors.c:103 +msgid "not processed" +msgstr "nezpracováno" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "nepou¾itelný veøejný klíè" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "nepou¾itelný tajný klíè" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "chyba serveru klíèù" + +#: util/logger.c:249 +#, c-format +msgid "... this is a bug (%s:%d:%s)\n" +msgstr "... toto je chyba v programu (%s:%d:%s)\n" + +#: util/logger.c:255 +#, c-format +msgid "you found a bug ... (%s:%d)\n" +msgstr "nalezena chyba v programu ... (%s:%d)\n" + +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 +#, c-format +msgid "can't open `%s': %s\n" +msgstr "nemohu otevøít `%s': %s\n" + +#: cipher/random.c:324 +#, c-format +msgid "can't stat `%s': %s\n" +msgstr "nemohu pou¾ít pøíkaz stat na `%s': %s\n" + +#: cipher/random.c:329 +#, c-format +msgid "`%s' is not a regular file - ignored\n" +msgstr "`%s' není normální soubor - ignoruji\n" + +#: cipher/random.c:334 +msgid "note: random_seed file is empty\n" +msgstr "poznámka: soubor random_seed je prázdný\n" + +#: cipher/random.c:340 +msgid "warning: invalid size of random_seed file - not used\n" +msgstr "varování: neplatná velikost random_seed - soubor nepou¾it\n" + +#: cipher/random.c:348 +#, c-format +msgid "can't read `%s': %s\n" +msgstr "nemohu èíst `%s': %s\n" + +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "poznámka: soubor random_seed není aktualizován\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "nemohu vytvoøit `%s': %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "nemohu zapisovat do `%s': %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "nemohu zavøít `%s': %s\n" + +#: cipher/random.c:662 +msgid "WARNING: using insecure random number generator!!\n" +msgstr "VAROVÁNÍ: pou¾itý generátor náhodných èísel není bezpeèný!!\n" + +#: cipher/random.c:663 +msgid "" +"The random number generator is only a kludge to let\n" +"it run - it is in no way a strong RNG!\n" +"\n" +"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" +"\n" +msgstr "" +"Generátor náhodných èísel je pouze atrapa, aby program mohl bì¾et,\n" +"v ¾ádném pøípadì není kryptograficky bezpeèný!\n" +"\n" +"NEPOU®ÍVEJTE JAKÁKOLIV DATA VYTVOØENÁ TÍMTO PROGRAMEM!!\n" +"\n" + +#: cipher/rndlinux.c:142 +#, c-format +msgid "" +"\n" +"Not enough random bytes available. Please do some other work to give\n" +"the OS a chance to collect more entropy! (Need %d more bytes)\n" +msgstr "" +"\n" +"Nedostatek náhodných bajtù. Prosím, pracujte s operaèním systémem, abyste\n" +"mu umo¾nili získat více entropie (je potøeba %d bajtù).\n" + +#: g10/g10.c:287 +msgid "" +"@Commands:\n" +" " +msgstr "" +"@Pøíkazy:\n" +" " + +#: g10/g10.c:289 +msgid "|[file]|make a signature" +msgstr "|[soubor]|vytvoøit podpis" + +#: g10/g10.c:290 +msgid "|[file]|make a clear text signature" +msgstr "|[soubor]|vytvoøit podpis v èitelném dokumentu" + +#: g10/g10.c:291 +msgid "make a detached signature" +msgstr "vytvoøit podpis oddìlený od dokumentu" + +#: g10/g10.c:292 +msgid "encrypt data" +msgstr "¹ifrovat data" + +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[soubor]|¹ifrovat soubor" + +#: g10/g10.c:294 +msgid "encryption only with symmetric cipher" +msgstr "¹ifrování pouze se symetrickou ¹ifrou" + +#: g10/g10.c:295 +msgid "store only" +msgstr "pouze ulo¾ení" + +#: g10/g10.c:296 +msgid "decrypt data (default)" +msgstr "de¹ifrovat data (implicitnì)" + +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[soubor]|de¹ifrovat soubor" + +#: g10/g10.c:298 +msgid "verify a signature" +msgstr "verifikovat podpis" + +#: g10/g10.c:300 +msgid "list keys" +msgstr "vypsat seznam klíèù" + +#: g10/g10.c:302 +msgid "list keys and signatures" +msgstr "vypsat seznam klíèù a podpisù" + +#: g10/g10.c:303 +msgid "check key signatures" +msgstr "zkontrolovat podpisy klíèù" + +#: g10/g10.c:304 +msgid "list keys and fingerprints" +msgstr "vypsat seznam klíèù a fingerprintù" + +#: g10/g10.c:305 +msgid "list secret keys" +msgstr "vypsat seznam tajných klíèù" + +#: g10/g10.c:306 +msgid "generate a new key pair" +msgstr "vytvoøit nový pár klíèù" + +#: g10/g10.c:307 +msgid "remove keys from the public keyring" +msgstr "odstranit klíè ze souboru veøejných klíèù" + +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "odstranit klíè ze souboru tajných klíèù" + +#: g10/g10.c:310 +msgid "sign a key" +msgstr "podepsat klíè" + +#: g10/g10.c:311 +msgid "sign a key locally" +msgstr "podepsat klíè lokálnì" + +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "podepsat klíè bez mo¾nosti revokace podpisu" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "" +"podepsat klíè lokálnì a bez mo¾nosti\n" +" revokace podpisu" + +#: g10/g10.c:314 +msgid "sign or edit a key" +msgstr "podepsat nebo modifikovat klíè" + +#: g10/g10.c:315 +msgid "generate a revocation certificate" +msgstr "vytvoøit revokaèní certifikát" + +#: g10/g10.c:316 +msgid "export keys" +msgstr "exportovat klíèe" + +#: g10/g10.c:317 +msgid "export keys to a key server" +msgstr "exportovat klíèe na server klíèù" + +#: g10/g10.c:318 +msgid "import keys from a key server" +msgstr "importovat klíèe ze serveru klíèù" + +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "vyhledat klíèe na serveru klíèù" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "aktualizovat v¹echny klíèe ze serveru klíèù" + +#: g10/g10.c:326 +msgid "import/merge keys" +msgstr "importovat/slouèit klíèe" + +#: g10/g10.c:328 +msgid "list only the sequence of packets" +msgstr "vypsat pouze poøadí paketù" + +#: g10/g10.c:330 +msgid "export the ownertrust values" +msgstr "" +"exportovat hodnoty dùvìryhodnosti\n" +" vlastníka klíèe" + +#: g10/g10.c:332 +msgid "import ownertrust values" +msgstr "" +"importovat hodnoty dùvìryhodnosti\n" +" vlastníka klíèe" + +#: g10/g10.c:334 +msgid "update the trust database" +msgstr "aktualizovat databázi dùvìry" + +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "neinteraktivní aktualizace databáze dùvìry" + +#: g10/g10.c:337 +msgid "fix a corrupted trust database" +msgstr "opravit naru¹enou databázi dùvìry" + +#: g10/g10.c:338 +msgid "De-Armor a file or stdin" +msgstr "Dekódovat ASCII soubor nebo std. vstup" + +#: g10/g10.c:340 +msgid "En-Armor a file or stdin" +msgstr "Zakódovat soubor nebo std. vstup do ASCII" + +#: g10/g10.c:342 +msgid "|algo [files]|print message digests" +msgstr "|algo [soubory]|vypi¹ hash" + +#: g10/g10.c:346 +msgid "" +"@\n" +"Options:\n" +" " +msgstr "" +"@\n" +"Mo¾nosti:\n" +" " + +#: g10/g10.c:348 +msgid "create ascii armored output" +msgstr "vytvoø výstup zakódovaný pomocí ASCII" + +#: g10/g10.c:350 +msgid "|NAME|encrypt for NAME" +msgstr "|JMÉNO|¹ifrovat pro JMÉNO" + +#: g10/g10.c:353 +msgid "|NAME|use NAME as default recipient" +msgstr "|JMÉNO|pou¾ít JMÉNO jako implicitního adresáta" + +#: g10/g10.c:355 +msgid "use the default key as default recipient" +msgstr "" +"pou¾ít implicitní klíè jako implicitního\n" +" adresáta" + +#: g10/g10.c:361 +msgid "use this user-id to sign or decrypt" +msgstr "" +"pou¾ít tento id u¾ivatele pro podepsání\n" +" nebo de¹ifrování" + +#: g10/g10.c:362 +msgid "|N|set compress level N (0 disables)" +msgstr "" +"|N|nastavit úrovìò komprimace N (0 - ¾ádná\n" +" komprimace)" + +#: g10/g10.c:364 +msgid "use canonical text mode" +msgstr "pou¾ít kanonický textový mód" + +#: g10/g10.c:371 +msgid "use as output file" +msgstr "pou¾ít jako výstupní soubor" + +#: g10/g10.c:372 +msgid "verbose" +msgstr "s dodateènými informacemi" + +#: g10/g10.c:373 +msgid "be somewhat more quiet" +msgstr "být o trochu víc tichý" + +#: g10/g10.c:374 +msgid "don't use the terminal at all" +msgstr "vùbec nepou¾ívat terminál" + +#: g10/g10.c:375 +msgid "force v3 signatures" +msgstr "vynutit podpisy verze 3" + +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "nevynucovat podpisy verze 3" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "vynutit podpisy verze 4" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "nevynucovat podpisy verze 4" + +#: g10/g10.c:379 +msgid "always use a MDC for encryption" +msgstr "pro ¹ifrování v¾dy pou¾ít MDC" + +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "pro ¹ifrování nikdy nepou¾ít MDC" + +#: g10/g10.c:383 +msgid "do not make any changes" +msgstr "neprovádìt ¾ádné zmìny" + +#. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, +#: g10/g10.c:385 +msgid "use the gpg-agent" +msgstr "pou¾ijte gpg-agenta" + +#: g10/g10.c:388 +msgid "batch mode: never ask" +msgstr "dávkový re¾im: nikdy se na nic neptat" + +#: g10/g10.c:389 +msgid "assume yes on most questions" +msgstr "automaticky odpovìdìt ANO na vìt¹inu otázek" + +#: g10/g10.c:390 +msgid "assume no on most questions" +msgstr "automaticky odpovìdìt NE na vìt¹inu otázek" + +#: g10/g10.c:391 +msgid "add this keyring to the list of keyrings" +msgstr "" +"pøidat tento soubor klíèù do seznamu\n" +" pou¾ívaných souborù klíèù" + +#: g10/g10.c:392 +msgid "add this secret keyring to the list" +msgstr "pøidat tento soubor tajných klíèù do seznamu" + +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "uka¾ ve kterém souboru klíèù je vypsaný klíè" + +#: g10/g10.c:394 +msgid "|NAME|use NAME as default secret key" +msgstr "|JMÉNO|pou¾ij JMÉNO jako implicitní tajný klíè" + +#: g10/g10.c:395 +msgid "|HOST|use this keyserver to lookup keys" +msgstr "" +"|POÈÍTAÈ|pou¾ij tento server klíèù pro vyhledávání\n" +" klíèù" + +#: g10/g10.c:397 +msgid "|NAME|set terminal charset to NAME" +msgstr "|JMÉNO|nastav znakovou sadu terminálu na JMÉNO" + +#: g10/g10.c:398 +msgid "read options from file" +msgstr "èíst nastavení ze souboru" + +#: g10/g10.c:402 +msgid "|FD|write status info to this FD" +msgstr "|FD|zapsat informace o stavu do tohoto FD" + +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[SOUBOR]|zapi¹ informaci o stavu do SOUBORu" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|KLÍÈ|úplnì dùvìøovat tomuto klíèi" + +#: g10/g10.c:411 +msgid "|FILE|load extension module FILE" +msgstr "|SOUBOR|nahrát roz¹iøující modul SOUBOR" + +#: g10/g10.c:412 +msgid "emulate the mode described in RFC1991" +msgstr "emulovat mód popsaný v RFC1991" + +#: g10/g10.c:413 +msgid "set all packet, cipher and digest options to OpenPGP behavior" +msgstr "" +"nastav v¹echny vlastnosti paketù, ¹ifer\n" +" a hashù jako v OpenPGP" + +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"nastav v¹echny vlastnosti paketù, ¹ifer\n" +" a hashù jako v PGP 2.x" + +#: g10/g10.c:418 +msgid "|N|use passphrase mode N" +msgstr "|N|pou¾ít mód hesla N" + +#: g10/g10.c:420 +msgid "|NAME|use message digest algorithm NAME for passphrases" +msgstr "|ALG|pou¾ít hashovací algoritmus ALG pro hesla" + +#: g10/g10.c:422 +msgid "|NAME|use cipher algorithm NAME for passphrases" +msgstr "|ALG|pou¾ít ¹ifrovací algoritmus ALG pro hesla" + +#: g10/g10.c:424 +msgid "|NAME|use cipher algorithm NAME" +msgstr "|ALG|pou¾ít ¹ifrovací algoritmus ALG" + +#: g10/g10.c:425 +msgid "|NAME|use message digest algorithm NAME" +msgstr "|ALG|pou¾ít hashovací algoritmus ALG" + +#: g10/g10.c:426 +msgid "|N|use compress algorithm N" +msgstr "|N|pou¾ít kompresní algoritmus N" + +#: g10/g10.c:427 +msgid "throw keyid field of encrypted packets" +msgstr "" +"zahodit identifikátor klíèe z ¹ifrovaných\n" +" paketù" + +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Zobrazit fotografický ID" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Nezobrazovat fotografický ID" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "" +"Nastavit pøíkazový øádek k prohlí¾ení\n" +" fotografického ID" + +#: g10/g10.c:431 +msgid "|NAME=VALUE|use this notation data" +msgstr "|JMÉNO=HODNOTA|pou¾ít tento zápis dat" + +#: g10/g10.c:434 +msgid "" +"@\n" +"(See the man page for a complete listing of all commands and options)\n" +msgstr "" +"@\n" +"(Pou¾ijte manuálové stránky pro kompletní seznam v¹ech pøíkazù a mo¾ností)\n" + +#: g10/g10.c:437 +msgid "" +"@\n" +"Examples:\n" +"\n" +" -se -r Bob [file] sign and encrypt for user Bob\n" +" --clearsign [file] make a clear text signature\n" +" --detach-sign [file] make a detached signature\n" +" --list-keys [names] show keys\n" +" --fingerprint [names] show fingerprints\n" +msgstr "" +"@\n" +" -se -r Bob [soubor] podepsat a za¹ifrovat pro u¾ivatele Bob\n" +" --clearsign [soubor] vytvoøit podpis èitelného dokumentu\n" +" --detach-sign [soubor] vytvoøit podpis oddìlený od dokumentu\n" +" --list-keys [jména] vypsat klíèe\n" +" --fingerprint [jména] vypsat fingerprinty \n" + +#: g10/g10.c:579 +msgid "Please report bugs to .\n" +msgstr "" +"Chyby oznamte, prosím, na adresu .\n" +"Pøipomínky k pøekladu .\n" + +#: g10/g10.c:583 +msgid "Usage: gpg [options] [files] (-h for help)" +msgstr "Pou¾ití: gpg [mo¾nosti] [soubory] (-h pro pomoc)" + +#: g10/g10.c:586 +msgid "" +"Syntax: gpg [options] [files]\n" +"sign, check, encrypt or decrypt\n" +"default operation depends on the input data\n" +msgstr "" +"Syntaxe: gpg [mo¾nosti] [soubory]\n" +"podepsat, ovìøit, ¹ifrovat nebo de¹ifrovat\n" +"implicitní operace závisí na vstupních datech\n" + +#: g10/g10.c:597 +msgid "" +"\n" +"Supported algorithms:\n" +msgstr "" +"\n" +"Podporované algoritmy:\n" + +#: g10/g10.c:671 +msgid "usage: gpg [options] " +msgstr "u¾ití: gpg [mo¾nosti]" + +#: g10/g10.c:728 +msgid "conflicting commands\n" +msgstr "konfliktní pøíkazy\n" + +#: g10/g10.c:903 +#, c-format +msgid "NOTE: no default option file `%s'\n" +msgstr "POZNÁMKA: neexistuje implicitní soubor s mo¾nostmi `%s'\n" + +#: g10/g10.c:907 +#, c-format +msgid "option file `%s': %s\n" +msgstr "soubor s mo¾nostmi `%s': %s\n" + +#: g10/g10.c:914 +#, c-format +msgid "reading options from `%s'\n" +msgstr "ètu mo¾nosti z `%s'\n" + +#: g10/g10.c:1197 +#, c-format +msgid "%s is not a valid character set\n" +msgstr "%s není platná znaková sada\n" + +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "nelze pou¾ít URI serveru klíèù - chyba analýzy URI\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "nelze nastavit exec-path na %s\n" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "VAROVÁNÍ: pou¾ívání paralteru %s se nedoporuèuje.\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "pu¾íjte místo nìj \"--keyserver-options %s\" \n" + +#: g10/g10.c:1347 +msgid "WARNING: program may create a core file!\n" +msgstr "VAROVÁNÍ: program mù¾e vytvoøit soubor core!\n" + +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "VAROVÁNÍ: %s pøepí¹e %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 +#, c-format +msgid "NOTE: %s is not for normal use!\n" +msgstr "POZNÁMKA: %s není pro normální pou¾ití!\n" + +#: g10/g10.c:1360 g10/g10.c:1380 +#, c-format +msgid "%s not allowed with %s!\n" +msgstr "Není dovoleno pou¾ívat %s s %s!\n" + +#: g10/g10.c:1363 +#, c-format +msgid "%s makes no sense with %s!\n" +msgstr "%s nedává s %s smysl!\n" + +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" +"v módu --pgp2 mù¾ete vytváøet pouze oddìlené podpisy nebo podpisy èitelné " +"jako text\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "v módu --pgp2 nelze souèasnì ¹ifrovat a podepisovat\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "v módu --pgp2 musíte pou¾ít soubor (ne rouru).\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "¹ifrování zpráv v módu --pgp2 vy¾aduje algoritmus IDEA\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "tato zpráva není pro PGP 2.x pou¾itelná\n" + +#: g10/g10.c:1470 g10/g10.c:1482 +msgid "selected cipher algorithm is invalid\n" +msgstr "vybraný ¹ifrovací algoritmus je neplatný\n" + +#: g10/g10.c:1476 g10/g10.c:1488 +msgid "selected digest algorithm is invalid\n" +msgstr "vybraný hashovací algoritmus je neplatný\n" + +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "zadané URL pro podepisovací politiku je neplatné\n" + +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "zadané URL pro certifikaèní politiku je neplatné\n" + +#: g10/g10.c:1499 +#, c-format +msgid "compress algorithm must be in range %d..%d\n" +msgstr "kompresní algoritmus musí být v rozmezí %d..%d\n" + +#: g10/g10.c:1501 +msgid "completes-needed must be greater than 0\n" +msgstr "polo¾ka completes-needed musí být vìt¹í ne¾ 0\n" + +#: g10/g10.c:1503 +msgid "marginals-needed must be greater than 1\n" +msgstr "polo¾ka marginals-needed musí být vìt¹í ne¾ 1\n" + +#: g10/g10.c:1505 +msgid "max-cert-depth must be in range 1 to 255\n" +msgstr "polo¾ka max-cert-depth musí být v rozmezí od 1 do 255\n" + +#: g10/g10.c:1508 +msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" +msgstr "POZNÁMKA: jednoduchý mód S2K (0) je dùraznì nedoporuèován\n" + +#: g10/g10.c:1512 +msgid "invalid S2K mode; must be 0, 1 or 3\n" +msgstr "neplatný mód S2K; musí být 0, 1 nebo 3\n" + +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "neplatná implicitní úroveò kontroly; musí být 0, 1, 2 nebo 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "neplatné pøedvolby \n" + +#: g10/g10.c:1613 +#, c-format +msgid "failed to initialize the TrustDB: %s\n" +msgstr "nemohu inicializovat databázi dùvìry: %s\n" + +#: g10/g10.c:1633 +msgid "--store [filename]" +msgstr "--store [jméno souboru]" + +#: g10/g10.c:1640 +msgid "--symmetric [filename]" +msgstr "--symmetric [jméno souboru]" + +#: g10/g10.c:1648 +msgid "--encrypt [filename]" +msgstr "--encrypt [jméno souboru]" + +#: g10/g10.c:1665 +msgid "--sign [filename]" +msgstr "--sign [jméno souboru]" + +#: g10/g10.c:1678 +msgid "--sign --encrypt [filename]" +msgstr "--sign --encrypt [jméno souboru]" + +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [jméno souboru]" + +#: g10/g10.c:1701 +msgid "--clearsign [filename]" +msgstr "--clearsign [jméno souboru]" + +#: g10/g10.c:1719 +msgid "--decrypt [filename]" +msgstr "--decrypt [jméno souboru]" + +#: g10/g10.c:1730 +msgid "--sign-key user-id" +msgstr "--sign-key id u¾ivatele" + +#: g10/g10.c:1738 +msgid "--lsign-key user-id" +msgstr "--lsign-key id u¾ivatele" + +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key id u¾ivatele" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key id u¾ivatele" + +#: g10/g10.c:1762 +msgid "--edit-key user-id [commands]" +msgstr "--edit-key id u¾ivatele [pøíkazy]" + +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 +#, c-format +msgid "can't open %s: %s\n" +msgstr "nelze otevøít %s: %s\n" + +#: g10/g10.c:1833 +msgid "-k[v][v][v][c] [user-id] [keyring]" +msgstr "-k[v][v][v][c] [id u¾ivatele] [soubor s klíèi (keyring)]" + +#: g10/g10.c:1916 +#, c-format +msgid "dearmoring failed: %s\n" +msgstr "dekódování z ASCII formátu selhalo: %s\n" + +#: g10/g10.c:1924 +#, c-format +msgid "enarmoring failed: %s\n" +msgstr "kódování do ASCII formátu selhalo: %s\n" + +#: g10/g10.c:2011 +#, c-format +msgid "invalid hash algorithm `%s'\n" +msgstr "neplatný hashovací algoritmus `%s'\n" + +#: g10/g10.c:2097 +msgid "[filename]" +msgstr "[jméno souboru]" + +#: g10/g10.c:2101 +msgid "Go ahead and type your message ...\n" +msgstr "Zaènìte psát svou zprávu ...\n" + +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 +#, c-format +msgid "can't open `%s'\n" +msgstr "nelze otevøít `%s'\n" + +#: g10/g10.c:2313 +msgid "" +"the first character of a notation name must be a letter or an underscore\n" +msgstr "první znak jména musí být písmeno nebo podtr¾ítko\n" + +#: g10/g10.c:2319 +msgid "" +"a notation name must have only letters, digits, dots or underscores and end " +"with an '='\n" +msgstr "" +"jméno mù¾e obsahovat pouze písmena, èíslice, teèky nebo podtr¾ítka a konèit " +"s '='\n" + +#: g10/g10.c:2325 +msgid "dots in a notation name must be surrounded by other characters\n" +msgstr "teèky ve jménì musí být obklopeny jinými znaky\n" + +#: g10/g10.c:2333 +msgid "a notation value must not use any control characters\n" +msgstr "hodnota nemù¾e obsahovat ¾ádné kontrolní znaky\n" + +#: g10/armor.c:314 +#, c-format +msgid "armor: %s\n" +msgstr "ASCII kódování: %s\n" + +#: g10/armor.c:343 +msgid "invalid armor header: " +msgstr "neplatná hlavièka ASCII kódování: " + +#: g10/armor.c:350 +msgid "armor header: " +msgstr "ASCII hlavièka: " + +#: g10/armor.c:361 +msgid "invalid clearsig header\n" +msgstr "neplatná hlavièka podpisu v èitelném formátu\n" + +#: g10/armor.c:413 +msgid "nested clear text signatures\n" +msgstr "vnoøené podpisy v èitelném formátu\n" + +#: g10/armor.c:537 +msgid "invalid dash escaped line: " +msgstr "nesprávné oznaèení øádku mínusy: " + +#: g10/armor.c:549 +msgid "unexpected armor:" +msgstr "neoèekávané kódování ASCII:" + +#: g10/armor.c:675 g10/armor.c:1242 +#, c-format +msgid "invalid radix64 character %02x skipped\n" +msgstr "neplatný znak formátu radix64 %02x byl pøeskoèen\n" + +#: g10/armor.c:718 +msgid "premature eof (no CRC)\n" +msgstr "pøedèasný konec souboru (¾ádné CRC)\n" + +#: g10/armor.c:752 +msgid "premature eof (in CRC)\n" +msgstr "pøedèasný konec souboru (¾ádné CRC)\n" + +#: g10/armor.c:756 +msgid "malformed CRC\n" +msgstr "¹patný formát CRC\n" + +#: g10/armor.c:760 g10/armor.c:1279 +#, c-format +msgid "CRC error; %06lx - %06lx\n" +msgstr "Chyba CRC; %06lx - %06lx\n" + +#: g10/armor.c:780 +msgid "premature eof (in Trailer)\n" +msgstr "pøedèasný konec souboru (v patièce)\n" + +#: g10/armor.c:784 +msgid "error in trailer line\n" +msgstr "chyba v patièce\n" + +#: g10/armor.c:1057 +msgid "no valid OpenPGP data found.\n" +msgstr "nenalezena ¾ádná platná data ve formátu OpenPGP.\n" + +#: g10/armor.c:1062 +#, c-format +msgid "invalid armor: line longer than %d characters\n" +msgstr "neplatné kódování ASCII: øádek je del¹í ne¾ %d znakù\n" + +#: g10/armor.c:1066 +msgid "" +"quoted printable character in armor - probably a buggy MTA has been used\n" +msgstr "" +"neplatný znak (quoted-printable) v ASCII kódování - pravdìpodobnì byl pou¾it " +"¹patný MTA\n" + +#: g10/pkclist.c:61 +msgid "No reason specified" +msgstr "Dùvod nebyl specifikován" + +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "Klíè je nahrazen" + +#: g10/pkclist.c:65 +msgid "Key has been compromised" +msgstr "Klíè byl zkompromitován" + +#: g10/pkclist.c:67 +msgid "Key is no longer used" +msgstr "Klíè se ji¾ nepou¾ívá" + +#: g10/pkclist.c:69 +msgid "User ID is no longer valid" +msgstr "Identifikátor u¾ivatele ji¾ neplatí" + +#: g10/pkclist.c:73 +msgid "Reason for revocation: " +msgstr "Dùvod pro revokaci: " + +#: g10/pkclist.c:90 +msgid "Revocation comment: " +msgstr "Revokaèní poznámka: " + +#. a string with valid answers +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMuUqQsS" + +#: g10/pkclist.c:258 +#, c-format +msgid "" +"No trust value assigned to:\n" +"%4u%c/%08lX %s \"" +msgstr "" +"K není pøiøazena ¾ádná hodnota dùvìry:\n" +"%4u%c/%08lX %s \"" + +#: g10/pkclist.c:270 +msgid "" +"Please decide how far you trust this user to correctly\n" +"verify other users' keys (by looking at passports,\n" +"checking fingerprints from different sources...)?\n" +"\n" +msgstr "" +"Prosím rozhodnìte, nakolik dùvìøete tomuto u¾ivateli, ¾e správnì\n" +"verifikuje klíèe jiných u¾ivatelù (prohlédnutím cestovních pasù,\n" +"kontrolou fingerprintù z rùzných zdrojù...)?\n" +"\n" + +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = Nevím\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = Nedùvìøuji\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Dùvìøuji èásteènì\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Dùvìøuji úplnì\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Dùvìøuji absolutnì\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = prosím o více informací\n" + +#: g10/pkclist.c:281 +msgid " m = back to the main menu\n" +msgstr " m = zpìt do hlavního menu\n" + +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = pøeskoèit tento klíè\n" + +#: g10/pkclist.c:285 +msgid " q = quit\n" +msgstr " u = ukonèit\n" + +#: g10/pkclist.c:292 +msgid "Your decision? " +msgstr "Va¹e rozhodnutí? " + +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Opravdu chcete nastavit pro tento klíè absolutní dùvìru? " + +#: g10/pkclist.c:325 +msgid "Certificates leading to an ultimately trusted key:\n" +msgstr "Certifikáty vedoucí k finálnímu dùvìryhodnému klíèi:\n" + +#: g10/pkclist.c:399 +#, c-format +msgid "key %08lX: key has been revoked!\n" +msgstr "klíè %08lX: klíè byl revokován\n" + +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 +msgid "Use this key anyway? " +msgstr "Pou¾ít pøesto tento klíè? " + +#: g10/pkclist.c:411 +#, c-format +msgid "key %08lX: subkey has been revoked!\n" +msgstr "klíè %08lX: podklíè byl revokován!\n" + +#: g10/pkclist.c:432 +#, c-format +msgid "%08lX: key has expired\n" +msgstr "%08lX: skonèila platnost klíèe\n" + +#: g10/pkclist.c:442 +#, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +"%08lX: Nic nenaznaèuje tomu, ¾e tento podpis patøí vlastníkovi klíèe.\n" + +#: g10/pkclist.c:448 +#, c-format +msgid "%08lX: We do NOT trust this key\n" +msgstr "%08lX: NEdùvìøujeme tomuto klíèi!\n" + +#: g10/pkclist.c:454 +#, c-format +msgid "" +"%08lX: It is not sure that this key really belongs to the owner\n" +"but it is accepted anyway\n" +msgstr "" +"%08lX: Není jisté, zda tento podpis patøí vlastníkovi, pøesto je akceptován\n" + +#: g10/pkclist.c:460 +msgid "This key probably belongs to the owner\n" +msgstr "Tento klíè pravdìpodobnì nále¾í jeho majiteli\n" + +#: g10/pkclist.c:465 +msgid "This key belongs to us\n" +msgstr "Tento klíè nále¾í nám (máme odpovídající tajný klíè)\n" + +#: g10/pkclist.c:507 +msgid "" +"It is NOT certain that the key belongs to its owner.\n" +"If you *really* know what you are doing, you may answer\n" +"the next question with yes\n" +"\n" +msgstr "" +"NENÍ jisté, zda tento klíè patøí osobì, která se vydává za jeho\n" +"vlastníka. Pokud *skuteènì* víte, co dìláte, mù¾ete na otázku\n" +"odpovìdìt ano\n" +"\n" + +#: g10/pkclist.c:521 g10/pkclist.c:543 +msgid "WARNING: Using untrusted key!\n" +msgstr "VAROVÁNÍ: Je pou¾it nedùvìryhodný klíè!\n" + +#: g10/pkclist.c:562 +msgid "WARNING: This key has been revoked by its owner!\n" +msgstr "VAROVÁNÍ: Tento klíè byl revokován svým vlastníkem!\n" + +#: g10/pkclist.c:563 +msgid " This could mean that the signature is forgery.\n" +msgstr " To mù¾e znamenat, ¾e podpis je padìlaný.\n" + +#: g10/pkclist.c:569 +msgid "WARNING: This subkey has been revoked by its owner!\n" +msgstr "VAROVÁNÍ: Tento podklíè byl revokován svým vlastníkem!\n" + +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Poznámka: Tento klíè byl oznaèen jako neplatný (disabled).\n" + +#: g10/pkclist.c:579 +msgid "Note: This key has expired!\n" +msgstr "Poznámka: Skonèila platnost tohoto klíèe!\n" + +#: g10/pkclist.c:590 +msgid "WARNING: This key is not certified with a trusted signature!\n" +msgstr "VAROVÁNÍ: Tento klíè není certifikován dùvìryhodným podpisem!\n" + +#: g10/pkclist.c:592 +msgid "" +" There is no indication that the signature belongs to the owner.\n" +msgstr "" +" Nic nenaznaèuje tomu, ¾e tento podpis patøí vlastníkovi klíèe.\n" + +#: g10/pkclist.c:600 +msgid "WARNING: We do NOT trust this key!\n" +msgstr "VAROVÁNÍ: NEdùvìøujeme tomuto klíèi!\n" + +#: g10/pkclist.c:601 +msgid " The signature is probably a FORGERY.\n" +msgstr " Tento podpis je pravdìpodobnì PADÌLANÝ.\n" + +#: g10/pkclist.c:609 +msgid "" +"WARNING: This key is not certified with sufficiently trusted signatures!\n" +msgstr "" +"VAROVÁNÍ: Tento klíè není certifikován dostateènì dùvìryhodnými podpisy!\n" + +#: g10/pkclist.c:611 +msgid " It is not certain that the signature belongs to the owner.\n" +msgstr " Není jisté, zda tento podpis patøí vlastníkovi.\n" + +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 +#, c-format +msgid "%s: skipped: %s\n" +msgstr "%s: pøeskoèeno: %s\n" + +#: g10/pkclist.c:723 g10/pkclist.c:911 +#, c-format +msgid "%s: skipped: public key already present\n" +msgstr "%s: pøeskoèeno: veøejný klíè je ji¾ obsa¾en v databázi\n" + +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "" +"Nespecifikoval jste identifikátor u¾ivatele (user ID). Mù¾ete pou¾ít \"-r\"\n" + +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" +"\n" +"Napi¹te identifikátor u¾ivatele (user ID). Ukonèete prázdným øádkem: " + +#: g10/pkclist.c:776 +msgid "No such user ID.\n" +msgstr "Takový identifikátor u¾ivatele neexistuje.\n" + +#: g10/pkclist.c:781 g10/pkclist.c:857 +msgid "skipped: public key already set as default recipient\n" +msgstr "pøeskoèeno: veøejný klíè je u¾ nastaven podle implicitního adresáta\n" + +#: g10/pkclist.c:799 +msgid "Public key is disabled.\n" +msgstr "Veøejný klíè je neplatný (disabled).\n" + +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "pøeskoèeno: veøejný klíè je ji¾ nastaven\n" + +#: g10/pkclist.c:849 +#, c-format +msgid "unknown default recipient `%s'\n" +msgstr "neznámý implicitní adresát `%s'\n" + +#: g10/pkclist.c:893 +#, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: pøeskoèeno: veøejný klíè je neplatný (disabled)\n" + +#: g10/pkclist.c:943 +msgid "no valid addressees\n" +msgstr "¾ádné platné adresy\n" + +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "pøedvolba %c%lu není platná\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "duplicita pøedvolby %c%lu\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "pøíli¹ mnoho `%c' pøedvoleb\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "neplatný znak v øetìzci s pøedvolbami\n" + +#: g10/keygen.c:399 +msgid "writing self signature\n" +msgstr "zapisuji podpis klíèe sebou samým\n" + +#: g10/keygen.c:443 +msgid "writing key binding signature\n" +msgstr "zapisuji \"key-binding\" podpis\n" + +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format +msgid "keysize invalid; using %u bits\n" +msgstr "neplatná délka klíèe; pou¾iji %u bitù\n" + +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format +msgid "keysize rounded up to %u bits\n" +msgstr "délka klíèe zaokrouhlena na %u bitù\n" + +#: g10/keygen.c:777 +msgid "Please select what kind of key you want:\n" +msgstr "Prosím, vyberte druh klíèe, který chcete:\n" + +#: g10/keygen.c:779 +#, c-format +msgid " (%d) DSA and ElGamal (default)\n" +msgstr " (%d) DSA a ElGamal (implicitní)\n" + +#: g10/keygen.c:780 +#, c-format +msgid " (%d) DSA (sign only)\n" +msgstr " (%d) DSA (pouze pro podpis)\n" + +#: g10/keygen.c:782 +#, c-format +msgid " (%d) ElGamal (encrypt only)\n" +msgstr " (%d) ElGamal (pouze pro ¹ifrování)\n" + +#: g10/keygen.c:783 +#, c-format +msgid " (%d) ElGamal (sign and encrypt)\n" +msgstr " (%d) ElGamal (pro ¹ifrování a podpis)\n" + +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (pouze pro podpis)\n" + +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (pouze pro ¹ifrování)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 +msgid "Your selection? " +msgstr "Vá¹ výbìr? " + +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "" +"Pou¾ití tohoto algoritmu se ji¾ nedoporuèuje - chcete ho pøesto vytvoøit? " + +#: g10/keyedit.c:529 g10/keygen.c:823 +msgid "Invalid selection.\n" +msgstr "Neplatný výbìr.\n" + +#: g10/keygen.c:836 +#, c-format +msgid "" +"About to generate a new %s keypair.\n" +" minimum keysize is 768 bits\n" +" default keysize is 1024 bits\n" +" highest suggested keysize is 2048 bits\n" +msgstr "" +"Chystám se vytvoøit nový pár klíèù %s.\n" +" minimální velikost klíèe je 768 bitù\n" +" implicitní velikost klíèe je 1024 bitù\n" +" nejvy¹¹í navrhovaná velikost klíèe je 2048 bitù\n" + +#: g10/keygen.c:845 +msgid "What keysize do you want? (1024) " +msgstr "Jakou velikost klíèe si pøejete? (1024) " + +#: g10/keygen.c:850 +msgid "DSA only allows keysizes from 512 to 1024\n" +msgstr "Klíè DSA musí mít velikost od 512 do 1024 bitù.\n" + +#: g10/keygen.c:852 +msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "" +"velikost klíèe je pøíli¹ malá; minimální dovolená velikost pro RSA je 1024 " +"bitù.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "" +"velikost klíèe je pøíli¹ malá; minimální dovolená velikost je 768 bitù.\n" + +#. It is ridiculous and an annoyance to use larger key sizes! +#. * GnuPG can handle much larger sizes; but it takes an eternity +#. * to create such a key (but less than the time the Sirius +#. * Computer Corporation needs to process one of the usual +#. * complaints) and {de,en}cryption although needs some time. +#. * So, before you complain about this limitation, I suggest that +#. * you start a discussion with Marvin about this theme and then +#. * do whatever you want. +#: g10/keygen.c:866 +#, c-format +msgid "keysize too large; %d is largest value allowed.\n" +msgstr "velikost klíèe je pøíli¹ velká; maximální dovolená hodnota je %d.\n" + +#: g10/keygen.c:871 +msgid "" +"Keysizes larger than 2048 are not suggested because\n" +"computations take REALLY long!\n" +msgstr "" +"Velikosti klíèe vìt¹í jak 2048 bitù se nedoporuèují, proto¾e\n" +"výpoèty pak trvají VELMI dlouho!\n" + +#: g10/keygen.c:874 +msgid "Are you sure that you want this keysize? " +msgstr "Opravdu chcete vytvoøit klíè této délky? " + +#: g10/keygen.c:875 +msgid "" +"Okay, but keep in mind that your monitor and keyboard radiation is also very " +"vulnerable to attacks!\n" +msgstr "" +"Dobøe, ale nezapomeòte, ¾e informace mohou být vyzrazeny z poèítaèe také " +"elektromagnetickým vyzaøováním monitoru nebo klávesnice!\n" + +#: g10/keygen.c:884 +#, c-format +msgid "Requested keysize is %u bits\n" +msgstr "Po¾adovaná délka klíèe je %u bitù.\n" + +#: g10/keygen.c:887 g10/keygen.c:891 +#, c-format +msgid "rounded up to %u bits\n" +msgstr "zaokrouhleno na %u bitù\n" + +#: g10/keygen.c:942 +msgid "" +"Please specify how long the key should be valid.\n" +" 0 = key does not expire\n" +" = key expires in n days\n" +" w = key expires in n weeks\n" +" m = key expires in n months\n" +" y = key expires in n years\n" +msgstr "" +"Prosím urèete, jak dlouho by klíè mìl platit.\n" +" 0 = doba platnosti klíèe není omezena\n" +" = doba platnosti klíèe skonèí za n dní\n" +" w = doba platnosti klíèe skonèí za n týdnù\n" +" m = doba platnosti klíèe skonèí za n mìsícù\n" +" y = doba platnosti klíèe skonèí za n let\n" + +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Prosím urèete, jak dlouho by mìl podpis platit.\n" +" 0 = doba platnosti podpisu není omezena\n" +" = doba platnosti podpisu skonèí za n dní\n" +" w = doba platnosti podpisu skonèí za n týdnù\n" +" m = doba platnosti podpisu skonèí za n mìsícù\n" +" y = doba platnosti podpisu skonèí za n let\n" + +#: g10/keygen.c:973 +msgid "Key is valid for? (0) " +msgstr "Klíè je platný pro? (0) " + +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Podpis je platný pro? (0) " + +#: g10/keygen.c:980 +msgid "invalid value\n" +msgstr "neplatná hodnota\n" + +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "platnost %s neskonèí\n" + +#. print the date when the key expires +#: g10/keygen.c:992 +#, c-format +msgid "%s expires at %s\n" +msgstr "platnost %s skonèí %s\n" + +#: g10/keygen.c:998 +msgid "" +"Your system can't display dates beyond 2038.\n" +"However, it will be correctly handled up to 2106.\n" +msgstr "" +"Vá¹ systém neumí zobrazit data po roce 2038.\n" +"V ka¾dém pøípadì budou data korektnì zpracovávána do roku 2106.\n" + +#: g10/keygen.c:1003 +msgid "Is this correct (y/n)? " +msgstr "Je to správnì (a/n)? " + +#: g10/keygen.c:1046 +msgid "" +"\n" +"You need a User-ID to identify your key; the software constructs the user " +"id\n" +"from Real Name, Comment and Email Address in this form:\n" +" \"Heinrich Heine (Der Dichter) \"\n" +"\n" +msgstr "" +"\n" +"Aby bylo mo¾né rozpoznat Vá¹ klíè, musíte znát identifikátor u¾ivatele;\n" +"program jej slo¾í z Va¹eho jména a pøíjmení, komentáøe a e-mailu\n" +"v tomto tvaru:\n" +" \"Magda Prochazkova (student) \"\n" +"\n" + +#: g10/keygen.c:1058 +msgid "Real name: " +msgstr "Jméno a pøíjmení: " + +#: g10/keygen.c:1066 +msgid "Invalid character in name\n" +msgstr "Neplatný znak ve jménì\n" + +#: g10/keygen.c:1068 +msgid "Name may not start with a digit\n" +msgstr "Jméno nemù¾e zaèínat èíslicí\n" + +#: g10/keygen.c:1070 +msgid "Name must be at least 5 characters long\n" +msgstr "Jméno musí být dlouhé alespoò 5 znakù\n" + +#: g10/keygen.c:1078 +msgid "Email address: " +msgstr "E-mailová adresa: " + +#: g10/keygen.c:1089 +msgid "Not a valid email address\n" +msgstr "Neplatná e-mailová adresa\n" + +#: g10/keygen.c:1097 +msgid "Comment: " +msgstr "Komentáø: " + +#: g10/keygen.c:1103 +msgid "Invalid character in comment\n" +msgstr "Neplatný znak v komentáøi\n" + +#: g10/keygen.c:1126 +#, c-format +msgid "You are using the `%s' character set.\n" +msgstr "Pou¾íváte znakovou sadu `%s'.\n" + +#: g10/keygen.c:1132 +#, c-format +msgid "" +"You selected this USER-ID:\n" +" \"%s\"\n" +"\n" +msgstr "" +"Zvolil(a) jste tento identifikátor u¾ivatele:\n" +" \"%s\"\n" +"\n" + +#: g10/keygen.c:1136 +msgid "Please don't put the email address into the real name or the comment\n" +msgstr "Do pole jméno nebo komentáø nepi¹te, prosím, e-mailovou adresu.\n" + +#: g10/keygen.c:1141 +msgid "NnCcEeOoQq" +msgstr "jJkKeEPpUu" + +#: g10/keygen.c:1151 +msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " +msgstr "Zmìnit (J)méno, (K)omentáø, (E)-mail nebo (U)konèit? " + +#: g10/keygen.c:1152 +msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " +msgstr "" +"Zmìnit (J)méno, (K)omentáø, (E)-mail, (P)okraèovat dál nebo (U)konèit " +"program? " + +#: g10/keygen.c:1171 +msgid "Please correct the error first\n" +msgstr "Nejdøív, prosím, opravte chybu\n" + +#: g10/keygen.c:1210 +msgid "" +"You need a Passphrase to protect your secret key.\n" +"\n" +msgstr "" +"Pro ochranu Va¹eho tajného klíèe musíte zadat heslo.\n" +"\n" + +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "heslo není zopakováno správnì; zkuste to znovu" + +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"I will do it anyway. You can change your passphrase at any time,\n" +"using this program with the option \"--edit-key\".\n" +"\n" +msgstr "" +"Nechcete heslo - to *není* dobrý nápad!\n" +"Dobøe, budu pokraèovat bez hesla. Kdykoliv mù¾ete heslo zmìnit pou¾itím\n" +"tohoto programu s parametrem \"--edit-key\".\n" +"\n" + +#: g10/keygen.c:1246 +msgid "" +"We need to generate a lot of random bytes. It is a good idea to perform\n" +"some other action (type on the keyboard, move the mouse, utilize the\n" +"disks) during the prime generation; this gives the random number\n" +"generator a better chance to gain enough entropy.\n" +msgstr "" +"Musíme vytvoøit mnoho náhodných bajtù. Bìhem vytváøení mù¾ete\n" +"provádìt nìjakou jinou práci na poèítaèi (psát na klávesnici, pohybovat " +"my¹í,\n" +"pou¾ívat disky); díky tomu má generátor lep¹í ¹anci získat dostatek " +"entropie.\n" + +#: g10/keygen.c:1741 +msgid "DSA keypair will have 1024 bits.\n" +msgstr "Pár klíèù DSA bude dlouhý 1024 bitù.\n" + +#: g10/keygen.c:1795 +msgid "Key generation canceled.\n" +msgstr "Vytváøení klíèe bylo zru¹eno.\n" + +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format +msgid "writing public key to `%s'\n" +msgstr "zapisuji veøejný klíè do `%s'\n" + +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format +msgid "writing secret key to `%s'\n" +msgstr "zapisuji tajný klíè do `%s'\n" + +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "nenalezen zapisovatelný soubor veøejných klíèù (pubring): %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "nenalezen zapisovatelný soubor tajných klíèù (secring): %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "chyba pøi zápisu do souboru veøejných klíèù `%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "chyba pøi zápisu do souboru tajných klíèù `%s': %s\n" + +#: g10/keygen.c:1999 +msgid "public and secret key created and signed.\n" +msgstr "veøejný a tajný klíè byly vytvoøeny a podepsány.\n" + +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "klíè oznaèen jako absolutnì dùvìryhodný.\n" + +#: g10/keygen.c:2011 +msgid "" +"Note that this key cannot be used for encryption. You may want to use\n" +"the command \"--edit-key\" to generate a secondary key for this purpose.\n" +msgstr "" +"Tento klíè nemù¾e být pou¾itý pro ¹ifrování. K vytvoøení\n" +"sekundárního klíèe pro tento úèel mù¾ete pou¾ít pøíkaz \"--edit-key\".\n" + +#: g10/keygen.c:2023 g10/keygen.c:2131 +#, c-format +msgid "Key generation failed: %s\n" +msgstr "Vytvoøení klíèe se nepodaøilo: %s\n" + +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 +#, c-format +msgid "" +"key has been created %lu second in future (time warp or clock problem)\n" +msgstr "" +"klíè byl vytvoøen %lu sekund v budoucnosti (do¹lo ke zmìnì èasu nebo\n" +"je problém se systémovým èasem)\n" + +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 +#, c-format +msgid "" +"key has been created %lu seconds in future (time warp or clock problem)\n" +msgstr "" +"klíè byl vytvoøen %lu sekund v budoucnosti (do¹lo ke zmìnì èasu nebo\n" +"je problém se systémovým èasem)\n" + +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "POZNÁMKA: vytvoøení podklíèe pro klíèe v3 není v souladu s OpenPGP\n" + +#: g10/keygen.c:2107 +msgid "Really create? " +msgstr "Opravdu vytvoøit? " + +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output pro tento pøíkaz není platný\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' je ji¾ zakomprimován\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 +#, c-format +msgid "%s: can't open: %s\n" +msgstr "%s: nemohu otevøít: %s\n" + +#: g10/encode.c:122 g10/sign.c:959 +#, c-format +msgid "error creating passphrase: %s\n" +msgstr "chyba pøi vytváøení hesla: %s\n" + +#: g10/encode.c:185 g10/encode.c:383 +#, c-format +msgid "%s: WARNING: empty file\n" +msgstr "%s: VAROVÁNÍ: soubor je prázdný\n" + +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"v módu --pgp2 mù¾ete ¹ifrovat pouze RSA klíèem o délce 2048 bitù a ménì\n" + +#: g10/encode.c:313 +#, c-format +msgid "reading from `%s'\n" +msgstr "ètu z `%s'\n" + +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "algoritmus IDEA nelze pou¾ít pro v¹echny klíèe, pro které ¹ifrujete.\n" + +#: g10/encode.c:563 +#, c-format +msgid "%s/%s encrypted for: %s\n" +msgstr "%s/%s za¹ifrovaný pro: %s\n" + +#: g10/delkey.c:69 g10/export.c:141 +#, c-format +msgid "key `%s' not found: %s\n" +msgstr "klíè `%s' nenalezen: %s\n" + +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "chyba pøi ètení bloku klíèe: %s\n" + +#: g10/export.c:169 +#, c-format +msgid "key %08lX: not a rfc2440 key - skipped\n" +msgstr "klíè %08lX: není ve formátu RFC 2440 - pøeskoèeno\n" + +#: g10/export.c:180 +#, c-format +msgid "key %08lX: not protected - skipped\n" +msgstr "klíè %08lX: není chránìný - pøeskoèeno\n" + +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "klíè %08lX: PGP 2.x klíè - pøeskoèeno\n" + +#: g10/export.c:255 +msgid "WARNING: nothing exported\n" +msgstr "VAROVÁNÍ: nebylo nic vyexportováno\n" + +#: g10/getkey.c:151 +msgid "too many entries in pk cache - disabled\n" +msgstr "pøíli¹ mnoho polo¾ek v bufferu veøejých klíèù - vypnuto\n" + +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[User ID not found]" + +# c-format +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" +"Neplatný klíè %08lX zmìnìn na platný pomocí --always-non-selfsigned-uid\n" + +#: g10/getkey.c:1989 +#, c-format +msgid "using secondary key %08lX instead of primary key %08lX\n" +msgstr "pou¾ívám sekundární klíè %08lX místo primárního klíèe %08lX\n" + +#: g10/getkey.c:2036 +#, c-format +msgid "key %08lX: secret key without public key - skipped\n" +msgstr "klíè %08lX: tajný klíè bez klíèe veøejného - pøeskoèeno\n" + +#: g10/import.c:206 +#, c-format +msgid "skipping block of type %d\n" +msgstr "blok typu %d byl pøeskoèen\n" + +#: g10/import.c:213 +#, c-format +msgid "%lu keys so far processed\n" +msgstr "%lu klíèe byly doposud zpracovány\n" + +#: g10/import.c:218 +#, c-format +msgid "error reading `%s': %s\n" +msgstr "chyba pøi ètení `%s': %s\n" + +#: g10/import.c:230 +#, c-format +msgid "Total number processed: %lu\n" +msgstr "Celkový poèet zpracovaných klíèù: %lu\n" + +#: g10/import.c:232 +#, c-format +msgid " skipped new keys: %lu\n" +msgstr " pøeskoèeny nové klíèe: %lu\n" + +#: g10/import.c:235 +#, c-format +msgid " w/o user IDs: %lu\n" +msgstr " bez identifikátorù (user ID): %lu\n" + +#: g10/import.c:237 +#, c-format +msgid " imported: %lu" +msgstr " importováno: %lu" + +#: g10/import.c:243 +#, c-format +msgid " unchanged: %lu\n" +msgstr " beze zmìn: %lu\n" + +#: g10/import.c:245 +#, c-format +msgid " new user IDs: %lu\n" +msgstr " nové id u¾ivatelù (user ID): %lu\n" + +#: g10/import.c:247 +#, c-format +msgid " new subkeys: %lu\n" +msgstr " nové podklíèe: %lu\n" + +#: g10/import.c:249 +#, c-format +msgid " new signatures: %lu\n" +msgstr " nové podpisy: %lu\n" + +#: g10/import.c:251 +#, c-format +msgid " new key revocations: %lu\n" +msgstr " nové revokace klíèù: %lu\n" + +#: g10/import.c:253 +#, c-format +msgid " secret keys read: %lu\n" +msgstr " pøeètené tajné klíèe: %lu\n" + +#: g10/import.c:255 +#, c-format +msgid " secret keys imported: %lu\n" +msgstr " importované tajné klíèe: %lu\n" + +#: g10/import.c:257 +#, c-format +msgid " secret keys unchanged: %lu\n" +msgstr "tajné klíèe nezmìnìny: %lu\n" + +#: g10/import.c:438 g10/import.c:657 +#, c-format +msgid "key %08lX: no user ID\n" +msgstr "klíè %08lX: chybí identifikátor u¾ivatele\n" + +# c-format +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "klíè %08lX: pøijat id u¾ivatele '%s',který není podepsán jím samým\n" + +#: g10/import.c:462 +#, c-format +msgid "key %08lX: no valid user IDs\n" +msgstr "klíè %08lX: chybí platný identifikátor u¾ivatele\n" + +#: g10/import.c:464 +msgid "this may be caused by a missing self-signature\n" +msgstr "mù¾e to být zpùsobeno chybìjícím podpisem klíèe jím samým\n" + +#: g10/import.c:474 g10/import.c:726 +#, c-format +msgid "key %08lX: public key not found: %s\n" +msgstr "klíè %08lX: veøejný klíè nenalezen: %s\n" + +#: g10/import.c:479 +#, c-format +msgid "key %08lX: new key - skipped\n" +msgstr "klíè %08lX: nový klíè - pøeskoèen\n" + +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "nenalezen zapisovatelný soubor klíèù (keyring): %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 +#, c-format +msgid "writing to `%s'\n" +msgstr "zapisuji do '%s'\n" + +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "chyba pøi zápisu souboru klíèù (keyring) `%s': %s\n" + +#: g10/import.c:505 +#, c-format +msgid "key %08lX: public key imported\n" +msgstr "klíè %08lX: veøejný klíè importován\n" + +#: g10/import.c:524 +#, c-format +msgid "key %08lX: doesn't match our copy\n" +msgstr "klíè %08lX: neodpovídá na¹í kopii\n" + +#: g10/import.c:542 g10/import.c:743 +#, c-format +msgid "key %08lX: can't locate original keyblock: %s\n" +msgstr "klíè %08lX: nemohu najít originální blok klíèe: %s\n" + +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "klíè %08lX: nemohu èíst originální blok klíèe: %s\n" + +#: g10/import.c:579 +#, c-format +msgid "key %08lX: 1 new user ID\n" +msgstr "klíè %08lX: 1 nový identifikátor u¾ivatele\n" + +#: g10/import.c:582 +#, c-format +msgid "key %08lX: %d new user IDs\n" +msgstr "klíè %08lX: %d nových identifikátorù u¾ivatele\n" + +#: g10/import.c:585 +#, c-format +msgid "key %08lX: 1 new signature\n" +msgstr "klíè %08lX: 1 nový podpis\n" + +#: g10/import.c:588 +#, c-format +msgid "key %08lX: %d new signatures\n" +msgstr "klíè %08lX: %d nových podpisù\n" + +#: g10/import.c:591 +#, c-format +msgid "key %08lX: 1 new subkey\n" +msgstr "klíè %08lX: 1 nový podklíè\n" + +#: g10/import.c:594 +#, c-format +msgid "key %08lX: %d new subkeys\n" +msgstr "klíè %08lX: %d nových podklíèù\n" + +#: g10/import.c:604 +#, c-format +msgid "key %08lX: not changed\n" +msgstr "klíè %08lX: beze zmìn\n" + +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "není nastaven implicitní soubor tajných klíèù %s\n" + +#: g10/import.c:682 +#, c-format +msgid "key %08lX: secret key imported\n" +msgstr "klíè %08lX: tajný klíè importován\n" + +#. we can't merge secret keys +#: g10/import.c:686 +#, c-format +msgid "key %08lX: already in secret keyring\n" +msgstr "klíè %08lX: je ji¾ v souboru tajných klíèù\n" + +#: g10/import.c:691 +#, c-format +msgid "key %08lX: secret key not found: %s\n" +msgstr "klíè %08lX: nenalezen tajný klíè: %s\n" + +#: g10/import.c:720 +#, c-format +msgid "key %08lX: no public key - can't apply revocation certificate\n" +msgstr "" +"klíè %08lX: chybí veøejný klíè - nemohu aplikovat revokaèní certifikát\n" + +#: g10/import.c:760 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - rejected\n" +msgstr "klíè %08lX: neplatný revokaèní certifikát: %s - zamítnuto\n" + +#: g10/import.c:791 +#, c-format +msgid "key %08lX: revocation certificate imported\n" +msgstr "klíè %08lX: revokaèní certifikát importován\n" + +#: g10/import.c:826 +#, c-format +msgid "key %08lX: no user ID for signature\n" +msgstr "klíè %08lX: neexistuje id u¾ivatele pro podpis\n" + +#: g10/import.c:839 +#, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "" +"klíè %08lX: nepodporovaný algoritmus veøejného klíèe u u¾ivatelského id \"%s" +"\"\n" + +#: g10/import.c:841 +#, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "" +"klíè %08lX: neplatný podpis klíèe jím samým u u¾ivatelského id \"%s\"\n" + +#: g10/import.c:858 +#, c-format +msgid "key %08lX: no subkey for key binding\n" +msgstr "klíè %08lX: neexistuje podklíè pro vázání klíèù\n" + +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "klíè %08lX: nepodporovaný algoritmus veøejného klíèe\n" + +#: g10/import.c:869 +#, c-format +msgid "key %08lX: invalid subkey binding\n" +msgstr "klíè %08lX: neplatná vazba podklíèe\n" + +#: g10/import.c:899 +#, c-format +msgid "key %08lX: skipped user ID '" +msgstr "klíè %08lX: identifikátor u¾ivatele pøeskoèen '" + +#: g10/import.c:922 +#, c-format +msgid "key %08lX: skipped subkey\n" +msgstr "klíè %08lX: podklíè pøeskoèen\n" + +#. here we violate the rfc a bit by still allowing +#. * to import non-exportable signature when we have the +#. * the secret key used to create this signature - it +#. * seems that this makes sense +#: g10/import.c:945 +#, c-format +msgid "key %08lX: non exportable signature (class %02x) - skipped\n" +msgstr "klíè %08lX: podpis není exportovatelný (tøída %02x) - pøeskoèeno\n" + +#: g10/import.c:954 +#, c-format +msgid "key %08lX: revocation certificate at wrong place - skipped\n" +msgstr "klíè %08lX: revokaèní certifikát na ¹patném místì - pøeskoèeno \n" + +#: g10/import.c:971 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - skipped\n" +msgstr "klíè %08lX: neplatný revokaèní certifikát: %s - pøeskoèen\n" + +#: g10/import.c:1072 +#, c-format +msgid "key %08lX: duplicated user ID detected - merged\n" +msgstr "klíè %08lX: objeven duplikovaný identifikátor u¾ivatele - slouèen\n" + +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"VAROVÁNÍ: klíè %08lX mù¾e být revokován: zkou¹ím získat revokaèní klíè %" +"08lX\n" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" +"VAROVÁNÍ: klíè %08lX mù¾e být revokován: revokaèní klíè %08lX nenalezen.\n" + +#: g10/import.c:1201 +#, c-format +msgid "key %08lX: revocation certificate added\n" +msgstr "klíè %08lX: pøidán revokaèní certifikát\n" + +#: g10/import.c:1231 +#, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "klíè %08lX: podpis klíèe jím samým (direct key signature)\n" + +#: g10/keyedit.c:142 +msgid "[revocation]" +msgstr "[revokace]" + +#: g10/keyedit.c:143 +msgid "[self-signature]" +msgstr "[podpis klíèe jím samým]" + +#: g10/keyedit.c:214 g10/keylist.c:139 +msgid "1 bad signature\n" +msgstr "1 ¹patný podpis\n" + +#: g10/keyedit.c:216 g10/keylist.c:141 +#, c-format +msgid "%d bad signatures\n" +msgstr "%d ¹patných podpisù\n" + +#: g10/keyedit.c:218 g10/keylist.c:143 +msgid "1 signature not checked due to a missing key\n" +msgstr "1 podpis neovìøen, proto¾e chybí klíè\n" + +#: g10/keyedit.c:220 g10/keylist.c:145 +#, c-format +msgid "%d signatures not checked due to missing keys\n" +msgstr "%d podpisù neovìøených, proto¾e chybí klíè\n" + +#: g10/keyedit.c:222 g10/keylist.c:147 +msgid "1 signature not checked due to an error\n" +msgstr "1 podpis neovìøen, proto¾e vznikla chyba\n" + +#: g10/keyedit.c:224 g10/keylist.c:149 +#, c-format +msgid "%d signatures not checked due to errors\n" +msgstr "%d podpisù neovìøených, proto¾e vznikly chyby\n" + +#: g10/keyedit.c:226 +msgid "1 user ID without valid self-signature detected\n" +msgstr "objeven 1 identifikátor u¾ivatele bez platného podpisu jím samým\n" + +#: g10/keyedit.c:228 +#, c-format +msgid "%d user IDs without valid self-signatures detected\n" +msgstr "objeveno %d identifikátorù u¾ivatele bez platného podpisu jím samým\n" + +#: g10/keyedit.c:335 +#, c-format +msgid "User ID \"%s\" is revoked." +msgstr "U¾ivatelské ID \"%s\" je revokováno." + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Jste si jistý(á), ¾e stále chcete podpsat tento klíè? (a/N) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr " Nelze podepsat.\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Va¹ souèasný podpis na \"%s\"\n" +"je pouze lokální.\n" +"\n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "Pøejete si jej zmìnit na plnì exportovatelný podpise? (a/N) " + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" je ji¾ lokálnì podepsán klíèem %08lX\n" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" je ji¾ podepsán klíèem %08lX\n" + +#: g10/keyedit.c:405 +#, c-format +msgid "Nothing to sign with key %08lX\n" +msgstr "Nic k podepsání klíèem %08lX\n" + +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Platnost klíèe vypr¹ela!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Platnost klíèe vypr¹í %s.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Chcete, aby platnost Va¹eho podpisu vypr¹ela ve stejnou dobu? (A/n) " + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" +"Nemù¾ete udìlat OpenPGP podpis klíèe typu PGP 2.x, kdy¾ jste v --pgp2 módu.\n" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "To by zpùsobilo nepou¾itelnost klíèe v PGP 2.x.\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"S jakou jistotou jste provìøili, ¾e klíè, který chcete podepsat\n" +"patøí vý¹e uvedené osobì.\n" +"Pokud neznáte odpovìï, zadejte \"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Neodpovím.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Nijak jsem to nekontroloval(a).%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Èáseènì jsem to ovìøil(a).%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Velmi peèlivì jsem to ovìøil(a).%s\n" + +#: g10/keyedit.c:535 +msgid "" +"Are you really sure that you want to sign this key\n" +"with your key: \"" +msgstr "" +"Jste si jistý(á), ¾e chcete podepsat tento klíè\n" +"svým klíèem: \"" + +#: g10/keyedit.c:544 +msgid "" +"\n" +"The signature will be marked as non-exportable.\n" +msgstr "" +"\n" +"Podpis bude oznaèen jako neexportovatelný.\n" +"\n" + +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"Podpis bude oznaèen jako neodvolatelný (non-revocable).\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Nijak jsem tento klíè neovìøil.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Èásteènì jsem ovìøil tento klíè.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Velmi peèlivì jsem ovìøil tento klíè.\n" + +#: g10/keyedit.c:569 +msgid "Really sign? " +msgstr "Skuteènì podepsat? " + +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 +#, c-format +msgid "signing failed: %s\n" +msgstr "podepsání selhalo: %s\n" + +#: g10/keyedit.c:658 +msgid "This key is not protected.\n" +msgstr "Tento klíè není chránìný.\n" + +#: g10/keyedit.c:662 +msgid "Secret parts of primary key are not available.\n" +msgstr "Tajné èásti primárního klíèe nejsou dostupné.\n" + +#: g10/keyedit.c:666 +msgid "Key is protected.\n" +msgstr "Klíè je chránìný.\n" + +#: g10/keyedit.c:686 +#, c-format +msgid "Can't edit this key: %s\n" +msgstr "Není mo¾né editovat tento klíè: %s\n" + +#: g10/keyedit.c:692 +msgid "" +"Enter the new passphrase for this secret key.\n" +"\n" +msgstr "" +"Vlo¾te nové heslo (passphrase) pro tento tajný klíè.\n" +"\n" + +#: g10/keyedit.c:706 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"\n" +msgstr "" +"Nechcete heslo - to *není* dobrý nápad!\n" +"\n" + +#: g10/keyedit.c:709 +msgid "Do you really want to do this? " +msgstr "Opravdu to chcete udìlat? " + +#: g10/keyedit.c:773 +msgid "moving a key signature to the correct place\n" +msgstr "pøesunuji podpis klíèe na správné místo\n" + +#: g10/keyedit.c:815 +msgid "quit this menu" +msgstr "ukonèit toto menu" + +#: g10/keyedit.c:816 +msgid "q" +msgstr "u" + +#: g10/keyedit.c:817 +msgid "save" +msgstr "ulo¾it" + +#: g10/keyedit.c:817 +msgid "save and quit" +msgstr "ulo¾it a ukonèit" + +#: g10/keyedit.c:818 +msgid "help" +msgstr "help" + +#: g10/keyedit.c:818 +msgid "show this help" +msgstr "ukázat tuto pomoc" + +#: g10/keyedit.c:820 +msgid "fpr" +msgstr "fpr" + +#: g10/keyedit.c:820 +msgid "show fingerprint" +msgstr "vypsat fingerprint" + +#: g10/keyedit.c:821 +msgid "list" +msgstr "list" + +#: g10/keyedit.c:821 +msgid "list key and user IDs" +msgstr "vypsat seznam klíèù a id u¾ivatelù" + +#: g10/keyedit.c:822 +msgid "l" +msgstr "l" + +#: g10/keyedit.c:823 +msgid "uid" +msgstr "uid" + +#: g10/keyedit.c:823 +msgid "select user ID N" +msgstr "vyberte identifikátor u¾ivatele N" + +#: g10/keyedit.c:824 +msgid "key" +msgstr "key" + +#: g10/keyedit.c:824 +msgid "select secondary key N" +msgstr "vyberte sekundární klíè N" + +#: g10/keyedit.c:825 +msgid "check" +msgstr "check" + +#: g10/keyedit.c:825 +msgid "list signatures" +msgstr "vypsat seznam podpisù" + +#: g10/keyedit.c:826 +msgid "c" +msgstr "c" + +#: g10/keyedit.c:827 +msgid "sign" +msgstr "sign" + +#: g10/keyedit.c:827 +msgid "sign the key" +msgstr "podepsat klíè" + +#: g10/keyedit.c:828 +msgid "s" +msgstr "s" + +#: g10/keyedit.c:829 +msgid "lsign" +msgstr "lsign" + +#: g10/keyedit.c:829 +msgid "sign the key locally" +msgstr "podepsat klíè lokálnì" + +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "podepsat klíè bez mo¾nosti odvolat podpis (non-revocably)" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "podepsat klíè lokálnì a bez mo¾nosti odvolat podpis (non-revocably)" + +#: g10/keyedit.c:832 +msgid "debug" +msgstr "debug" + +#: g10/keyedit.c:833 +msgid "adduid" +msgstr "adduid" + +#: g10/keyedit.c:833 +msgid "add a user ID" +msgstr "pøidat identifikátor u¾ivatele" + +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "addphoto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "pøidat fotografický ID" + +#: g10/keyedit.c:835 +msgid "deluid" +msgstr "deluid" + +#: g10/keyedit.c:835 +msgid "delete user ID" +msgstr "smazat identifikátor u¾ivatele" + +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:838 +msgid "addkey" +msgstr "addkey" + +#: g10/keyedit.c:838 +msgid "add a secondary key" +msgstr "pøidat sekundární klíè" + +#: g10/keyedit.c:839 +msgid "delkey" +msgstr "delkey" + +#: g10/keyedit.c:839 +msgid "delete a secondary key" +msgstr "smazat sekundární klíè" + +#: g10/keyedit.c:840 +msgid "delsig" +msgstr "delsig" + +#: g10/keyedit.c:840 +msgid "delete signatures" +msgstr "smazat podpisy" + +#: g10/keyedit.c:841 +msgid "expire" +msgstr "expire" + +#: g10/keyedit.c:841 +msgid "change the expire date" +msgstr "zmìnit dobu platnosti" + +#: g10/keyedit.c:842 +msgid "primary" +msgstr "primary" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "oznaèit u¾ivatelské ID jako primární" + +#: g10/keyedit.c:843 +msgid "toggle" +msgstr "toggle" + +#: g10/keyedit.c:843 +msgid "toggle between secret and public key listing" +msgstr "pøepnout mezi vypsáním seznamu tajných a veøejných klíèù" + +#: g10/keyedit.c:845 +msgid "t" +msgstr "t" + +#: g10/keyedit.c:846 +msgid "pref" +msgstr "pref" + +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "vypsat seznam pøedvoleb (pro experty)" + +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "vypsat seznam pøedvoleb (podrobnì)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "nastavit seznam pøedvoleb" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "aktualizovat pøedvolby" + +#: g10/keyedit.c:850 +msgid "passwd" +msgstr "passwd" + +#: g10/keyedit.c:850 +msgid "change the passphrase" +msgstr "zmìnit heslo" + +#: g10/keyedit.c:851 +msgid "trust" +msgstr "trust" + +#: g10/keyedit.c:851 +msgid "change the ownertrust" +msgstr "zmìnit dùvìryhodnost vlastníka klíèe" + +#: g10/keyedit.c:852 +msgid "revsig" +msgstr "revsig" + +#: g10/keyedit.c:852 +msgid "revoke signatures" +msgstr "revokovat podpisy" + +#: g10/keyedit.c:853 +msgid "revkey" +msgstr "revkey" + +#: g10/keyedit.c:853 +msgid "revoke a secondary key" +msgstr "revokovat sekundární klíè" + +#: g10/keyedit.c:854 +msgid "disable" +msgstr "disable" + +#: g10/keyedit.c:854 +msgid "disable a key" +msgstr "nastavit klíè jako neplatný (disable)" + +#: g10/keyedit.c:855 +msgid "enable" +msgstr "enable" + +#: g10/keyedit.c:855 +msgid "enable a key" +msgstr "nastavit klíè jako platný (enable)" + +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "showphoto" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "ukázat fotografický ID" + +#: g10/delkey.c:112 g10/keyedit.c:876 +msgid "can't do that in batchmode\n" +msgstr "nelze provést v dávkovém módu\n" + +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "chyba pøi ètení bloku tajného klíèe `%s': %s\n" + +#: g10/keyedit.c:931 +msgid "Secret key is available.\n" +msgstr "Tajný klíè je dostupný.\n" + +#: g10/keyedit.c:962 +msgid "Command> " +msgstr "Pøíkaz> " + +#: g10/keyedit.c:994 +msgid "Need the secret key to do this.\n" +msgstr "Pro provedení této operace je potøeba tajný klíè.\n" + +#: g10/keyedit.c:998 +msgid "Please use the command \"toggle\" first.\n" +msgstr "Prosím, nejdøíve pou¾ijte pøíkaz \"toggle\" (pøepnout).\n" + +#: g10/keyedit.c:1047 +msgid "Key is revoked." +msgstr "Klíè revokován." + +#: g10/keyedit.c:1066 +msgid "Really sign all user IDs? " +msgstr "Opravdu podepsat v¹echny id u¾ivatele? " + +#: g10/keyedit.c:1067 +msgid "Hint: Select the user IDs to sign\n" +msgstr "Nápovìda: Vyberte id u¾ivatele k podepsání\n" + +#: g10/keyedit.c:1092 +#, c-format +msgid "This command is not allowed while in %s mode.\n" +msgstr "Tento pøíkaz není v módù %s dovolený.\n" + +#: g10/keyedit.c:1112 g10/keyedit.c:1133 +msgid "You must select at least one user ID.\n" +msgstr "Musíte vybrat alespoò jeden id u¾ivatele.\n" + +#: g10/keyedit.c:1114 +msgid "You can't delete the last user ID!\n" +msgstr "Nemù¾ete smazat poslední id u¾ivatele!\n" + +#: g10/keyedit.c:1117 +msgid "Really remove all selected user IDs? " +msgstr "Opravdu odstranit v¹echny vybrané id u¾ivatele? " + +#: g10/keyedit.c:1118 +msgid "Really remove this user ID? " +msgstr "Opravdu odstranit tento id u¾ivatele? " + +#: g10/keyedit.c:1156 g10/keyedit.c:1178 +msgid "You must select at least one key.\n" +msgstr "Musíte vybrat alespoò jeden klíè.\n" + +#: g10/keyedit.c:1160 +msgid "Do you really want to delete the selected keys? " +msgstr "Opravdu chcete smazat vybrané klíèe? " + +#: g10/keyedit.c:1161 +msgid "Do you really want to delete this key? " +msgstr "Opravdu chcete smazat tento klíè? " + +#: g10/keyedit.c:1182 +msgid "Do you really want to revoke the selected keys? " +msgstr "Opravdu chcete revokovat vybrané klíèe? " + +#: g10/keyedit.c:1183 +msgid "Do you really want to revoke this key? " +msgstr "Opravdu chcete revokovat tento klíè? " + +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "Opravdu aktualizovat pøedvoleby pro vybraný id u¾ivatele? " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Opravdu aktualizovat pøedvolby? " + +#: g10/keyedit.c:1292 +msgid "Save changes? " +msgstr "Ulo¾it zmìny? " + +#: g10/keyedit.c:1295 +msgid "Quit without saving? " +msgstr "Ukonèit bez ulo¾ení? " + +#: g10/keyedit.c:1306 +#, c-format +msgid "update failed: %s\n" +msgstr "aktualizace selhala: %s\n" + +#: g10/keyedit.c:1313 +#, c-format +msgid "update secret failed: %s\n" +msgstr "aktualizace tajného klíèe selhala: %s\n" + +#: g10/keyedit.c:1320 +msgid "Key not changed so no update needed.\n" +msgstr "Klíè nebyl zmìnìn, tak¾e není potøeba jej aktualizovat.\n" + +#: g10/keyedit.c:1332 +msgid "Invalid command (try \"help\")\n" +msgstr "Neplatný pøíkaz (zkuste \"help\")\n" + +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Tento klíè mù¾e být revokován %s klíèem %s%s\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr "(citlivá informace)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 +#, c-format +msgid "%s%c %4u%c/%08lX created: %s expires: %s" +msgstr "%s%c %4u%c/%08lX vytvoøen: %s platnost skonèí: %s" + +#: g10/keyedit.c:1506 +#, c-format +msgid " trust: %c/%c" +msgstr "dùvìra: %c/%c" + +#: g10/keyedit.c:1510 +msgid "This key has been disabled" +msgstr "Tento klíè byl oznaèen za neplatný (disabled)" + +#: g10/keyedit.c:1539 +#, c-format +msgid "rev! subkey has been revoked: %s\n" +msgstr "rev! podklíè byl revokován: %s\n" + +#: g10/keyedit.c:1542 +msgid "rev- faked revocation found\n" +msgstr "rev- nalezena padìlaná revokace\n" + +#: g10/keyedit.c:1544 +#, c-format +msgid "rev? problem checking revocation: %s\n" +msgstr "rev? problém ovìøení revokace: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" +"Prosím nezapomeòte, ¾e zobrazované údaje o platnosti klíèù nemusí\n" +"být správné, dokud znova nespustíte program.\n" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"VAROVÁNÍ: Tento klíè ji¾ obsahuje fotografický ID.\n" +" Pøidání dal¹í fotografie mù¾e zmást nìkteré verze PGP.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Jste si jistý, ¾e jej chcete stále pøidat? (a/N) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Mìli byste mít jen jeden fotografický ID na klíèi.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"VAROVÁNÍ: Toto je PGP2 klíè. Pøidání fotografického ID mù¾e v nìkterých\n" +" verzích PGP vést k odmítnutí tohoto klíèe.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "Nemìli by jste pøidávat fotografický ID k PGP2 klíèi.\n" + +#: g10/keyedit.c:1832 +msgid "Delete this good signature? (y/N/q)" +msgstr "Smazat tento dobrý podpis? (a/N/u)" + +#: g10/keyedit.c:1842 +msgid "Delete this invalid signature? (y/N/q)" +msgstr "Smazat tento neplatný podpis? (a/N/u)" + +#: g10/keyedit.c:1846 +msgid "Delete this unknown signature? (y/N/q)" +msgstr "Smazat tento neznámý podpis? (a/N/u)" + +#: g10/keyedit.c:1852 +msgid "Really delete this self-signature? (y/N)" +msgstr "Opravdu smazat tento podpis podepsaný sebou samým? (a/N)" + +#: g10/keyedit.c:1866 +#, c-format +msgid "Deleted %d signature.\n" +msgstr "Smazán %d podpis.\n" + +#: g10/keyedit.c:1867 +#, c-format +msgid "Deleted %d signatures.\n" +msgstr "Smazáno %d podpisù.\n" + +#: g10/keyedit.c:1870 +msgid "Nothing deleted.\n" +msgstr "Nic nebylo smaznáno.\n" + +#: g10/keyedit.c:1943 +msgid "Please remove selections from the secret keys.\n" +msgstr "Prosím, odstraòte výbìr z tajných klíèù.\n" + +#: g10/keyedit.c:1949 +msgid "Please select at most one secondary key.\n" +msgstr "Prosím, vyberte nejvý¹e jeden sekundární klíè.\n" + +#: g10/keyedit.c:1953 +msgid "Changing expiration time for a secondary key.\n" +msgstr "Mìním dobu platnosti sekundárního klíèe.\n" + +#: g10/keyedit.c:1955 +msgid "Changing expiration time for the primary key.\n" +msgstr "Mìním dobu platnosti primárního klíèe.\n" + +#: g10/keyedit.c:1997 +msgid "You can't change the expiration date of a v3 key\n" +msgstr "Nemù¾ete zmìnit dobu platnosti klíèe verze 3\n" + +#: g10/keyedit.c:2013 +msgid "No corresponding signature in secret ring\n" +msgstr "V souboru tajných klíèù chybí odpovídající podpis\n" + +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Prosím, vyberte právì jeden id u¾ivatele .\n" + +#: g10/keyedit.c:2284 +#, c-format +msgid "No user ID with index %d\n" +msgstr "Neexistuje identifikátor u¾ivatele s indexem %d\n" + +#: g10/keyedit.c:2330 +#, c-format +msgid "No secondary key with index %d\n" +msgstr "Neexistuje sekundární klíè s indexem %d\n" + +#: g10/keyedit.c:2444 +msgid "user ID: \"" +msgstr "id u¾ivatele: \"" + +#: g10/keyedit.c:2449 +#, c-format +msgid "" +"\"\n" +"signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"podepsáno Va¹ím klíèem %08lX v %s\n" + +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"lokálnì podepsáno Va¹ím klíèem %08lX v %s\n" + +#: g10/keyedit.c:2457 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "Platnost podpisu vypr¹í %s.\n" + +#: g10/keyedit.c:2461 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Jste si jistý, ¾e jej chcete stále revokovat? (a/N) " + +#: g10/keyedit.c:2465 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "Vytvoøit pro tento podpis revokaèní certifikát? (a/N)" + +#. FIXME: detect duplicates here +#: g10/keyedit.c:2490 +msgid "You have signed these user IDs:\n" +msgstr "Podepsal(a) jste následující identifikátory u¾ivatele:\n" + +#: g10/keyedit.c:2504 +#, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr " podepsáno %08lX v %s%s%s\n" + +#: g10/keyedit.c:2512 +#, c-format +msgid " revoked by %08lX at %s\n" +msgstr " revokováno %08lX v %s\n" + +#: g10/keyedit.c:2532 +msgid "You are about to revoke these signatures:\n" +msgstr "Chystáte se revokovat tyto podpisy:\n" + +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " podepsáno %08lX v %s%s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr " (nexeportovatelné)" + +#: g10/keyedit.c:2551 +msgid "Really create the revocation certificates? (y/N) " +msgstr "Opravdu vytvoøit revokaèní certifikáty? (a/N) " + +#: g10/keyedit.c:2581 +msgid "no secret key\n" +msgstr "neexistuje tajný klíè\n" + +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" +"Zobrazuji %s fotografický ID o velikosti %ld pro klíè 0x%08lX (uid %d)\n" + +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Podepisovací politika: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "VAROVÁNÍ: nalezen neplatný formát zápisu datumu\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Podepisovací notace: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "není v pøímo èitelném formátu" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "soubor klíèù (keyring)" + +#. of subkey +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format +msgid " [expires: %s]" +msgstr " [platnost skonèí: %s]" + +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Miniatura (fingerprint):" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Fingerprint:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Fingerprint klíèe =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s za¹ifrovaná data\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "za¹ifrováno neznámým algoritmem %d\n" + +#: g10/mainproc.c:280 +#, c-format +msgid "public key is %08lX\n" +msgstr "veøejný klíè je %08lX\n" + +#: g10/mainproc.c:326 +msgid "public key encrypted data: good DEK\n" +msgstr "data za¹ifrována veøejným klíèem: správný DEK\n" + +#: g10/mainproc.c:378 +#, c-format +msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" +msgstr "za¹ifrována %u-bitovým %s klíèem, ID %08lX, vytvoøeným %s\n" + +# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( +# [kw] +#: g10/mainproc.c:388 +#, c-format +msgid "encrypted with %s key, ID %08lX\n" +msgstr "za¹ifrováno %s klíèem, ID %08lX\n" + +#: g10/mainproc.c:402 +#, c-format +msgid "public key decryption failed: %s\n" +msgstr "de¹ifrování veøeným klíèem selhalo: %s\n" + +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "pøedpokládám %s ¹ifrovaných dat\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" +"algoritmus IDEA není dostupný; optimisticky se jej pokusíme nahradit " +"algoritmem %s\n" + +#: g10/mainproc.c:466 +msgid "decryption okay\n" +msgstr "de¹ifrování o.k.\n" + +#: g10/mainproc.c:471 +msgid "WARNING: encrypted message has been manipulated!\n" +msgstr "VAROVÁNÍ: se za¹ifrovanou zprávou bylo manipulováno!\n" + +#: g10/mainproc.c:476 +#, c-format +msgid "decryption failed: %s\n" +msgstr "de¹ifrování selhalo: %s\n" + +#: g10/mainproc.c:495 +msgid "NOTE: sender requested \"for-your-eyes-only\"\n" +msgstr "POZNÁMKA: odesílatel po¾adoval (\"for-your-eyes-only\")\n" + +#: g10/mainproc.c:497 +#, c-format +msgid "original file name='%.*s'\n" +msgstr "pùvodní jméno souboru='%.*s'\n" + +#: g10/mainproc.c:672 +msgid "standalone revocation - use \"gpg --import\" to apply\n" +msgstr "" +"samostatný revokaèní certifikát - pou¾ijte \"gpg --import\", chcete-li jej " +"u¾ít\n" + +#: g10/mainproc.c:733 +msgid "Notation: " +msgstr "Notace: " + +#: g10/mainproc.c:745 +msgid "Policy: " +msgstr "Politika: " + +#: g10/mainproc.c:1198 +msgid "signature verification suppressed\n" +msgstr "verifikace podpisu potlaèena\n" + +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "neumím pracovat s tìmito násobnými podpisy\n" + +# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( +#: g10/mainproc.c:1261 +#, c-format +msgid "Signature made %.*s using %s key ID %08lX\n" +msgstr "" +"Podpis vytvoøen %.*s pomocí %s klíèe s identifikátorem u¾ivatele %08lX\n" + +#: g10/mainproc.c:1305 g10/mainproc.c:1327 +msgid "BAD signature from \"" +msgstr "©PATNÝ podpis od \"" + +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Podpis s vypr¹enou platností od \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 +msgid "Good signature from \"" +msgstr "Dobrý podpis od \"" + +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[nejistý] " + +#: g10/mainproc.c:1351 +msgid " aka \"" +msgstr " alias \"" + +#: g10/mainproc.c:1412 +#, c-format +msgid "Can't check signature: %s\n" +msgstr "Nemohu ovìøit podpis: %s\n" + +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "toto není podpis oddìlený od dokumentu\n" + +#: g10/mainproc.c:1508 +#, c-format +msgid "standalone signature of class 0x%02x\n" +msgstr "samostatný podpis tøídy 0x%02x\n" + +#: g10/mainproc.c:1565 +msgid "old style (PGP 2.x) signature\n" +msgstr "podpis starého typu (PGP 2.x)\n" + +#: g10/mainproc.c:1572 +msgid "invalid root packet detected in proc_tree()\n" +msgstr "nalezen neplatný koøenový paket v proc_tree()\n" + +#: g10/misc.c:101 +#, c-format +msgid "can't disable core dumps: %s\n" +msgstr "nemohu vypnout vytváøení core souborù: %s\n" + +#: g10/misc.c:211 +msgid "Experimental algorithms should not be used!\n" +msgstr "Experimentální algoritmy by se nemìly pou¾ívat!\n" + +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" +msgstr "" +"tento ¹ifrovací algoritmus se nedoporuèuje; prosím, pou¾ijte nìjaký " +"standardnìj¹í!\n" + +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "VAROVÁNÍ: vlastnictví pro %s nastaveno nebezpeènì \"%s\"\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "VAROVÁNÍ: pøístupová práva pro %s nejsou nastavena bezpeènì \"%s\"\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "IDEA modul pro GnuPG nenalezen\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" +"více informací naleznete v dokumentu http://www.gnupg.cz/why-not-idea.html\n" + +#: g10/parse-packet.c:119 +#, c-format +msgid "can't handle public key algorithm %d\n" +msgstr "nemohu pracovat s algoritmem veøejného klíèe %d\n" + +#: g10/parse-packet.c:1053 +#, c-format +msgid "subpacket of type %d has critical bit set\n" +msgstr "podpaket typu %d má nastavený kritický bit\n" + +#: g10/passphrase.c:442 g10/passphrase.c:489 +msgid "gpg-agent is not available in this session\n" +msgstr "gpg-agent není v tomto sezení dostupný\n" + +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "nemohu nastavit PID clienta pro gpg-agenta\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "nelze získat server read file descriptor pro agenta r\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "nezle získat server write file descriptor pro agenta\n" + +#: g10/passphrase.c:498 +msgid "malformed GPG_AGENT_INFO environment variable\n" +msgstr "¹patný formát promìnné prostøedí GPG_AGENT_INFO\n" + +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "gpg-agent protokol verze %d není podporován\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format +msgid "can't connect to `%s': %s\n" +msgstr "nemohu se pøipojit k `%s': %s\n" + +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "problém v komunikaci s gpg-agentem\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "problém s agentem - pou¾ívání agenta vypnuto\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 +#, c-format +msgid " (main key ID %08lX)" +msgstr " (hlavní ID klíèe %08lX)" + +#: g10/passphrase.c:641 +#, c-format +msgid "" +"You need a passphrase to unlock the secret key for user:\n" +"\"%.*s\"\n" +"%u-bit %s key, ID %08lX, created %s%s\n" +msgstr "" +"Potøebujete heslo, abyste odemknul(a) tajný klíè pro u¾ivatele:\n" +"\"%.*s\"\n" +"Klíè o délce %u bitù, typ %s, ID %08lX, vytvoøený %s%s\n" + +#: g10/passphrase.c:662 +msgid "Enter passphrase\n" +msgstr "Vlo¾it heslo\n" + +#: g10/passphrase.c:664 +msgid "Repeat passphrase\n" +msgstr "Opakovat heslo\n" + +#: g10/passphrase.c:705 +msgid "passphrase too long\n" +msgstr "heslo je pøíli¹ dlouhé\n" + +#: g10/passphrase.c:718 +msgid "invalid response from agent\n" +msgstr "neplatná reakce od agenta\n" + +#: g10/passphrase.c:727 g10/passphrase.c:808 +msgid "cancelled by user\n" +msgstr "zru¹eno u¾ivatelem\n" + +#: g10/passphrase.c:729 g10/passphrase.c:890 +#, c-format +msgid "problem with the agent: agent returns 0x%lx\n" +msgstr "problém s agentem: agent vrací 0x%lx\n" + +#: g10/passphrase.c:1003 +msgid "" +"\n" +"You need a passphrase to unlock the secret key for\n" +"user: \"" +msgstr "" +"\n" +"Musíte znát heslo, abyste odemknul(a) tajný klíè pro\n" +"u¾ivatele: \"" + +#: g10/passphrase.c:1012 +#, c-format +msgid "%u-bit %s key, ID %08lX, created %s" +msgstr "délka %u bitù, typ %s, klíè %08lX, vytvoøený %s" + +#: g10/passphrase.c:1063 +msgid "can't query password in batchmode\n" +msgstr "v dávkovém re¾imu se nemohu ptát na heslo\n" + +#: g10/passphrase.c:1067 +msgid "Enter passphrase: " +msgstr "Vlo¾te heslo: " + +#: g10/passphrase.c:1071 +msgid "Repeat passphrase: " +msgstr "Opakujte heslo: " + +#: g10/plaintext.c:67 +msgid "data not saved; use option \"--output\" to save it\n" +msgstr "" +"data nebyla ulo¾ena; k jejich ulo¾ení pou¾ijte parametr pøíkazu \"--output" +"\"\n" + +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "chyba pøi vytváøení `%s': %s\n" + +#: g10/plaintext.c:337 +msgid "Detached signature.\n" +msgstr "Podpis oddìlený od dokumentu.\n" + +#: g10/plaintext.c:341 +msgid "Please enter name of data file: " +msgstr "Prosím, vlo¾te název datového souboru: " + +#: g10/plaintext.c:362 +msgid "reading stdin ...\n" +msgstr "ètu standardní vstup ...\n" + +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "chybí podepsaná data\n" + +#: g10/plaintext.c:404 +#, c-format +msgid "can't open signed data `%s'\n" +msgstr "nemohu otevøít podepsaná data '%s'\n" + +#: g10/pubkey-enc.c:100 +#, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "anonymní adresát; zkou¹ím tajný klíè %08lX ...\n" + +#: g10/pubkey-enc.c:106 +msgid "okay, we are the anonymous recipient.\n" +msgstr "o.k., my jsme anonymní adresát.\n" + +#: g10/pubkey-enc.c:158 +msgid "old encoding of the DEK is not supported\n" +msgstr "staré kódování DEK není podporováno\n" + +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "¹ifrovací algoritmus %d%s je neznámý nebo je zneplatnìn\n" + +#: g10/pubkey-enc.c:220 +#, c-format +msgid "NOTE: cipher algorithm %d not found in preferences\n" +msgstr "POZNÁMKA: v pøedvolbách nenalezen ¹ifrovací algoritmus %d\n" + +#: g10/pubkey-enc.c:242 +#, c-format +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "POZNÁMKA: platnost tajného klíèe %08lX skonèila %s\n" + +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "po¾aduji klíè %08lX z HKP serveru klíèù %s\n" + +#: g10/hkp.c:94 +#, c-format +msgid "can't get key from keyserver: %s\n" +msgstr "nemohu dostat klíè ze serveru klíèù: %s\n" + +#: g10/hkp.c:171 +#, c-format +msgid "error sending to `%s': %s\n" +msgstr "chyba pøi posílání na `%s': %s\n" + +#: g10/hkp.c:186 +#, c-format +msgid "success sending to `%s' (status=%u)\n" +msgstr "úspì¹né odeslání na `%s' (status=%u)\n" + +#: g10/hkp.c:189 +#, c-format +msgid "failed sending to `%s': status=%u\n" +msgstr "chyba odeslání na `%s': (status=%u)\n" + +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "vyhledávám \"%s\" na HKP serveru %s\n" + +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "nemohu prohledávat server klíèù: %s\n" + +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "tajné èásti klíèe nejsou dostupné\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "ochranný algoritmus %d%s není podporován\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Neplatné heslo; prosím, zkuste to znovu" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 +msgid "WARNING: Weak key detected - please change passphrase again.\n" +msgstr "VAROVÁNÍ: Objeven slabý klíè - zmìòte, prosím, znovu heslo.\n" + +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" +"generuji _nevhodný_ 16-ti bitový kontrolní souèet pro ochranu soukromého " +"klíèe\n" + +#: g10/sig-check.c:205 +msgid "" +"this is a PGP generated ElGamal key which is NOT secure for signatures!\n" +msgstr "" +"toto je klíè algoritmu ElGamal vygenerovaný v PGP - podpisy jím vytvoøené " +"NEJSOU bezpeèné!\n" + +#: g10/sig-check.c:213 +#, c-format +msgid "public key is %lu second newer than the signature\n" +msgstr "veøejný klíè je o %lu sekund novìj¹í ne¾ podpis\n" + +#: g10/sig-check.c:214 +#, c-format +msgid "public key is %lu seconds newer than the signature\n" +msgstr "veøejný klíè je o %lu sekund novìj¹í ne¾ podpis\n" + +#: g10/sig-check.c:237 +#, c-format +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "POZNÁMKA: podpisovému klíèi %08lX skonèila platnost %s\n" + +#: g10/sig-check.c:318 +msgid "assuming bad signature due to an unknown critical bit\n" +msgstr "pøedpokládám ¹patný podpis, proto¾e je nastaven neznámý kritický bit\n" + +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"VAROVÁNÍ: nemohu %%-expandovat URL politiky (pøíli¹ dlouhé). Pou¾ity " +"neexpandované.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "kontrola vytvoøeného podpisu se nepodaøila: %s\n" + +#: g10/sign.c:283 +#, c-format +msgid "%s signature from: %s\n" +msgstr "%s podpis od: %s\n" + +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "VAROVÁNÍ: soubor `%s' je prázdný\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "v módu --pgp2 mù¾ete pouze podepisovat s klíèi formátu PGP-2.x\n" + +#: g10/sign.c:643 g10/sign.c:812 +#, c-format +msgid "can't create %s: %s\n" +msgstr "%s: nemohu vytvoøit: %s\n" + +#: g10/sign.c:704 +msgid "signing:" +msgstr "podepisuji:" + +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"v módu --pgp2 mù¾ete vytváøet jen èitelné podpisy s klíèi formátu PGP-2.x\n" + +#: g10/sign.c:953 +#, c-format +msgid "%s encryption will be used\n" +msgstr "bude pou¾ito ¹ifrování %s\n" + +#: g10/textfilter.c:134 +#, c-format +msgid "can't handle text lines longer than %d characters\n" +msgstr "nemohu pracovat s øádky del¹ími ne¾ %d znakù\n" + +#: g10/textfilter.c:231 +#, c-format +msgid "input line longer than %d characters\n" +msgstr "vstupní øádek je del¹í ne¾ %d znakù\n" + +#: g10/tdbio.c:121 g10/tdbio.c:1382 +#, c-format +msgid "trustdb rec %lu: lseek failed: %s\n" +msgstr "záznam v databázi dùvìry %lu: lseek() se nepodaøil: %s\n" + +#: g10/tdbio.c:127 g10/tdbio.c:1389 +#, c-format +msgid "trustdb rec %lu: write failed (n=%d): %s\n" +msgstr "záznam v databázi dùvìry %lu: zápis se nepodaøil (n=%d): %s\n" + +#: g10/tdbio.c:237 +msgid "trustdb transaction too large\n" +msgstr "transakce s databází dùvìry je pøíli¹ dlouhá\n" + +#: g10/tdbio.c:454 +#, c-format +msgid "%s: can't access: %s\n" +msgstr "%s: nemohu pøistoupit k: %s\n" + +#: g10/tdbio.c:468 +#, c-format +msgid "%s: directory does not exist!\n" +msgstr "%s: adresáø neexistuje!\n" + +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 +#, c-format +msgid "%s: can't create lock\n" +msgstr "%s: nemohu vytvoøit zámek\n" + +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: nemohu zamknout\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: nemohu vytvoøit: %s\n" + +#: g10/tdbio.c:503 +#, c-format +msgid "%s: failed to create version record: %s" +msgstr "%s: nepodaøilo se vytvoøit záznam verze: %s" + +#: g10/tdbio.c:507 +#, c-format +msgid "%s: invalid trustdb created\n" +msgstr "%s: vytvoøena neplatná databáze dùvìry\n" + +#: g10/tdbio.c:510 +#, c-format +msgid "%s: trustdb created\n" +msgstr "%s: databáze dùvìry vytvoøena\n" + +#: g10/tdbio.c:565 +#, c-format +msgid "%s: invalid trustdb\n" +msgstr "%s: neplatná databáze dùvìry\n" + +#: g10/tdbio.c:597 +#, c-format +msgid "%s: failed to create hashtable: %s\n" +msgstr "%s: nepodaøilo se vytvoøit hashovací tabulku: %s\n" + +#: g10/tdbio.c:605 +#, c-format +msgid "%s: error updating version record: %s\n" +msgstr "%s: chyba pøi aktualizaci záznamu verze: %s\n" + +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 +#, c-format +msgid "%s: error reading version record: %s\n" +msgstr "%s: chyba pøi ètení záznamu verze: %s\n" + +#: g10/tdbio.c:634 g10/tdbio.c:680 +#, c-format +msgid "%s: error writing version record: %s\n" +msgstr "%s: chyba pøi zápisu záznamu verze: %s\n" + +#: g10/tdbio.c:1119 +#, c-format +msgid "trustdb: lseek failed: %s\n" +msgstr "databáze dùvìry: procedura lseek() selhala: %s\n" + +#: g10/tdbio.c:1127 +#, c-format +msgid "trustdb: read failed (n=%d): %s\n" +msgstr "databáze dùvìry: procedura read() (n=%d) selhala: %s\n" + +#: g10/tdbio.c:1148 +#, c-format +msgid "%s: not a trustdb file\n" +msgstr "%s: není soubor databáze dùvìry\n" + +#: g10/tdbio.c:1165 +#, c-format +msgid "%s: version record with recnum %lu\n" +msgstr "%s: záznam verze s èíslem %lu\n" + +#: g10/tdbio.c:1170 +#, c-format +msgid "%s: invalid file version %d\n" +msgstr "%s: neplatná verze souboru %d\n" + +#: g10/tdbio.c:1348 +#, c-format +msgid "%s: error reading free record: %s\n" +msgstr "%s: chyba pri ètení volného záznamu: %s\n" + +#: g10/tdbio.c:1356 +#, c-format +msgid "%s: error writing dir record: %s\n" +msgstr "%s: chyba pøi zápisu adresáøového záznamu: %s\n" + +#: g10/tdbio.c:1366 +#, c-format +msgid "%s: failed to zero a record: %s\n" +msgstr "%s: vynulování záznamu selhalo: %s\n" + +#: g10/tdbio.c:1396 +#, c-format +msgid "%s: failed to append a record: %s\n" +msgstr "%s: pøidání záznamu selhalo: %s\n" + +#: g10/tdbio.c:1441 +msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" +msgstr "databáze dùvìry je po¹kozena; prosím spus»te \"gpg --fix-trustdb\".\n" + +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' není platný dlouhý keyID\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "klíè %08lX: akceptován jako dùvìryhodný klíè\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "klíè %08lX se v databázi dùvìry vyskytuje více ne¾ jednou\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "" +"klíè %08lX: nenalezen veøejný klíè k dùvìryhodnému klíèi - pøeskoèeno\n" + +#: g10/trustdb.c:332 +#, c-format +msgid "trust record %lu, req type %d: read failed: %s\n" +msgstr "záznam dùvìry %lu, typ po¾. %d: ètení selhalo: %s\n" + +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "záznam dùvìry %lu není po¾adovaného typu %d\n" + +#: g10/trustdb.c:353 +#, c-format +msgid "trust record %lu, type %d: write failed: %s\n" +msgstr "záznam dùvìry %lu, typ %d: zápis selhal: %s\n" + +#: g10/trustdb.c:368 +#, c-format +msgid "trustdb: sync failed: %s\n" +msgstr "databáze dùvìry: synchronizace selhala %s\n" + +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "není nutné kontrolovat databázi dùvìry\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 +#, c-format +msgid "next trustdb check due at %s\n" +msgstr "dal¹í kontrolova databáze dùvìry v %s\n" + +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "kontroluji databázi dùvìry\n" + +#: g10/trustdb.c:933 +#, c-format +msgid "public key %08lX not found: %s\n" +msgstr "veøejný klíè %08lX nebyl nalezen: %s\n" + +#: g10/trustdb.c:1515 +#, c-format +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "veøejný klíè k absolutnì dùvìryhodnému klíèi %08lX nebyl nalezen\n" + +#: g10/trustdb.c:1593 +#, c-format +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "kontrola v hloubce %d podepsáno=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" + +#: g10/verify.c:108 +msgid "" +"the signature could not be verified.\n" +"Please remember that the signature file (.sig or .asc)\n" +"should be the first file given on the command line.\n" +msgstr "" +"podpis nebylo mo¾né ovìøit.\n" +"Prosím, nezapomeòte, ¾e soubor s podpisem (.sig nebo .asc)\n" +"by mìl být prvním souborem zadaným na pøíkazové øádce.\n" + +#: g10/verify.c:173 +#, c-format +msgid "input line %u too long or missing LF\n" +msgstr "vstupní øádek %u je pøíli¹ dlouhý nebo na konci chybí znak LF\n" + +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"klíè není oznaèen jako nedostateènì bezpeèný - nemohu jej pou¾ít s padìlaným " +"RNG!\n" + +#: g10/skclist.c:138 +#, c-format +msgid "skipped `%s': duplicated\n" +msgstr "pøeskoèen `%s': duplikován\n" + +#: g10/skclist.c:145 g10/skclist.c:153 +#, c-format +msgid "skipped `%s': %s\n" +msgstr "pøeskoèen `%s': %s\n" + +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "pøeskoèeno: tajný klíè je u¾ v databázi\n" + +#: g10/skclist.c:160 +#, c-format +msgid "" +"skipped `%s': this is a PGP generated ElGamal key which is not secure for " +"signatures!\n" +msgstr "" +"pøeskoèen `%s': toto je vygenerovaný PGP klíè podle algoritmu ElGamal,\n" +"podpisy vytvoøené tímto klíèem nejsou bezpeèné!\n" + +#. do not overwrite +#: g10/openfile.c:84 +#, c-format +msgid "File `%s' exists. " +msgstr "Soubor `%s' existuje. " + +#: g10/openfile.c:86 +msgid "Overwrite (y/N)? " +msgstr "Pøepsat (a/N)? " + +#: g10/openfile.c:119 +#, c-format +msgid "%s: unknown suffix\n" +msgstr "%s: neznámá pøípona\n" + +#: g10/openfile.c:141 +msgid "Enter new filename" +msgstr "Vlo¾te nový název souboru" + +#: g10/openfile.c:184 +msgid "writing to stdout\n" +msgstr "zapisuji do standardního výstupu\n" + +#: g10/openfile.c:273 +#, c-format +msgid "assuming signed data in `%s'\n" +msgstr "pøedpokládám podepsaná data v `%s'\n" + +#: g10/openfile.c:323 +#, c-format +msgid "%s: new options file created\n" +msgstr "%s: vytvoøen nový soubor s pøedvolbami\n" + +#: g10/openfile.c:350 +#, c-format +msgid "%s: can't create directory: %s\n" +msgstr "%s: nemohu vytvoøit adresáø: %s\n" + +#: g10/openfile.c:353 +#, c-format +msgid "%s: directory created\n" +msgstr "%s: adresáø vytvoøen\n" + +#: g10/openfile.c:355 +msgid "you have to start GnuPG again, so it can read the new options file\n" +msgstr "musíte znovu spustit GnuPG pro opìtovné naètení souboru pøedvoleb\n" + +#: g10/encr-data.c:91 +msgid "" +"WARNING: message was encrypted with a weak key in the symmetric cipher.\n" +msgstr "VAROVÁNÍ: zpráva byla za¹ifrována slabým klíèem v symetrické ¹iføe.\n" + +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problém se za¹ifrovaným paketem\n" + +#: g10/seskey.c:52 +msgid "weak key created - retrying\n" +msgstr "vytvoøen slabý klíè - zkou¹ím znovu\n" + +#: g10/seskey.c:57 +#, c-format +msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" +msgstr "" +"nemohu se vyvarovat slabého klíèe pro symetrickou ¹ifru; operaci jsem zkusil " +"%d krát!\n" + +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "DSA po¾aduje pou¾ití 160-ti bitového hashovacího algoritmu\n" + +#: g10/delkey.c:116 +msgid "can't do that in batchmode without \"--yes\"\n" +msgstr "bez parametru \"--yes\" to nemohu v dávkovém módu provést\n" + +#: g10/delkey.c:138 +msgid "Delete this key from the keyring? " +msgstr "Smazat tento klíè ze souboru klíèù? " + +#: g10/delkey.c:146 +msgid "This is a secret key! - really delete? " +msgstr "Toto je tajný klíè! - opravdu smazat? " + +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "smazání bloku klíèe se nezdaøilo: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "informace o dùvìryhodnosti vlastníka klíèe vymazány\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "existuje tajný klíè pro tento veøejný klíè \"%s\"!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "" +"abyste ho smazal(a), pou¾ijte nejprve parametr \"--delete-secret-key\".\n" + +#: g10/helptext.c:47 +msgid "" +"It's up to you to assign a value here; this value will never be exported\n" +"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" +"to do with the (implicitly created) web-of-certificates." +msgstr "" +"Je na Vás, abyste zde pøiøadil(a) hodnotu; tato hodnota nebude nikdy\n" +"exportována tøetí stranì. Potøebujeme ji k implementaci \"pavuèiny\n" +"dùvìry\"; nemá to nic spoleèného s (implicitnì vytvoøenou) \"pavuèinou\n" +"certifikátù\"." + +#: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Aby bylo mo¾né vybudovat pavuèinu dùvìry, musí GnuPG vìdìt, kterým klíèùm\n" +"dùvìøujete absolutnì - obvykle to jsou ty klíèe, pro nì¾ máte pøístup\n" +"k tajným klíèùm. Odpovìzte \"ano\", abyste nastavili tyto klíèe\n" +"jako absolutnì dùvìryhodné\n" + +#: g10/helptext.c:60 +msgid "If you want to use this revoked key anyway, answer \"yes\"." +msgstr "Pokud pøesto chcete pou¾ít tento revokovaný klíè, odpovìzte \"ano\"." + +#: g10/helptext.c:64 +msgid "If you want to use this untrusted key anyway, answer \"yes\"." +msgstr "" +"Pokud pøesto chcete pou¾ít tento nedùvìryhodný klíè, odpovìzte \"ano\"." + +#: g10/helptext.c:68 +msgid "" +"Enter the user ID of the addressee to whom you want to send the message." +msgstr "Vlo¾te identifikátor adresáta, kterému chcete poslat zprávu." + +#: g10/helptext.c:72 +msgid "" +"Select the algorithm to use.\n" +"\n" +"DSA (aka DSS) is the digital signature algorithm which can only be used\n" +"for signatures. This is the suggested algorithm because verification of\n" +"DSA signatures are much faster than those of ElGamal.\n" +"\n" +"ElGamal is an algorithm which can be used for signatures and encryption.\n" +"OpenPGP distinguishs between two flavors of this algorithms: an encrypt " +"only\n" +"and a sign+encrypt; actually it is the same, but some parameters must be\n" +"selected in a special way to create a safe key for signatures: this program\n" +"does this but other OpenPGP implementations are not required to understand\n" +"the signature+encryption flavor.\n" +"\n" +"The first (primary) key must always be a key which is capable of signing;\n" +"this is the reason why the encryption only ElGamal key is not available in\n" +"this menu." +msgstr "" +"Vyberte algoritmus.\n" +"\n" +"DSA (nazývaný také DSS) je algoritmus digitálního podpisu, který mù¾e být\n" +"pou¾itý pouze pro podpisy. Je to doporuèovaný algoritmus, proto¾e ovìøení\n" +"DSA podpisù je mnohem rychlej¹í ne¾ v algoritmu ElGamal.\n" +"\n" +"Algoritmus ElGamal mù¾e být pou¾íván jak pro podpisy tak pro ¹ifrování.\n" +"Standard OpenPGP rozli¹uje mezi dvìma re¾imy tohoto algoritmu:\n" +"pouze ¹ifrování a ¹ifrování+podpis; v podstatì je to stejné, ale nìkolik\n" +"parametrù musí být vybráno speciálním zpùsobem pro vytvoøení bezpeèného " +"klíèe\n" +"pro podpisy: tento program to umí, ale není vy¾adováno, aby i jiné\n" +"implementace OpenPGP pracovaly v re¾imu podpis+¹ifrování.\n" +"\n" +"První (primární) klíè musí být v¾dy klíè, který je schopný podepisovat;\n" +"to je dùvod, proè v tomto menu není k dispozi klíè algoritmu ElGamal\n" +"urèný pouze pro ¹ifrování." + +#: g10/helptext.c:92 +msgid "" +"Although these keys are defined in RFC2440 they are not suggested\n" +"because they are not supported by all programs and signatures created\n" +"with them are quite large and very slow to verify." +msgstr "" +"Aèkoli jsou tyto klíèe definovány v RFC2440, nejsou doporuèovány,\n" +"proto¾e nejsou podporovány v¹emi programy a podpisy jimi vytvoøené\n" +"jsou znaènì velké a pro ovìøení velmi pomalé." + +#: g10/helptext.c:99 +msgid "Enter the size of the key" +msgstr "Vlo¾te délku klíèe" + +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 +msgid "Answer \"yes\" or \"no\"" +msgstr "Odpovìzte \"ano\" nebo \"ne\"" + +#: g10/helptext.c:113 +msgid "" +"Enter the required value as shown in the prompt.\n" +"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" +"get a good error response - instead the system tries to interpret\n" +"the given value as an interval." +msgstr "" +"Vlo¾te po¾adovanou hodnotu tak, jak je uvedeno v pøíkazovém øádku.\n" +"Je mo¾né vlo¾it datum ve formátu ISO (RRRR-MM-DD), ale nedostanete\n" +"správnou chybovou hlá¹ku - místo toho systém zkusí interpretovat\n" +"zadanou hodnotu jako interval." + +#: g10/helptext.c:125 +msgid "Enter the name of the key holder" +msgstr "Vlo¾te jméno dr¾itele klíèe" + +#: g10/helptext.c:130 +msgid "please enter an optional but highly suggested email address" +msgstr "prosím, vlo¾te e-mailovou adresu (nepovinné, ale velmi doporuèované)" + +#: g10/helptext.c:134 +msgid "Please enter an optional comment" +msgstr "Prosím, vlo¾te nepovinný komentáø" + +#: g10/helptext.c:139 +msgid "" +"N to change the name.\n" +"C to change the comment.\n" +"E to change the email address.\n" +"O to continue with key generation.\n" +"Q to to quit the key generation." +msgstr "" +"N pro zmìnu názvu.\n" +"C pro zmìnu komentáøe.\n" +"E pro zmìnu e-mailové adresy.\n" +"O pro pokraèování generování klíèe.\n" +"Q pro ukonèení generování klíèe." + +#: g10/helptext.c:148 +msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." +msgstr "Jestli¾e chcete generovat podklíè, odpovìzte \"ano\" (nebo jen \"a\")." + +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Ne¾ podepí¹ete id u¾ivatele, mìli byste nejprve ovìøit, zda klíè\n" +"patøí osobì, její¾ jméno je uvedeno v identifikátoru u¾ivatele.\n" +"Je velmi u¾iteèné, kdy¾ ostatní vìdí, jak dùslednì jste provedl(a)\n" +"takové ovìøení.\n" +"\n" +"\"0\" znamená, ¾e neuvádíte, jak dùslednì jste pravost klíèe ovìøil(a) \n" +"\n" +"\"1\" znamená, ¾e vìøíte tomu, ¾e klíè patøí osobì, která je uvedena,\n" +" v u¾ivatelském ID, ale nemohl jste nebo jste neprovìøil tuto " +"skuteènost.\n" +" To je u¾iteèné pro \"osobní\" verifikaci, kdy¾ podepisujete klíèe, " +"které\n" +" pou¾ívají pseudonym u¾ivatele.\n" +"\n" +"\"2\" znamená, ¾e jste èásteènì ovìøil pravost klíèe. Napø. jste ovìøil\n" +" fingerprint klíèe a zkontroloval identifikátor u¾ivatele\n" +" uvedený na klíèi s fotografickým id.\n" +"\n" +"\"3\" Znamená, ¾e jste provedl velmi peèlivì ovìøení pravosti klíèe.\n" +" To mù¾e napøíklad znamenat, ¾e jste ovìøil fingerprint klíèe \n" +" jeho vlastníka osobnì a dále jste pomocí obtí¾nì padìlatelného \n" +" dokumentu s fotografií (napøíklad pasu) ovìøil, ¾e jméno majitele\n" +" klíèe se shoduje se jménem uvedeným v u¾ivatelském ID a dále jste \n" +" ovìøil (výmìnou elektronických dopisù), ¾e elektronické adresa uvedená \n" +" v ID u¾ivatele patøí majiteli klíèe.\n" +"\n" +"Prosím nezapomeòte, ¾e pøíklady uvedené pro úroveò 2 a 3 jsou *pouze*\n" +"pøíklady.\n" +"Je jen na Va¹em rozhodnutí co \"èásteèné\" a \"peèlivé\" ovìøení znamená\n" +"kdy¾ budete podepisovat klíèe jiným u¾ivatelùm.\n" +"\n" +"Pokud nevíte, jaká je správná odpovìï, odpovìzte \"0\"." + +#: g10/helptext.c:194 +msgid "Answer \"yes\" is you want to sign ALL the user IDs" +msgstr "" +"Pokud chcete podepsat V©ECHNY identifikátory u¾ivatelù, odpovìzte \"ano\"" + +#: g10/helptext.c:198 +msgid "" +"Answer \"yes\" if you really want to delete this user ID.\n" +"All certificates are then also lost!" +msgstr "" +"Pokud opravdu chcete smazat tento identifikátor u¾ivatele, odpovìzte \"ano" +"\".\n" +"V¹echny certifikáty budou také ztraceny!" + +#: g10/helptext.c:203 +msgid "Answer \"yes\" if it is okay to delete the subkey" +msgstr "Odpovìzte \"ano\", pokud chcete smazat podklíè" + +#: g10/helptext.c:208 +msgid "" +"This is a valid signature on the key; you normally don't want\n" +"to delete this signature because it may be important to establish a\n" +"trust connection to the key or another key certified by this key." +msgstr "" +"Toto je platný podpis klíèe; normálnì nechcete tento podpis smazat,\n" +"proto¾e mù¾e být dùle¾itý pøi vytváøení dùvìry klíèe nebo jiného klíèe\n" +"ceritifikovaného tímto klíèem." + +#: g10/helptext.c:213 +msgid "" +"This signature can't be checked because you don't have the\n" +"corresponding key. You should postpone its deletion until you\n" +"know which key was used because this signing key might establish\n" +"a trust connection through another already certified key." +msgstr "" +"Tento podpis nemù¾e být ovìøen, proto¾e nemáte odpovídající veøejný klíè.\n" +"Jeho smazání byste mìl(a) odlo¾it do doby, ne¾ budete znát, který klíè\n" +"byl pou¾it, proto¾e tento podpisovací klíè mù¾e vytvoøit dùvìru\n" +"prostøednictvím jiného ji¾ certifikovaného klíèe." + +#: g10/helptext.c:219 +msgid "" +"The signature is not valid. It does make sense to remove it from\n" +"your keyring." +msgstr "Podpis je neplatný. Je rozumné ho odstranit z Va¹eho souboru klíèù." + +#: g10/helptext.c:223 +msgid "" +"This is a signature which binds the user ID to the key. It is\n" +"usually not a good idea to remove such a signature. Actually\n" +"GnuPG might not be able to use this key anymore. So do this\n" +"only if this self-signature is for some reason not valid and\n" +"a second one is available." +msgstr "" +"Toto je podpis, který vá¾e identifikátor u¾ivatele ke klíèi. Obvykle\n" +"není dobré takový podpis odstranit. GnuPG nemù¾e tento klíè nadále\n" +"pou¾ívat. Udìlejte to jenom v pøípadì, kdy je tento podpis klíèe\n" +"jím samým z nìjakého dùvodu neplatný a kdy je k dipozici klíè jiný." + +#: g10/helptext.c:231 +msgid "" +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" +"Zmìnit pøedvolby pro v¹echny u¾ivatelské ID (nebo pouze pro oznaèené)\n" +"na aktuální seznam pøedvoleb. Èasová razítka v¹ech dotèených podpisù\n" +"klíèù jimi samotnými budou posunuty o jednu vteøinu dopøedu.\n" + +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Prosím, vlo¾te heslo; toto je tajná vìta \n" + +#: g10/helptext.c:244 +msgid "Please repeat the last passphrase, so you are sure what you typed in." +msgstr "" +"Prosím, zopakujte poslední heslo, abyste si byl(a) jistý(á), co jste napsal" +"(a)." + +#: g10/helptext.c:248 +msgid "Give the name of the file to which the signature applies" +msgstr "Zadejte název souboru, ke kterému se podpis vztahuje" + +#: g10/helptext.c:253 +msgid "Answer \"yes\" if it is okay to overwrite the file" +msgstr "Pokud si pøejete pøepsání souboru, odpovìzte \"ano\"" + +#: g10/helptext.c:258 +msgid "" +"Please enter a new filename. If you just hit RETURN the default\n" +"file (which is shown in brackets) will be used." +msgstr "" +"Prosím, vlo¾te nový název souboru. Pokud pouze stisknete RETURN, bude\n" +"pou¾it implicitní soubor (který je ukázán v závorkách)." + +#: g10/helptext.c:264 +msgid "" +"You should specify a reason for the certification. Depending on the\n" +"context you have the ability to choose from this list:\n" +" \"Key has been compromised\"\n" +" Use this if you have a reason to believe that unauthorized persons\n" +" got access to your secret key.\n" +" \"Key is superseded\"\n" +" Use this if you have replaced this key with a newer one.\n" +" \"Key is no longer used\"\n" +" Use this if you have retired this key.\n" +" \"User ID is no longer valid\"\n" +" Use this to state that the user ID should not longer be used;\n" +" this is normally used to mark an email address invalid.\n" +msgstr "" +"Mìl(a) byste specifikovat dùvod certifikace. V závislosti na kontextu\n" +"máte mo¾nost si vybrat ze seznamu:\n" +" \"Klíè byl kompromitován\"\n" +" Toto pou¾ijte, pokud si myslíte, ¾e k Va¹emu tajnému klíèi získaly\n" +" pøístup neoprávnìné osoby.\n" +" \"Klíè je nahrazen\"\n" +" Toto pou¾ijte, pokud jste tento klíè nahradil(a) novìj¹ím klíèem.\n" +" \"Klíè se ji¾ nepou¾ívá\"\n" +" Toto pou¾ijte, pokud tento klíè ji¾ nepou¾íváte.\n" +" \"Identifikátor u¾ivatele u¾ není platný\"\n" +" Toto pou¾ijte, pokud by se identifikátor u¾ivatele u¾ nemìl pou¾ívat;\n" +" normálnì se pou¾ívá k oznaèení neplatné e-mailové adresy.\n" + +#: g10/helptext.c:280 +msgid "" +"If you like, you can enter a text describing why you issue this\n" +"revocation certificate. Please keep this text concise.\n" +"An empty line ends the text.\n" +msgstr "" +"Pokud chcete, mù¾ete vlo¾it text popisující pùvod vzniku tohoto revokaèního\n" +"ceritifikátu. Prosím, struènì. \n" +"Text konèí prázdným øádkem.\n" + +#: g10/helptext.c:295 +msgid "No help available" +msgstr "Pomoc není k dispozici" + +#: g10/helptext.c:303 +#, c-format +msgid "No help available for `%s'" +msgstr "Pomoc není dostupná pro '%s'" + +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "chyba pøi vytváøení souboru klíèù (keyring)`%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "zmìna u¾ivatelských oprávnìní `%s' selhala: %s\n" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "soubor klíèù (keyring) `%s' vytvoøen\n" + +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "selhalo obnovení vyrovnávací pamìti klíèù: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "VAROVÁNÍ: Existují dva soubory s tajnými informacemi.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s je beze zmìny\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s je nový\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Prosím, opravte tento mo¾ný bezpeènostní problém\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "kontroluji soubor klíèù (keyring) `%s'\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu klíèù ji¾ zkontrolováno (%lu podpisù)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu klíèù zkontrolován (%lu podpisù)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: soubor klíèù (keyring) vytvoøen\n" diff --git a/po/da.po b/po/da.po index d29dc2452..3129218f2 100644 --- a/po/da.po +++ b/po/da.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 1.0.0h\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" "PO-Revision-Date: 2000-03-07 22:51+01:00\n" "Last-Translator: Birger Langkjer \n" "Language-Team: Danish \n" @@ -15,289 +15,320 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Advarsel: benytter ubeskyttet hukommelse!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "operation er ikke mulig uden beskyttet hukommelse indlæst\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(du kan have brugt et forkert program til denne opgave)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "ja" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "jJ" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "n" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "afslut" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "aA" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "generel fejl" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "ukendt pakketype" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "ukendt version" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "ukendt offentlig nøglealgoritme" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "ukendt sammenfatningsalgoritme" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "dårlig offentlig nøgle" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "dårlig hemmelig nøgle" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "dårlig signatur" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "tjeksumsfejl" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "dårlig kodesætning" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "offentlig nøgle ikke fundet" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "ukendt cifferalgoritme " -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "kan ikke åbne nøgleringen" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "ugyldig pakke" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "ugyldig rustning" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "ikke-eksisterende bruger id" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "hemmelig nøgle ikke tilgængelig" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "forkert hemmelig nøgle brugt" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "ikke understøttet" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "dårlig nøgle" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "fillæsningsfejl" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "filskrivningsfejl" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "ukendt kompressionsalgoritme" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "filåbningsfejl" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "filoprettelsesfejl" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "ugyldig kodesætning" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "uimplementeret offentlig nøglealgoritme" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "uimplementeret cifferalgoritme" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "ukendt signaturklasse" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "tillidsdatabasefejl" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "dårlig mpi" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "resursegrænse" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "ugyldig nøglering" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "ugyldigt certifikat" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "dårlig bruger-id" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "fillukningsfejl" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "filomdøbningsfejl" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "filsletningsfejl" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "uforventet data" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "tidsstempelkonflikt" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "uanvendelig offentlig nøglealgoritme" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "fil eksisterer" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "svag nøgle" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "ugyldigt argument" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "ugyldig URI" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "ikke-understøttet URI" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "netværksfejl" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "ikke krypteret" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "ikke bearbejdet" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +#, fuzzy +msgid "unusable public key" +msgstr "dårlig offentlig nøgle" + +#: util/errors.c:106 +#, fuzzy +msgid "unusable secret key" +msgstr "dårlig hemmelig nøgle" + +#: util/errors.c:107 +#, fuzzy +msgid "keyserver error" +msgstr "generel fejl" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dette er en fejl (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "du fandt en fejl ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "kan ikke åbne '%s': %s\n" -#: cipher/random.c:325 +#: cipher/random.c:324 #, fuzzy, c-format msgid "can't stat `%s': %s\n" msgstr "kan ikke åbne '%s': %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" msgstr "" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" -#: cipher/random.c:349 +#: cipher/random.c:348 #, fuzzy, c-format msgid "can't read `%s': %s\n" msgstr "kan ikke åbne '%s': %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" msgstr "" -#: cipher/random.c:407 +#: cipher/random.c:406 #, fuzzy, c-format msgid "can't create `%s': %s\n" msgstr "kan ikke oprette %s: %s\n" -#: cipher/random.c:414 +#: cipher/random.c:413 #, fuzzy, c-format msgid "can't write `%s': %s\n" msgstr "kan ikke åbne '%s': %s\n" -#: cipher/random.c:417 +#: cipher/random.c:416 #, fuzzy, c-format msgid "can't close `%s': %s\n" msgstr "kan ikke åbne '%s': %s\n" -#: cipher/random.c:428 -#, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" - -#: cipher/random.c:659 +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "ADVARSEL: bruger usikker tilfældig-nummer-generator!!!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -311,7 +342,7 @@ msgstr "" "BENYT IKKE DATA GENERERET AF DETTE PROGRAM!!!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -322,19 +353,7 @@ msgstr "" "Ikke nok tilfældige byte tilgængelig. Please do some other work to give\n" "the OS a chance to collect more entropy! (Kræver %d byte mere)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Advarsel: benytter ubeskyttet hukommelse!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "operation er ikke mulig uden beskyttet hukommelse indlæst\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(du kan have brugt et forkert program til denne opgave)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -342,139 +361,170 @@ msgstr "" "@Kommandoer:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[filer]|opret en signatur" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[filer]|opret rentekst signatur" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "opret en separat signatur" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "kryptér data" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "kryptér kun med symmetriske cifre" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "gem kun" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "afkryptér data (standard)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "godkend en signatur" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "vis nøgler" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "vis nøgler og signaturer" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "tjek nøglesignaturer" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "vis nøgle og fingeraftryk" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "vis hemmelige nøgler" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "generér et nyt nøglepar" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" +#: g10/g10.c:307 +#, fuzzy +msgid "remove keys from the public keyring" msgstr "fjern nøgle fra den offentlige nøglering" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" +#: g10/g10.c:309 +#, fuzzy +msgid "remove keys from the secret keyring" msgstr "fjern nøgle fra den hemmelige nøglering" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "signér en nøgle" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "signér en nøgle lokalt" -#: g10/gpg.c:224 +#: g10/g10.c:312 +#, fuzzy +msgid "sign a key non-revocably" +msgstr "signér en nøgle lokalt" + +#: g10/g10.c:313 +#, fuzzy +msgid "sign a key locally and non-revocably" +msgstr "signér en nøgle lokalt" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "signér eller redigér en nøgle" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "Generér en annullérbar certifikat" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "eksportér nøgler" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "eksportér nøgler til en nøgletjener" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "importér nøgler fra en nøgleserver" -#: g10/gpg.c:232 +#: g10/g10.c:320 +#, fuzzy +msgid "search for keys on a key server" +msgstr "eksportér nøgler til en nøgletjener" + +#: g10/g10.c:322 +#, fuzzy +msgid "update all keys from a keyserver" +msgstr "importér nøgler fra en nøgleserver" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "importér/fusionér nøgler" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "vis kun pakkesekvensen" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "eksportér ejertillidsværdierne" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importér ejertillidsværdierne" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "opdatér tillidsdatabasen" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NAMES]|tjek tillidsdatabasen" +#: g10/g10.c:336 +#, fuzzy +msgid "unattended trust database update" +msgstr "opdatér tillidsdatabasen" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "reparér en ødelagt tillidsdatabase" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "De-beskydt en fil el. stdin" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "Beskydt en fil el. stdin" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [filer]|print meddelelsesresumé" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -484,162 +534,208 @@ msgstr "" "Indstillinger:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "opret ascii beskyttet uddata" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NAME|kryptér for NAME" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NAME|brug NAME som standard modtager" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "brug standard nøglen som standard modtager" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "brug denne bruger-id til at signere eller dekryptere" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|sæt kompresningsniveau N (0 = slået fra)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "brug kanonisk tekstmodus" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "brug som uddatafil" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "meddelsom" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "vær mere stille" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "brug overhovedet ikke terminalen" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "tving v3 signaturer" -#: g10/gpg.c:275 +#: g10/g10.c:376 +#, fuzzy +msgid "do not force v3 signatures" +msgstr "tving v3 signaturer" + +#: g10/g10.c:377 +#, fuzzy +msgid "force v4 key signatures" +msgstr "tving v3 signaturer" + +#: g10/g10.c:378 +#, fuzzy +msgid "do not force v4 key signatures" +msgstr "tving v3 signaturer" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "brug altid en MDC for kryptering" -#: g10/gpg.c:276 +#: g10/g10.c:381 +#, fuzzy +msgid "never use a MDC for encryption" +msgstr "brug altid en MDC for kryptering" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "lav ingen ændringer" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" msgstr "" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "kørselsmodus: spørg aldrig" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "forvent ja til de fleste sprøgsmål" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "forvent nej til de fleste sprøgsmål" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "tilføj denne nøglering til nøgleringslisten" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "tilføj denne hemmeligenøglering til listen" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NAME|brug NAME som standard hemmelignøgle" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|brug denne nøgletjener til at slå nøgler op" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NAME|sæt terminal karaktersæt til NAME" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "læs indstillinger fra fil" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "|FD|skriv statusinfo til denne FD" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" +#: g10/g10.c:404 +#, fuzzy +msgid "|[file]|write status info to file" +msgstr "|FD|skriv statusinfo til denne FD" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" msgstr "" -#: g10/gpg.c:297 +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|FILE|indlæs udvidelsesmodul FILE" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "emulér modusen beskrevet i RFC1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "sæt alle pakker, cifre og resumé flag til OpenPGP standard" -#: g10/gpg.c:300 +#: g10/g10.c:414 +#, fuzzy +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "sæt alle pakker, cifre og resumé flag til OpenPGP standard" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|brug pasfrasemodus N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NAME|brug meddelelses resuméalgoritme NAME for pasfrase" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NAME|brug cifrealgoritme NAME for pasfrase" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAME|brug cifferalgoritme NAME" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAME|brug meddelelsesresumé algoritme NAME" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|brug kompresalgoritme N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NAME=VALUE|brug denne notationsdata" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -659,16 +755,16 @@ msgstr "" " --list-keys [navne] vis nøgler\n" " --fingerprint [navne] vis fingeraftryk\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "Rapportér venligst fejl til .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Brug: gpg [flag] [filer] (-h for hjælp)" # Skal alt dette oversættes eller er det flagene? -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -678,7 +774,7 @@ msgstr "" "sign, check, encrypt eller decrypt\n" "standard operation afhænger af inddata\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -686,436 +782,495 @@ msgstr "" "\n" "Understøttede algoritmer:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "brug: gpg [flag] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "konfliktende kommandoer\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTITS: ingen standard alternativfil '%s'\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "alternativfil`%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "læser indstillinger fra `%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s er ikke et gyldigt tegnsæt\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "ADVARSEL: '%s' er en tom fil\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTITS: %s er ikke til normal brug!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s ikke tilladt med %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s er meningsløs sammen med %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "valgte cifferalgoritme er ugyldig\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "valgte resuméalgoritme er ugyldig\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" +#: g10/g10.c:1492 +#, fuzzy +msgid "the given signature policy URL is invalid\n" msgstr "den givne politik-URL er ugyldig\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +#, fuzzy +msgid "the given certification policy URL is invalid\n" +msgstr "den givne politik-URL er ugyldig\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTE: simpel S2K modus (0) frarådes på det skarpeste\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ugyldig S2K modus; skal være 0, 1 el. 3\n" +#: g10/g10.c:1516 +#, fuzzy +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "ugyldig S2K modus; skal være 0, 1 el. 3\n" + +#: g10/g10.c:1519 +#, fuzzy +msgid "invalid preferences\n" +msgstr "vis præferencer" + # er det klogt at oversætte TrustDB? -#: g10/gpg.c:1171 +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "kunne ikke initialisere TillidsDB: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [filnavn (som gemmes)]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [filnavn]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [filnavn (som krypteres)]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [filnavn (som signeres)]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [filnavn]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +#, fuzzy +msgid "--sign --symmetric [filename]" +msgstr "--symmetric [filnavn]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [filnavn]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [filnavn (som dekrypteres)]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key bruger-id" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key bruger-id" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +#, fuzzy +msgid "--nrsign-key user-id" +msgstr "--sign-key bruger-id" + +#: g10/g10.c:1754 +#, fuzzy +msgid "--nrlsign-key user-id" +msgstr "--sign-key bruger-id" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key bruger-id [kommandoer]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key bruger-id" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key bruger-id" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "kan ikke åbne %s: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [bruger-id] [nøglering]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "fjernelse af beskyttelse fejlede: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "påklædning af beskyttelse fejlede: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "ugyldig hash-algoritme `%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[filnavn]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Gå til sagen og skriv meddelelsen ...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "kan ikke åbne `%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "første bogstav af en notationsnavn skal være et bogstave eller en " "understregning\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "en notationsværdi må ikke bruge nogen kontroltegn\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "panser: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "ugyldigt panserhoved: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "panserhoved: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "" -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "uforventet beskyttelse:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "ugyldigt radix64 tegn %02x udeladt\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "for tidlig eof (ingen CRC)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "for tidlig eof (i CRC)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "dårlig CRC\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "CRC fejl; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "for tidlig eof (i trailer)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "fejl i trailerlinie\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "ingen gyldig OpenPGP data fundet.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "ugyldigt panser: linie længere end %d tegn\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "quoted printable-tegn i panser - måske pga. en fejlbehæftet MTA\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Fingeraftryk:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Fingeraftryk:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" msgstr "" -#: g10/pkclist.c:119 +#: g10/pkclist.c:63 #, fuzzy -msgid "Key is superseeded" +msgid "Key is superseded" msgstr "Nøglen er beskyttet.\n" -#: g10/pkclist.c:121 +#: g10/pkclist.c:65 msgid "Key has been compromised" msgstr "" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" msgstr "" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" msgstr "" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " msgstr "" -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " msgstr "" #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "" -#: g10/pkclist.c:308 -#, c-format +#: g10/pkclist.c:258 +#, fuzzy, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" "Ingen tillidsværdi tildelt til %lu:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr "" + +#: g10/pkclist.c:274 +#, fuzzy, c-format +msgid " %d = I do NOT trust\n" +msgstr "%08lX: Vi stoler IKKE på denne nøgle\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr "" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr "" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr "" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr "" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = tilbage til hovedmenu\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr "" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = afslut\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Dit valg? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +#, fuzzy +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Vil du virkelig gerne gøre dette?" + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "Ingen tillidsværdier er ændret.\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "nøgle %08lX: nøgle er blevet annulleret!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Brug denne nøgle alligevel? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "nøgle %08lX: undernøgle er blevet annulleret!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: nøgle er udløbet\n" -#: g10/pkclist.c:519 -#, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: ignen info til at udregne en tillidssandsynlighed\n" +#: g10/pkclist.c:442 +#, fuzzy, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr " Intet tyder på at denne signatur tilhører ejeren.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: Vi stoler IKKE på denne nøgle\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" "but it is accepted anyway\n" msgstr "" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Denne nøgle tilhører sikkert ejeren\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Denne nøgle tilhører os\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1123,169 +1278,196 @@ msgid "" "\n" msgstr "" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "ADVARSEL: Bruger nøgle uden tillid!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ADVARSEL: Denne nøgle er blevet annulleret af dets ejer!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Dette kan betyde at signaturen er forfalsket.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ADVARSEL: Denne undernøgle er blevet tilbagekaldt af dens ejer!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +#, fuzzy +msgid "Note: This key has been disabled.\n" +msgstr "Bemærk: Denne nøgle er forældet!\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Bemærk: Denne nøgle er forældet!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Intet tyder på at denne signatur tilhører ejeren.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "ADVARSEL: Vi tror IKKE på denne nøgle!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " Signaturen er formentlig FORFALSKET.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Det er ikke sikkert at signaturen tilhører ejeren.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: udelod: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: udelod: offentlig nøgle er allerede tilstede\n" -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" +#: g10/pkclist.c:752 +#, fuzzy +msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Du angav ikke en bruger-id. (du kan bruge \"-r\")\n" "\n" -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Indtast bruger-id: " +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Ingen sådan bruger-id.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "udeladt: offentlig nøgle er allerede valgt som standard modtager\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "Offentlig nøgle er slået fra.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "udeladt: offentlig nøgle er allerede valgt med --encrypt-to\n" +#: g10/pkclist.c:806 +#, fuzzy +msgid "skipped: public key already set\n" +msgstr "%s: udelod: offentlig nøgle er allerede tilstede\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "ukendt standard modtager '%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: fejl ved undersøgelse af nøgle: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: udelod: offentlignøgle er slået fra\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "ingen gyldige adresser\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "" + +#: g10/keygen.c:192 +#, fuzzy, c-format +msgid "too many `%c' preferences\n" +msgstr "vis præferencer" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "Ugyldige bogstaver i navn\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "skriver selvsignatur\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 #, fuzzy, c-format msgid "keysize invalid; using %u bits\n" msgstr "Ønsket nøglestørrelse er %u bit\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 #, fuzzy, c-format msgid "keysize rounded up to %u bits\n" msgstr "rundet op til %u bit\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Vælg venligst hvilken slags nøgle du vil have:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA og ElGamal (standard)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (signér kun)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (kryptér kun)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (signér og kryptér)\n" -#: g10/keygen.c:643 +#: g10/keygen.c:784 #, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (signér og kryptér)\n" +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) DSA (signér kun)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, fuzzy, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) ElGamal (kryptér kun)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Dit valg? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Vil du gerne oprette en underskrivnings- og krypteringsnøgle? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "" -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Ugyldigt valg.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1294,20 +1476,20 @@ msgid "" " highest suggested keysize is 2048 bits\n" msgstr "" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Hvilken nøglestørrelse ønsker du? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA tillader kun nøglestørrelser fra 512 til 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" +#: g10/keygen.c:852 +msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" msgstr "" -#: g10/keygen.c:708 -msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "" #. It is ridiculous and an annoyance to use larger key sizes! @@ -1318,42 +1500,38 @@ msgstr "" #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "" - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Ønsket nøglestørrelse er %u bit\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "rundet op til %u bit\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1363,36 +1541,52 @@ msgid "" " y = key expires in n years\n" msgstr "" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "Nøgle er gyldig for? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +#, fuzzy +msgid "Signature is valid for? (0) " +msgstr "Nøgle er gyldig for? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "ugyldig værdi\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" +#: g10/keygen.c:985 +#, fuzzy, c-format +msgid "%s does not expire at all\n" msgstr "Nøglen udløber aldrig\n" #. print the date when the key expires -#: g10/keygen.c:828 -#, c-format -msgid "Key expires at %s\n" +#: g10/keygen.c:992 +#, fuzzy, c-format +msgid "%s expires at %s\n" msgstr "Nøgle udløber d. %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" # virker j automatisk istedetfor y? -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Er dette korrekt (j/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1402,44 +1596,44 @@ msgid "" "\n" msgstr "" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Rigtige navn: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Ugyldige bogstaver i navn\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Navn må ikke starte med et tal\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Navn skal være mindst 5 bogstaver langt\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Epostadresse: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Ikke en gyldig epostadresse\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Kommentar: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Ugyldigt tegn i kommentar\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Du bruger '%s' tegnsættet.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1450,28 +1644,28 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" -#: g10/keygen.c:986 +#: g10/keygen.c:1151 #, fuzzy msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Ændr (N)avn, (K)ommentar, (E)post eller (O)kay/(Q)vit? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Ændr (N)avn, (K)ommentar, (E)post eller (O)kay/(Q)vit? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" msgstr "" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1479,11 +1673,17 @@ msgstr "" "Du skal bruge en kodesætning til at beskytte din hemmelige nøgle.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +#, fuzzy +msgid "passphrase not correctly repeated; try again" msgstr "kodesætningen blev ikke ordentlig gentaget; prøv igen.\n" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1491,7 +1691,7 @@ msgid "" "\n" msgstr "" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1499,349 +1699,428 @@ msgid "" "generator a better chance to gain enough entropy.\n" msgstr "" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "DSA nøglepar vil have 1024 bit.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Nøgleoprettelse annulleret.\n" -#: g10/keygen.c:1668 +#: g10/keygen.c:1883 g10/keygen.c:1963 #, fuzzy, c-format msgid "writing public key to `%s'\n" msgstr "skriver offentligt certifikat til '%s'\n" -#: g10/keygen.c:1669 +#: g10/keygen.c:1884 g10/keygen.c:1965 #, fuzzy, c-format msgid "writing secret key to `%s'\n" msgstr "skriver hemmeligt certifikat til '%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, fuzzy, c-format +msgid "no writable public keyring found: %s\n" +msgstr "nøgle %08lX: offentlig nøgle ikke fundet: %s\n" + +#: g10/keygen.c:1958 +#, fuzzy, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "skriver hemmeligt certifikat til '%s'\n" + +#: g10/keygen.c:1972 +#, fuzzy, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "fejl ved skrivning af nøglering `%s': %s\n" + +#: g10/keygen.c:1979 +#, fuzzy, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "fejl ved skrivning af nøglering `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "offentlig og hemmelig nøgle oprettet og signeret.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" msgstr "" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Vil du virkelig oprette?" -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: kan ikke åbne: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "fejl ved oprettelse af kodesætning: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: ADVARSEL: tom fil\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "læser fra '%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s krypteret for: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 -#, c-format -msgid "%s: user not found: %s\n" +#: g10/delkey.c:69 g10/export.c:141 +#, fuzzy, c-format +msgid "key `%s' not found: %s\n" msgstr "%s: bruger ikke fundet: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, fuzzy, c-format +msgid "error reading keyblock: %s\n" +msgstr "fejl ved læsning af '%s': %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n" -#: g10/export.c:175 +#: g10/export.c:180 #, fuzzy, c-format msgid "key %08lX: not protected - skipped\n" msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, fuzzy, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "ADVARSEL: intet blev eksporteret\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +#, fuzzy +msgid "[User id not found]" +msgstr "[bruger ikke fundet]" + +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" msgstr "" -#: g10/getkey.c:2189 +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "bruger sekundær nøgle %08lX istedetfor primær nøgle %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: bruger ikke fundet\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "sprang over blok af typen %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu nøgler behandlet indtil nu\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "fejl ved læsning af '%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr "Totalt antal behandlede: %lu\n" -#: g10/import.c:206 +#: g10/import.c:232 #, fuzzy, c-format msgid " skipped new keys: %lu\n" msgstr " nye undernøgler: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr "" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " importerede: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " uændrede: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " nye bruger-id'er: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " nye undernøgler: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " nye signaturer: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr " nye nøgletilbagekald: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " hemmelige nøgler læst: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr "hemmelige nøgler import: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "hemmelige nøgler uændre: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "nøgle %08lX: ingen bruger-id\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "nøgle %08lX: ingen gyldige bruger-id'er\n" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "nøgle %08lX: ingen gyldige bruger-id'er\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "nøgle %08lX: offentlig nøgle ikke fundet: %s\n" -#: g10/import.c:421 +#: g10/import.c:479 #, fuzzy, c-format msgid "key %08lX: new key - skipped\n" msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, fuzzy, c-format +msgid "no writable keyring found: %s\n" +msgstr "fejl ved skrivning af nøglering `%s': %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "skriver til `%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "fejl ved skrivning af nøglering `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "nøgle %08lX: offentlig nøgle importeret\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "nøgle %08lX: stemmer ikke med vores kopi\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "nøgle %08lX: kan ikke lokalisere original nøgleblok: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "nøgle %08lX: kan ikke læse original nøgleblok: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "" -#: g10/import.c:581 +#: g10/import.c:671 +#, fuzzy, c-format +msgid "no default secret keyring: %s\n" +msgstr "ingen standard offentlig nøglering\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "" -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" -msgstr "" +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "nøgle %08lX: offentlig nøgle ikke fundet: %s\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" -msgstr "" +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "nøgle %08lX: ingen gyldige bruger-id'er\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "" @@ -1850,758 +2129,1154 @@ msgstr "" #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "" -#: g10/import.c:1130 g10/import.c:1183 -#, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "" +#: g10/import.c:1231 +#, fuzzy, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "nøgle %08lX: offentlig nøgle importeret\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[selv-signatur]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 dårlig signature\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d dårlige signaturer\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 -#, c-format -msgid "Already signed by key %08lX\n" +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Nøglen er beskyttet.\n" + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +#, fuzzy +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" msgstr "" -#: g10/keyedit.c:319 +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +#, fuzzy +msgid "This key has expired!" +msgstr "Bemærk: Denne nøgle er forældet!\n" + +#: g10/keyedit.c:440 +#, fuzzy, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Denne nøgle er ikke beskyttet.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "" + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr "" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr "" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr "" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr "" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 msgid "" -"The signature will be marked as non-exportable.\n" "\n" +"The signature will be marked as non-exportable.\n" msgstr "" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Vil du gerne signere? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "signering fejlede: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Denne nøgle er ikke beskyttet.\n" -#: g10/keyedit.c:426 +#: g10/keyedit.c:662 #, fuzzy msgid "Secret parts of primary key are not available.\n" msgstr "hemmelig nøgle ikke tilgængelig" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "Nøglen er beskyttet.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Kan ikke redigere denne nøgle: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Vil du virkelig gerne gøre dette?" -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "afslut denne menu" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "a" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "gem" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "gem og afslut" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "hjælp" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "vis denne hjælp" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "vis fingeraftryk" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "vis" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "vis nøgler og bruger-id'er" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "nøgle" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "vælg sekundær nøgle N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "tjek" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "vis signaturer" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "signér" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "signér nøglen" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsignér" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "signér nøglen lokalt" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +#, fuzzy +msgid "nrsign" +msgstr "signér" + +#: g10/keyedit.c:830 +#, fuzzy +msgid "sign the key non-revocably" +msgstr "signér nøglen lokalt" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "nrlsign" +msgstr "signér" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "sign the key locally and non-revocably" +msgstr "signér nøglen lokalt" + +#: g10/keyedit.c:832 msgid "debug" msgstr "aflus" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "tilføj-bid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "tilføj bruger-id" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "" + +#: g10/keyedit.c:834 +#, fuzzy +msgid "add a photo ID" +msgstr "tilføj bruger-id" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "sletbid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "slet bruger id" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "tilføj nøgle" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "tilføj sekundær nøgle" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "sletnøgle" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "slet sekundær nøgle" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "sletsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "slet signaturer" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "udløb" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "ændr udløbsdatoen" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "skift" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "skift imellem hemmelig og offentlig nøgle visning" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "s" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "præf" -#: g10/keyedit.c:600 -msgid "list preferences" +#: g10/keyedit.c:846 +#, fuzzy +msgid "list preferences (expert)" msgstr "vis præferencer" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +#, fuzzy +msgid "showpref" +msgstr "vispræf" + +#: g10/keyedit.c:847 +#, fuzzy +msgid "list preferences (verbose)" +msgstr "vis præferencer" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "setpref" +msgstr "præf" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "set preference list" +msgstr "vis præferencer" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updpref" +msgstr "præf" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updated preferences" +msgstr "vis præferencer" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "kodeord" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "ændr kodesætningen" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "betro" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "slåfra" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "slå nøgle fra" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "slåtil" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "slå nøgle til" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, fuzzy, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "fejl ved læsning af '%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "" -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" msgstr "" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "Nøglen er beskyttet.\n" + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "" -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" +msgid "This command is not allowed while in %s mode.\n" msgstr "" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "" -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "" -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "" -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "" -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "" -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "" -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "" + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "" + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Gem ændringer? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Afslut uden at gemme? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, fuzzy, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "ADVARSEL: Denne nøgle er blevet annulleret af dets ejer!\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr "" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" msgstr "" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" msgstr "" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "" -#: g10/keyedit.c:1116 +#: g10/keyedit.c:1539 #, fuzzy, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "nøgle %08lX: undernøgle er blevet annulleret!\n" +msgstr "rev! undernøgle er blevet annulleret! %s\n" -#: g10/keyedit.c:1119 +#: g10/keyedit.c:1542 #, fuzzy msgid "rev- faked revocation found\n" -msgstr " nye nøgletilbagekald: %lu\n" +msgstr "rev- forkert nøgletilbagekald\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" msgstr "" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "Slettede %d signatur.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +#, fuzzy +msgid "Please select exactly one user ID.\n" +msgstr "Vælg venligst hvilken slags nøgle du vil have:\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Ingen bruger-id med indeks %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Ingen sekundær nøgle med indeks %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "bruger-id: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" msgstr "" +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "Denne nøgle er ikke beskyttet.\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? " + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "Generér en annullérbar certifikat" + #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 +#: g10/keyedit.c:2504 #, c-format -msgid " signed by %08lX at %s\n" +msgid " signed by %08lX at %s%s%s\n" msgstr "" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr "" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" msgstr "" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " +msgstr "Generér en annullérbar certifikat" + +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "ugyldig rustning" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" -#: g10/keylist.c:178 -msgid "revoked" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +#, fuzzy +msgid "Signature policy: " +msgstr "%s signatur fra: %s\n" + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "" + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "" + +#: g10/keylist.c:216 +msgid "Keyring" msgstr "" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 +#: g10/keylist.c:423 g10/mainproc.c:856 #, fuzzy, c-format msgid " [expires: %s]" msgstr "Nøgle udløber d. %s\n" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Fingeraftryk:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Fingeraftryk:" + +#: g10/keylist.c:899 +#, fuzzy +msgid " Key fingerprint =" +msgstr " Fingeraftryk:" + +#: g10/encr-data.c:66 g10/mainproc.c:255 #, c-format -msgid "public key is %08lX\n" +msgid "%s encrypted data\n" msgstr "" -#: g10/mainproc.c:247 -msgid "public key encrypted data: good DEK\n" +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" msgstr "" #: g10/mainproc.c:280 #, c-format +msgid "public key is %08lX\n" +msgstr "" + +#: g10/mainproc.c:326 +msgid "public key encrypted data: good DEK\n" +msgstr "" + +#: g10/mainproc.c:378 +#, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, fuzzy, c-format +msgid "assuming %s encrypted data\n" +msgstr "kryptér data" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "" -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Politik: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +#, fuzzy +msgid "can't handle these multiple signatures\n" +msgstr "opret en separat signatur" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "DÅRLIG signatur fra \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +#, fuzzy +msgid "Expired signature from \"" +msgstr "God signatur fra \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "God signatur fra \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Kan ikke tjekke signatur: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +#, fuzzy +msgid "not a detached signature\n" +msgstr "opret en separat signatur" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "gammeldags (PGP 2.x) signatur\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "kan ikke slå core-dump fra: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" msgstr "" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "" -#: g10/hkp.c:158 g10/passphrase.c:223 +#: g10/passphrase.c:511 +#, fuzzy, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "valgte cifferalgoritme %d er ugyldig\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 #, fuzzy, c-format msgid "can't connect to `%s': %s\n" msgstr "kan ikke åbne '%s': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (hovednøgle-ID %08lX)" -#: g10/passphrase.c:294 +#: g10/passphrase.c:641 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" @@ -2609,58 +3284,54 @@ msgid "" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -#: g10/passphrase.c:315 +#: g10/passphrase.c:662 #, fuzzy msgid "Enter passphrase\n" msgstr "Indtast kodesætning: " -#: g10/passphrase.c:317 +#: g10/passphrase.c:664 #, fuzzy msgid "Repeat passphrase\n" msgstr "Gentag kodesætning: " -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" msgstr "" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" msgstr "" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" msgstr "" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" msgstr "" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Indtast kodesætning: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Gentag kodesætning: " @@ -2668,145 +3339,190 @@ msgstr "Gentag kodes msgid "data not saved; use option \"--output\" to save it\n" msgstr "" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, fuzzy, c-format +msgid "error creating `%s': %s\n" +msgstr "fejl ved læsning af '%s': %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" msgstr "" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "" -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "læser stdin ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "" -#: g10/pubkey-enc.c:216 +#: g10/pubkey-enc.c:177 #, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "valgte cifferalgoritme er ugyldig\n" +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "valgte cifferalgoritme %d er ugyldig\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "" -#: g10/pubkey-enc.c:261 +#: g10/pubkey-enc.c:242 #, c-format msgid "NOTE: secret key %08lX expired at %s\n" msgstr "" -#: g10/hkp.c:62 -#, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, fuzzy, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "importér nøgler fra en nøgleserver: %s\n" -#: g10/hkp.c:75 +#: g10/hkp.c:94 #, fuzzy, c-format msgid "can't get key from keyserver: %s\n" -msgstr "importér nøgler fra en nøgleserver" +msgstr "importér nøgler fra en nøgleserver: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s er ikke et gyldigt tegnsæt\n" - -#: g10/hkp.c:182 +#: g10/hkp.c:171 #, fuzzy, c-format msgid "error sending to `%s': %s\n" msgstr "fejl ved læsning af '%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" msgstr "" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" msgstr "" -#: g10/seckey-cert.c:89 +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "" + +#: g10/hkp.c:521 +#, fuzzy, c-format +msgid "can't search keyserver: %s\n" +msgstr "importér nøgler fra en nøgleserver: %s\n" + +#: g10/seckey-cert.c:53 #, fuzzy msgid "secret key parts are not available\n" msgstr "hemmelig nøgle ikke tilgængelig" -#: g10/seckey-cert.c:95 +#: g10/seckey-cert.c:59 +#, fuzzy, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "valgte cifferalgoritme %d er ugyldig\n" + +#: g10/seckey-cert.c:215 +#, fuzzy +msgid "Invalid passphrase; please try again" +msgstr "ugyldig kodesætning" + +#: g10/seckey-cert.c:216 #, c-format -msgid "protection algorithm %d is not supported\n" +msgid "%s ...\n" msgstr "" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "" - -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" +msgid "NOTE: signature key %08lX expired %s\n" msgstr "" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" + +#: g10/sign.c:274 +#, fuzzy, c-format +msgid "checking created signature failed: %s\n" +msgstr "Kan ikke tjekke signatur: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "%s signatur fra: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "ADVARSEL: '%s' er en tom fil\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "kan ikke oprette %s: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "signerer:" -#: g10/sign.c:583 +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:953 #, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "ADVARSEL: '%s' er en tom fil\n" +msgid "%s encryption will be used\n" +msgstr "" #: g10/textfilter.c:134 #, c-format @@ -2818,464 +3534,236 @@ msgstr "" msgid "input line longer than %d characters\n" msgstr "" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, fuzzy, c-format +msgid "%s: can't make lock\n" +msgstr "%s: kan ikke åbne: %s\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" -#: g10/trustdb.c:169 -#, c-format -msgid "trust record %lu, req type %d: read failed: %s\n" -msgstr "" - -#: g10/trustdb.c:184 -#, c-format -msgid "trust record %lu, type %d: write failed: %s\n" -msgstr "" - -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "" - -#: g10/trustdb.c:212 -#, c-format -msgid "trustdb: sync failed: %s\n" -msgstr "" - -#: g10/trustdb.c:377 -#, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "" - -#: g10/trustdb.c:384 -#, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "" - -#: g10/trustdb.c:389 -#, c-format -msgid "no primary key for LID %lu\n" -msgstr "" - -#: g10/trustdb.c:394 -#, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "" - -#: g10/trustdb.c:474 +#: g10/trustdb.c:200 #, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" +msgid "`%s' is not a valid long keyID\n" msgstr "%s er ikke et gyldigt tegnsæt\n" -#: g10/trustdb.c:502 +#: g10/trustdb.c:235 +#, fuzzy, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n" + +#: g10/trustdb.c:274 #, c-format -msgid "key %08lX: can't put it into the trustdb\n" +msgid "key %08lX occurs more than once in the trustdb\n" msgstr "" -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "" - -#: g10/trustdb.c:547 +#: g10/trustdb.c:290 #, fuzzy, c-format msgid "key %08lX: no public key for trusted key - skipped\n" msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n" -#: g10/trustdb.c:566 +#: g10/trustdb.c:332 #, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" +msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" -#: g10/trustdb.c:585 +#: g10/trustdb.c:338 #, c-format -msgid "key %08lX: secret and public key don't match\n" +msgid "trust record %lu is not of requested type %d\n" msgstr "" -#: g10/trustdb.c:598 +#: g10/trustdb.c:353 #, c-format -msgid "enumerate secret keys failed: %s\n" +msgid "trust record %lu, type %d: write failed: %s\n" msgstr "" -#: g10/trustdb.c:994 +#: g10/trustdb.c:368 #, c-format -msgid "key %08lX.%lu: Good subkey binding\n" +msgid "trustdb: sync failed: %s\n" msgstr "" -#: g10/trustdb.c:1000 g10/trustdb.c:1035 +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +msgid "next trustdb check due at %s\n" msgstr "" -#: g10/trustdb.c:1012 +#: g10/trustdb.c:779 +#, fuzzy +msgid "checking the trustdb\n" +msgstr "|[NAMES]|tjek tillidsdatabasen" + +#: g10/trustdb.c:933 +#, fuzzy, c-format +msgid "public key %08lX not found: %s\n" +msgstr "offentlig nøgle ikke fundet" + +#: g10/trustdb.c:1515 #, c-format -msgid "key %08lX.%lu: Valid key revocation\n" +msgid "public key of ultimately trusted key %08lX not found\n" msgstr "" -#: g10/trustdb.c:1018 +#: g10/trustdb.c:1593 #, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "" - -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Godt certifikat" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" -msgstr "" - -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "" -#: g10/ringedit.c:296 +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" +msgid "skipped `%s': duplicated\n" msgstr "" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +#, fuzzy +msgid "skipped: secret key already present\n" +msgstr "udelod: hemmelig nøgle er allerede tilstede\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3292,87 +3780,95 @@ msgstr "Fil `%s' eksisterer. " msgid "Overwrite (y/N)? " msgstr "Overskriv (j/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: ukendt suffiks\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Indtast nyt filnavn" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "skriver til stdout\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: kan ikke oprette mappe: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: mappe oprettet\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" msgstr "" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Slet denne nøgle fra nøgleringen? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "" +#: g10/delkey.c:156 +#, fuzzy, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "fjernelse af beskyttelse fejlede: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3381,19 +3877,27 @@ msgid "" msgstr "" #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "" -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3414,23 +3918,23 @@ msgid "" "this menu." msgstr "" -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" "with them are quite large and very slow to verify." msgstr "" -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Indtast nøglens størrelse" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Svar \"ja\" eller \"nej\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3438,19 +3942,19 @@ msgid "" "the given value as an interval." msgstr "" -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3459,32 +3963,73 @@ msgid "" "Q to to quit the key generation." msgstr "" -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3492,13 +4037,13 @@ msgid "" "a trust connection through another already certified key." msgstr "" -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3507,25 +4052,30 @@ msgid "" "a second one is available." msgstr "" -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" msgstr "" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Svar \"ja\" hvis det er ok at overskrive filen" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3533,14 +4083,14 @@ msgstr "" "Indtast et nyt filnavn. Hvis du bare trykker RETUR vil det\n" "forvalgte navn (som er vist i klammer) blive brugt." -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3549,25 +4099,159 @@ msgid "" " this is normally used to mark an email address invalid.\n" msgstr "" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Ingen hjælp tilgængelig" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Ingen hjælp tilgængelig for `%s'" +#: g10/keydb.c:177 +#, fuzzy, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "fejl ved skrivning af nøglering `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "" + +#: g10/keydb.c:587 +#, fuzzy, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "ingen standard offentlig nøglering\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "" + +#: g10/keyring.c:1337 +#, fuzzy, c-format +msgid "checking keyring `%s'\n" +msgstr "fejl ved skrivning af nøglering `%s': %s\n" + +#: g10/keyring.c:1368 +#, fuzzy, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu nøgler behandlet indtil nu\n" + +#: g10/keyring.c:1379 +#, fuzzy, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "vis nøgler og signaturer" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "" + +#, fuzzy +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? " + +#, fuzzy +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? " + +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "Vil du gerne signere? " + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key bruger-id" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key bruger-id" + +#, fuzzy +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key bruger-id" + +#~ msgid "Enter the user ID: " +#~ msgstr "Indtast bruger-id: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "udeladt: offentlig nøgle er allerede valgt med --encrypt-to\n" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "WARNING: This is a PGP2-style key\n" +#~ msgstr "ADVARSEL: '%s' er en tom fil\n" + +#~ msgid "sSmMqQ" +#~ msgstr "sSmMqQ" + +#, fuzzy +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s er ikke et gyldigt tegnsæt\n" + +#, fuzzy +#~ msgid "%lu key(s) to refresh\n" +#~ msgstr "%lu nøgler behandlet indtil nu\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "Ingen tillidsværdier er ændret.\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "%08lX: ignen info til at udregne en tillidssandsynlighed\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: fejl ved undersøgelse af nøgle: %s\n" + +#~ msgid "Good certificate" +#~ msgstr "Godt certifikat" + +#, fuzzy +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) ElGamal (signér og kryptér)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "Vil du gerne oprette en underskrivnings- og krypteringsnøgle? " + #~ msgid "certificate read problem: %s\n" #~ msgstr "certifikatlæseproblem: %s\n" +#~ msgid "can't lock keyring `%s': %s\n" +#~ msgstr "kan ikke låse nøglering `%s': %s\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: bruger ikke fundet\n" + +#, fuzzy +#~ msgid "invalid" +#~ msgstr "ugyldig rustning" + #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "RSA nøgle kan ikke bruges i denne version\n" @@ -3577,21 +4261,6 @@ msgstr "Ingen hj #~ msgid "No user ID for key\n" #~ msgstr "Ingen bruger-ID for nøgle\n" -#~ msgid "no default public keyring\n" -#~ msgstr "ingen standard offentlig nøglering\n" - -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "kan ikke låse nøglering `%s': %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "nøgle %08lX: kan ikke læse original nøgleblok: %s\n" - -#~ msgid "%s: user not found\n" -#~ msgstr "%s: bruger ikke fundet\n" - -#~ msgid "not processed" -#~ msgstr "ikke bearbejdet" - #~ msgid "set debugging flags" #~ msgstr "sæt aflusningsflag" diff --git a/po/de.glo b/po/de.glo index ddda5b97a..7e32f93ab 100644 --- a/po/de.glo +++ b/po/de.glo @@ -1,115 +1,238 @@ # Glossary for GnuPG german translation +# Zusammenstellung der Liste: # Copyright (C) 1998 Free Software Foundation, Inc. -# Walter Koch , 1998. +# Walter Koch , 1998. +# # This is just a textfile for your information. # It will _not_ be read or processed automatically by any program +# +# 1. Die Begriffe ohne ein "<" oder ">" vor dem deutschen Wort +# stammen aus der Wortliste von Walter Koch (Programmübersetzung). +# 2. Die Änderungsvorschläge dazu mit einem "*" vor dem deutschen Wort +# stammen von Peter Gerwinski. +# 3. Die Begriffe mit einem "<" vor dem deutschen Wort sind so in der +# Bearbeitung von Herrn Goretzki verwendet worden +# 4. Die Begriffe mit einem ">" vor dem deutschen Wort sind +# alternative Übersetzungsmöglichkeiten, die von H.Martin angegeben +# wurden. +# 5. (*) Uneinheitlich verwendet +# 6. - Gefällt mir (Walter Koch) nicht so toll +# 7. Die erste genannte Übersetzung ist die in de.po verwendete +# 8. # - Wurde in früherere de.po-Version verwendet -........ Authentisierung + +agent Agent aka alias algorithm Verfahren anonymous ungenannter -argument +argument > Argument armor ASCII-Hülle -available vorhanden [besser?: verfügbar] -bad [signature] falsch[e] Unterschrift +assigned zugewiesen +associate with a person zufällig, >gelegentlich >unregelmäßig certificate Zertifikat +, (Urkunde) character set Zeichensatz -check (verb) pr|fen, gepr|ft +check (verb) prüfen, geprüft +checking [sth.] [sth-]-Überprüfung checksum Prüfsumme cipher algorithm Verschlüsselungsverfahren +clearsign clearsig header Klartextsignatur-Einleitung +created erzeugt command Befehl -compress algorithm Komprimierverfahren * +comment Bemerkung +compress algorithm Komprimierverfahren,*Komprimierungsverfahren ? +compressed komprimiert +compromised nicht mehr sicher core dump core-dump-Datei +, (Speicherauszug?) +core function behandeln, löschen +depend on >sich verlassen auf,>angewiesen sein auf,>abhängen von +deprecated mißbilligte +detached [sign] abgetrennte [Unterschrift] +determined attacker >zielbewusster,>entschlossener Angreifer digest algorithm Hashmethode +direct [key sig] -"direct key" disabled abgeschaltet +duplicated (adj.) doppelt encrypted verschlüsselte +enviorement variable Umgebungsvariable +eventually >schließlich, endlich Nicht: eventuell +expand +expiration date ist angemessen, manchmal: Gültigkeitsdauer, >Geltungsdauer +listed +locally (nur) für diesen Rechner, #(nur) auf diesem Rechner lookup - Suche +machine häufig: Computer, Rechner main key Hauptschlüssel -maintenance utility Wartungs-Hilfsprogramm -malformed ungünstig aufgebaute +maintenance utility -Wartungs-Hilfsprogramm +making signatures >Unterschreiben Universalschlüssel +, Generalschlüssel +match Treffer MDC Manipulation detection code (Siegel ?) +merge (to) >zusammenführen, >vermischen ?? message Botschaft mode Modus, Methode * -move schieben +move schieben, *verschieben +multiple signature Mehrfachunterschriften +NAI network error Netzwerkfehler +non-revocably nicht-widerrufbar, unwiderruflich?? note Hinweis okay in Ordnung Ooops Huch -original Ursprünglicher -ownertrust \"Owner trust\" +OpenPGP +option Option +original ursprünglicher +overrides -ersetzt +ownertrust \"Owner trust\" *Vertrauenswürdigkeit des Besitzers packet Paket packet type Pakettyp +parse -zerlegen passphrase Mantra +permission [file] Zugriffsrechte +Photo-ID Foto-ID +policy Richtlinie +policy URL Richtlinien-URL preference items ???? -preferences Einstellungen +preferences Einstellungen *(die gesamten) Einstellungen preferred bevorzugt primary keys Hauptschlüssel +problem [to do sth.] -Schwierigkeit +prompt (to) auch: >abfragen, >anfordern, >verlangen +protected protection algorithm Schutzverfahren -pubkey algorithm Public-Key Verfahren (*) +pubkey algorithm Public-Key-Verfahren public key öffentlicher Schüssel -public key algorithm Public-Key Verfahren -quit +public key algorithm Public-Key-Verfahren +quit *(Programm) verlassen, beenden radix64 radix64 random Zufall random bytes Zufallswerte +reason Grund (für revocation) +[xyz] rebuild [xyz]-Neuaufbau, neu erzeugt +regular file normale Datei +response Antwort (Reaktion?) retry ???? (Wiederholung?, Wiederaufnahme?) +returns gibt zurück / antwortet +reveal auch: anderen zeigen +revocation Widerruf <*>Rückruf +revocation certificate *Sicherheitsbedüfnis(se), >Sicherheitsbedarf self-signature Eigenbeglaubigung sender Absender +sensitive - empfindlich +set [sth.] einstellen, festlegen +session Sitzung +show [an]zeigen, zeigen sign user id User-ID beglaubigen * +signed unterschriebene signature (files) Unterschrift * signature (keys) Beglaubigung * simple S2K mode ???? skipped übergangen, übersprungen, ignoriert -stdin - stdin +so far bislang +specify >spezifizieren, Vertrauensniveaus?? *Vertrauensmaß? >Vertrauenswerte? trying Versuch type [message] [Botschaft] eintippen -ulimately [trust] uneingeschränktes [Vertrauen] -update Ändern, Änderung -User - User +ulimately [trust] uneingeschränkt [vertrauen] +ultimate trust uneingeschränktes Vertrauen +unable +unattended unbeaufsichtigt +unavailble +untrusted - nichtvertrauenswürdig, *nicht vertrauenswürdig +unusable unbrauchbar +update Ändern, Änderung >Aktualisieren, >Aktualisierung *auf den +URL (die) URL +[the] use [of] +User - User, *Benutzer-Schnittstelle +username Username, *besser authentisieren ?? So im +Wörterbuch der neuen Rechtschreibung) +validation -- >Authentisierung +verbose ausführlich +verify < überprüfen warning Warnung weak key unsicherer Schlüssel +writeable schreibbarer +wisely >klug, vernünftig(erweise), >gescheit; möglichst sinnvoll - (*) Uneinheitlich verwendet - - Gefällt mir nicht so toll \ No newline at end of file diff --git a/po/de.po b/po/de.po index 2e20ed80c..1fcfb4668 100644 --- a/po/de.po +++ b/po/de.po @@ -1,301 +1,332 @@ # GnuPG german translation -# Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. -# Walter Koch , 1998, 1999, 2000 +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Walter Koch , 1998, 1999, 2000, 2001 msgid "" msgstr "" -"Project-Id-Version: gnupg 1.0.0h\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 2000-06-12 12:50+0200\n" +"Project-Id-Version: gnupg-1.0.4\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-09 19:41+0200\n" "Last-Translator: Walter Koch \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Warnung: Sensible Daten könnten auf Platte ausgelagert werden.\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "siehe http://www.gnupg.org/de/faq.html für weitere Informationen\n" + +# " Um dies zu vermeiden, kann das Programm suid(root) installiert werden.\n" +# " Bitte wenden Sie sich hierzu an den Systemadministrator.\n" +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "Vorgang ist ohne sicheren Hauptspeicher nicht möglich\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "" +"(möglicherweise haben Sie das falsche Programm für diese Aufgabe benutzt)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "ja" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "jJyY" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "nein" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "quit" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "qQ" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "Allgemeiner Fehler" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "Unbekannter Pakettyp" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "Unbekannte Version" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" -msgstr "Unbekanntes Public-Key Verfahren" +msgstr "Unbekanntes Public-Key-Verfahren" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "Unbekanntes Hashverfahren" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "Falscher öffentlicher Schüssel" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "Falscher geheimer Schlüssel" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "Falsche Unterschrift" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "Prüfsummen-Fehler" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "Falsches Mantra" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "Öffentlicher Schlüssel nicht gefunden" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "Unbekanntes Verschlüsselungsverfahren" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "Der Schlüsselbund kann nicht geöffnet werden" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "Ungültiges Paket" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "Ungültige ASCII-Hülle" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "Keine solche User-ID" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "Geheimer Schlüssel ist nicht vorhanden" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "Falscher geheimer Schlüssel benutzt" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "Wird nicht unterstützt" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "Falscher Schlüssel" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "Dateilesefehler" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "Dateischreibfehler" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "Unbekanntes Komprimierverfahren" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "Fehler beim Öffnen der Datei" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "Fehler beim Erzeugen der Datei" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "Ungültiges Mantra" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" -msgstr "Öffentliches Schlüsselverfahren ist nicht implementiert." +msgstr "nicht implementiertes öffentliches Schlüsselverfahren" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "Verschlüsselungsverfahren ist nicht implementiert" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "Unbekannte Unterschriftenklasse" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "Fehler in der Trust-DB" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "Falsche MPI" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" -msgstr "festdefinierte Resourcenobergrenze erreicht" +msgstr "festdefinierte Ressourcenobergrenze erreicht" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "Ungültiger Schlüsselbund" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "Falsches Zertifikat" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "Ungünstig aufgebaute User-ID" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "Fehler beim Schließen der Datei" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "Fehler beim Umbenennen einer Datei" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "Fehler beim Löschen einer Datei" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "Unerwartete Daten" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "Zeitangaben differieren" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "Unbenutzbares öffentliches Schlüsselverfahren" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "Datei existiert bereits" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "Unsicherer Schlüssel" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "Ungültiges Argument" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "fehlerhafter URI" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "Nicht unterstützter URI" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "Netzwerkfehler" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "nicht verschlüsselt" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "nicht bearbeitet" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "unbrauchbarer öffentlicher Schüssel" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "unbrauchbarer geheimer Schlüssel" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "Schlüsselserverfehler" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dies ist ein Bug (Programmfehler) (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Sie haben eine Bug (Programmfehler) gefunden ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "'%s' kann nicht geöffnet werden: %s\n" -#: cipher/random.c:325 +#: cipher/random.c:324 #, c-format msgid "can't stat `%s': %s\n" msgstr "Status von '%s' ist nicht feststellbar: %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "'%s' ist keine normale Datei - sie bleibt unbeachtet\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" msgstr "Hinweis: 'random_seed'-Datei ist leer\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" "Warnung: Falsche Größe der 'random_seed'-Datei - sie wird nicht verwendet\n" -#: cipher/random.c:349 +#: cipher/random.c:348 #, c-format msgid "can't read `%s': %s\n" msgstr "'%s' ist unlesbar: %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" msgstr "Hinweis: 'random_seed'-Datei bleibt unverändert\n" -#: cipher/random.c:407 +#: cipher/random.c:406 #, c-format msgid "can't create `%s': %s\n" msgstr "'%s' kann nicht erzeugt werden: %s\n" -#: cipher/random.c:414 +#: cipher/random.c:413 #, c-format msgid "can't write `%s': %s\n" msgstr "kann '%s' nicht schreiben: %s\n" -#: cipher/random.c:417 +#: cipher/random.c:416 #, c-format msgid "can't close `%s': %s\n" msgstr "kann '%s' nicht schliessen: %s\n" -#: cipher/random.c:428 -#, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "Zu viele Zufallswerte angefordert: Die Grenze liegt bei %d\n" - -#: cipher/random.c:659 +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "WARNUNG: Der Zufallsgenerator erzeugt keine echten Zufallszahlen!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -309,7 +340,7 @@ msgstr "" "BENUTZEN SIE DIE DURCH DIESES PROGRAMM ERZEUGTEN DATEN NICHT!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -321,22 +352,7 @@ msgstr "" "Arbeiten durch, damit das Betriebssystem weitere Entropie sammeln kann!\n" "(Es werden noch %d Byte benötigt.)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Warnung: Sensible Daten könnten auf Platte ausgelagert werden.\n" - -# " Um dies zu vermeiden, kann das Programm suid(root) installiert werden.\n" -# " Bitte wenden Sie sich hierzu an den Systemadministrator.\n" -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "Vorgang ist ohne sicheren Hauptspeicher nicht möglich\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "" -"(möglicherweise haben Sie das falsche Programm für diese Aufgabe benutzt)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -344,139 +360,163 @@ msgstr "" "@Befehle:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[Datei]|Eine Unterschrift erzeugen" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[Datei]|Eine Klartextunterschrift erzeugen" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "Eine abgetrennte Unterschrift erzeugen" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "Daten verschlüsseln" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[Dateien]|Dateien verschlüsseln" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "Daten symmetrisch verschlüsseln" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "Nur speichern" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "Daten entschlüsseln (Voreinstellung)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[Dateien]|Dateien entschlüsseln" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "Signatur prüfen" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "Liste der Schlüssel" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "Liste der Schlüssel und ihrer Signaturen" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "Signaturen der Schlüssel prüfen" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "Liste der Schlüssel und ihrer \"Fingerabdrücke\"" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "Liste der geheimen Schlüssel" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "Ein neues Schlüsselpaar erzeugen" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" +#: g10/g10.c:307 +msgid "remove keys from the public keyring" msgstr "Schlüssel aus dem öff. Schlüsselbund entfernen" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" msgstr "Schlüssel aus dem geh. Schlüsselbund entfernen" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "Schlüssel signieren" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" -msgstr "Schlüssel nur auf diesem Rechner signieren" +msgstr "Schlüssel nur für diesen Rechner signieren" -#: g10/gpg.c:224 +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "Schlüssel nicht widerrufbar signieren" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "Schlüssel nur für diesen Rechner und nicht-widerrufbar signieren" + +#: g10/g10.c:314 msgid "sign or edit a key" -msgstr "Unterschreiben oder Bearbeiten eines Schl." +msgstr "Unterschreiben oder bearbeiten eines Schl." -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "Ein Schlüsselwiderruf-Zertifikat erzeugen" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "Schlüssel exportieren" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "Schlüssel zu einem Schlü.server exportieren" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "Schlüssel von einem Schlü.server importieren" -#: g10/gpg.c:232 +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "Schlüssel auf einem Schlü.server suchen" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "alle Schlüssel per Schlü.server aktualisieren" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "Schlüssel importieren/kombinieren" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "Lediglich Struktur der Datenpakete anzeigen" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" -msgstr "Exportieren der \"Owner trust\" Werte" +msgstr "Exportieren der \"Owner trust\"-Werte" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" -msgstr "Importieren der \"Owner trust\" Werte" +msgstr "Importieren der \"Owner trust\"-Werte" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "Ändern der \"Trust\"-Datenbank" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NAMEN]|Überprüfen der \"Trust\"-Datenbank" +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "unbeaufsichtigtes Ändern der \"Trust\"-Datenbank" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "Reparieren einer beschädigten \"Trust\"-Datenb." -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "Datei oder stdin von der ASCII-Hülle befreien" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "Datei oder stdin in eine ASCII-Hülle einpacken" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [Dateien]|Message-Digests für die Dateien ausgeben" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -486,160 +526,202 @@ msgstr "" "Optionen:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "Ausgabe mit ASCII-Hülle versehen" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NAME|Verschlüsseln für NAME" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NAME|NAME als voreingestellten Empfänger benutzen" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "" "Den Standardschlüssel als voreingestellten\n" "Empfänger benutzen" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "Mit dieser User-ID signieren" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "Kompressionsstufe auf N setzen (0=keine)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "Textmodus benutzen" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "Als Ausgabedatei benutzen" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "Detaillierte Informationen" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "Etwas weniger Infos" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "das Terminal gar nicht benutzen" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "v3 Signaturen erzwingen" -#: g10/gpg.c:275 +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "v3 Signaturen nicht erzwingen" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "v4 Signaturen erzwingen" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "v4 Signaturen nicht erzwingen" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "Beim Verschlüsseln ein Siegel (MDC) verwenden" -#: g10/gpg.c:276 +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "Beim Verschlüsseln niemals ein Siegel (MDC) verwenden" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "Keine wirklichen Änderungen durchführen" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "den GPG-Agent verwenden" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "Stapelmodus: Keine Abfragen" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "\"Ja\" als Standardantwort annehmen" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "\"Nein\" als Standardantwort annehmen" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "Als öffentlichen Schlüsselbund mitbenutzen" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "Als geheimen Schlüsselbund mitbenutzen" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "Anzeigen des Schlüsselbundes, in dem ein Schlüssel drin ist" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NAME|NAME als voreingestellten Schlüssel benutzen" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|Schlüssel bei diesem Server nachschlagen" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NAME|Terminalzeichensatz NAME benutzen" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "Optionen aus der Datei lesen" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "|FD|Statusinfo auf FD (Dateihandle) ausgeben" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "" +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[Datei]|Statusinfo in Datei schreiben" -#: g10/gpg.c:297 +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|KEYID|diesem Schlüssel uneingeschränkt vertrauen" + +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|DATEI|Erweiterungsmodul DATEI laden" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "Den in RFC1991 beschriebenen Modus nachahmen" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" "alle Paket-, Verschlüsselungs- und\n" "Hashoptionen auf OpenPGP-Verhalten einstellen" -#: g10/gpg.c:300 +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"alle Paket-, Verschlüsselungs- und\n" +"Hashoptionen auf PGP 2.X-Verhalten einstellen" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|Verwenden des Mantra-Modus N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NAME|Hashverfahren NAME für Mantras benutzen" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" -msgstr "|NAME|Verschlü.verfahren NAME für Mantras benutzen" +msgstr "|NAME|Verschl.verfahren NAME für Mantras benutzen" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" -msgstr "|NAME|Verschlü.verfahren NAME benutzen" +msgstr "|NAME|Verschl.verfahren NAME benutzen" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAME|Hashverfahren NAME benutzen" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|Komprimierverfahren N benutzen" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" -msgstr "Entferne Empfänger-ID verschlüsselter Pakete" +msgstr "Empfänger-ID verschlüsselter Pakete entfernen" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Foto-IDs anzeigen" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Foto-IDs nicht anzeigen" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "Kommandozeilentext für den Foto-Betrachter setzen" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" -msgstr "|NAME=WERT|verwende diese \"notation\"-Daten" +msgstr "|NAME=WERT|diese \"notation\"-Daten verwenden" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" @@ -648,7 +730,7 @@ msgstr "" "(Auf der \"man\"-Seite ist eine vollständige Liste aller Kommandos und " "Optionen)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -668,27 +750,27 @@ msgstr "" " --list-keys [Namen] Schlüssel anzeigen\n" " --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "" -"Berichte über Bugs (Programmfehler) bitte an .\n" +"Berichte über Programmfehler bitte in englisch an .\n" "Sinn- oder Schreibfehler in den deutschen Texten bitte an .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Aufruf: gpg [Optionen] [Dateien] (-h für Hilfe)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Aufruf: gpg [Optionen] [Dateien]\n" -"Signieren, prüfen, verschlüsseln, entschlüsseln\n" -"Die voreingestellte Operation ist abhängig von den Eingabedaten\n" +"Signieren, prüfen, verschlüsseln, entschlüsseln.\n" +"Die voreingestellte Operation ist abhängig von den Eingabedaten.\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -696,193 +778,258 @@ msgstr "" "\n" "Unterstützte Verfahren:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "Aufruf: gpg [Optionen] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "Widersprüchliche Befehle\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "Optionendatei '%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "Optionen werden aus '%s' gelesen\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s ist kein gültiger Zeichensatz.\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "Schlüsselserver-URI konnte nicht zerlegt werden\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "Der Ausführungspfad konnte nicht auf %s gesetzt werden.\n" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "WARNUNG: %s ist eine mißbilligte Option.\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "Bitte benutzen Sie stattdessen \"--keyserver-options %s\".\n" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "WARNUNG: %s ersetzt %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "Hinweis: %s ist nicht für den üblichen Gebrauch gedacht!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s kann nicht zusammen mit %s verwendet werden!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s zusammen mit %s ist nicht sinnvoll!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 -msgid "selected cipher algorithm is invalid\n" -msgstr "Das ausgewählte Verschlüsslungsverfahren ist ungültig\n" +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus können Sie nur abgetrennte oder Klartextunterschriften " +"machen\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus können Sie nicht gleichzeitig unterschreiben und " +"verschlüsseln\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" +"Im --pgp2-Modus müssen Sie Dateien benutzen und können keine Pipes " +"verwenden.\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" +"Verschlüssen einer Botschaft benötigt im --pgp2-Modus die IDEA-" +"Verschlüsselung\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "Diese Botschaft könnte für PGP 2.x unbrauchbar sein\n" + +#: g10/g10.c:1470 g10/g10.c:1482 +msgid "selected cipher algorithm is invalid\n" +msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n" + +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "Das ausgewählte Hashverfahren ist ungültig\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "Die angegebene URL für Richtlinien ist ungültig\n" +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "Die angegebene Unterschriften-Richtlinien-URL ist ungültig\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "Die angegebene Zertifikat-Richtlinien-URL ist ungültig\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "Das Komprimierverfahren muß im Bereich %d bis %d liegen\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed müssen größer als 0 sein\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed müssen größer als 1 sein\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth muß im Bereich 1 bis 255 liegen\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "Hinweis: Vom \"simple S2K\"-Modus (0) ist strikt abzuraten\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ungültiger \"simple S2K\"-Modus; Wert muß 0, 1 oder 3 sein\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "ungültiger \"default-check-level\"; Wert muß 0, 1, 2 oder 3 sein\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "ungültige Voreinstellungen\n" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [Dateiname]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [Dateiname]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [Dateiname]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [Dateiname]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [Dateiname]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [Dateiname]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [Dateiname]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [Dateiname]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key User-ID" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key User-ID" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key User-ID" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key User-ID" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key User-ID [Befehle]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key User-ID" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key User-ID" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "'%s' kann nicht geöffnet werden: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [User-ID] [Schlüsselbund]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "Entfernen der ASCII-Hülle ist fehlgeschlagen: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "Anbringen der ASCII-Hülle ist fehlgeschlagen: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "Ungültiges Hashverfahren '%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[Dateiname]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Auf geht's - Botschaft eintippen ...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "'%s' kann nicht geöffnet werden\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "Das erste Zeichen eines \"notation\"-Namens muß ein Buchstabe oder\n" "ein Unterstrich sein\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -890,254 +1037,231 @@ msgstr "" "Ein \"notation\"-Name darf nur Buchstaben, Zahlen, Punkte oder Unterstriche " "enthalten und muß mit einem '=' enden\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" "Punkte in einem \"notation\"-Namen müssen von anderen Zeichen umgeben sein\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "Ein \"notation\"-Wert darf keine Kontrollzeichen verwenden\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "ASCII-Hülle: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "Ungültige ASCII-Hülle" -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "ASCII-Hülle: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "Ungültige Klartextsignatur-Einleitung\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "verschachtelte Klartextunterschriften\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "Ungültige mit Bindestrich \"escapte\" Zeile: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "Unerwartete ASCII-Hülle:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "Ungültiges \"radix64\" Zeichen %02x ignoriert\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "vorzeitiges Dateiende (keine Prüfsumme)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "vorzeitiges Dateiende (innerhalb der Prüfsumme)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "Falsch aufgebaute Prüfsumme\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "Prüfsummenfehler; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "vorzeitiges Dateiende (im Nachsatz)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "Fehler in der Nachsatzzeile\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "Weitere Infos: siehe http://www.gnupg.org" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "Keine gültigen OpenPGP-Daten gefunden.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "ungültige ASCII-Hülle: Zeile ist länger als %d Zeichen\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "\"quoted printable\" Zeichen in der ASCII-Hülle gefunden - möglicherweise\n" " war ein fehlerhafter E-Mail-Transporter(\"MTA\") die Ursache\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Fingerabdruck:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Fingerabdruck:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" msgstr "Kein Grund angegeben" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" +#: g10/pkclist.c:63 +msgid "Key is superseded" msgstr "Schlüssel ist überholt" -#: g10/pkclist.c:121 +#: g10/pkclist.c:65 msgid "Key has been compromised" msgstr "Hinweis: Dieser Schlüssel ist nicht mehr sicher" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" msgstr "Schlüssel wird nicht mehr benutzt" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" msgstr "User-ID ist nicht mehr gültig" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " msgstr "Grund für Widerruf: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " msgstr "Widerruf-Bemerkung: " -# valid user replies (not including 1..4) #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMqQsS" -#: g10/pkclist.c:308 +#: g10/pkclist.c:258 #, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" -"Es ist kein \"Owner trust\" für %lu definiert:\n" +"Es ist kein \"trust value\" zugewiesen für:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen,\n" -"den Schlüssel eines anderen Users korrekt zu prüfen (Vergleich mit\n" -"Lichtbildausweisen, Vergleich der Fingerabdrücke aus unterschiedlichen\n" -"Quellen ...)?\n" +"Schlüssel anderer User korrekt zu prüfen (durch Vergleich\n" +"mit Lichtbildausweisen, Vergleich der Fingerabdrücke aus\n" +"unterschiedlichen Quellen ...)?\n" "\n" -" 1 = Weiß nicht so recht\n" -" 2 = Nee, dem traue ich das nicht zu\n" -" 3 = Ich vertraue ihm normalerweise\n" -" 4 = Ich vertraue ihm vollständig\n" -" s = Bitte weitere Information anzeigen\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = Weiß nicht so recht\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = Nein, ihm traue ich NICHT\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Ich vertraue ihm einigermaßen\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Ich vertraue ihm vollständig\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Ich vertraue ihm absolut\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = Bitte weitere Information anzeigen\n" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = Zurück zum Menü\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = diesen Schlüssel überSpringen\n" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = verlassen\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Ihre Auswahl? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Möchten Sie diesem Schlüssel wirklich uneingeschränkt vertrauen? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Zertifikate führen zu einem letztlich vertrauenswürdigen Schlüssel:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Für diesen Schlüssel konnte kein gültiger \"Trust Path\" gefunden werden.\n" -"Mal sehen, ob wir sonst irgendwie ein paar fehlende \"Owner trust\" Werte \n" -"ermitteln können.\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"Kein Pfad führt zu einen unserer Schlüsseln.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Keine Zertifikate mit undefinierten Vertrauen gefunden.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Keine \"trust\" Werte geändert.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "Schlüssel %08lX: Schlüssel wurde widerrufen\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " -msgstr "Diesen Schlüssel trotzdem benutzen?" +msgstr "Diesen Schlüssel trotzdem benutzen? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "Schlüssel %08lX: Unterschlüssel wurde widerrufen\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: Schlüssel ist verfallen!\n" -#: g10/pkclist.c:519 +#: g10/pkclist.c:442 #, c-format -msgid "%08lX: no info to calculate a trust probability\n" +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" msgstr "" -"%08lX: Keine Infos zur Berechnung der Vertrauenswahrscheinlichkeit " -"vorgefunden\n" +"%08lX: Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen " +"Besitzer gehört.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1146,18 +1270,18 @@ msgstr "" "%08lX: Es ist nicht sicher, daß dieser Schlüssel wirklich dem vorgeblichen\n" "Besitzer gehört, aber er wird trotzdem akzeptiert\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "" "Dieser Schlüssel gehört höchstwahrscheinlich dem angegebenen Besitzer\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "" "Dieser Schlüssel gehört uns (da wir nämlich den geheimen Schlüssel dazu " "haben)\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1168,179 +1292,201 @@ msgstr "" "Wenn Sie *wirklich* wissen, was Sie tun, können Sie die nächste\n" "Frage mit ja beantworten\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "WARNUNG: Ein Schlüssel ohne gesichertes Vertrauen wird benutzt!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "WARNUNG: Dieser Schlüssel wurde von seinem Besitzer widerrufen!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Das könnte bedeuten, daß die Signatur gefälscht ist.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "WARNUNG: Dieser Unterschlüssel wurde von seinem Besitzer widerrufen!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Hinweis: Dieser Schlüssel wurde abgeschaltet.\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Hinweis: Dieser Schlüssel ist verfallen!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen " "Besitzer gehört.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "WARNUNG: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " Die Signatur ist wahrscheinlich eine FÄLSCHUNG.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "WARNUNG: Dieser Schlüssel ist nicht durch hinreichend vertrauenswürdige " "Signaturen zertifiziert!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Es ist nicht sicher, daß die Signatur wirklich dem vorgeblichen " "Besitzer gehört.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: übersprungen: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: übersprungen: öffentlicher Schlüssel bereits vorhanden\n" -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" -"Sie gaben keine User-ID angegeben (Benutzen Sie die Option \"-r\").\n" +"Sie haben keine User-ID angegeben (Sie können die Option \"-r\" verwenden).\n" + +#: g10/pkclist.c:762 +msgid "" "\n" +"Enter the user ID. End with an empty line: " +msgstr "" +"\n" +"Geben Sie die User-ID ein. Beenden mit einer leeren Zeile: " -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Geben Sie die User-ID ein: " - -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Keine solche User-ID vorhanden.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "" "übersprungen: öffentlicher Schlüssel bereits als Standardempfänger gesetzt\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "Öffentlicher Schlüssel ist abgeschaltet.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "" -"übersprungen: öffentlicher Schlüssel bereits mittels --encrypt-to gesetzt\n" +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "übersprungen: öffentlicher Schlüssel bereits gesetzt\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "Unbekannter voreingestellter Empfänger '%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: Fehler beim Prüfen des Schlüssels: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: übersprungen: öffentlicher Schlüssel ist abgeschaltet\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "Keine gültigen Adressaten\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "Voreinstellung %c%lu ist nicht gültig\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "Voreinstellung %c%lu ist doppelt\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "zu viele `%c' Voreinstellungen\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "Ungültiges Zeichen in den Voreinstellungen\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "Die Eigenbeglaubigung wird geschrieben\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "Schreiben der \"key-binding\" Signatur\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "Ungültig Schlüssellänge; %u Bit werden verwendet\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "Schlüssellänge auf %u Bit aufgerundet\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Bitte wählen Sie, welche Art von Schlüssel Sie möchten:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA und ElGamal (voreingestellt)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (nur signieren/beglaubigen)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (nur verschlüsseln)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (signieren/beglaubigen und verschlüsseln)\n" -#: g10/keygen.c:643 -#, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (signieren/beglaubigen und verschlüsseln)\n" +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (nur signieren/beglaubigen)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (nur verschlüsseln)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Ihre Auswahl? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " msgstr "" -"Möchten Sie wirklich einen Unterschriften-/Verschlüsselungschlüssel " -"erzeugen? " +"Von der Benutzung dieses Verfahrens ist abzuraten - Trotzdem erzeugen? " -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Ungültige Auswahl.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1353,21 +1499,20 @@ msgstr "" " standard Schlüssellänge ist 1024 Bit\n" " größte sinnvolle Schlüssellänge ist 2048 Bit\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Welche Schlüssellänge wünschen Sie? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA erlaubt nur Schlüssellängen von 512 bis 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "zu kurz; 768 ist die kleinste mögliche Schlüssellänge.\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "zu kurz; 1024 ist die kleinste für RSA mögliche Schlüssellänge.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "zu kurz; 768 ist die kleinste mögliche Schlüssellänge.\n" #. It is ridiculous and an annoyance to use larger key sizes! @@ -1378,12 +1523,12 @@ msgstr "zu kurz; 768 ist die kleinste m #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "Schüsselgröße zu hoch; %d ist der Maximalwert.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1391,11 +1536,11 @@ msgstr "" "Schlüssellängen größer als 2048 werden nicht empfohlen, da die\n" "Berechnungen dann WIRKLICH lange brauchen!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Sind Sie sicher, daß Sie diese Schlüssellänge wünschen? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1403,21 +1548,17 @@ msgstr "" "Gut, aber bitte denken Sie auch daran, daß Monitor und Tastatur Daten " "abstrahlen und diese leicht mitgelesen werden können.\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Brauchen Sie wirklich einen derartig langen Schlüssel? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Die verlangte Schlüssellänge beträgt %u Bit\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "aufgerundet auf %u Bit\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1433,25 +1574,46 @@ msgstr "" " m = Schlüssel verfällt nach n Monaten\n" " y = Schlüssel verfällt nach n Jahren\n" -#: g10/keygen.c:812 -msgid "Key is valid for? (0) " -msgstr "Der Schlüssel bleibt wie lange gültig? (0) " +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Bitte wählen Sie, wie lange die Beglaubigung gültig bleiben soll.\n" +" 0 = Schlüssel verfällt nie\n" +" = Schlüssel verfällt nach n Tagen\n" +" w = Schlüssel verfällt nach n Wochen\n" +" m = Schlüssel verfällt nach n Monaten\n" +" y = Schlüssel verfällt nach n Jahren\n" -#: g10/keygen.c:817 +#: g10/keygen.c:973 +msgid "Key is valid for? (0) " +msgstr "Wie lange bleibt der Schlüssel gültig? (0) " + +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Wie lange bleibt die Beglaubigung gültig? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "Ungültiger Wert.\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "Der Schlüssel verfällt nie.\n" +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s verfällt nie.\n" #. print the date when the key expires -#: g10/keygen.c:828 +#: g10/keygen.c:992 #, c-format -msgid "Key expires at %s\n" -msgstr "Der Schlüssel verfällt am %s\n" +msgid "%s expires at %s\n" +msgstr "%s verfällt am %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1459,11 +1621,11 @@ msgstr "" "Ihr Rechner kann Daten jenseits des Jahres 2038 nicht anzeigen.\n" "Trotzdem werden Daten bis 2106 korrekt verarbeitet.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Ist dies richtig? (j/n) " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1479,44 +1641,44 @@ msgstr "" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Ihr Name (\"Vorname Nachname\"): " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Ungültiges Zeichen im Namen\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Der Name darf nicht mit einer Ziffer beginnen.\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Der Name muß min. 5 Zeichen lang sein.\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "E-Mail-Adresse: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Diese E-Mail-Adresse ist ungültig\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Kommentar: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Ungültiges Zeichen im Kommentar.\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Sie benutzen den Zeichensatz `%s'\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1527,27 +1689,27 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Bitte keine E-Mailadressen als Namen oder Kommentar verwenden\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnKkEeFfBb" -#: g10/keygen.c:986 +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (B)eenden? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" msgstr "Bitte beseitigen Sie zuerst den Fehler\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1555,11 +1717,16 @@ msgstr "" "Sie benötigen ein Mantra, um den geheimen Schlüssel zu schützen.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "Mantra wurde nicht richtig wiederholt; noch einmal versuchen.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "Mantra wurde nicht richtig wiederholt; noch einmal versuchen" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1572,7 +1739,7 @@ msgstr "" "aufrufen.\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1583,29 +1750,53 @@ msgstr "" "unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas\n" "tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" -msgstr "Der DSA Schlüssel wird 1024 Bit haben.\n" +msgstr "Das DSA-Schlüsselpaar wird 1024 Bit haben.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Schlüsselerzeugung abgebrochen.\n" -#: g10/keygen.c:1668 +#: g10/keygen.c:1883 g10/keygen.c:1963 #, c-format msgid "writing public key to `%s'\n" msgstr "schreiben des öffentlichen Schlüssels nach '%s'\n" -#: g10/keygen.c:1669 +#: g10/keygen.c:1884 g10/keygen.c:1965 #, c-format msgid "writing secret key to `%s'\n" msgstr "schreiben des geheimen Schlüssels nach '%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "kein schreibbarer öffentlicher Schlüsselbund gefunden: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "kein schreibbarer geheimer Schlüsselbund gefunden: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "Fehler beim Schreiben des öff. Schlüsselbundes `%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "Fehler beim Schreiben des geheimen Schlüsselbundes `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "Öffentlichen und geheimen Schlüssel erzeugt und signiert.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "Schlüssel ist als uneingeschränkt vertrauenswürdig gekennzeichnet.\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" @@ -1614,12 +1805,12 @@ msgstr "" "werden kann. Sie können aber mit dem Befehl \"--edit-key\" einen\n" "Zweitschlüssel für diesem Zweck erzeugen.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "Schlüsselerzeugung fehlgeschlagen: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1627,7 +1818,7 @@ msgstr "" "Der Schlüssel wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder Uhren " "stimmen nicht überein)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1635,310 +1826,373 @@ msgstr "" "Der Schlüssel wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder " "Uhren stimmen nicht überein)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "HINWEIS: Unterschlüssel für v3-Schlüssen sind nicht OpenPGP-konform\n" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Wirklich erzeugen? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output funktioniert nicht bei diesem Kommando\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' ist bereits komprimiert\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: kann nicht geöffnet werden: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "Fehler beim Erzeugen des Mantras: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: WARNUNG: Leere Datei\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus kann nur für RSA-Schlüssel mit maximal 2048 Bit " +"verschlüsselt werden\n" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "Lesen von '%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" +"Die IDEA-Verschlüsselung kann nicht mit allen Zielschlüsseln verwendet " +"werden.\n" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s verschlüsselt für: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 +#: g10/delkey.c:69 g10/export.c:141 #, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: Benutzer nicht gefunden: %s\n" +msgid "key `%s' not found: %s\n" +msgstr "Schlüssel `%s' nicht gefunden: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "Fehler beim Lesen des Schlüsselblocks: %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" -msgstr "Schlüssel %08lX: dies ist kein rfc2440-Schüssel - übersprungen\n" +msgstr "Schlüssel %08lX: dies ist kein RFC2440-Schüssel - übersprungen\n" -#: g10/export.c:175 +#: g10/export.c:180 #, c-format msgid "key %08lX: not protected - skipped\n" msgstr "Schlüssel %08lX: ungeschützt - übersprungen\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "Schlüssel %08lX: PGP 2.x-artiger Schlüssel - übersprungen\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "WARNUNG: Nichts exportiert\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" -msgstr "zu viele Einträge im pk-Lager - abgeschaltet\n" +msgstr "zu viele Einträge im pk-Cache - abgeschaltet\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "zu viele Einträge im unk-Lager - abgeschaltet\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[User-ID nicht gefunden]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" +"Ungültiger Schlüssel %08lX, gültig gemacht per --allow-non-selfsigned-uid\n" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "" "der Zweitschlüssel %08lX wird anstelle des Hauptschlüssels %08lX verwendet\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "" "Schlüssel %08lX: geheimer Schlüssel, aber ohne öffentlichen Schlüssel - " "übersprungen\n" -#: g10/getkey.c:2513 -msgid "[User id not found]" -msgstr "[User-ID nicht gefunden]" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "überspringe den Block vom Typ %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu Schlüssel bislang bearbeitet\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "Fehler beim Lesen von `%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr "Anzahl insgesamt bearbeiteter Schlüssel: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " neue Unterschlüssel: %lu\n" +msgstr " ignorierte neue Schlüssel: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" -msgstr " ohne User-ID: %lu\n" +msgstr " ohne User-ID: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" -msgstr " importiert: %lu" +msgstr " importiert: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" -msgstr " unverändert: %lu\n" +msgstr " unverändert: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" -msgstr " neue User-IDs: %lu\n" +msgstr " neue User-IDs: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" -msgstr " neue Unterschlüssel: %lu\n" +msgstr " neue Unterschlüssel: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" -msgstr " neue Signaturen: %lu\n" +msgstr " neue Signaturen: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" -msgstr "neue Schlüsselwiderrufe: %lu\n" +msgstr " neue Schlüsselwiderrufe: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" -msgstr " gelesene geheime Schl.: %lu\n" +msgstr " gelesene geheime Schlüssel: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" -msgstr "geheime Schlüssel importiert: %lu\n" +msgstr " geheime Schlüssel importiert: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" -msgstr " unveränderte geh.Schl.: %lu\n" +msgstr " unveränderte geh.Schl.: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "Schlüssel %08lX: Keine User-ID\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "Schlüssel %08lX: Nicht eigenbeglaubigte User-ID `%s' übernommen\n" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "Schlüssel %08lX: Keine gültigen User-IDs\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "dies könnte durch fehlende Eigenbeglaubigung verursacht worden sein\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "Schlüssel %08lX: Öffentlicher Schlüssel nicht gefunden: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "Schlüssel %08lX: dies ist kein rfc2440-Schüssel - übersprungen\n" +msgstr "Schlüssel %08lX: neuer Schlüssel - übersprungen\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "kein schreibbarer Schlüsselbund gefunden: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "Schreiben nach '%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "Fehler beim Schreiben des Schlüsselbundes `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "Schlüssel %08lX: Öffentlicher Schlüssel importiert\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "Schlüssel %08lX: Stimmt nicht mit unserer Kopie überein\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "" -"Schlüssel %08lX: der lokale originale Schlüsselblocks wurde nicht gefunden: " -"%s\n" +"Schlüssel %08lX: der lokale originale Schlüsselblocks wurde nicht gefunden: %" +"s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "" +"Schlüssel %08lX: Lesefehler im lokalen originalen Schlüsselblocks: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "Schlüssel %08lX: 1 neue User-ID\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "Schlüssel %08lX: %d neue User-IDs\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "Schlüssel %08lX: 1 neue Signatur\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "Schlüssel %08lX: %d neue Signaturen\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "Schlüssel %08lX: 1 neuer Unterschlüssel\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "Schlüssel %08lX: %d neue Unterschlüssel\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "Schlüssel %08lX: Nicht geändert\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "Kein voreingestellter geheimer Schlüsselbund: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "Schlüssel %08lX: Geheimer Schlüssel importiert\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "Schlüssel %08lX: Ist bereits im geheimen Schlüsselbund\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "Schlüssel %08lX: geheimer Schlüssel nicht gefunden: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "Schlüssel %08lX: Kein öffentlicher Schlüssel - der Schlüsselwiderruf kann " "nicht angebracht werden\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - zurückgewiesen\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "Schlüssel %08lX: Widerrufzertifikat importiert\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "Schlüssel %08lX: Keine User-ID für Signatur\n" -#: g10/import.c:719 g10/import.c:743 +#: g10/import.c:839 #, c-format -msgid "key %08lX: unsupported public key algorithm\n" -msgstr "Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren\n" +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "" +"Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren für User-ID \"%s" +"\"\n" -#: g10/import.c:720 +#: g10/import.c:841 #, c-format -msgid "key %08lX: invalid self-signature\n" -msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung\n" +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung für User-ID \"%s\"\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "Schlüssel %08lX: Kein Unterschlüssel für die Schlüsselanbindung\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "Schlüssel %08lX: Ungültige Unterschlüssel-Anbindung\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "Schlüssel %08lX: Nicht eigenbeglaubigte User-ID übernommen'" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "Schlüssel %08lX: User-ID übergangen '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "Schlüssel %08lX: Unterschlüssel ignoriert\n" @@ -1947,94 +2201,194 @@ msgstr "Schl #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "" "Schlüssel %08lX: Nicht exportfähige Unterschrift (Klasse %02x) - übergangen\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "Schlüssel %08lX: Widerrufzertifikat an falschem Platz - übergangen\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - übergangen\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "Schlüssel %08lX: Doppelte User-ID entdeckt - zusammengeführt\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"Warnung: Schlüssel %08lX ist u.U. widerrufen: hole Widerrufschlüssel %08lX\n" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" +"Warnung: Schlüssel %08lX ist u.U. widerrufen: Widerrufschlüssel %08lX ist " +"nicht vorhanden\n" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "Schlüssel %08lX: Widerrufzertifikat hinzugefügt\n" -#: g10/import.c:1130 g10/import.c:1183 +#: g10/import.c:1231 #, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "Schlüssel %08lX: Unsere Kopie hat keine Eigenbeglaubigung\n" +msgid "key %08lX: direct key signature added\n" +msgstr "Schlüssel %08lX: \"direct-key\"-Signaturen hinzugefügt\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[Widerruf]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[Eigenbeglaubigung]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 falsche Beglaubigung\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d falsche Beglaubigungen\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 Beglaubigung wegen fehlendem Schlüssel nicht geprüft\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d Beglaubigungen wegen fehlenden Schlüsseln nicht geprüft\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 Beglaubigung aufgrund von Fehler nicht geprüft\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d User-IDs ohne gültige Eigenbeglaubigung entdeckt\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:335 #, c-format -msgid "Already signed by key %08lX\n" -msgstr "Ist bereits durch Schlüssel %08lX beglaubigt.\n" +msgid "User ID \"%s\" is revoked." +msgstr "User-ID \"%s\" ist widerrufen." -#: g10/keyedit.c:319 +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Wollen Sie ihn immmer noch beglaubigen? (j/N) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr " Beglaubigen ist nicht möglich.\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Die derzeitige Beglaubigung von \"%s\"\n" +"ist nur für diesen Rechner gültig.\n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" +"Soll sie zu einer voll exportierbaren Beglaubigung erhoben werden? (j/N) " + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" wurde bereits durch Schlüssel %08lX lokal beglaubigt\n" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" wurde bereits durch Schlüssel %08lX beglaubigt\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nichts zu beglaubigen für Schlüssel %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Dieser Schlüssel ist verfallen!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Dieser Schlüssel wird %s verfallen.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Soll Ihre Beglaubigung zur selben Zeit verfallen? (J/n) " + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" +"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln unterschrieben " +"werden\n" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "Dies würde den Schlüssel für PGP 2.x unbrauchbar machen\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Wie genau haben Sie überprüft, ob der Schlüssel, den Sie jetzt beglaubigen\n" +"wollen, wirklich der o.g. Person gehört?\n" +"Wenn Sie darauf keine Antwort wissen, geben Sie \"0\" ein.\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Ich antworte nicht.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Ich habe es überhaupt nicht überprüft.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Ich habe es flüchtig überprüft.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Ich habe es sehr sorgfältig überprüft.%s\n" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2042,41 +2396,73 @@ msgstr "" "Sind Sie wirklich sicher, daß Sie vorstehenden Schlüssel mit Ihrem\n" "Schlüssel beglaubigen wollen: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 msgid "" +"\n" "The signature will be marked as non-exportable.\n" -"\n" msgstr "" -"Die Unterschrift wird als nicht exportfähig markiert werden.\n" "\n" +"Die Unterschrift wird als nicht exportfähig markiert werden.\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"Die Unterschrift wird als nicht exportfähig markiert werden.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Ich habe diesen Schlüssel überhaupt nicht überprüft.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Ich habe diesen Schlüssel flüchtig überprüft.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Ich habe diesen Schlüssel sehr sorgfältig überprüft.\n" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Wirklich unterschreiben? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "Beglaubigung fehlgeschlagen: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Dieser Schlüssel ist nicht geschützt.\n" -#: g10/keyedit.c:426 +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" msgstr "Geheime Teile des Haupschlüssels sind nicht vorhanden\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "Schlüssel ist geschützt.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Dieser Schlüssel kann nicht editiert werden: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2084,7 +2470,7 @@ msgstr "" "Geben Sie das neue Mantra für diesen geheimen Schlüssel ein.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2092,421 +2478,557 @@ msgstr "" "Sie wollen kein Mantra - dies ist bestimmt *keine* gute Idee!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Möchten Sie dies wirklich tun? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "schiebe eine Beglaubigung an die richtige Stelle\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "Menü verlassen" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "save" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "speichern und Menü verlassen" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "help" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "Diese Hilfe zeigen" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "\"Fingerabdruck\" anzeigen" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "Liste der Schlüssel" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "Schlüssel und User-IDs auflisten" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "User-ID N auswählen" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "key" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "Zweitschlüssel N auswählen" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "check" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "Liste der Signaturen" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "sign" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "Den Schlüssel signieren" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" -msgstr "Den Schlüssel nur auf diesem Rechner signieren" +msgstr "Den Schlüssel nur für diesen Rechner beglaubigen" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "Den Schlüssel nicht-widerrufbar beglaubigen" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "Den Schlüssel nicht-widerrufbar und nur für diesen Rechner signieren" + +#: g10/keyedit.c:832 msgid "debug" msgstr "debug" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "Eine User-ID hinzufügen" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "addphoto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "Eine Foto-ID hinzufügen" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "User-ID entfernen" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "Einen Zweitschlüssel hinzufügen" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "Einen Zweitschlüssel entfernen" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "delsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "Signatur entfernen" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "Ändern des Verfallsdatums" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "primary" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "User-ID als Haupt-User-ID kennzeichnen" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "Umschalten zwischen Anzeige geheimer und öffentlicher Schlüssel" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "Liste der Voreinstellungen" +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "Liste der Voreinstellungen (für Experten)" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "Liste der Voreinstellungen (ausführlich)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "Liste der Voreinstellungen einstellen" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "geänderte Voreinstellungen" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "Das Mantra ändern" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "trust" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "Den \"Owner trust\" ändern" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "Signaturen widerrufen" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "Einen Zweitschlüssel widerrufen" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "disable" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "Schlüssel abschalten" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "enable" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "Schlüssel anschalten" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "showphoto" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "Foto-ID anzeigen" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "Dies kann im Batchmodus nicht durchgeführt werden.\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "Fehler beim Lesen des geheimen Schlüsselblocks `%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Geheimer Schlüssel ist vorhanden.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Befehl> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "Hierzu wird der geheime Schlüssel benötigt.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" msgstr "Bitte verwenden sie zunächst den Befehl \"toggle\"\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +msgid "Key is revoked." +msgstr "Schlüssel wurde widerrufen." + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Wirklich alle User-IDs beglaubigen? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Tip: Wählen Sie die User-IDs, die beglaubigt werden sollen\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "Änderung der \"Trust-DB\" fehlgeschlagen: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "Dieses Kommando ist im %s-Modus nicht erlaubt.\n" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Zumindestens eine User-ID muß ausgewählt werden.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Die letzte User-ID kann nicht gelöscht werden!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Möchten Sie alle ausgewählten User-IDs wirklich entfernen? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Diese User-ID wirklich entfernen? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Zumindestens ein Schlüssel muß ausgewählt werden.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Möchten Sie die ausgewählten Schlüssel wirklich entfernen? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Möchten Sie diesen Schlüssel wirklich entfernen? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Möchten Sie die ausgewählten Schlüssel wirklich widerrufen? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Möchten Sie diesen Schlüssel wirklich wiederrufen? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "" +"Möchten Sie die Voreinstellungen der ausgewählten User-IDs wirklich ändern? " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Die Voreinstellungen wirklich ändern? " + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Änderungen speichern? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Beenden ohne zu speichern? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "Änderung fehlgeschlagen: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "Änderung des Geheimnisses fehlgeschlagen: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "Schlüssel ist nicht geändert worden, also ist kein Speichern nötig.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Ungültiger Befehl (versuchen Sie's mal mit \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Dieser Schlüssel könnte von %s key %s%s widerrufen worden sein\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr "(empfindlich)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX erstellt: %s verfällt: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " Vertrauen: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Hinweis: Dieser Schlüssel ist abgeschaltet" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "Schlüssel %08lX: Unterschlüssel wurde widerrufen\n" +msgstr "rev! Unterschlüssel wurde widerrufen: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr "neue Schlüsselwiderrufe: %lu\n" +msgstr "rev- gefälschter Schlüsselwiderruf entdeckt\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" -msgstr "" +msgstr "rev? Schwierigkeiten bei der Widerruf-Überprüfung: %s\n" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" +"Bitte beachten Sie, daß ohne einen Programmneustart die angezeigte\n" +"Schlüsselgültigkeit nicht notwendigerweise korrekt ist.\n" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"WARNUNG: Dieser Schlüssel besitzt bereits eine Foto-ID.\n" +" Ein hinzugefügte Foto-ID könnte einige Versionen von PGP " +"verwirren.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Wollen Sie ihn immmer noch hinzufügen? (j/N) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Sie können nur eine Foto-ID für diesen Schlüssel haben.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID " +"könnte\n" +" bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "Sie können einem PGP2-artigen Schlüüsel keine Foto-ID hinzufügen.\n" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Diese ungültige Beglaubigung entfernen= (j/N/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Diese unbekannte Beglaubigung entfernen? (j/N/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Eigenbeglaubigung wirklich entfernen? (j/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "%d Beglaubigungen entfernt.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d Beglaubigungen entfernt.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Nichts entfernt.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Bitte entfernen Sie die Auswahl von den geheimen Schlüsseln.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Bitte wählen Sie höchstens einen Zweitschlüssel aus.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Ändern des Verfallsdatums des Zweitschlüssels.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Ändern des Verfallsdatums des Hauptschlüssels.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Sie können das Verfallsdatum eines v3-Schlüssels nicht ändern\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Keine entsprechende Signatur im geheimen Schlüsselbund\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Bitte genau eine User-ID auswählen.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Keine User-ID mit Index %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Kein Zweitschlüssel mit Index %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "User-ID: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2515,250 +3037,375 @@ msgstr "" "\"\n" "unterschrieben mit Ihrem Schlüssel %08lX um %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"lokal unterschrieben mit Ihrem Schlüssel %08lX um %s\n" + +#: g10/keyedit.c:2457 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "Diese Unterschrift ist seit %s verfallen.\n" + +#: g10/keyedit.c:2461 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Wollen Sie ihn immmer noch widerrufen? (j/N) " + +#: g10/keyedit.c:2465 +msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Ein Widerrufszertifikat für diese Unterschrift erzeugen (j/N)" #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Sie haben folgende User-IDs beglaubigt:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 +#: g10/keyedit.c:2504 #, c-format -msgid " signed by %08lX at %s\n" -msgstr " beglaubigt durch %08lX um %s\n" +msgid " signed by %08lX at %s%s%s\n" +msgstr " beglaubigt durch %08lX um %s%s%s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " widerrufen durch %08lX um %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Es werden nun folgende Beglaubigungen entfernt:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " beglaubigt durch %08lX am %s%s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr " (nicht-exportierbar)" + +#: g10/keyedit.c:2551 +msgid "Really create the revocation certificates? (y/N) " msgstr "Wirklich ein Unterschrift-Widerrufszertifikat erzeugen? (j/N) " -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "Kein geheimer Schlüssel\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "Ungültige ASCII-Hülle" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" +"Anzeigen einer %s Photo ID (%ld Byte) für Schlüssel %08lX (User-ID %d)\n" -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "revkey" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Beglaubigungsrichtlinie: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "WARNUNG: Ungültige \"Notation\"-Daten gefunden\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Beglaubigungs-\"Notation\": " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "nicht als Klartext darstellbar" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Schlüsselbund" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 +#: g10/keylist.c:423 g10/mainproc.c:856 #, c-format msgid " [expires: %s]" msgstr " [verfällt: %s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Fingerabdruck:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Fingerabdruck:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Schl.-Fingerabdruck =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s verschlüsselte Daten\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "Mit unbekanntem Verfahren verschlüsselt %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "Öffentlicher Schlüssel ist %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "Mit öffentlichem Schüssel verschlüsselte Daten: Korrekte DEK\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "verschlüsselt mit %u-Bit %s Schlüssel, ID %08lX, erzeugt %s\n" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( # [kw] -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "verschlüsselt mit %s Schlüssel, ID %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "kein geheimer Schlüssel zur Entschlüsselung vorhanden\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "Entschlüsselung mit öffentlichem Schlüssel fehlgeschlagen: %s\n" -#: g10/mainproc.c:342 -msgid "decryption okay\n" -msgstr "Enschlüsselung fehlgeschlagen: %s\n" +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "vermutlich %s-verschlüsselte Daten\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "IDEA-Verschlüsselung nicht verfügbar; versucht wird stattdessen %s\n" + +#: g10/mainproc.c:466 +msgid "decryption okay\n" +msgstr "Entschlüsselung erfolgreich\n" + +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "Warnung: Verschlüsselte Botschaft ist manipuliert worden!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" -msgstr "Enschlüsselung fehlgeschlagen: %s\n" +msgstr "Entschlüsselung fehlgeschlagen: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" "Hinweis: Der Absender verlangte Vertraulichkeit(\"for-your-eyes-only\")\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "Ursprünglicher Dateiname='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "Einzelner Widerruf - verwenden Sie \"gpg --import\" um ihn anzuwenden\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "WARNUNG: Ungültige \"Notation\"-Daten gefunden\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "\"Notation\": " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Richtlinie: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "Unterschriften-Überprüfung unterdrückt\n" +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "diese Mehrfachunterschriften können nicht behandelt werden\n" + # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( -#: g10/mainproc.c:1080 +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Unterschrift vom %.*s, %s Schlüssel ID %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "FALSCHE Unterschrift von \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Verfallene Unterschrift von \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Korrekte Unterschrift von \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[ungewiß] " + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Unterschrift kann nicht geprüft werden: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "keine abgetrennte Unterschrift\n" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "Einzelne Unterschrift der Klasse 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "Unterschrift nach alter (PGP 2.x) Art\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "ungültiges root-Paket in proc_tree() entdeckt\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "core-dump-Dateierzeugung kann nicht abgeschaltet werden: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Experimentiermethoden sollten nicht benutzt werden!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" -msgstr "" -"Diese Verschlüsselungsmethode taugt nicht mehr viel; verwenden Sie eine " -"stärker standardisierte Methode!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" +msgstr "Es ist davon abzuraten, diese Verschlüsselungsmethode zu benutzen!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Warnung: Unsicheres Besitzverhältnis von %s \"%s\"\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Warnung: Unsichere Zugriffsrechte für %s \"%s\"\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "das IDEA-Verschlüsselungs-Plugin ist nicht vorhanden\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "Für weitere Info siehe http://www.gnupg.org/why-not-idea.html\n" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "dieses Public-Key Verfahren %d kann nicht benutzt werden\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "Im Unterpaket des Typs %d ist das \"critical bit\" gesetzt\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" -msgstr "" +msgstr "GPG-Agent ist in dieser Sitzung nicht vorhanden\n" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "Client-PID für den Agent kann nicht gesetzt werden\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "Server-Lese-Handle für den Agent nicht verfügbar\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "Server-Schreib-Handle für den Agent nicht verfügbar\n" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "fehlerhaft aufgebaute GPG_AGENT_INFO - Umgebungsvariable\n" -#: g10/hkp.c:158 g10/passphrase.c:223 +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "GPG-Agent-Protokoll-Version %d wird nicht unterstützt\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 #, c-format msgid "can't connect to `%s': %s\n" msgstr "Verbindung zu '%s' kann nicht aufgebaut werden: %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "Kommunikationsproblem mit GPG-Agent\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "" +"Schwierigkeiten mit dem Agenten - Agent-Ansteuerung wird abgeschaltet\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (Hauptschlüssel-ID %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" "Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n" -"Benutzer: \"" +"Benutzer: \"\"%.*s\"\n" +"%u-bit %s Schlüssel, ID %08lX, erzeugt %s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Geben Sie das Mantra ein: " +msgstr "Geben Sie das Mantra ein\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Geben Sie das Mantra nochmal ein: " +msgstr "Geben Sie das Mantra nochmal ein\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "" +msgstr "Mantra ist zu lang\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "Falsche Antwort des Agenten\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "Abbruch durch Benutzer\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "Schwierigkeiten mit dem Agenten: Agent antwortet 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2768,20 +3415,20 @@ msgstr "" "Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n" "Benutzer: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "%u-Bit %s Schlüssel, ID %08lX, erzeugt %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "Mantra kann im Batchmodus nicht abgefragt werden\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Geben Sie das Mantra ein: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Geben Sie das Mantra nochmal ein: " @@ -2790,151 +3437,203 @@ msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "Daten wurden nicht gespeichert; verwenden Sie dafür die Option \"--output\"\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "Fehler beim Erstellen von `%s': %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" msgstr "Abgetrennte Beglaubigungen.\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Bitte geben Sie den Namen der Datendatei ein: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "lese stdin ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "keine unterschriebene Daten\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "kann signierte Datei '%s' nicht öffnen.\n" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" -msgstr "Ungenannter Empfänger: Versuch mit geheimen Schlüssel %08lX ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "Ungenannter Empfänger; Versuch mit geheimen Schlüssel %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "Alles klar, wir sind der ungenannte Empfänger.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "alte Kodierung des DEK wird nicht unterstützt\n" -#: g10/pubkey-enc.c:216 +#: g10/pubkey-enc.c:177 #, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "Verschüsselungsverfahren %d ist unbekannt oder abgeschaltet\n" +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "Verschüsselungsverfahren %d%s ist unbekannt oder abgeschaltet\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "Hinweis: Verfahren %d ist kein bevorzugtes Verschlüsselungsverfahren\n" -#: g10/pubkey-enc.c:261 +#: g10/pubkey-enc.c:242 #, c-format msgid "NOTE: secret key %08lX expired at %s\n" msgstr "Hinweis: geheimer Schlüssel %08lX verfällt am %s\n" -#: g10/hkp.c:62 +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "Schlüssel %08lX von %s wird angefordert ...\n" +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "Schlüssel %08lX wird von HKP-Schlüsselserver %s angefordert\n" -#: g10/hkp.c:75 +#: g10/hkp.c:94 #, c-format msgid "can't get key from keyserver: %s\n" msgstr "Schlüssel ist beim Schlüsselserver nicht erhältlich: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "Kein Schlüsselserver bekannt (Option --keyserver verwenden)\n" - -#: g10/hkp.c:106 -#, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s: Dies ist keine gültige Schlüssel-ID\n" - -#: g10/hkp.c:182 +#: g10/hkp.c:171 #, c-format msgid "error sending to `%s': %s\n" msgstr "Fehler beim Senden an `%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" msgstr "Senden an `%s' erfolgreich (status=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" msgstr "Senden an `%s' erfolglos (status=%u)\n" -#: g10/seckey-cert.c:89 +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "suche nach \"%s\" auf HKP-Server %s\n" + +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "kann Schlüsselserver nicht durchsuchen: %s\n" + +#: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "Teile des geheimen Schlüssels sind nicht vorhanden\n" -#: g10/seckey-cert.c:95 +#: g10/seckey-cert.c:59 #, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "Schutzverfahren %d wird nicht unterstützt\n" +msgid "protection algorithm %d%s is not supported\n" +msgstr "Schutzverfahren %d%s wird nicht unterstützt\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "Ungültiges Mantra; versuchen Sie's doch noch einmal ...\n" +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Ungültiges Mantra; versuchen Sie es bitte noch einmal" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "WARNUNG: Unsicherer Schlüssel entdeckt -\n" " bitte Mantra nochmals wechseln.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" +"Die mißbilligte 16-bit Prüfsumme wird zum Schutz des geheimen Schlüssels " +"benutzt\n" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Dieser durch PGP erzeugte ElGamal-Schlüssel ist für Signaturen NICHT sicher " "genug!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "" "Öffentlicher Schlüssel ist um %lu Sekunde jünger als die Unterschrift\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "" "Öffentlicher Schlüssel ist um %lu Sekunden jünger als die Unterschrift\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "Hinweis: Schlüssel der Signatur ist verfallen am %s.\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "Hinweis: Signaturschlüssel %08lX ist am %s verfallen.\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "Vermutlich eine FALSCHE Unterschrift, wegen unbekanntem \"critical bit\"\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"WARNUNG: Richtlinien-URL kann nicht %%-erweitert werden (zu gro0). Verwende " +"\"unerweiterte\".\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "Prüfung der erstellten Unterschrift ist fehlgeschlagen: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "%s Unterschrift von: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "WARNUNG: '%s' ist eine leere Datei.\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln unterschrieben " +"werden\n" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "%s kann nicht erzeugt werden: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "unterschreibe:" -#: g10/sign.c:583 +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus können Sie Klartextunterschriften nur mit PGP-2.x-artigen " +"Schlüssel machen\n" + +#: g10/sign.c:953 #, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "WARNUNG: '%s' ist eine leere Datei.\n" +msgid "%s encryption will be used\n" +msgstr "%s Verschlüsselung wird verwendet\n" #: g10/textfilter.c:134 #, c-format @@ -2946,426 +3645,210 @@ msgstr "Textzeilen l msgid "input line longer than %d characters\n" msgstr "Eingabezeile ist länger als %d Zeichen\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb Satz %lu: lseek fehlgeschlagen: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb Satz %lu: write fehlgeschlagen (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "trustdb Transaktion zu groß\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: kann nicht zugegriffen werden: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: Verzeichnis existiert nicht!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: kann nicht erzeugt werden: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: Sperre kann nicht erzeugt werden\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: Sperre kann nicht erzeugt werden\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: kann nicht erzeugt werden: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: Fehler beim Erzeugen des Versionsatzes: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: ungültige trust-db erzeugt\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trust-db erzeugt\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ungültige 'Trust'-Datenbank\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: hashtable kann nicht erzeugt werden: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: Fehler beim Ändern des Versionsatzes: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: Fehler beim Lesen des Versionsatzes: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek fehlgeschlagen: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read failed (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: keine trustdb Datei\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: version record with recnum %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: invalid file version %d\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: Fehler beim Lesen eines freien Satzes: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: Fehler beim Schreiben eines Verzeichnis-Satzes: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: konnte einen Satz nicht Nullen: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: konnte Satz nicht anhängen: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" -"Die \"Trust\"-Datenbank ist beschädigt; verwenden Sie \"gpg " -"--fix-trustdb\".\n" +"Die \"Trust\"-Datenbank ist beschädigt; verwenden Sie \"gpg --fix-trustdb" +"\".\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "'%s' ist keine gültige lange Schlüssel-ID\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "Schlüssel %08lX: Akzeptiert als vertrauenswürdiger Schlüssel\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "Schlüssel %08lX tritt mehr als einmal in der \"trustdb\" auf\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "" +"Schlüssel %08lX: kein öffentlicher Schlüssel für den vertrauenswürdigen " +"Schlüssel - übersprungen\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "trust record %lu, req type %d: read failed: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "Vertrauenssatz %lu ist nicht von der angeforderten Art %d\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "trust record %lu, type %d: write failed: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "Vertrauenssatz %lu: löschen fehlgeschlagen: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "\"Trust-DB\": sync fehlgeschlagen: %s\n" -#: g10/trustdb.c:377 +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "Fehler beim Lesen des Dir-Satzes für LID %lu: %s\n" +msgid "next trustdb check due at %s\n" +msgstr "nächste \"Trust-DB\"-Pflichtüberprüfung am %s\n" -#: g10/trustdb.c:384 +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "\"Trust-DB\" wird überprüft\n" + +#: g10/trustdb.c:933 #, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: Dir-Satz erwartet, aber es kam Typ %d\n" +msgid "public key %08lX not found: %s\n" +msgstr "Öffentlicher Schlüssel %08lX nicht gefunden: %s\n" -#: g10/trustdb.c:389 +#: g10/trustdb.c:1515 #, c-format -msgid "no primary key for LID %lu\n" -msgstr "Kein Hauptschlüssel für LID %lu\n" - -#: g10/trustdb.c:394 -#, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "Fehler beim Lesen den Hauptschlüssels der LID %lu: %s\n" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record fehlgeschlagen: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "%s: Dies ist keine gültige Schlüssel-ID\n" - -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "Schlüssel %08lX kann nicht in die \"trustdb\" eingefügt werden\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "Schlüssel %08lX: Satzabfrage fehlgeschlagen\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "Schlüssel %08lX: Ist bereits in geheimer Schlüsseltabelle\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "Schlüssel %08lX: Akzeptiert als vertrauenswürdiger Schlüssel.\n" - -#: g10/trustdb.c:547 -#, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "Schlüssel %08lX: ungeschützt - übersprungen\n" - -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "HINWEIS: Geheimer Schlüssel %08lX ist NICHT geschützt.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" +msgid "public key of ultimately trusted key %08lX not found\n" msgstr "" -"Schlüssel %08lX: geheimer und öffentlicher Schlüssel passen nicht zusammen.\n" +"öff.Schlüssel des uneingeschränkt vertrautem Schlüssel %08lX nicht gefunden\n" -#: g10/trustdb.c:598 +#: g10/trustdb.c:1593 #, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "enum_secret_keys fehlgeschlagen: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "Schlüssel %08lX.%lu: Korrekte Unterschlüssel-Anbindung\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "Schlüssel %08lX.%lu: Ungültige Unterschlüssel-Anbindung: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "Schlüssel %08lX.%lu: Gültiger Schlüsselwiderruf\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "Schlüssel %08lX.%lu: Ungültiger Schlüsselwiderruf: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "Schlüssel %08lX.%lu: Gültiger Unterschlüsselwiderruf\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Korrekte Eigenbeglaubigung" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Ungültige Eigenbeglaubigung" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -"Gültiger User-ID-Widerruf ignoriert, da eine neuere Eigenbeglaubigung " -"vorliegt" +"überprüfen, Tiefe %d, unterschrieben =%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Gültiger User-ID-Widerruf" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Ungültiger User-ID-Widerruf" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Gültiger Zerifikat-Widerruf" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Korrektes Zertifikat" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Ungültiger Zertifikatswiderruf" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Ungültiges Zertifikat" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "Signatursatz %lu[%d] zeigt auf falschen Satz.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "Doppelte Zertifikate - entfernt" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir fehlgeschlagen: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: Einfügen fehlgeschlagen: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: Einfügen fehlgeschlagen: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: eingefügt\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "Fehler beim Lesen des Verz.Satzes: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu Schlüssel bearbeitet\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu Schlüssel mit Fehlern\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu Schlüssel eingefügt\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "enumerate Schlüsselblock fehlgeschlagen: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: Dir-Satz ohne Schlüssel - übergangen\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu wegen neuer Schlüssel\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu Schlüssel übersprungen\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu Schlüssel geändert\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Huch, keine Schlüssel\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Huch, keine User-IDs\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: Suche nach Dir-Satz fehlgeschlagen: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "Schlüssel %08lX: 'trust record' einfügen fehlgeschlagen: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "Schlüssel %08lX.%lu: in \"trustdb\" eingefügt\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" -msgstr "" -"Schlüssel %08lX.%lu: wurde in der Zukunft erzeugt (Zeitreise oder Uhren " -"stimmen nicht überein)\n" - -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "Schlüssel %08lX.%lu: verfallen am %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "Schlüssel %08lX.%lu: Vertrauensprüfung fehlgeschlagen: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "Benutzer '%s' nicht gefunden: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "Problem, '%s' in der Trust-DB zu finden: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "User '%s' ist nicht in der 'Trust'-Datenbank - wird eingefügt\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "konnte '%s' nicht in die 'Trust'-Datenbank hineintun: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "WARNUNG: Lange 'Pref'-Records können noch nicht benutzt werden\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3375,45 +3858,32 @@ msgstr "" "Denken Sie daran, daß die Datei mit der Unterschrift (.sig oder .asc)\n" "als erster in der Kommandozeile stehen sollte.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "Eingabezeile %u ist zu lang oder es fehlt ein LF\n" -#: g10/ringedit.c:296 +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"Schlüssel ist nicht als unsicher gekennzeichnet - er ist nur mit einem\n" +"echten Zufallsgenerator verwendbar\n" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: Schlüsselbund kann nicht erzeugt werden: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "übersprungen '%s': doppelt\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: Schlüsselbund erstellt\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s ist der Unveränderte\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s ist der Neue\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Bitte diesen potentiellen Sicherheitsmangel beseitigen\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "übersprungen '%s': %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "übersprungen: geheimer Schlüssel bereits vorhanden\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3432,93 +3902,102 @@ msgstr "Datei '%s' existiert bereits. " msgid "Overwrite (y/N)? " msgstr "Überschreiben (j/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: unbekannte Dateinamenerweiterung\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Neuen Dateinamen eingeben" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "Schreiben auf die Standardausgabe\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "die unterzeichneten Daten sind wohl in '%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: neue Optionendatei erstellt\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: Verzeichnis kann nicht erzeugt werden: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: Verzeichnis erzeugt\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "" "Sie müssen GnuPG noch einmal starten, damit es die neue Optionsdatei liest\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "Mit unbekanntem Verfahren verschlüsselt %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "%s verschlüsselte Daten\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "Warnung: Botschaft wurde mit einem unsicheren Schlüssel verschlüsselt.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "Problem beim Bearbeiten des verschlüsselten Pakets\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "Unsicherer Schlüssel erzeugt - neuer Versuch\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "Trotz %d-fachen Versuch konnte die Erzeugung eines unsicheren Schlüssels für " "sym.Verschlüsselung nicht vermieden werden!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "Es gibt einen privaten Schlüssel zu diesem öffentlichen Schlüssel!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "DSA benötigt einen 160-bit Hash Algorithmus\n" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "" -"Benutzen Sie das Kommando \"--delete-secret-key\", um ihn vorab zu " -"entfernen.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgeführt werden.\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Diesen Schlüssel aus dem Schlüsselbund löschen? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "Dies ist ein privater Schlüssel! - Wirklich löschen? " +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "löschen des Schlüsselblocks fehlgeschlagen: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "Der \"Ownertrust\" wurde gelöscht\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "" +"Es gibt einen privaten Schlüssel zu diesem öffentlichen Schlüssel \"%s\"!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "" +"Verwenden Sie zunächst das Kommando \"--delete-secret-key\", um ihn zu " +"entfernen.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3531,24 +4010,36 @@ msgstr "" "(implizit erzeugten) \"Netz der Zertifikate\" zu tun." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Um das Web-of-Trust aufzubauen muß GnuPG wissen, welchen Schlüsseln\n" +"uneingeschränkt vertraut wird. Das sind üblicherweise die Schlüssel\n" +"auf deren geheimen Schlüssel Sie Zugruff haben.\n" +"Antworten Sie mit \"yes\" um diesen Schlüssel uneingeschränkt zu vertrauen\n" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "" "Wenn Sie diesen widerrufenen Schlüssel trotzdem benutzen wollen,\n" "so antworten Sie mit \"ja\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Wenn Sie diesen nicht vertrauenswürdigen Schlüssel trotzdem benutzen " "wollen,\n" "so antworten Sie mit \"ja\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Geben Sie die User-ID dessen ein, dem Sie die Botschaft senden wollen." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3591,7 +4082,7 @@ msgstr "" "sein. Deshalb kann ein nur-Verschlüssel-ElGamal-Schlüssel dafür nicht\n" "verwendet werden." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3603,16 +4094,16 @@ msgstr "" "Außerdem sind damit ezeugte Unterschriften recht groß und ihre Überprüfung\n" "ist langsam." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Wählen Sie die gewünschte Schlüssellänge" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Geben Sie \"ja\" oder \"nein\" ein" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3624,21 +4115,21 @@ msgstr "" "erhält dann ggfs. keine brauchbaren Fehlermeldungen - stattdessen versucht\n" "der Rechner den Wert als Intervall (von-bis) zu deuten." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Geben Sie den Namen des Schlüsselinhabers ein" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "" "Geben Sie eine E-Mail-Adresse ein. Dies ist zwar nicht unbedingt notwendig,\n" "aber sehr empfehlenswert." -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Geben Sie - bei Bedarf - einen Kommentar ein" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3652,16 +4143,91 @@ msgstr "" "F um mit der Schlüsselerzeugung fortzusetzen.\n" "B um die Schlüsselerzeugung abbrechen." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" "Geben Sie \"ja\" (oder nur \"j\") ein, um den Unterschlüssel zu erzeugen." -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Wenn Sie die User-ID eines Schlüssels beglaubigen wollen, sollten Sie " +"zunächst\n" +"sicherstellen, daß der Schlüssel demjenigen gehört, der in der User-ID " +"genannt\n" +"ist. Für Dritte ist es hilfreich zu wissen, wie gut diese Zuordnung " +"überprüft\n" +"wurde.\n" +"\n" +"\"0\" zeigt, daß Sie keine bestimmte Aussage über die Sorgfalt der \n" +" Schlüsselzuordnung machen.\n" +"\n" +"\"1\" Sie glauben, daß der Schlüssel der benannten Person gehört,\n" +" aber Sie konnten oder nahmen die Überpüfung überhaupt nicht vor.\n" +" Dies ist hilfreich für eine \"persona\"-Überprüfung, wobei man den\n" +" Schlüssel eines Pseudonym-Trägers beglaubigt\n" +"\n" +"\"2\" Sie nahmen eine flüchtige Überprüfung vor. Das heisst Sie haben z.B.\n" +" den Schlüsselfingerabdruck kontrolliert und die User-ID des Schlüssels\n" +" anhand des Fotos geprüft.\n" +"\n" +"\"3\" Sie haben eine ausführlich Kontrolle des Schlüssels vorgenommen.\n" +" Das kann z.B. die Kontrolle des Schlüsselfingerabdrucks mit dem\n" +" Schlüsselinhaber persönlich vorgenommen haben; daß Sie die User-ID des\n" +" Schlüssel anhand einer schwer zu fälschenden Urkunde mit Foto (wie z.B.\n" +" einem Paß) abgeglichen haben und schliesslich per E-Mail-Verkehr die\n" +" E-Mail-Adresse als zum Schlüsselbesitzer gehörig erkannt haben.\n" +"\n" +"Beachten Sie, daß diese Beispiele für die Antworten 2 und 3 *nur* Beispiele " +"sind.\n" +"Schlußendlich ist es Ihre Sache, was Sie unter \"flüchtig\" oder " +"\"ausführlich\"\n" +"verstehen, wenn Sie Schlüssel Dritter beglaubigen.\n" +"\n" +"Wenn Sie nicht wissen, wie Sie antworten sollen, wählen Sie \"0\"." + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Geben Sie \"ja\" (oder nur \"j\") ein, um alle User-IDs zu beglaubigen" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3669,12 +4235,12 @@ msgstr "" "Geben Sie \"ja\" (oder nur \"j\") ein, um diese User-ID zu LÖSCHEN.\n" "Alle Zertifikate werden dann auch weg sein!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "" "Geben Sie \"ja\" (oder nur \"j\") ein, um diesen Unterschlüssel zu löschen" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3686,7 +4252,7 @@ msgstr "" "Schlüssel\n" "herzustellen." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3699,7 +4265,7 @@ msgstr "" "sie wissen, welcher Schlüssel verwendet wurde. Denn vielleicht würde genau\n" "diese Beglaubigung den \"Trust\"-Weg kompletieren." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." @@ -3707,7 +4273,7 @@ msgstr "" "Diese Beglaubigung ist ungültig. Es ist sinnvoll sie aus Ihrem\n" "Schlüsselbund zu entfernen." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3723,40 +4289,38 @@ msgstr "" "irgendeinem Grund nicht gültig ist und eine zweite Beglaubigung verfügbar " "ist." -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" msgstr "" -"Bitte geben Sie das Mantra ein. Dies ist ein geheimer Satz, der aus\n" -"beliebigen Zeichen bestehen kann. Was Sie eingegeben wird nicht angezeigt.\n" -"\n" -"Zur ihrer eigenen Sicherbeit benutzen Sie bitte einen Satz, den sie sich\n" -"gut merken könne, der aber nicht leicht zu erraten ist; Zitate und andere\n" -"bekannte Texte sind eine SCHLECHTE Wahl, da diese mit Sicherheit online\n" -"verfügbar sind und durch entsprechende Programme zum Raten des Mantras\n" -"benutzt werden. Sätze mit persönlicher Bedeutung, die auch noch durch\n" -"falsche Groß-/Kleinschreibung und eingestreute Sonderzeichen verändert " -"werden,\n" -"sind i.d.R. eine gute Wahl" +"Ändern der Voreinstellung aller User-IDs (oder nur der ausgewählten)\n" +"auf die aktuelle Liste der Voreinstellung. Die Zeitangaben aller " +"betroffenen\n" +"Eigenbeglaubigungen werden um eine Sekunde vorgestellt.\n" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Bitte geben Sie das Mantra ein. Dies ist ein geheimer Satz \n" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Um sicher zu gehen, daß Sie sich bei der Eingabe des Mantras nicht\n" "vertippt haben, geben Sie diese bitte nochmal ein. Nur wenn beide Eingaben\n" "übereinstimmen, wird das Mantra akzeptiert." -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "" "Geben Sie den Namen der Datei an, zu dem die abgetrennte Unterschrift gehört" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Geben Sie \"ja\" ein, wenn Sie die Datei überschreiben möchten" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3765,15 +4329,14 @@ msgstr "" "Eingabetaste betätigen, wird der (in Klammern angezeigte) Standarddateiname\n" "verwendet." -#: g10/helptext.c:229 -#, fuzzy +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3794,7 +4357,7 @@ msgstr "" " Um bekanntzugeben, daß die User-ID nicht mehr benutzt werden soll.\n" " So weist man normalerweise auf eine ungültige E-Mailadresse hin.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" @@ -3804,18 +4367,380 @@ msgstr "" "Sie diesen Widerruf herausgeben. Der Text sollte möglichst knapp sein.\n" "Eine Leerzeile beendet die Eingabe.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Keine Hilfe vorhanden." -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Keine Hilfe für '%s' vorhanden." +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "Fehler beim Erzeugen des Schlüsselbundes `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "Ändern der Zugriffsrechte für `%s' ist fehlgeschlagen: %s\n" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "Schlüsselbund `%s' erstellt\n" + +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "Schlüsselbund-Cache konnte nicht neu erzeugt werden: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s ist der Unveränderte\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s ist der Neue\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Bitte diesen potentiellen Sicherheitsmangel beseitigen\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "Prüfen des Schlüsselbundes `%s'\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu Schlüssel bislang geprüft (%lu Beglaubigungen)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu Schlüssel geprüft (%lu Beglaubigungen)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: Schlüsselbund erstellt\n" + +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Sind Sie sicher, daß Sie dies wiklich unterschreiben möchten?\n" + +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr " Sind Sie sicher, daß Sie dies immer noch unterschreiben wollen?\n" + +#~ msgid "Really sign? (y/N) " +#~ msgstr "Wirklich unterschreiben? (j/N) " + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "Schlüssel %08lX: Unsere Kopie hat keine Eigenbeglaubigung\n" + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Brauchen Sie wirklich einen derartig langen Schlüssel? " + +#~ msgid " signed by %08lX at %s\n" +#~ msgstr " beglaubigt durch %08lX um %s\n" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key User-ID" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key User-ID" + +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key User-ID" + +#~ msgid "Enter the user ID: " +#~ msgstr "Geben Sie die User-ID ein: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "" +#~ "übersprungen: öffentlicher Schlüssel bereits mittels --encrypt-to " +#~ "gesetzt\n" + +#~ msgid "" +#~ "\n" +#~ "WARNING: This is a PGP2-style key\n" +#~ msgstr "WARNUNG: '%s' ist eine leere Datei.\n" + +# valid user replies (not including 1..4) +#~ msgid "sSmMqQ" +#~ msgstr "sSmMqQ" + +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "Kein Schlüsselserver bekannt (Option --keyserver verwenden)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s: Dies ist keine gültige Schlüssel-ID\n" + +#~ msgid "duplicate (short) key ID %08lX\n" +#~ msgstr "Öffentlicher Schlüssel ist %08lX\n" + +#~ msgid "%lu key(s) to refresh\n" +#~ msgstr "\t%lu Schlüssel mit Fehlern\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NAMEN]|Überprüfen der \"Trust\"-Datenbank" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Für diesen Schlüssel konnte kein gültiger \"Trust Path\" gefunden " +#~ "werden.\n" +#~ "Mal sehen, ob wir sonst irgendwie ein paar fehlende \"Owner trust\" " +#~ "Werte \n" +#~ "ermitteln können.\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "Kein Pfad führt zu einem unserer Schlüsseln.\n" +#~ "\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "Keine Zertifikate mit undefiniertem Vertrauen gefunden.\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Keine \"trust\" Werte geändert.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "" +#~ "%08lX: Keine Infos zur Berechnung der Vertrauenswahrscheinlichkeit " +#~ "vorgefunden\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: Fehler beim Prüfen des Schlüssels: %s\n" + +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "zu viele Einträge im unk-Lager - abgeschaltet\n" + +#~ msgid "secret key %08lX not imported (use %s to allow for it)\n" +#~ msgstr "" +#~ "Geheimer Schlüssel %08lX nicht importiert (%s verwenden, um das zu " +#~ "ermöglichen)\n" + +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "Änderung der \"Trust-DB\" fehlgeschlagen: %s\n" + +#~ msgid "assuming bad MDC due to an unknown critical bit\n" +#~ msgstr "" +#~ "Vermutlich ist das Siegel (MDC) BESCHÄDIGT (wegen unbekanntem \"critical " +#~ "bit\")\n" + +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "Fehler beim Lesen des Dir-Satzes für LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lid %lu: Dir-Satz erwartet, aber es kam Typ %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "Kein Hauptschlüssel für LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "Fehler beim Lesen den Hauptschlüssels der LID %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record fehlgeschlagen: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "Schlüssel %08lX: Satzabfrage fehlgeschlagen\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "Schlüssel %08lX: Ist bereits in geheimer Schlüsseltabelle\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "HINWEIS: Geheimer Schlüssel %08lX ist NICHT geschützt.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "" +#~ "Schlüssel %08lX: geheimer und öffentlicher Schlüssel passen nicht " +#~ "zusammen.\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "enum_secret_keys fehlgeschlagen: %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "Schlüssel %08lX.%lu: Korrekte Unterschlüssel-Anbindung\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "Schlüssel %08lX.%lu: Ungültige Unterschlüssel-Anbindung: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "Schlüssel %08lX.%lu: Gültiger Schlüsselwiderruf\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "Schlüssel %08lX.%lu: Ungültiger Schlüsselwiderruf: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "Schlüssel %08lX.%lu: Gültiger Unterschlüsselwiderruf\n" + +#~ msgid "Good self-signature" +#~ msgstr "Korrekte Eigenbeglaubigung" + +#~ msgid "Invalid self-signature" +#~ msgstr "Ungültige Eigenbeglaubigung" + +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "" +#~ "Gültiger User-ID-Widerruf ignoriert, da eine neuere Eigenbeglaubigung " +#~ "vorliegt" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Gültiger User-ID-Widerruf" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Ungültiger User-ID-Widerruf" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Gültiger Zerifikat-Widerruf" + +#~ msgid "Good certificate" +#~ msgstr "Korrektes Zertifikat" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Ungültiger Zertifikatswiderruf" + +#~ msgid "Invalid certificate" +#~ msgstr "Ungültiges Zertifikat" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "Signatursatz %lu[%d] zeigt auf falschen Satz.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "Doppelte Zertifikate - entfernt" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir fehlgeschlagen: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: Einfügen fehlgeschlagen: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: Einfügen fehlgeschlagen: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: eingefügt\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "Fehler beim Lesen des Verz.Satzes: %s\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu Schlüssel eingefügt\n" + +#~ msgid "enumerate keyblocks failed: %s\n" +#~ msgstr "enumerate Schlüsselblock fehlgeschlagen: %s\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: Dir-Satz ohne Schlüssel - übergangen\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr "\t%lu wegen neuer Schlüssel\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu Schlüssel übersprungen\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu Schlüssel geändert\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Huch, keine Schlüssel\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Huch, keine User-IDs\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: Suche nach Dir-Satz fehlgeschlagen: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "Schlüssel %08lX: 'trust record' einfügen fehlgeschlagen: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "Schlüssel %08lX.%lu: in \"trustdb\" eingefügt\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "Schlüssel %08lX.%lu: wurde in der Zukunft erzeugt (Zeitreise oder Uhren " +#~ "stimmen nicht überein)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "Schlüssel %08lX.%lu: verfallen am %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "Schlüssel %08lX.%lu: Vertrauensprüfung fehlgeschlagen: %s\n" + +#~ msgid "user '%s' not found: %s\n" +#~ msgstr "Benutzer '%s' nicht gefunden: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "Problem, '%s' in der Trust-DB zu finden: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "User '%s' ist nicht in der 'Trust'-Datenbank - wird eingefügt\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "konnte '%s' nicht in die 'Trust'-Datenbank hineintun: %s\n" + +#~ msgid "too many random bits requested; the limit is %d\n" +#~ msgstr "Zu viele Zufallswerte angefordert: Die Grenze liegt bei %d\n" + +#~ msgid "For info see http://www.gnupg.org" +#~ msgstr "Weitere Infos: siehe http://www.gnupg.org" + +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) RSA (signieren/beglaubigen und verschlüsseln)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "" +#~ "Möchten Sie wirklich einen Unterschriften-/Verschlüsselungschlüssel " +#~ "erzeugen? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: Benutzer nicht gefunden: %s\n" + #~ msgid "certificate read problem: %s\n" #~ msgstr "Zertifikat Leseproblem: %s\n" +#~ msgid "can't lock keyring `%s': %s\n" +#~ msgstr "kann Schlüsselbund `%s' nicht sperren: %s\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: Benutzer nicht gefunden\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "WARNUNG: Lange 'Pref'-Records können noch nicht benutzt werden\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: Schlüsselbund kann nicht erzeugt werden: %s\n" + +#~ msgid "invalid" +#~ msgstr "ungültig" + +#~ msgid "revoked" +#~ msgstr "widerrufen" + #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "RSA-Schlüssel können in dieser Version nicht verwendet werden\n" @@ -3825,38 +4750,8 @@ msgstr "Keine Hilfe f #~ msgid "No user ID for key\n" #~ msgstr "Keine User-ID für Schlüssel\n" -#~ msgid "no default public keyring\n" -#~ msgstr "Kein voreingestellter öffentlicher Schlüsselbund\n" - -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "kann Schlüsselbund `%s' nicht sperren: %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "" -#~ "Schlüssel %08lX: Lesefehler im lokalen originalen Schlüsselblocks: %s\n" - -#~ msgid "%s: user not found\n" -#~ msgstr "%s: Benutzer nicht gefunden\n" - -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "RSA Schlüssel sind nicht erwünscht; bitte denken Sie darüber nach, einen\n" -#~ "neuen Schlüssel zu erzeugen und diesen in Zukunft zu benutzen\n" - -#~ msgid "not processed" -#~ msgstr "nicht bearbeitet" - -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "" -#~ "Vermutlich ist das Siegel (MDC) BESCHÄDIGT (wegen unbekanntem \"critical " -#~ "bit\")\n" - -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "Schlüssel ist nicht als unsicher gekennzeichnet - er ist nur mit einem\n" -#~ "echten Zufallsgenerator verwendbar\n" +#~ msgid "no secret key for decryption available\n" +#~ msgstr "kein geheimer Schlüssel zur Entschlüsselung vorhanden\n" #~ msgid " (%d) ElGamal in a v3 packet\n" #~ msgstr " (%d) ElGamal in einem v3-Paket\n" diff --git a/po/el.po b/po/el.po new file mode 100644 index 000000000..c3155828c --- /dev/null +++ b/po/el.po @@ -0,0 +1,4383 @@ +# Greek Translation of GnuPG. +# Copyright (C) 2002 Free Software Foundation, Inc. +# Dokianakis Theofanis , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: gnupg 1.0.6\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-29 13:24+0200\n" +"Last-Translator: Dokianakis Theofanis \n" +"Language-Team: Greek \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-7\n" +"Content-Transfer-Encoding: 8bit\n" + +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Ðñïåéäïðïßçóç: ÷ñÞóç ìç áóöáëïýò ìíÞìçò\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "äåßôå ôï http://www.gnupg.org/faq.html ãéá ðåñéóóüôåñåò ðëçñïöïñßåò\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "ç ëåéôïõñãßá äåí åßíáé äõíáôÞ ÷ùñßò áñ÷éêïðïéçìÝíç áóöáëÞ ìíÞìç\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(ßóùò ÷ñçóéìïðïéÞóáôå ëÜèïò ðñüãñáììá ãéá áõôÞ ôçí åñãáóßá)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 +msgid "yes" +msgstr "íáé" + +#: util/miscutil.c:297 util/miscutil.c:334 +msgid "yY" +msgstr "yY" + +#: util/miscutil.c:298 util/miscutil.c:332 +msgid "no" +msgstr "ü÷é" + +#: util/miscutil.c:299 util/miscutil.c:335 +msgid "nN" +msgstr "nN" + +#: g10/keyedit.c:815 util/miscutil.c:333 +msgid "quit" +msgstr "ôåñìáôéóìüò" + +#: util/miscutil.c:336 +msgid "qQ" +msgstr "qQ" + +#: util/errors.c:54 +msgid "general error" +msgstr "ãåíéêü óöÜëìá" + +#: util/errors.c:55 +msgid "unknown packet type" +msgstr "Üãíùóôïò ôýðïò ðáêÝôïõ" + +#: util/errors.c:56 +msgid "unknown version" +msgstr "Üãíùóôç Ýêäïóç" + +#: util/errors.c:57 +msgid "unknown pubkey algorithm" +msgstr "Üãíùóôïò áëãüñéèìïò äçìïóßïõ êëåéäéïý" + +#: util/errors.c:58 +msgid "unknown digest algorithm" +msgstr "Üãíùóôïò áëãïñéèìïò ðåñßëçøçò" + +#: util/errors.c:59 +msgid "bad public key" +msgstr "êáêü äçìüóéï êëåéäß" + +#: util/errors.c:60 +msgid "bad secret key" +msgstr "êáêü ìõóôéêü êëåéäß" + +#: util/errors.c:61 +msgid "bad signature" +msgstr "êáêÞ õðïãñáöÞ" + +#: util/errors.c:62 +msgid "checksum error" +msgstr "óöÜëìá checksum" + +#: util/errors.c:63 +msgid "bad passphrase" +msgstr "êáêÞ öñÜóç êëåéäß" + +#: util/errors.c:64 +msgid "public key not found" +msgstr "äåí âñÝèçêå ôï äçìüóéï êëåéäß" + +#: util/errors.c:65 +msgid "unknown cipher algorithm" +msgstr "Üãíùóôïò áëãüñéèìïò êñõðôïãñÜöçóçò" + +#: util/errors.c:66 +msgid "can't open the keyring" +msgstr "áäõíáìßá ðñüóâáóçò óôç êëåéäïèÞêç" + +#: util/errors.c:67 +msgid "invalid packet" +msgstr "ìç Ýãêõñï ðáêÝôï" + +#: util/errors.c:68 +msgid "invalid armor" +msgstr "ìç Ýãêõñç èùñÜêéóç" + +#: util/errors.c:69 +msgid "no such user id" +msgstr "Üãíùóôç ôáõôüôçôá ÷ñÞóôç (user id)" + +#: util/errors.c:70 +msgid "secret key not available" +msgstr "ôï ìõóôéêü êëåéäß äåí åßíáé äéáèÝóéìï" + +#: util/errors.c:71 +msgid "wrong secret key used" +msgstr "÷ñÞóç ëÜèïò ìõóôéêïý êëåéäéïý" + +#: util/errors.c:72 +msgid "not supported" +msgstr "äåí õðïóôçñßæåôáé" + +#: util/errors.c:73 +msgid "bad key" +msgstr "êáêü êëåéäß" + +#: util/errors.c:74 +msgid "file read error" +msgstr "óöÜëìá áíÜãíùóçò áñ÷åßïõ" + +#: util/errors.c:75 +msgid "file write error" +msgstr "óöÜëìá åããñáöÞò áñ÷åßïõ" + +#: util/errors.c:76 +msgid "unknown compress algorithm" +msgstr "Üãíùóôïò áëãüñéèìïò óõìðßåóçò" + +#: util/errors.c:77 +msgid "file open error" +msgstr "óöÜëìá ðñüóâáóçò áñ÷åßïõ" + +#: util/errors.c:78 +msgid "file create error" +msgstr "óöÜëìá äçìéïõñãßáò áñ÷åßïõ" + +#: util/errors.c:79 +msgid "invalid passphrase" +msgstr "ìç Ýãêõñç öñÜóç êëåéäß" + +#: util/errors.c:80 +msgid "unimplemented pubkey algorithm" +msgstr "ìç õëïðïéçìÝíïò áëãüñéèìïò äçìïóßïõ êëåéäéïý" + +#: util/errors.c:81 +msgid "unimplemented cipher algorithm" +msgstr "ìç õëïðïéçìÝíïò áëãüñéèìïò êñõðôïãñÜöçóçò" + +#: util/errors.c:82 +msgid "unknown signature class" +msgstr "Üãíùóôç êëÜóç õðïãñáöÞò" + +#: util/errors.c:83 +msgid "trust database error" +msgstr "óöÜëìá ôçò âÜóçò äåäïìÝíùí åìðéóôïóýíçò" + +#: util/errors.c:84 +msgid "bad MPI" +msgstr "êáêü MPI" + +#: util/errors.c:85 +msgid "resource limit" +msgstr "üñéï ðüñïõ" + +#: util/errors.c:86 +msgid "invalid keyring" +msgstr "ìç Ýãêõñç êëåéäïèÞêç" + +#: util/errors.c:87 +msgid "bad certificate" +msgstr "êáêü ðéóôïðïéçôéêü" + +#: util/errors.c:88 +msgid "malformed user id" +msgstr "êáêïäéáôõðùìÝíç ôáõôüôçôá ÷ñÞóôç (user id)" + +#: util/errors.c:89 +msgid "file close error" +msgstr "óöÜëìá êëåéóßìáôïò áñ÷åßïõ" + +#: util/errors.c:90 +msgid "file rename error" +msgstr "óöÜëìá ìåôïíïìáóßáò áñ÷åßïõ" + +#: util/errors.c:91 +msgid "file delete error" +msgstr "óöÜëìá äéáãñáöÞò áñ÷åßïõ" + +#: util/errors.c:92 +msgid "unexpected data" +msgstr "ìç áíáìåíüìåíá äåäïìÝíá" + +#: util/errors.c:93 +msgid "timestamp conflict" +msgstr "óýãêñïõóç þñáò (timestamp)" + +#: util/errors.c:94 +msgid "unusable pubkey algorithm" +msgstr "ìç ÷ñçóéìïðïéÞóéìïò áëãüñéèìïò äçìïóßïõ êëåéäéïý" + +#: util/errors.c:95 +msgid "file exists" +msgstr "ôï áñ÷åßï õðÜñ÷åé" + +#: util/errors.c:96 +msgid "weak key" +msgstr "áäýíáìï êëåéäß" + +#: util/errors.c:97 +msgid "invalid argument" +msgstr "ìç Ýãêõñï üñéóìá" + +#: util/errors.c:98 +msgid "bad URI" +msgstr "êáêü URI" + +#: util/errors.c:99 +msgid "unsupported URI" +msgstr "ìç õðïóôçñéæüìåíï URI" + +#: util/errors.c:100 +msgid "network error" +msgstr "óöÜëìá äéêôýïõ" + +#: util/errors.c:102 +msgid "not encrypted" +msgstr "ìç êñõðôïãñáöçìÝíï" + +#: util/errors.c:103 +msgid "not processed" +msgstr "ìç åðåîåñãáóìÝíï" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "ìç ÷ñçóéìïðïéÞóéìï äçìüóéï êëåéäß" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "ìç ÷ñçóéìïðïéÞóéìï ìõóôéêü êëåéäß" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "óöÜëìá äéáêïìéóôÞ êëåéäéþí" + +#: util/logger.c:249 +#, c-format +msgid "... this is a bug (%s:%d:%s)\n" +msgstr "... áõôü åßíáé bug (%s:%d:%s)\n" + +#: util/logger.c:255 +#, c-format +msgid "you found a bug ... (%s:%d)\n" +msgstr "âñÞêáôå Ýíá bug ... (%s:%d)\n" + +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 +#, c-format +msgid "can't open `%s': %s\n" +msgstr "áäõíáìßá ðñüóâáóçò óôï `%s': %s\n" + +#: cipher/random.c:324 +#, c-format +msgid "can't stat `%s': %s\n" +msgstr "áäõíáìßá ëÞøçò ðëçñïöïñéþí ãéá ôï `%s': %s\n" + +#: cipher/random.c:329 +#, c-format +msgid "`%s' is not a regular file - ignored\n" +msgstr "`%s' äåí åßíáé êáíïíéêü áñ÷åßï - áãíïÞèçêå\n" + +#: cipher/random.c:334 +msgid "note: random_seed file is empty\n" +msgstr "óçìåßùóç: ôï áñ÷åßï random_seed åßíáé Üäåéï\n" + +#: cipher/random.c:340 +msgid "warning: invalid size of random_seed file - not used\n" +msgstr "" +"ðñïåéäïðïßçóç: ìç Ýãêõñï ìÝãåèïò áñ÷åßïõ random_seed - äåí èá " +"÷ñçóéìïðïéçèåß\n" + +#: cipher/random.c:348 +#, c-format +msgid "can't read `%s': %s\n" +msgstr "áäõíáìßá áíÜãíùóçò ôïõ `%s': %s\n" + +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "óçìåßùóç: äåí Ý÷åé áíáíåùèåß ôï áñ÷åßï random_seed\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "áäõíáìßá äçìéïõñãßáò ôïõ `%s': %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "áäõíáìßá åããñáöÞò ôïõ `%s': %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "áäõíáìßá êëåéóßìáôïò ôïõ `%s': %s\n" + +#: cipher/random.c:662 +msgid "WARNING: using insecure random number generator!!\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ÷ñÞóç ìç áóöáëïýò ãåííÞôñéáò ôõ÷áßùí áñéèìþí!!\n" + +#: cipher/random.c:663 +msgid "" +"The random number generator is only a kludge to let\n" +"it run - it is in no way a strong RNG!\n" +"\n" +"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" +"\n" +msgstr "" +"Ç ãåííÞôñéá ôõ÷áßùí áñéèìþí åßíáé ðïëý áäýíáìç ãéá áõôÞ ôç ÷ñÞóç\n" +"\n" +"ÌÇ ×ÑÇÓÉÌÏÐÏÉÇÓÅÔÅ ÄÅÄÏÌÅÍÁ ÐÏÕ Å×ÏÕÍ ÐÁÑÁ×ÈÅÉ ÁÐÏ ÁÕÔÏ ÔÏ ÐÑÏÃÑÁÌÌÁ!!\n" +"\n" + +#: cipher/rndlinux.c:142 +#, c-format +msgid "" +"\n" +"Not enough random bytes available. Please do some other work to give\n" +"the OS a chance to collect more entropy! (Need %d more bytes)\n" +msgstr "" +"\n" +"Äåí õðÜñ÷ïõí áñêåôÜ äéáèÝóéìá ôõ÷áßá bytes. Ðñïôåßíåôáé íá áíáìåßíåôå Þ\n" +"íá áðáó÷ïëåßôå ôï ëåéôïõñãéêü óýóôçìá ìÝ÷ñé áõôü íá óõãêåíôñþóåé\n" +"ðåñéóóüôåñç åíôñïðßá! (×ñåéÜæïíôáé %d ðåñéóóüôåñá bytes)\n" + +#: g10/g10.c:287 +msgid "" +"@Commands:\n" +" " +msgstr "" +"@ÅíôïëÝò:\n" +" " + +#: g10/g10.c:289 +msgid "|[file]|make a signature" +msgstr "|[áñ÷åßï]|äçìéïõñãßá ìéáò õðïãñáöÞò" + +#: g10/g10.c:290 +msgid "|[file]|make a clear text signature" +msgstr "|[áñ÷åßï]|äçìéïõñãßá ìéáò ìç êñõðôïãñáöçìÝíçò õðïãñáöÞò" + +#: g10/g10.c:291 +msgid "make a detached signature" +msgstr "äçìéïõñãßá ìéáò ìç ðñïóáñôçìÝíçò õðïãñáöÞò" + +#: g10/g10.c:292 +msgid "encrypt data" +msgstr "êñõðôïãñÜöçóç äåäïìÝíùí" + +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[áñ÷åßá]|êñõðôïãñÜöçóç áñ÷åßùí" + +#: g10/g10.c:294 +msgid "encryption only with symmetric cipher" +msgstr "êñõðôïãñÜöçóç ìå ÷ñÞóç ìüíï óõììåôñéêþí áëãïñßèìùí" + +#: g10/g10.c:295 +msgid "store only" +msgstr "áðïèÞêåõóç ìüíï" + +#: g10/g10.c:296 +msgid "decrypt data (default)" +msgstr "áðïêñõðôïãñÜöçóç äåäïìÝíùí (ðñïêáèïñéóìÝíï)" + +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[áñ÷åßá]|áðïêñõðôïãñÜöçóç áñ÷åßùí" + +#: g10/g10.c:298 +msgid "verify a signature" +msgstr "åðáëÞèåõóç ìéáò õðïãñáöÞò" + +#: g10/g10.c:300 +msgid "list keys" +msgstr "áðåéêüíéóç ôçò ëßóôáò êëåéäéþí" + +#: g10/g10.c:302 +msgid "list keys and signatures" +msgstr "áðåéêüíéóç ôçò ëßóôáò êëåéäéþí êáé õðïãñáöþí" + +#: g10/g10.c:303 +msgid "check key signatures" +msgstr "Ýëåã÷ïò õðïãñáöÞò êëåéäéïý" + +#: g10/g10.c:304 +msgid "list keys and fingerprints" +msgstr "áðåéêüíéóç ôçò ëßóôáò êëåéäéþí êáé áðïôõðùìÜôùí (fingerprints)" + +#: g10/g10.c:305 +msgid "list secret keys" +msgstr "áðåéêüíéóç ôçò ëßóôáò ìõóôéêþí êëåéäéþí" + +#: g10/g10.c:306 +msgid "generate a new key pair" +msgstr "äçìéïõñãßá åíüò íÝïõ æåýãïõò êëåéäéþí" + +#: g10/g10.c:307 +msgid "remove keys from the public keyring" +msgstr "áöáßñåóç ôùí êëåéäéþí áðü ôç äçìüóéá êëåéäïèÞêç" + +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "áöáßñåóç ôùí êëåéäéþí áðü ôç ìõóôéêÞ êëåéäïèÞêç" + +#: g10/g10.c:310 +msgid "sign a key" +msgstr "õðïãñáöÞ åíüò êëåéäéïý" + +#: g10/g10.c:311 +msgid "sign a key locally" +msgstr "õðïãñáöÞ åíüò êëåéäéïý ôïðéêÜ" + +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "õðïãñáöÞ åíüò êëåéäéïý ìç-áíáêáëÝóéìá" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "õðïãñáöÞ åíüò êëåéäéïý ôïðéêÜ êáé ìç-áíáêáëÝóéìá" + +#: g10/g10.c:314 +msgid "sign or edit a key" +msgstr "õðïãñáöÞ Þ åðåîåñãáóßá åíüò êëåéäéïý" + +#: g10/g10.c:315 +msgid "generate a revocation certificate" +msgstr "äçìéïõñãßá åíüò ðéóôïðïéçôéêïý áíÜêëçóçò" + +#: g10/g10.c:316 +msgid "export keys" +msgstr "åîáãùãÞ êëåéäéþí" + +#: g10/g10.c:317 +msgid "export keys to a key server" +msgstr "åîáãùãÞ êëåéäéþí óå Ýíá äéáêïìéóôÞ êëåéäéþí" + +#: g10/g10.c:318 +msgid "import keys from a key server" +msgstr "åéóáãùãÞ êëåéäéþí áðü Ýíá äéáêïìéóôÞ êëåéäéþí" + +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "áíáæÞôçóç êëåéäéþí óå Ýíá äéáêïìéóôÞ êëåéäéþí" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "áíáíÝùóç üëùí ôùí êëåéäéþí áðü Ýíá äéáêïìéóôÞ êëåéäéþí" + +#: g10/g10.c:326 +msgid "import/merge keys" +msgstr "åéóáãùãÞ/óõã÷þíåõóç êëåéäéþí" + +#: g10/g10.c:328 +msgid "list only the sequence of packets" +msgstr "áðåéêüíéóç ìüíï ôçò áêïëïõèßáò ðáêÝôùí" + +#: g10/g10.c:330 +msgid "export the ownertrust values" +msgstr "åîáãùãÞ ôùí ôéìþí åìðéóôïóýíçò" + +#: g10/g10.c:332 +msgid "import ownertrust values" +msgstr "åéóáãùãÞ ôùí ôéìþí åìðéóôïóýíçò" + +#: g10/g10.c:334 +msgid "update the trust database" +msgstr "áíáíÝùóç ôçò âÜóçò äåäïìÝíùí åìðéóôïóýíçò" + +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "áíáíÝùóç ôçò ðáñáìåëåéìÝíçò âÜóçò äåäïìÝíùí åìðéóôïóýíçò" + +#: g10/g10.c:337 +msgid "fix a corrupted trust database" +msgstr "äéüñèùóç ìéáò öèáñìÝíçò âÜóçò äåäïìÝíùí åìðéóôïóýíçò" + +#: g10/g10.c:338 +msgid "De-Armor a file or stdin" +msgstr "Áöáßñåóç-ÈùñÜêéóçò åíüò áñ÷åßïõ Þ stdin" + +#: g10/g10.c:340 +msgid "En-Armor a file or stdin" +msgstr "ÐñïóèÞêç-ÈùñÜêéóçò åíüò áñ÷åßïõ Þ stdin" + +#: g10/g10.c:342 +msgid "|algo [files]|print message digests" +msgstr "|áëãüñ [áñ÷åßá]| áðåéêüíéóç ðåñéëÞøåùí ôùí ìçíõìÜôùí" + +#: g10/g10.c:346 +msgid "" +"@\n" +"Options:\n" +" " +msgstr "" +"@\n" +"ÅðéëïãÝò:\n" +" " + +#: g10/g10.c:348 +msgid "create ascii armored output" +msgstr "äçìéïõñãßá ascii èùñáêéóìÝíçò åîüäïõ" + +#: g10/g10.c:350 +msgid "|NAME|encrypt for NAME" +msgstr "|ÏÍÏÌÁ|êñõðôïãñÜöçóç ãéá ÏÍÏÌÁ" + +#: g10/g10.c:353 +msgid "|NAME|use NAME as default recipient" +msgstr "|ÏÍÏÌÁ|÷ñÞóç ôïõ ÏÍÏÌÁôïò ùò ðñïêáèïñéóìÝíïõ ðáñáëÞðôç" + +#: g10/g10.c:355 +msgid "use the default key as default recipient" +msgstr "÷ñÞóç ôïõ ðñïêáèïñéóìÝíïõ êëåéäéïý ùò ðñïêáèïñéóìÝíïõ ðáñáëÞðôç" + +#: g10/g10.c:361 +msgid "use this user-id to sign or decrypt" +msgstr "÷ñÞóç áõôÞò ôçò ôáõôüôçôáò (user id) ãéá õðïãñáöÞ Þ áðïêñõðôïãñÜöçóç" + +#: g10/g10.c:362 +msgid "|N|set compress level N (0 disables)" +msgstr "|N|êáèïñéóìüò åðéðÝäïõ óõìðßåóçò N (0 áðåíåñãïðïéåß)" + +#: g10/g10.c:364 +msgid "use canonical text mode" +msgstr "÷ñÞóç êáíïíéêÞò êáôÜóôáóçò êåéìÝíïõ" + +#: g10/g10.c:371 +msgid "use as output file" +msgstr "÷ñÞóç ùò áñ÷åßïõ åîüäïõ" + +#: g10/g10.c:372 +msgid "verbose" +msgstr "áíáëõôéêÜ" + +#: g10/g10.c:373 +msgid "be somewhat more quiet" +msgstr "Þóõ÷ç Ýîïäïò" + +#: g10/g10.c:374 +msgid "don't use the terminal at all" +msgstr "ìç ÷ñÞóç ôåñìáôéêïý" + +#: g10/g10.c:375 +msgid "force v3 signatures" +msgstr "åîáíáãêáóìüò ÷ñÞóçò v3 õðïãñáöþí" + +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "ü÷é åîáíáãêáóìüò ÷ñÞóçò v3 õðïãñáöþí" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "åîáíáãêáóìüò ÷ñÞóçò v4 õðïãñáöþí" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "ü÷é åîáíáãêáóìüò ÷ñÞóçò v4 õðïãñáöþí" + +#: g10/g10.c:379 +msgid "always use a MDC for encryption" +msgstr "÷ñÞóç ðÜíôïôå MDC ãéá êñõðôïãñÜöçóç" + +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "ðïôÝ ÷ñÞóç MDC ãéá êñõðôïãñÜöçóç" + +#: g10/g10.c:383 +msgid "do not make any changes" +msgstr "íá ìç ãßíåé êáììßá áëëáãÞ" + +#. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, +#: g10/g10.c:385 +msgid "use the gpg-agent" +msgstr "÷ñÞóç ôïõ gpg-agent" + +#: g10/g10.c:388 +msgid "batch mode: never ask" +msgstr "êáôÜóôáóç batch: íá ìç ãßíïíôáé åñùôÞóåéò" + +#: g10/g10.c:389 +msgid "assume yes on most questions" +msgstr "áðÜíôçóç íáé óôéò ðåñéóóüôåñåò åñùôÞóåéò" + +#: g10/g10.c:390 +msgid "assume no on most questions" +msgstr "áðÜíôçóç ü÷é óôéò ðåñéóóüôåñåò åñùôÞóåéò" + +#: g10/g10.c:391 +msgid "add this keyring to the list of keyrings" +msgstr "ðñïóèÞêç áõôïý ôïõ êëåéäéïý óôç ëßóôá ôùí êëåéäïèçêþí" + +#: g10/g10.c:392 +msgid "add this secret keyring to the list" +msgstr "ðñïóèÞêç áõôÞò ôçò ìõóôéêÞò êëåéäïèÞêçò óôç ëßóôá" + +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "áðåéêüíéóç ôçò êëåéäïèÞêçò óôçí ïðïßá áíáöÝñåôå ôï êëåéäß" + +#: g10/g10.c:394 +msgid "|NAME|use NAME as default secret key" +msgstr "|ÏÍÏÌÁ|÷ñÞóç ÏÍÏÌÁôïò óáí ðñïêáèïñéóìÝíï ìõóôéêü êëåéäß" + +#: g10/g10.c:395 +msgid "|HOST|use this keyserver to lookup keys" +msgstr "|ÄÉÁÊÏÌÉÓÔÇÓ|÷ñÞóç áõôïý ôïõ äéáêïìéóôÞ êëåéäéþí ãéá áíáæÞôçóç" + +#: g10/g10.c:397 +msgid "|NAME|set terminal charset to NAME" +msgstr "|ÏÍÏÌÁ|êáèïñéóìüò ôïõ óåô ÷áñáêôÞñùí ôåñìáôéêïý óå ÏÍÏÌÁ" + +#: g10/g10.c:398 +msgid "read options from file" +msgstr "áíÜãíùóç åðéëïãþí áðü áñ÷åßï" + +#: g10/g10.c:402 +msgid "|FD|write status info to this FD" +msgstr "|FD|åããñáöÞ ôùí ðëçñïöïñéþí êáôÜóôáóçò óôï FD" + +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[áñ÷åßï]|åããñáöÞ ôùí ðëçñïöïñéþí êáôÜóôáóçò óôï áñ÷åßï" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|KEYID|áðüëõôç åìðéóôïóýíç óå áõôü ôï êëåéäß" + +#: g10/g10.c:411 +msgid "|FILE|load extension module FILE" +msgstr "|ÁÑ×ÅÉÏ|öüñôùìá ôïõ áñèñþìáôïò åðÝêôáóçò ÁÑ×ÅÉÏ" + +#: g10/g10.c:412 +msgid "emulate the mode described in RFC1991" +msgstr "åîïìïßùóç ôçò êáôÜóôáóçò ðïõ ðåñéãñÜöåôáé óôï RFC1991" + +#: g10/g10.c:413 +msgid "set all packet, cipher and digest options to OpenPGP behavior" +msgstr "" +"óõìðåñéöïñÜ üëùí ôùí åðéëïãþí ðáêÝôá,áëãüñéèìïé êáé ðåñßëçøç óå OPENPGP" + +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"ïñéóìüò üëùí ôùí åðéëïãþí ðáêÝôá,áëãüñéèìïé,ðåñßëçøç óå PGP 2.x óõìðåñéöïñÜ" + +#: g10/g10.c:418 +msgid "|N|use passphrase mode N" +msgstr "|N|÷ñÞóç ôçò êáôÜóôáóçò öñÜóçò êëåéäß N" + +#: g10/g10.c:420 +msgid "|NAME|use message digest algorithm NAME for passphrases" +msgstr "" +"|ONOMA|÷ñÞóç ôïõ áëãüñéèìïõ ðåñßëçøçò ìçíýìáôïò ÏÍÏÌÁ ãéá öñÜóåéò êëåéäéÜ" + +#: g10/g10.c:422 +msgid "|NAME|use cipher algorithm NAME for passphrases" +msgstr "|ÏÍÏÌÁ|÷ñÞóç áëãüñéèìïõ êñõðôïãñÜöçóçò ÏÍÏÌÁ ãéá öñÜóåéò êëåéäéÜ" + +#: g10/g10.c:424 +msgid "|NAME|use cipher algorithm NAME" +msgstr "|ÏÍÏÌÁ|÷ñÞóç áëãüñéèìïõ êñõðôïãñÜöçóçò ÏÍÏÌÁ" + +#: g10/g10.c:425 +msgid "|NAME|use message digest algorithm NAME" +msgstr "|ÏÍÏÌÁ|÷ñÞóç áëãüñéèìïõ ðåñßëçøçò ìçíýìáôïò ÏÍÏÌÁ " + +#: g10/g10.c:426 +msgid "|N|use compress algorithm N" +msgstr "|N|÷ñÞóç áëãïñßèìïõ óõìðßåóçò N" + +#: g10/g10.c:427 +msgid "throw keyid field of encrypted packets" +msgstr "äéáãñáöÞ ôïõ ðåäßïõ keyid ôùí êñõðôïãñáöçìÝíùí ðáêÝôùí" + +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Áðåéêüíéóç ôùí Photo ID" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Ìç áðåéêüíéóç ôùí Photo ID" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "Ïñéóìüò ôçò ãñáììÞò åíôïëþí ãéá áðåéêüíéóç ôùí Photo ID" + +#: g10/g10.c:431 +msgid "|NAME=VALUE|use this notation data" +msgstr "|ÏÍÏÌÁ=ÔÉÌÇ|÷ñÞóç áõôÞò ôçò êáôÜóôáóçò óçìåßùóçò" + +#: g10/g10.c:434 +msgid "" +"@\n" +"(See the man page for a complete listing of all commands and options)\n" +msgstr "" +"@\n" +"(äåßôå ôç óåëßäá man ãéá ìéá ðëÞñç ëßóôá åíôïëþí êáé åðéëïãþí)\n" + +#: g10/g10.c:437 +msgid "" +"@\n" +"Examples:\n" +"\n" +" -se -r Bob [file] sign and encrypt for user Bob\n" +" --clearsign [file] make a clear text signature\n" +" --detach-sign [file] make a detached signature\n" +" --list-keys [names] show keys\n" +" --fingerprint [names] show fingerprints\n" +msgstr "" +"@\n" +"Ðáñáäåßãìáôá:\n" +"\n" +" -se -r Bob [áñ÷åßï] õðïãñáöÞ êáé êñõðôïãñÜöçóç ãéá ôï Bob\n" +" --clearsign [áñ÷åßï] äçìéïõñãßá ìç êñõðôïãñáöçìÝíçò õðïãñáöÞò\n" +" --detach-sign [áñ÷åßï] äçìéïõñãßá áðïêïììÝíçò õðïãñáöÞò\n" +" --list-keys [ïíüìáôá] áðåéêüíéóç êëåéäéþí\n" +" --fingerprint [ïíüìáôá] áðåéêüíéóç áðïôõðùìÜôùí (fingerprints)\n" + +#: g10/g10.c:579 +msgid "Please report bugs to .\n" +msgstr "ÁíáöÝñåôå ôá ðñïâëÞìáôá óôï \n" + +#: g10/g10.c:583 +msgid "Usage: gpg [options] [files] (-h for help)" +msgstr "×ñÞóç: gpg [åðéëïãÝò] [áñ÷åßá] (-h ãéá âïÞèåéá)" + +#: g10/g10.c:586 +msgid "" +"Syntax: gpg [options] [files]\n" +"sign, check, encrypt or decrypt\n" +"default operation depends on the input data\n" +msgstr "" +"Óýíôáîç: gpg [åðéëïãÝò] [áñ÷åßá]\n" +"õðïãñáöÞ, Ýëåã÷ïò, êñõðôïãñÜöçóç Þ áðïêñõðôïãñÜöçóç\n" +"ç ðñïêáèïñéóìÝíç ëåéôïõñãßá åîáñôÜôáé áðü ôá äåäïìÝíá åéóüäïõ\n" + +#: g10/g10.c:597 +msgid "" +"\n" +"Supported algorithms:\n" +msgstr "" +"\n" +"Õðïóôçñéæüìåíïé áëãüñéèìïé:\n" + +#: g10/g10.c:671 +msgid "usage: gpg [options] " +msgstr "÷ñÞóç: gpg [åðéëïãÝò] " + +#: g10/g10.c:728 +msgid "conflicting commands\n" +msgstr "óõãêñïõüìåíåò åíôïëÝò\n" + +#: g10/g10.c:903 +#, c-format +msgid "NOTE: no default option file `%s'\n" +msgstr "ÓÇÌÅÉÙÓÇ:ìç ðñïêáèïñéóìÝíï áñ÷åßï åðéëïãþí `%s'\n" + +#: g10/g10.c:907 +#, c-format +msgid "option file `%s': %s\n" +msgstr "áñ÷åßï åðéëïãþí `%s': %s\n" + +#: g10/g10.c:914 +#, c-format +msgid "reading options from `%s'\n" +msgstr "áíÜãíùóç åðéëïãþí áðü `%s'\n" + +#: g10/g10.c:1197 +#, c-format +msgid "%s is not a valid character set\n" +msgstr "ôï %s äåí åßíáé Ýãêõñï óåô ÷áñáêôÞñùí\n" + +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "áäõíáìßá åðåîåñãáóßáò ôïõ URI ôïõ äéáêïìéóç êëåéäéþí\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "áäõíáìßá ïñéóìïý ôïõ exec-path óå %s\n" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: `%s' åßíáé ìéá ìç óõíåéóôþìåíç åðéëïãÞ\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "÷ñçóéìïðïéÞóôå ôçí åðéëïãÞ \"--keyserver-options %s\" êáëýôåñá\n" + +#: g10/g10.c:1347 +msgid "WARNING: program may create a core file!\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï ðñüãñáììá ßóùò äçìéïõñãÞóåé áñ÷åßï core!\n" + +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï %s ðáñáêÜìðôåé ôï %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 +#, c-format +msgid "NOTE: %s is not for normal use!\n" +msgstr "ÓÇÌÅÉÙÓÇ: ôï %s äåí åßíáé ãéá êáíïíéêÞ ÷ñÞóç!\n" + +#: g10/g10.c:1360 g10/g10.c:1380 +#, c-format +msgid "%s not allowed with %s!\n" +msgstr "ôï %s äåí åðéôñÝðåôáé ìå ôï %s!\n" + +#: g10/g10.c:1363 +#, c-format +msgid "%s makes no sense with %s!\n" +msgstr "ôï %s äåí Ý÷åé êáììßá Ýííïéá ìáæß ìå ôï %s!\n" + +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" +"ìðïñåßôå íá êÜíåôå áðïêïììÝíåò Þ êáèáñÝò õðïãñáöÝò ìüíï óå --pgp2 êáôÜóôáóç\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" +"äåí ìðïñåßôå íá õðïãñÜöåôå êáé íá êñõðôïãñáöåßôå ôáõôü÷ñïíá óå --pgp2 " +"êáôÜóôáóç\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "ìüíï áñ÷åßá åðéôñÝðïíôáé (êáé ü÷é pipes) êáôá ôçí êáôáóôáóç --pgp2.\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" +"ç êñõðôïãñÜöçóç åíüò ìçíýìáôïò óå --pgp2 êáôÜóôáóç áðáéôåß ôïí áëãïñ. IDEA\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "áõôü ôï ì'çíõìá ßóùò äåí ìðïñåß íá ÷ñçóéìïðïéçèåß ìå PGP 2.x\n" + +#: g10/g10.c:1470 g10/g10.c:1482 +msgid "selected cipher algorithm is invalid\n" +msgstr "ï åðéëåãìÝíïò áëãüñéèìïò êñõðôïãñÜöçóçò äåí åßíáé Ýãêõñïò\n" + +#: g10/g10.c:1476 g10/g10.c:1488 +msgid "selected digest algorithm is invalid\n" +msgstr "ï åðéëåãìÝíïò áëãüñéèìïò ðåñßëçøçò äåí åßíáé Ýãêõñïò\n" + +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "ôï URL ðïëéôéêÞò õðïãñáöÞò ðïõ äüèçêå äåí åßíáé Ýãêõñï\n" + +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "ôï URL ðïëéôéêÞò ðéóôïðïéçôéêïý ðïõ äüèçêå äåí åßíáé Ýãêõñï\n" + +#: g10/g10.c:1499 +#, c-format +msgid "compress algorithm must be in range %d..%d\n" +msgstr "ï áëãüñéèìïò óõìðßåóçò ðñÝðåé íá åßíáé ìåôáîý %d..%d\n" + +#: g10/g10.c:1501 +msgid "completes-needed must be greater than 0\n" +msgstr "completes-needed ðñÝðåé íá åßíáé ìåãáëýôåñá áðü 0\n" + +#: g10/g10.c:1503 +msgid "marginals-needed must be greater than 1\n" +msgstr "marginals-needed ðñÝðåé íá åßíáé ìåãáëýôåñá áðü 1\n" + +#: g10/g10.c:1505 +msgid "max-cert-depth must be in range 1 to 255\n" +msgstr "max-cert-depth ðñÝðåé íá åßíáé ìåôáîý 1 êáé 255\n" + +#: g10/g10.c:1508 +msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" +msgstr "ÓÇÌÅÉÙÓÇ: ç áðëÞ S2K êáôÜóôáóç (0) ðñÝðåé íá áðïöåýãåôáé\n" + +#: g10/g10.c:1512 +msgid "invalid S2K mode; must be 0, 1 or 3\n" +msgstr "ìç Ýãêõñç êáôÜóôáóç S2K; ðñÝðåé íá åßíáé 0, 1 Þ 3\n" + +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "ìç Ýãêõñï default-check-level· ðñÝðåé íá åßíáé 0, 1, 2, Þ 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "ìç Ýãêõñåò ðñïåðéëïãÝò\n" + +#: g10/g10.c:1613 +#, c-format +msgid "failed to initialize the TrustDB: %s\n" +msgstr "áðïôõ÷ßá áñ÷éêïðïßçóçò ôçò TrustDB: %s\n" + +#: g10/g10.c:1633 +msgid "--store [filename]" +msgstr "--store [üíïìá áñ÷åßïõ]" + +#: g10/g10.c:1640 +msgid "--symmetric [filename]" +msgstr "--symmetric [üíïìá áñ÷åßïõ]" + +#: g10/g10.c:1648 +msgid "--encrypt [filename]" +msgstr "--encrypt [üíïìá áñ÷åßïõ]" + +#: g10/g10.c:1665 +msgid "--sign [filename]" +msgstr "--sign [üíïìá áñ÷åßïõ]" + +#: g10/g10.c:1678 +msgid "--sign --encrypt [filename]" +msgstr "--sign --encrypt [üíïìá áñ÷åßïõ]" + +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [üíïìá áñ÷åßïõ]" + +#: g10/g10.c:1701 +msgid "--clearsign [filename]" +msgstr "--clearsign [üíïìá áñ÷åßïõ]" + +#: g10/g10.c:1719 +msgid "--decrypt [filename]" +msgstr "--decrypt [üíïìá áñ÷åßïõ]" + +#: g10/g10.c:1730 +msgid "--sign-key user-id" +msgstr "--sign-key user-id" + +#: g10/g10.c:1738 +msgid "--lsign-key user-id" +msgstr "--lsign-key user-id" + +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key user-id" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key user-id" + +#: g10/g10.c:1762 +msgid "--edit-key user-id [commands]" +msgstr "--edit-key user-id [åíôïëÝò]" + +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 +#, c-format +msgid "can't open %s: %s\n" +msgstr "áäõíáìßá ðñüóâáóçò ôïõ %s: %s\n" + +#: g10/g10.c:1833 +msgid "-k[v][v][v][c] [user-id] [keyring]" +msgstr "-k[v][v][v][c] [user-id] [êëåéäïèÞêç]" + +#: g10/g10.c:1916 +#, c-format +msgid "dearmoring failed: %s\n" +msgstr "áðïèùñÜêéóç áðÝôõ÷å: %s\n" + +#: g10/g10.c:1924 +#, c-format +msgid "enarmoring failed: %s\n" +msgstr "èùñÜêéóç áðÝôõ÷å: %s\n" + +#: g10/g10.c:2011 +#, c-format +msgid "invalid hash algorithm `%s'\n" +msgstr "ìç Ýãêõñïò áëãüñéèìïò hash `%s'\n" + +#: g10/g10.c:2097 +msgid "[filename]" +msgstr "[üíïìá áñ÷åßïõ]" + +#: g10/g10.c:2101 +msgid "Go ahead and type your message ...\n" +msgstr "Ìðïñåßôå ôþñá íá åéóáãÜãåôå ôï ìÞíõìá óáò ...\n" + +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 +#, c-format +msgid "can't open `%s'\n" +msgstr "áäõíáìßá ðñüóâáóçò ôïõ `%s'\n" + +#: g10/g10.c:2313 +msgid "" +"the first character of a notation name must be a letter or an underscore\n" +msgstr "" +"ï ðñþôïò ÷áñáêôÞñáò ôïõ ïíüìáôïò óçìåßùóçò ðñÝðåé íá åßíáé ãñÜììá Þ " +"underscore\n" + +#: g10/g10.c:2319 +msgid "" +"a notation name must have only letters, digits, dots or underscores and end " +"with an '='\n" +msgstr "" +"Ýíá üíïìá óçìåßùóçò ìðïñåß íá ðåñéÝ÷åé ìüíï áëöáñéèìçôéêÜ, ôåëåßåò Þ " +"underscores êáé ëÞãåé ìå '='\n" + +#: g10/g10.c:2325 +msgid "dots in a notation name must be surrounded by other characters\n" +msgstr "ïé ôåëåßåò óôï üíïìá óçìåßùóçò ðñÝðåé íá åßíáé ìåôáîý ÷áñáêôÞñùí\n" + +#: g10/g10.c:2333 +msgid "a notation value must not use any control characters\n" +msgstr "ç ôéìÞ óçìåßùóçò ðñÝðåé íá ìç ÷ñçóéìïðïéåß ÷áñáêôÞñåò control\n" + +#: g10/armor.c:314 +#, c-format +msgid "armor: %s\n" +msgstr "èùñÜêéóç: %s\n" + +#: g10/armor.c:343 +msgid "invalid armor header: " +msgstr "ìç Ýãêõñç åðéêåöáëßäá èùñÜêéóçò: " + +#: g10/armor.c:350 +msgid "armor header: " +msgstr "åðéêåöáëßäá èùñÜêéóçò: " + +#: g10/armor.c:361 +msgid "invalid clearsig header\n" +msgstr "ìç Ýãêõñç åðéêåöáëßäá clearsig\n" + +#: g10/armor.c:413 +msgid "nested clear text signatures\n" +msgstr "öùëéáóìÝíåò ìç êñõðôïãñáöçìÝíåò õðïãñáöÝò\n" + +#: g10/armor.c:537 +msgid "invalid dash escaped line: " +msgstr "ìç Ýãêõñç dash escaped ãñáììÞ: " + +#: g10/armor.c:549 +msgid "unexpected armor:" +msgstr "ìç áíáìåíüìåíç èùñÜêéóç:" + +#: g10/armor.c:675 g10/armor.c:1242 +#, c-format +msgid "invalid radix64 character %02x skipped\n" +msgstr "ìç Ýãêõñïò radix64 ÷áñáêôÞñáò %02x ðáñÜâëåøç\n" + +#: g10/armor.c:718 +msgid "premature eof (no CRC)\n" +msgstr "ðñüùñï ôÝëïò áñ÷åßïõ (áðïõóßá CRC)\n" + +#: g10/armor.c:752 +msgid "premature eof (in CRC)\n" +msgstr "ðñüùñï ôÝëïò áñ÷åßïõ (åíôüò CRC)\n" + +#: g10/armor.c:756 +msgid "malformed CRC\n" +msgstr "ëÜèïò ìïñöÞ CRC\n" + +#: g10/armor.c:760 g10/armor.c:1279 +#, c-format +msgid "CRC error; %06lx - %06lx\n" +msgstr "óöÜëìá CRC: %06lx - %06lx\n" + +#: g10/armor.c:780 +msgid "premature eof (in Trailer)\n" +msgstr "ðñüùñï ôÝëïò áñ÷åßïõ (óôï Ôrailer)\n" + +#: g10/armor.c:784 +msgid "error in trailer line\n" +msgstr "óöÜëìá óôç ãñáììÞ trailer\n" + +#: g10/armor.c:1057 +msgid "no valid OpenPGP data found.\n" +msgstr "äå âñÝèçêáí Ýãêõñá OpenPGP äåäïìÝíá.\n" + +#: g10/armor.c:1062 +#, c-format +msgid "invalid armor: line longer than %d characters\n" +msgstr "ìç Ýãêõñç èùñÜêéóç: ç ãñáììÞ åßíáé ðÜíù áðü %d ÷áñáêôÞñåò\n" + +#: g10/armor.c:1066 +msgid "" +"quoted printable character in armor - probably a buggy MTA has been used\n" +msgstr "" +"åêôõðþóéìïò, óå åéóáãùãéêÜ, ÷áñáêôÞñáò óôç èùñÜêéóç - ßóùò Ýãéíå ÷ñÞóç " +"ðñïâëçìáôéêïý MTA\n" + +#: g10/pkclist.c:61 +msgid "No reason specified" +msgstr "Äåí Ý÷åé ïñéóôåß áéôßá" + +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "Ôï êëåéäß Ý÷åé ðáñáêáìèåß" + +#: g10/pkclist.c:65 +msgid "Key has been compromised" +msgstr "Ôï êëåéäß Ý÷åé åêôåèåß" + +#: g10/pkclist.c:67 +msgid "Key is no longer used" +msgstr "Ôï êëåéäß äå ÷ñçóéìïðïéåßôáé ðëÝïí" + +#: g10/pkclist.c:69 +msgid "User ID is no longer valid" +msgstr "Ôï User ID äåí åßíáé ðëÝïí Ýãêõñï" + +#: g10/pkclist.c:73 +msgid "Reason for revocation: " +msgstr "Áéôßá ãéá áíÜêëçóç:" + +#: g10/pkclist.c:90 +msgid "Revocation comment: " +msgstr "Ó÷üëéï áíÜêëçóçò:" + +#. a string with valid answers +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMqQsS" + +#: g10/pkclist.c:258 +#, c-format +msgid "" +"No trust value assigned to:\n" +"%4u%c/%08lX %s \"" +msgstr "" +"Äåí äüèçêå áîßá åìðéóôïóýíçò óôï:\n" +"%4u%c/%08lX %s \"" + +#: g10/pkclist.c:270 +msgid "" +"Please decide how far you trust this user to correctly\n" +"verify other users' keys (by looking at passports,\n" +"checking fingerprints from different sources...)?\n" +"\n" +msgstr "" +"Ðáñáêáëþ áðïöáóßóôå ðüóï êáëÜ åìðéóôåýåóôå áõôü ôï\n" +"÷ñÞóôç, þóôå íá ìðïñåß íá åðáëçèåýåé êëåéäéÜ Üëëùí (ìå ôï\n" +"íá êïéôÜæåé passports êáé fingerprints áðü äéÜöïñåò ðçãÝò...);\n" +"\n" + +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = Äåí îÝñù\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = ÄÅÍ Ý÷ù åìðéóôïóýíç\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = ¸÷ù ìåñéêÞ åìðéóôïóýíç\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = ¸÷ù ðëÞñç åìðéóôïóýíç\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Åìðéóôåýïìáé áðüëõôá\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = áðåéêüíéóç ðåñéóóüôåñùí ðëçñïöïñéþí\n" + +#: g10/pkclist.c:281 +msgid " m = back to the main menu\n" +msgstr " m = ðßóù óôï êõñßùò ìåíïý\n" + +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = ðáñÜëåéøç áõôïý ôïõ êëåéäéïý\n" + +#: g10/pkclist.c:285 +msgid " q = quit\n" +msgstr " q = ôåñìáôéóìüò\n" + +#: g10/pkclist.c:292 +msgid "Your decision? " +msgstr "Ç áðüöáóç óáò; " + +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Óßãïõñá èÝëåôå áõôü ôï êëåéäß íá ïñéóôåß óáí áðüëõôçò åìðéóôïóýíçò; " + +#: g10/pkclist.c:325 +msgid "Certificates leading to an ultimately trusted key:\n" +msgstr "ÐéóôïðïéçôéêÜ ðïõ ïäçãïýí óå Ýíá êëåéäß áðüëõôçò åìðéóôïóýíçò:\n" + +#: g10/pkclist.c:399 +#, c-format +msgid "key %08lX: key has been revoked!\n" +msgstr "êëåéäß %08lX: ôï êëåéäß Ý÷åé áíáêëçèåß!\n" + +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 +msgid "Use this key anyway? " +msgstr "×ñÞóç ïðùóäÞðïôå áõôïý ôïõ êëåéäéïý; " + +#: g10/pkclist.c:411 +#, c-format +msgid "key %08lX: subkey has been revoked!\n" +msgstr "êëåéäß %08lX: ôï õðïêëåéäß Ý÷åé áíáêëçèåß!\n" + +#: g10/pkclist.c:432 +#, c-format +msgid "%08lX: key has expired\n" +msgstr "%08lX: ôï êëåéäß Ý÷åé ëÞîåé\n" + +#: g10/pkclist.c:442 +#, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +"%08lX: Äåí õðÜñ÷åé Ýíäåéîç üôé ç õðïãñáöÞ áõôÞ áíÞêåé óôïí éäéïêôÞôç.\n" + +#: g10/pkclist.c:448 +#, c-format +msgid "%08lX: We do NOT trust this key\n" +msgstr "%08lX: ÄÅÍ åìðéóôåõüìáóôå áõôü ôï êëåéäß\n" + +#: g10/pkclist.c:454 +#, c-format +msgid "" +"%08lX: It is not sure that this key really belongs to the owner\n" +"but it is accepted anyway\n" +msgstr "" +"%08lX: Äåí åßíáé âÝâáéï üôé áõôü ôï êëåéäß áíÞêåé óôïí éäéïêôÞôç\n" +"áëëÜ åí ðÜóç ðåñéðôþóåé ãßíåôáé äåêôü\n" + +#: g10/pkclist.c:460 +msgid "This key probably belongs to the owner\n" +msgstr "Áõôü ôï êëåéäß ðéèáíþò áíÞêåé óôïí éäéïêôÞôç\n" + +#: g10/pkclist.c:465 +msgid "This key belongs to us\n" +msgstr "Áõôü ôï êëåéäß áíÞêåé óå åìÜò\n" + +#: g10/pkclist.c:507 +msgid "" +"It is NOT certain that the key belongs to its owner.\n" +"If you *really* know what you are doing, you may answer\n" +"the next question with yes\n" +"\n" +msgstr "" +"ÄÅÍ åßíáé âÝâáéï üôé áõôü ôï êëåéäß áíÞêåé óôïí éäéïêôÞôç ôïõ.\n" +"ÅÜí *ðñáãìáôéêÜ* îÝñåôå ôé êÜíåôå, ìðïñåßôå íá áðáíôÞóåôå\n" +"ôçí åðüìåíç åñþôçóç êáôáöáôéêÜ\n" +"\n" + +#: g10/pkclist.c:521 g10/pkclist.c:543 +msgid "WARNING: Using untrusted key!\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ×ñÞóç êëåéäéïý ÷ùñßò åìðéóôïóýíç!\n" + +#: g10/pkclist.c:562 +msgid "WARNING: This key has been revoked by its owner!\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï êëåéäß Ý÷åé áíáêëçèåß áðü ôïí éäéïêôÞôç ôïõ!\n" + +#: g10/pkclist.c:563 +msgid " This could mean that the signature is forgery.\n" +msgstr " Áõôü ìðïñåß íá óçìáßíåé üôé ç õðïãñáöÞ åßíáé ðëáóôïãñáößá.\n" + +#: g10/pkclist.c:569 +msgid "WARNING: This subkey has been revoked by its owner!\n" +msgstr "" +"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï õðïêëåéäß Ý÷åé áíáêëçèåß áðü ôïí éäéïêôÞôç ôïõ!\n" + +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Óçìåßùóç: Áõôü ôï êëåéäß Ý÷åé áðåíåñãïðïéçèåß.\n" + +#: g10/pkclist.c:579 +msgid "Note: This key has expired!\n" +msgstr "Óçìåßùóç: Áõôü ôï êëåéäß Ý÷åé ëÞîåé!\n" + +#: g10/pkclist.c:590 +msgid "WARNING: This key is not certified with a trusted signature!\n" +msgstr "" +"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï êëåéäß äåí Ý÷åé ðéóôïðïéçèåß ìå åìðéóôåýóéìç " +"õðïãñáöÞ!\n" + +#: g10/pkclist.c:592 +msgid "" +" There is no indication that the signature belongs to the owner.\n" +msgstr " Äåí õðÜñ÷åé Ýíäåéîç üôé ç õðïãñáöÞ áíÞêåé óôïí éäéïêôÞôç.\n" + +#: g10/pkclist.c:600 +msgid "WARNING: We do NOT trust this key!\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ÄÅÍ åìðéóôåõüìáóôå áõôü ôï êëåéäß!\n" + +#: g10/pkclist.c:601 +msgid " The signature is probably a FORGERY.\n" +msgstr " Ç õðïãñáöÞ ìÜëëïí åßíáé ðëáóôïãñáößá.\n" + +#: g10/pkclist.c:609 +msgid "" +"WARNING: This key is not certified with sufficiently trusted signatures!\n" +msgstr "" +"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï êëåéäß äåí Ý÷åé ðéóôïðïéçèåß ìå õðïãñáöÝò\n" +"áñêåôÞò åìðéóôïóýíçò!\n" + +#: g10/pkclist.c:611 +msgid " It is not certain that the signature belongs to the owner.\n" +msgstr " Äåí åßíáé âÝâáéï üôé ç õðïãñáöÞ áíÞêåé óôïí éäéïêôÞôç.\n" + +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 +#, c-format +msgid "%s: skipped: %s\n" +msgstr "%s: ðáñáëåßöèçêå: %s\n" + +#: g10/pkclist.c:723 g10/pkclist.c:911 +#, c-format +msgid "%s: skipped: public key already present\n" +msgstr "%s: ðáñáëåßöèçêå: äçìüóéï êëåéäß åßíáé Þäç ðáñüí\n" + +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "Äåí ïñßóôçêå Ýíá user ID. (÷ñçóéìïðïéåßóôå ôï \"-r\")\n" + +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" +"\n" +"ÐëçêôñïëïãÞóôå ôï user ID. ÔÝëïò ìå ìéá Üäåéá ãñáììÞ: " + +#: g10/pkclist.c:776 +msgid "No such user ID.\n" +msgstr "Äåí õðÜñ÷åé áõôü ôï user ID.\n" + +#: g10/pkclist.c:781 g10/pkclist.c:857 +msgid "skipped: public key already set as default recipient\n" +msgstr "" +"ðáñáëåßöèçêå: äçìüóéï êëåéäß Ý÷åé Þäç ïñéóôåß óáí åî ïñéóìïý ðáñáëÞðôçò\n" + +#: g10/pkclist.c:799 +msgid "Public key is disabled.\n" +msgstr "Ôï äçìüóéï êëåéäß Ý÷åé áðåíåñãïðïéçèåß.\n" + +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "ðáñáëåßöèçêå: äçìüóéï êëåéäß Ý÷åé Þäç ïñéóôåß\n" + +#: g10/pkclist.c:849 +#, c-format +msgid "unknown default recipient `%s'\n" +msgstr "Üãíùóôïò ðñïêáèïñéóìÝíïò ðáñáëÞðôçò `%s'\n" + +#: g10/pkclist.c:893 +#, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: ðáñáëåßöèçêå: ôï äçìüóéï êëåéäß Ý÷åé áðåíåñãïðïéçèåß.\n" + +#: g10/pkclist.c:943 +msgid "no valid addressees\n" +msgstr "êáììßá Ýãêõñç äéåýèõíóç\n" + +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "ç ðñïåðéëïãÞ %c%lu äåí åßíáé Ýãêõñç\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "ç ðñïåðéëïãÞ %c%lu áíôéãñÜöôçêå\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "ðÜñá ðïëëÝò `%c' ðñïåðéëïãÝò\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò óôï \"êïñäüíé\" ôçò åðéëïãÞò\n" + +#: g10/keygen.c:399 +msgid "writing self signature\n" +msgstr "åããñáöÞ éäéï-õðïãñáöÞò\n" + +#: g10/keygen.c:443 +msgid "writing key binding signature\n" +msgstr "åããñáöÞ õðïãñáöÞò \"äÝóéìïõ\" êëåéäéïý\n" + +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format +msgid "keysize invalid; using %u bits\n" +msgstr "ìç Ýãêõñï ìÝãåèïò êëåéäéïý, ÷ñÞóç %u bits\n" + +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format +msgid "keysize rounded up to %u bits\n" +msgstr "óôñïããõëïðïßçóç ôïõ ìÝãåèïò êëåéäéïý Ýùò %u bits\n" + +#: g10/keygen.c:777 +msgid "Please select what kind of key you want:\n" +msgstr "Ðáñáêáëþ åðéëÝîôå ôïí ôýðï ôïõ êëåéäéïý ðïõ èÝëåôå:\n" + +#: g10/keygen.c:779 +#, c-format +msgid " (%d) DSA and ElGamal (default)\n" +msgstr " (%d) DSA êáé ElGamal (ðñïêáèïñéóìÝíï)\n" + +#: g10/keygen.c:780 +#, c-format +msgid " (%d) DSA (sign only)\n" +msgstr " (%d) DSA (ãéá õðïãñáöÞ ìüíï)\n" + +#: g10/keygen.c:782 +#, c-format +msgid " (%d) ElGamal (encrypt only)\n" +msgstr " (%d) ElGamal (ãéá êñõðôïãñÜöçóç ìüíï)\n" + +#: g10/keygen.c:783 +#, c-format +msgid " (%d) ElGamal (sign and encrypt)\n" +msgstr " (%d) ElGamal (õðïãñáöÞ êáé êñõðôïãñÜöçóç)\n" + +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (ãéá õðïãñáöÞ ìüíï)\n" + +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (ãéá êñõðôïãñÜöçóç ìüíï)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 +msgid "Your selection? " +msgstr "Ç åðéëïãÞ óáò; " + +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "" +"Ç ÷ñÞóç áõôïý ôïõ áëãüñéèìïõ áðïäïêéìÜæåôáé - óßãïõñá íá äçìéïõñãçèåß; " + +#: g10/keyedit.c:529 g10/keygen.c:823 +msgid "Invalid selection.\n" +msgstr "Ìç Ýãêõñç åðéëïãÞ.\n" + +#: g10/keygen.c:836 +#, c-format +msgid "" +"About to generate a new %s keypair.\n" +" minimum keysize is 768 bits\n" +" default keysize is 1024 bits\n" +" highest suggested keysize is 2048 bits\n" +msgstr "" +"Óå äéáäéêáóßá äçìéïõñãßáò åíüò íÝïõ %s keypair.\n" +" åëÜ÷éóôï ìÝãåèïò êëåéäéïý åßíáé 768 bits\n" +" ðñïêáèïñéóìÝíï ìÝãåèïò êëåéäéïý åßíáé 1024 bits\n" +" ìÝãéóôï ðñïôåéíüìåíï ìÝãåèïò êëåéäéïý åßíáé 2048 bits\n" + +#: g10/keygen.c:845 +msgid "What keysize do you want? (1024) " +msgstr "Ôé ìÝãåèïò êëåéäéïý èá èÝëáôå; (1024) " + +#: g10/keygen.c:850 +msgid "DSA only allows keysizes from 512 to 1024\n" +msgstr "Ï DSA åðéôñÝðåé ìüíï ìÝãåèïò êëåéäéïý áðü 512 Ýùò 1024\n" + +#: g10/keygen.c:852 +msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "" +"ôï ìÝãåèïò êëåéäéïý åßíáé ðïëý ìéêñü, 1024 åßíáé ç åëÜ÷éóôç ôéìÞ ãéá RSA.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "" +"ôï ìÝãåèïò êëåéäéïý åßíáé ðïëý ìéêñü, 768 åßíáé ç åëÜ÷éóôç åðéôñåðüìåíç " +"ôéìÞ.\n" + +#. It is ridiculous and an annoyance to use larger key sizes! +#. * GnuPG can handle much larger sizes; but it takes an eternity +#. * to create such a key (but less than the time the Sirius +#. * Computer Corporation needs to process one of the usual +#. * complaints) and {de,en}cryption although needs some time. +#. * So, before you complain about this limitation, I suggest that +#. * you start a discussion with Marvin about this theme and then +#. * do whatever you want. +#: g10/keygen.c:866 +#, c-format +msgid "keysize too large; %d is largest value allowed.\n" +msgstr "" +"ôï ìÝãåèïò êëåéäéïý åßíáé ðïëý ìåãÜëï, %d åßíáé ç ìÝãéóôç ôéìÞ ðïõ " +"åðéôñÝðåôáé.\n" + +#: g10/keygen.c:871 +msgid "" +"Keysizes larger than 2048 are not suggested because\n" +"computations take REALLY long!\n" +msgstr "" +"ÌåãÝèç êëåéäéþí ìåãáëýôåñá ôïõ 2048 äåí óõíéóôþíôáé ãéáôß\n" +"ïé õðïëïãéóìïß åßíáé ÷ñïíïâüñïé!\n" + +#: g10/keygen.c:874 +msgid "Are you sure that you want this keysize? " +msgstr "Óßãïõñá èÝëåôå áõôü ôï ìÝãåèïò êëåéäéïý; " + +#: g10/keygen.c:875 +msgid "" +"Okay, but keep in mind that your monitor and keyboard radiation is also very " +"vulnerable to attacks!\n" +msgstr "" +"ÅíôÜîåé, áëëÜ íá Ý÷åôå õð'üøç üôé ç ïèüíç êáé ôï ðëçêôñïëüãéï åßíáé\n" +"åðßóçò ðïëý ôñùôÜ óå åðéèÝóåéò!\n" + +#: g10/keygen.c:884 +#, c-format +msgid "Requested keysize is %u bits\n" +msgstr "Ôï ìÝãåèïò êëåéäéïý ðïõ æçôÞèçêå åßíáé %u bits\n" + +#: g10/keygen.c:887 g10/keygen.c:891 +#, c-format +msgid "rounded up to %u bits\n" +msgstr "óôñïããõëïðïéÞèçêå Ýùò ôá %u bits\n" + +#: g10/keygen.c:942 +msgid "" +"Please specify how long the key should be valid.\n" +" 0 = key does not expire\n" +" = key expires in n days\n" +" w = key expires in n weeks\n" +" m = key expires in n months\n" +" y = key expires in n years\n" +msgstr "" +"Ðáñáêáëþ ïñßóôå ãéá ðüóï êáéñü ôï êëåéäß èá åßíáé Ýãêõñï.\n" +" 0 = ôï êëåéäß äåí ëÞãåé ðïôÝ\n" +" = ôï êëåéäß ëÞãåé óå n ìÝñåò\n" +" w = ôï êëåéäß ëÞãåé óå n åâäïìÜäåò\n" +" m = ôï êëåéäß ëÞãåé óå n ìÞíåò\n" +" y = ôï êëåéäß ëÞãåé óå n Ýôç\n" + +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Ðáñáêáëþ ïñßóôå ãéá ðüóï êáéñü ôï êëåéäß èá åßíáé Ýãêõñï.\n" +" 0 = ôï êëåéäß äåí ëÞãåé ðïôÝ\n" +" = ôï êëåéäß ëÞãåé óå n ìÝñåò\n" +" w = ôï êëåéäß ëÞãåé óå n åâäïìÜäåò\n" +" m = ôï êëåéäß ëÞãåé óå n ìÞíåò\n" +" y = ôï êëåéäß ëÞãåé óå n Ýôç\n" + +#: g10/keygen.c:973 +msgid "Key is valid for? (0) " +msgstr "Ôï êëåéäß åßíáé Ýãêõñï ãéá; (0) " + +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Ç õðïãñáöÞ Ýéíáé Ýãêõñç ãéá; (0) " + +#: g10/keygen.c:980 +msgid "invalid value\n" +msgstr "ìç Ýãêõñç ôéìÞ\n" + +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "ôï %s äåí ëÞãåé ðïôÝ\n" + +#. print the date when the key expires +#: g10/keygen.c:992 +#, c-format +msgid "%s expires at %s\n" +msgstr "ôï %s ëÞãåé óôéò %s\n" + +#: g10/keygen.c:998 +msgid "" +"Your system can't display dates beyond 2038.\n" +"However, it will be correctly handled up to 2106.\n" +msgstr "" +"Ôï óýóôçìá óáò äåí ìðïñåß íá áðåéêïíßóåé çìåñïìçíßåò ðÝñá ôïõ 2038.\n" +"¼ìùò, èá ÷åéñßæïíôáé óùóôÜ Ýùò ôï 2106.\n" + +#: g10/keygen.c:1003 +msgid "Is this correct (y/n)? " +msgstr "Åßíáé áõôü óùóôü (y/n); " + +#: g10/keygen.c:1046 +msgid "" +"\n" +"You need a User-ID to identify your key; the software constructs the user " +"id\n" +"from Real Name, Comment and Email Address in this form:\n" +" \"Heinrich Heine (Der Dichter) \"\n" +"\n" +msgstr "" +"\n" +"×ñåéÜæåóôå Ýíá User-ID ãéá íá áíáãíùñßóåôå Ýíá êëåéäß. Ôï ëïãéóìéêü " +"êáôáóêåõÜæåé\n" +"ôï user-id áðü ôï Áëçèéíü ¼íïìá, Ó÷üëéï êáé Äéåýèõíóç Email êÜðùò Ýôóé:\n" +" \"Nikolaoy Nikos (toy Ioanni) \"\n" +"\n" + +#: g10/keygen.c:1058 +msgid "Real name: " +msgstr "Áëçèéíü ¼íïìá: " + +#: g10/keygen.c:1066 +msgid "Invalid character in name\n" +msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò óôï üíïìá\n" + +#: g10/keygen.c:1068 +msgid "Name may not start with a digit\n" +msgstr "Ôï üíïìá äåí åðéôñÝðåôáé íá îåêéíÜ ìå áñéèìçôéêü øçößï\n" + +#: g10/keygen.c:1070 +msgid "Name must be at least 5 characters long\n" +msgstr "Ôï üíïìá ðñÝðåé íá Ý÷åé ôïõëÜ÷éóôïí 5 ÷áñáêôÞñåò\n" + +#: g10/keygen.c:1078 +msgid "Email address: " +msgstr "Äéåýèõíóç Email: " + +#: g10/keygen.c:1089 +msgid "Not a valid email address\n" +msgstr "Ìç Ýãêõñç äéåýèõíóç Email\n" + +#: g10/keygen.c:1097 +msgid "Comment: " +msgstr "Ó÷üëéï: " + +#: g10/keygen.c:1103 +msgid "Invalid character in comment\n" +msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò óôï ó÷üëéï\n" + +#: g10/keygen.c:1126 +#, c-format +msgid "You are using the `%s' character set.\n" +msgstr "×ñçóéìïðïéåßôå ôï `%s' óåô ÷áñáêôÞñùí.\n" + +#: g10/keygen.c:1132 +#, c-format +msgid "" +"You selected this USER-ID:\n" +" \"%s\"\n" +"\n" +msgstr "" +"ÅðéëÝîáôå ôï USER-ID:\n" +" \"%s\"\n" +"\n" + +#: g10/keygen.c:1136 +msgid "Please don't put the email address into the real name or the comment\n" +msgstr "Ðáñáêáëþ ìçí ôïðïèåôåßôå ôçí äéåýèõíóç email óôï üíïìá Þ óôï ó÷üëéï\n" + +#: g10/keygen.c:1141 +msgid "NnCcEeOoQq" +msgstr "NnCcEeOoQq" + +#: g10/keygen.c:1151 +msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " +msgstr "ÁëëáãÞ (N)üíïìá, (C)ó÷üëéï, (E)mail Þ (Q)ôåñìáôéóìüò; " + +#: g10/keygen.c:1152 +msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " +msgstr "ÁëëáãÞ (N)üíïìá, (C)ó÷üëéï, (E)mail Þ (O)åíôÜîåé/(Q)ôåñìáôéóìüò; " + +#: g10/keygen.c:1171 +msgid "Please correct the error first\n" +msgstr "Ðáñáêáëþ, äéïñèþóôå ðñþôá ôï óöÜëìá\n" + +#: g10/keygen.c:1210 +msgid "" +"You need a Passphrase to protect your secret key.\n" +"\n" +msgstr "" +"×ñåéÜæåóôå ìéá ÖñÜóç êëåéäß ãéá íá ðñïóôáôåýóåôå ôï ìõóôéêü êëåéäß.\n" +"\n" + +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "ç öñÜóç êëåéäß äåí åðáíáëÞöèçêå óùóôÜ. ÄïêéìÜóôå îáíÜ" + +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"I will do it anyway. You can change your passphrase at any time,\n" +"using this program with the option \"--edit-key\".\n" +"\n" +msgstr "" +"Äåí ÷ñåéÜæåóôå ìéá öñÜóç êëåéäß - áõôü åßíáé ìÜëëïí ìéá *êáêÞ* éäÝá!\n" +"Èá óõíå÷ßóù üðùò êáé íá Ý÷åé. Ìðïñåßôå íá áëëÜîåôå ôç öñÜóç óáò\n" +"üðïôå èÝëåôå, ìå ôçí åðéëïãÞ \"--edit-key\".\n" +"\n" + +#: g10/keygen.c:1246 +msgid "" +"We need to generate a lot of random bytes. It is a good idea to perform\n" +"some other action (type on the keyboard, move the mouse, utilize the\n" +"disks) during the prime generation; this gives the random number\n" +"generator a better chance to gain enough entropy.\n" +msgstr "" +"ÐñÝðåé íá äçìéïõñãçèïýí ðïëëÜ ôõ÷áßá bytes. Åßíáé êáëÞ éäÝá íá êÜíåôå\n" +"êÜðïéá åñãáóßá (ðëçêôñïëïãÞóôå, ìåôáêéíÞóôå ôï ðïíôßêé, ÷ñçóéìïðïéÞóôå\n" +"ôïõò äßóêïõò) êáôá ôç äéÜñêåéá õðïëïãéóìïý ðñþôùí áñéèìþí. Áõôü äßíåé\n" +"óôç ãåííÞôñéá ôõ÷áßùí áñéèìþí ìéá åõêáéñßá íá ìáæÝøåé áñêåôÞ åíôñïðßá.\n" + +#: g10/keygen.c:1741 +msgid "DSA keypair will have 1024 bits.\n" +msgstr "Ôï æåýãïò êëåéäéþí DSA èá åßíáé 1024 bits.\n" + +#: g10/keygen.c:1795 +msgid "Key generation canceled.\n" +msgstr "Ç äçìéïõñãßá êëåéäéïý áíáâëÞèçêå.\n" + +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format +msgid "writing public key to `%s'\n" +msgstr "åããñáöÞ ôïõ äçìïóßïõ êëåéäéïý óôï `%s'\n" + +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format +msgid "writing secret key to `%s'\n" +msgstr "åããñáöÞ ôïõ ìõóôéêïý êëåéäéïý óôï `%s'\n" + +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "äå âñÝèçêå åããñÜøéìç äçìüóéá êëåéäïèÞêç: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "äå âñÝèçêå åããñÜøéìç ìõóôéêÞ êëåéäïèÞêç: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "áäõíáìßá åããñáöÞò äçìüóéáò êëåéäïèÞêçò `%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "áäõíáìßá åããñáöÞò ìõóôéêÞò êëåéäïèÞêçò `%s': %s\n" + +#: g10/keygen.c:1999 +msgid "public and secret key created and signed.\n" +msgstr "ôï äçìüóéï êáé ôï ìõóôéêü êëåéäß äçìéïõñãÞèçêáí êáé õðïãñÜöçêáí.\n" + +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "óçìåßùóç êëåéäéïý óáí áðüëõôçò åìðéóôïóýíçò.\n" + +#: g10/keygen.c:2011 +msgid "" +"Note that this key cannot be used for encryption. You may want to use\n" +"the command \"--edit-key\" to generate a secondary key for this purpose.\n" +msgstr "" +"Óçìåéþóôå üôé áõôü ôï êëåéäß äåí ìðïñåß íá ÷ñçóéìïðïéçèåß ãéá " +"êñõðôïãñÜöçóç.\n" +"Ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôçí åíôïëÞ \"--edit-key\" ãéá íá äçìéïõñãçèåß\n" +"Ýíá äåõôåñåýïí êëåéäß ãéá áõôü ôï ëüãï.\n" + +#: g10/keygen.c:2023 g10/keygen.c:2131 +#, c-format +msgid "Key generation failed: %s\n" +msgstr "Ç äçìéïõñãßá êëåéäéïý áðÝôõ÷å: %s\n" + +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 +#, c-format +msgid "" +"key has been created %lu second in future (time warp or clock problem)\n" +msgstr "" +"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôï óôï ìÝëëïí (÷ñïíïäßíç Þ\n" +"áðëþò ðñüâëçìá óôï ñïëüé)\n" + +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 +#, c-format +msgid "" +"key has been created %lu seconds in future (time warp or clock problem)\n" +msgstr "" +"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôá óôï ìÝëëïí (÷ñïíïäßíç Þ\n" +"áðëþò ðñüâëçìá óôï ñïëüé)\n" + +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "" +"ÓÇÌÅÉÙÓÇ: ç äçìéïõñãßá õðïêëåéäéþí ãéá êëåéäéÜ v3 äåí åßíáé óýìöùíï\n" +"ìå ôï OpenPGP\n" + +#: g10/keygen.c:2107 +msgid "Really create? " +msgstr "Óßãïõñá íá äçìéïõñãçèåß; " + +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output äåí ëåéôïõñãåß ãéá áõôÞ ôçí åíôïëÞ\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' Þäç óõìðéÝóôçêå\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 +#, c-format +msgid "%s: can't open: %s\n" +msgstr "%s: áäõíáìßá ðñüóâáóçò ôïõ: %s\n" + +#: g10/encode.c:122 g10/sign.c:959 +#, c-format +msgid "error creating passphrase: %s\n" +msgstr "óöÜëìá óôç äçìéïõñãßá ôçò öñÜóçò êëåéäß: %s\n" + +#: g10/encode.c:185 g10/encode.c:383 +#, c-format +msgid "%s: WARNING: empty file\n" +msgstr "%s: ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Üäåéï áñ÷åßï\n" + +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"êñõðôïãñÜöçóç ìå êëåéäßá RSA áðü 2048 bit Þ ðéï ëßãï ìüíï óå êáôÜóôáóç --" +"pgp2\n" + +#: g10/encode.c:313 +#, c-format +msgid "reading from `%s'\n" +msgstr "áíÜãíùóç áðü `%s'\n" + +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" +"áäõíáìßá ÷ñÞóçò ôïõ êñõðôáëãüñéèìïõ IDEA ãéá üëá ôá êëåéäßá ìå ôá " +"ïðïßáêñõðôïãñáöåßôå.\n" + +#: g10/encode.c:563 +#, c-format +msgid "%s/%s encrypted for: %s\n" +msgstr "%s/%s êñõðôïãñáöÞèçêå ãéá: %s\n" + +#: g10/delkey.c:69 g10/export.c:141 +#, c-format +msgid "key `%s' not found: %s\n" +msgstr "ôï êëåéäß '%s' äå âñÝèçêå: %s\n" + +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ ìðëïê êëåéäéþí: %s\n" + +#: g10/export.c:169 +#, c-format +msgid "key %08lX: not a rfc2440 key - skipped\n" +msgstr "êëåéäß %08lX: äåí åßíáé Ýíá rfc2440 êëåéäß - ðáñáëåßöèçêå\n" + +#: g10/export.c:180 +#, c-format +msgid "key %08lX: not protected - skipped\n" +msgstr "êëåéäß %08lX: äåí åßíáé ðñïóôáôåõìÝíï - ðáñáëåßöèçêå\n" + +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "êëåéäß %08lX: êëåéäß ôýðïõ PGP 2.x - ðáñáëåßöèçêå\n" + +#: g10/export.c:255 +msgid "WARNING: nothing exported\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: äåí Ýãéíå êáììßá åîáãùãÞ\n" + +#: g10/getkey.c:151 +msgid "too many entries in pk cache - disabled\n" +msgstr "ðÜñá ðïëëÝò êáôá÷ùñÞóåéò óôç pk cache - áðåíåñãïðïéÞèçêå\n" + +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[User id äåí âñÝèçêå]" + +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" +"Ìç Ýãêõñï êëåéäß %08lX Ýãéíå Ýãêõñï áðü ôï --allow-non-selfsigned-uid\n" + +#: g10/getkey.c:1989 +#, c-format +msgid "using secondary key %08lX instead of primary key %08lX\n" +msgstr "÷ñÞóç ôïõ äåõôåñåýïíôïò êëåéäéïý %08lX áíôß ôïõ ðñùôåýïíôïò %08lX\n" + +#: g10/getkey.c:2036 +#, c-format +msgid "key %08lX: secret key without public key - skipped\n" +msgstr "êëåéäß %08lX: ìõóôéêü êëåéäß ÷ùñßò äçìüóéï - ðáñáëåßöèçêå\n" + +#: g10/import.c:206 +#, c-format +msgid "skipping block of type %d\n" +msgstr "ðáñÜëåéøç ôìÞìáôïò ôïõ ôýðïõ %d\n" + +#: g10/import.c:213 +#, c-format +msgid "%lu keys so far processed\n" +msgstr "%lu êëåéäéÜ Ý÷ïõí ìÝ÷ñé ôþñá åðåîåñãáóôåß\n" + +#: g10/import.c:218 +#, c-format +msgid "error reading `%s': %s\n" +msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ `%s': %s\n" + +#: g10/import.c:230 +#, c-format +msgid "Total number processed: %lu\n" +msgstr "Óõíïëéêüò áñéèìüò ðïõ åðåîåñãÜóôçêáí: %lu\n" + +#: g10/import.c:232 +#, c-format +msgid " skipped new keys: %lu\n" +msgstr " íÝá êëåéäéÜ ðïõ ðáñáëåßöèçêáí: %lu\n" + +#: g10/import.c:235 +#, c-format +msgid " w/o user IDs: %lu\n" +msgstr " ÷ùñßò user ID: %lu\n" + +#: g10/import.c:237 +#, c-format +msgid " imported: %lu" +msgstr " åéóá÷èÝíôá: %lu" + +#: g10/import.c:243 +#, c-format +msgid " unchanged: %lu\n" +msgstr " áìåôÜâëçôá: %lu\n" + +#: g10/import.c:245 +#, c-format +msgid " new user IDs: %lu\n" +msgstr " íÝá user ID: %lu\n" + +#: g10/import.c:247 +#, c-format +msgid " new subkeys: %lu\n" +msgstr " íÝá õðïêëåéäéÜ: %lu\n" + +#: g10/import.c:249 +#, c-format +msgid " new signatures: %lu\n" +msgstr " íÝåò õðïãñáöÝò: %lu\n" + +#: g10/import.c:251 +#, c-format +msgid " new key revocations: %lu\n" +msgstr " íÝåò áíáêëÞóåéò êëåéäéþí: %lu\n" + +#: g10/import.c:253 +#, c-format +msgid " secret keys read: %lu\n" +msgstr " áíáãíùóìÝíá ìõóôéêÜ êëåéäéÜ: %lu\n" + +#: g10/import.c:255 +#, c-format +msgid " secret keys imported: %lu\n" +msgstr " åéóá÷èÝíôá ìõóôéêÜ êëåéäéÜ: %lu\n" + +#: g10/import.c:257 +#, c-format +msgid " secret keys unchanged: %lu\n" +msgstr " áìåôÜâëçôá ìõóôéêÜ êëåéäéÜ: %lu\n" + +#: g10/import.c:438 g10/import.c:657 +#, c-format +msgid "key %08lX: no user ID\n" +msgstr "êëåéäß %08lX: äåí õðÜñ÷åé áõôü ôï user ID\n" + +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "êëåéäß %08lX: äåêôü ìç éäéï-õðïãåãñáììÝíï user ID '%s'\n" + +#: g10/import.c:462 +#, c-format +msgid "key %08lX: no valid user IDs\n" +msgstr "êëåéäß %08lX: äåí Ý÷åé Ýãêõñá user ID\n" + +#: g10/import.c:464 +msgid "this may be caused by a missing self-signature\n" +msgstr "áõôü ìðïñåß íá óõíÝâåé áðü ìéá áðïýóá éäéïûðïãñáöÞ\n" + +#: g10/import.c:474 g10/import.c:726 +#, c-format +msgid "key %08lX: public key not found: %s\n" +msgstr "êëåéäß %08lX: ìõóôéêü êëåéäß ðïõ äå âñÝèçêå: %s\n" + +#: g10/import.c:479 +#, c-format +msgid "key %08lX: new key - skipped\n" +msgstr "êëåéäß %08lX: íÝï êëåéäß - ðáñáëåßöèçêå\n" + +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "äåí âñåèçêå åããñÜøéìç êëåéäïèÞêç: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 +#, c-format +msgid "writing to `%s'\n" +msgstr "åããñáöÞ óôï `%s'\n" + +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "áäõíáìßá åããñáöÞò ôçò êëåéäïèÞêçò `%s': %s\n" + +#: g10/import.c:505 +#, c-format +msgid "key %08lX: public key imported\n" +msgstr "êëåéäß %08lX: äçìüóéï êëåéäß Ý÷åé åéóá÷èåß\n" + +#: g10/import.c:524 +#, c-format +msgid "key %08lX: doesn't match our copy\n" +msgstr "êëåéäß %08lX: äåí ôáéñéÜæåé ìå ôï áíôßãñáöï ìáò\n" + +#: g10/import.c:542 g10/import.c:743 +#, c-format +msgid "key %08lX: can't locate original keyblock: %s\n" +msgstr "êëåéäß %08lX: áäõíáìßá åíôïðéóìïý ôïõ áñ÷éêïý ôìÞìáôïò êëåéäéïý: %s\n" + +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "êëåéäß %08lX: áäõíáìßá áíÜãíùóçò ôïõ áñ÷éêïý ôìÞìáôïò êëåéäéïý: %s\n" + +#: g10/import.c:579 +#, c-format +msgid "key %08lX: 1 new user ID\n" +msgstr "êëåéäß %08lX: 1 íÝï user ID\n" + +#: g10/import.c:582 +#, c-format +msgid "key %08lX: %d new user IDs\n" +msgstr "êëåéäß %08lX: %d íÝá user ID\n" + +#: g10/import.c:585 +#, c-format +msgid "key %08lX: 1 new signature\n" +msgstr "êëåéäß %08lX: 1 íÝá õðïãñáöÞ\n" + +#: g10/import.c:588 +#, c-format +msgid "key %08lX: %d new signatures\n" +msgstr "êëåéäß %08lX: %d íÝåò õðïãñáöÝò\n" + +#: g10/import.c:591 +#, c-format +msgid "key %08lX: 1 new subkey\n" +msgstr "êëåéäß %08lX: 1 íÝï õðïêëåéäß\n" + +#: g10/import.c:594 +#, c-format +msgid "key %08lX: %d new subkeys\n" +msgstr "êëåéäß %08lX: %d íÝá õðïêëåéäéÜ\n" + +#: g10/import.c:604 +#, c-format +msgid "key %08lX: not changed\n" +msgstr "êëåéäß %08lX: áìåôÜâëçôï\n" + +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "äåí õðÜñ÷åé ðñïêáèïñéóìÝíç êëåéäïèÞêç: %s\n" + +#: g10/import.c:682 +#, c-format +msgid "key %08lX: secret key imported\n" +msgstr "êëåéäß %08lX: ìõóôéêü êëåéäß åéóÞ÷èçêå\n" + +#. we can't merge secret keys +#: g10/import.c:686 +#, c-format +msgid "key %08lX: already in secret keyring\n" +msgstr "êëåéäß %08lX: Þäç óôç ìõóôéêÞ êëåéäïèÞêç\n" + +#: g10/import.c:691 +#, c-format +msgid "key %08lX: secret key not found: %s\n" +msgstr "êëåéäß %08lX: äå âñÝèçêå ôï ìõóôéêü êëåéäß: %s\n" + +#: g10/import.c:720 +#, c-format +msgid "key %08lX: no public key - can't apply revocation certificate\n" +msgstr "" +"êëåéäß %08lX: ü÷é äçìüóéï êëåéäß - áäõíáìßá åöáñìïãÞò ðéóôïðïéçôéêïý " +"áíÜêëçóçò\n" + +#: g10/import.c:760 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - rejected\n" +msgstr "êëåéäß %08lX: ìç Ýãêõñï ðéóôïðïéçôéêü áíÜêëçóçò: %s - áðüññéøç\n" + +#: g10/import.c:791 +#, c-format +msgid "key %08lX: revocation certificate imported\n" +msgstr "êëåéäß %08lX: ðéóôïðïéçôéêü áíÜêëçóçò åéóÞ÷èçêå\n" + +#: g10/import.c:826 +#, c-format +msgid "key %08lX: no user ID for signature\n" +msgstr "êëåéäß %08lX: äåí õðÜñ÷åé user ID ãéá ôçí õðïãñáöÞ\n" + +#: g10/import.c:839 +#, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "" +"êëåéäß %08lX: ìç õðïóôçñéæüìåíïò áëãüñéèìïò äçìïóßïõ êëåéäéïý óôï user id \"%" +"s\"\n" + +#: g10/import.c:841 +#, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "êëåéäß %08lX: ìç Ýãêõñç éäéï-õðïãñáöÞ óôï user id \"%s\"\n" + +#: g10/import.c:858 +#, c-format +msgid "key %08lX: no subkey for key binding\n" +msgstr "êëåéäß %08lX: äåí õðÜñ÷åé õðïêëåéäß ãéá ôç äÝóìåõóç êëåéäéïý\n" + +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "êëåéäß %08lX: ìç õðïóôçñéæüìåíïò áëãüñéèìïò äçìïóßïõ êëåéäéïý\n" + +#: g10/import.c:869 +#, c-format +msgid "key %08lX: invalid subkey binding\n" +msgstr "êëåéäß %08lX: ìç Ýãêõñç äÝóìåõóç õðïêëåéäéïý\n" + +#: g10/import.c:899 +#, c-format +msgid "key %08lX: skipped user ID '" +msgstr "êëåéäß %08lX: ðáñáëåßöèçêå user ID '" + +#: g10/import.c:922 +#, c-format +msgid "key %08lX: skipped subkey\n" +msgstr "êëåéäß %08lX: ðáñáëåßöèçêå õðïêëåéäß\n" + +#. here we violate the rfc a bit by still allowing +#. * to import non-exportable signature when we have the +#. * the secret key used to create this signature - it +#. * seems that this makes sense +#: g10/import.c:945 +#, c-format +msgid "key %08lX: non exportable signature (class %02x) - skipped\n" +msgstr "êëåéäß %08lX: ìç åîáãüìåíç õðïãñáöÞ (êëÜóç %02x) - ðáñáëåßöèçêå\n" + +#: g10/import.c:954 +#, c-format +msgid "key %08lX: revocation certificate at wrong place - skipped\n" +msgstr "" +"êëåéäß %08lX: ôï ðéóôïðïéçôéêü áíÜêëçóçò óå ëÜèïò óçìåßï - ðáñáëåßöèçêå\n" + +#: g10/import.c:971 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - skipped\n" +msgstr "êëåéäß %08lX: ìç Ýãêõñï ðéóôïðïéçôéêü áíÜêëçóçò: %s - ðáñáëåßöèçêå\n" + +#: g10/import.c:1072 +#, c-format +msgid "key %08lX: duplicated user ID detected - merged\n" +msgstr "êëåéäß %08lX: åíôïðßóôçêå äéðëü user ID - åíþèçêáí\n" + +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"Ðñïåéäïðïßçóç: êëåéäß %08lX ìðïñåß íá áíáêëçèåß: ëÞøç êëåéäéïý áíÜêëçóçò %" +"08lX\n" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 +#, c-format +msgid "key %08lX: revocation certificate added\n" +msgstr "êëåéäß %08lX: ðéóôïðïéçôéêü áíÜêëçóçò ðñïóôÝèçêå\n" + +#: g10/import.c:1231 +#, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "êëåéäß %08lX: Üìåóç õðïãñáöÞ êëåéäéïý ðñïóôÝèçêå\n" + +#: g10/keyedit.c:142 +msgid "[revocation]" +msgstr "[áíÜêëçóç]" + +#: g10/keyedit.c:143 +msgid "[self-signature]" +msgstr "[éäéï-õðïãñáöÞ]" + +#: g10/keyedit.c:214 g10/keylist.c:139 +msgid "1 bad signature\n" +msgstr "1 êáêÞ õðïãñáöÞ\n" + +#: g10/keyedit.c:216 g10/keylist.c:141 +#, c-format +msgid "%d bad signatures\n" +msgstr "%d êáêÝò õðïãñáöÝò\n" + +#: g10/keyedit.c:218 g10/keylist.c:143 +msgid "1 signature not checked due to a missing key\n" +msgstr "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãù ÷áìÝíïõ êëåéäéïý\n" + +#: g10/keyedit.c:220 g10/keylist.c:145 +#, c-format +msgid "%d signatures not checked due to missing keys\n" +msgstr "%d õðïãñáöÝò äåí åëÝã÷èçêáí ëüãù ÷áìÝíùí êëåéäéþí\n" + +#: g10/keyedit.c:222 g10/keylist.c:147 +msgid "1 signature not checked due to an error\n" +msgstr "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãï åíüò óöÜëìáôïò\n" + +#: g10/keyedit.c:224 g10/keylist.c:149 +#, c-format +msgid "%d signatures not checked due to errors\n" +msgstr "%d õðïãñáöÝò äåí åëÝã÷èçêáí ëüãù óöáëìÜôùí\n" + +#: g10/keyedit.c:226 +msgid "1 user ID without valid self-signature detected\n" +msgstr "1 user ID áíé÷íåýôçêå ÷ùñßò Ýãêõñç éäéï-õðïãñáöÞ\n" + +#: g10/keyedit.c:228 +#, c-format +msgid "%d user IDs without valid self-signatures detected\n" +msgstr "%d user ID áíé÷íåýèçêáí ÷ùñßò Ýãêõñåò éäéï-õðïãñáöÝò\n" + +#: g10/keyedit.c:335 +#, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Ôï user ID \"%s\" áíáêáëåßôå." + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Óßãïõñá èÝëåôå áêüìá íá ôï õðïãñÜøåôå; (y/N) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr " Áäõíáìßá õðïãñáöÞò.\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Ç ðñïõðÜñ÷ïõóá õðïãñáöÞ óáò óôï \"%s\"\n" +"åßíáé ìéá ôïðéêÞ õðïãñáöÞ.\n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "ÈÝëåôå íá ôç ðñïÜãåôå óå ìéá ðëÞñç åîáãþãéìç õðïãñáöÞ; (y/N) " + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" Þäç õðïãñÜöèçêå áðü ôï êëåéäß %08lX\n" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" Þäç õðïãñÜöèçêå áðü ôï êëåéäß %08lX\n" + +#: g10/keyedit.c:405 +#, c-format +msgid "Nothing to sign with key %08lX\n" +msgstr "Ôßðïôá ãéá íá õðïãñáöåß ìå ôï êëåéäß %08lX\n" + +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Áõôü ôï êëåéäß Ý÷åé ëÞîåé!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Áõôü ôï êëåéäß ðñüêåéôå íá ëÞîåé óôéò %s.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "ÈÝëåôå ç õðïãáöÞóáò íá ëÞîåé ôáõôü÷ñïíá; (Y/n) " + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" +"Ìðïñåßôå íá ÷ñçóéìüðïéÞóåôå ìéá OpenPGP õðïãñáöÞ óå Ýíá PGP 2.x ìüíï óå " +"êáôÜóôáóç --pgp2.\n" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "Áõôü èá êÜíåé ôï êëåéäß Ü÷ñçóôï ìå ôï PGP 2.x.\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Åßóôå óßãïõñïé üôé åëÝãîáôå ðñïóåêôéêÜ üôé ôï êëåéäß ðïõ åßóôå Ýôïéìïé íá\n" +"áíÞêåé ðñÜãìáôé óôï ðñïáíöåñèÝí Üôïìï; ÅÜí äåí îÝñåôå ôé íá áðáíôÞóåôå " +"ðáôÞóôå\"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Äåí áðáíôþ.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Äåí Ý÷ù åëÝãîåé êáèüëïõ.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) ¸÷ù êÜíåé ôïí óõíÞèç Ýëåã÷ï.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) ¸÷ù êÜíåé åêôåôáìÝíï Ýëåã÷ï.%s\n" + +#: g10/keyedit.c:535 +msgid "" +"Are you really sure that you want to sign this key\n" +"with your key: \"" +msgstr "" +"Óßãïõñá èÝëåôå íá õðïãñÜøåôå áõôü ôï êëåéäß\n" +"ìå ôï êëåéäß óáò: \"" + +#: g10/keyedit.c:544 +msgid "" +"\n" +"The signature will be marked as non-exportable.\n" +msgstr "" +"\n" +"Ç õðïãñáöÞ èá óçìåéùèåß óáí ìç-åîáãþãéìç.\n" + +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"Ç õðïãñáöÞ èá óçìåéùèåß óáí ìç-áíáêáëÝóéìç.\n" +"\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Äåí Ý÷ù åëÝãîåé êáèüëïõ áõôü ôï êëåéäß.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"¸÷ù êÜíåé óõíçèéóìÝíï Ýëåã÷ï óå áõôü ôï êëåéäß.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"¸÷ù åëÝãîåé ðïëý ðñïóåêôéêÜ áõôü ôï êëåéäß.\n" + +#: g10/keyedit.c:569 +msgid "Really sign? " +msgstr "Óßãïõñá íá õðïãñáöåß; " + +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 +#, c-format +msgid "signing failed: %s\n" +msgstr "ç õðïãñáöÞ áðÝôõ÷å: %s\n" + +#: g10/keyedit.c:658 +msgid "This key is not protected.\n" +msgstr "Áõôü ôï êëåéäß äåí ðñïóôáôåýåôáé.\n" + +#: g10/keyedit.c:662 +msgid "Secret parts of primary key are not available.\n" +msgstr "ÌõóôéêÜ ôìÞìáôá ôïõ êýñéïõ êëåéäéïý äåí åßíáé äéáèÝóéìá.\n" + +#: g10/keyedit.c:666 +msgid "Key is protected.\n" +msgstr "Ôï êëåéäß ðñïóôáôåýåôáé.\n" + +#: g10/keyedit.c:686 +#, c-format +msgid "Can't edit this key: %s\n" +msgstr "Áäýíáôç ç åðåîåñãáóßá áõôïý ôïõ êëåéäéïý:%s\n" + +#: g10/keyedit.c:692 +msgid "" +"Enter the new passphrase for this secret key.\n" +"\n" +msgstr "" +"ÐëçêôñïëïãÞóôå ôçí íÝá öñÜóç êëåéäß ãéá áõôü ôï ìõóôéêü êëåéäß.\n" +"\n" + +#: g10/keyedit.c:706 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"\n" +msgstr "Äåí èÝëåôå öñÜóç êëåéäß - áõôü åßíáé ìÜëëïí *êáêÞ* éäÝá!\n" + +#: g10/keyedit.c:709 +msgid "Do you really want to do this? " +msgstr "Óßãïõñá èÝëåôå íá êÜíåôå áõôü; " + +#: g10/keyedit.c:773 +msgid "moving a key signature to the correct place\n" +msgstr "ìåôáêßíçóç õðïãñáöÞò êëåéäéïý óôç óùóôÞ èÝóç\n" + +#: g10/keyedit.c:815 +msgid "quit this menu" +msgstr "ôåñìáôéóìüò áõôïý ôïõ ìåíïý" + +#: g10/keyedit.c:816 +msgid "q" +msgstr "q" + +#: g10/keyedit.c:817 +msgid "save" +msgstr "save" + +#: g10/keyedit.c:817 +msgid "save and quit" +msgstr "áðïèÞêåõóç êáé Ýîïäïò" + +#: g10/keyedit.c:818 +msgid "help" +msgstr "help" + +#: g10/keyedit.c:818 +msgid "show this help" +msgstr "áðåéêüíéóç áõôÞò ôçò âïÞèåéáò" + +#: g10/keyedit.c:820 +msgid "fpr" +msgstr "fpr" + +#: g10/keyedit.c:820 +msgid "show fingerprint" +msgstr "áðåéêüíéóç ôïõ fingerprint" + +#: g10/keyedit.c:821 +msgid "list" +msgstr "list" + +#: g10/keyedit.c:821 +msgid "list key and user IDs" +msgstr "áðåéêüíéóç ôùí êëåéäéþí êáé ôùí user ID" + +#: g10/keyedit.c:822 +msgid "l" +msgstr "l" + +#: g10/keyedit.c:823 +msgid "uid" +msgstr "uid" + +#: g10/keyedit.c:823 +msgid "select user ID N" +msgstr "åðéëïãÞ user ID N" + +#: g10/keyedit.c:824 +msgid "key" +msgstr "key" + +#: g10/keyedit.c:824 +msgid "select secondary key N" +msgstr "åðéëïãÞ äåõôåñåýïíôïò êëåéäéïý N" + +#: g10/keyedit.c:825 +msgid "check" +msgstr "check" + +#: g10/keyedit.c:825 +msgid "list signatures" +msgstr "áðåéêüíéóç õðïãñáöþí" + +#: g10/keyedit.c:826 +msgid "c" +msgstr "c" + +#: g10/keyedit.c:827 +msgid "sign" +msgstr "sign" + +#: g10/keyedit.c:827 +msgid "sign the key" +msgstr "õðïãñáöÞ ôïõ êëåéäéïý" + +#: g10/keyedit.c:828 +msgid "s" +msgstr "s" + +#: g10/keyedit.c:829 +msgid "lsign" +msgstr "lsign" + +#: g10/keyedit.c:829 +msgid "sign the key locally" +msgstr "õðïãñáöÞ ôïõ êëåéäéïý ôïðéêÜ" + +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "õðïãñáöÞ ôïõ êëåéäéïý ìç-áíáêáëÝóéìá" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "õðïãñáöÞ ôïõ êëåéäéïý ôïðéêÜ êáé ìç-áíáêáëÝóéìá" + +#: g10/keyedit.c:832 +msgid "debug" +msgstr "debug" + +#: g10/keyedit.c:833 +msgid "adduid" +msgstr "adduid" + +#: g10/keyedit.c:833 +msgid "add a user ID" +msgstr "ðñïóèÞêç åíüò user ID" + +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "addphoto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "ðñïóèÞêç åíüò photo ID" + +#: g10/keyedit.c:835 +msgid "deluid" +msgstr "deluid" + +#: g10/keyedit.c:835 +msgid "delete user ID" +msgstr "äéáãñáöÞ åíüò user ID" + +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:838 +msgid "addkey" +msgstr "addkey" + +#: g10/keyedit.c:838 +msgid "add a secondary key" +msgstr "ðñïóèÞêç åíüò äåõôåñåýïíôïò êëåéäéïý" + +#: g10/keyedit.c:839 +msgid "delkey" +msgstr "delkey" + +#: g10/keyedit.c:839 +msgid "delete a secondary key" +msgstr "äéáãñáöÞ åíüò äåõôåñåýïíôïò êëåéäéïý" + +#: g10/keyedit.c:840 +msgid "delsig" +msgstr "delsig" + +#: g10/keyedit.c:840 +msgid "delete signatures" +msgstr "äéáãñáöÞ õðïãñáöþí" + +#: g10/keyedit.c:841 +msgid "expire" +msgstr "expire" + +#: g10/keyedit.c:841 +msgid "change the expire date" +msgstr "áëëáãÞ ôçò çìåñïìçíßáò ëÞîçò" + +#: g10/keyedit.c:842 +msgid "primary" +msgstr "ðñùôåýùí" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "óçìåßùóç ôïõ user ID óáí ðñùôåýùí" + +#: g10/keyedit.c:843 +msgid "toggle" +msgstr "toggle" + +#: g10/keyedit.c:843 +msgid "toggle between secret and public key listing" +msgstr "áëëáãÞ ìåôáîý ôçò áðåéêüíéóçò ìõóôéêïý êáé äçìüóéïõ êëåéäéïý" + +#: g10/keyedit.c:845 +msgid "t" +msgstr "t" + +#: g10/keyedit.c:846 +msgid "pref" +msgstr "pref" + +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "áðåéêüíéóç ðñïåðéëïãþí (åéäéêÝò)" + +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "áðåéêüíéóç åðéëïãþí (áíáëõôéêÜ)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "ïñéóìüò áðåéêüíéóçò åðéëïãþí" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "áíáùåùìÝíåò åðéëïãÝò" + +#: g10/keyedit.c:850 +msgid "passwd" +msgstr "passwd" + +#: g10/keyedit.c:850 +msgid "change the passphrase" +msgstr "áëëáãÞ ôçò öñÜóçò êëåéäß" + +#: g10/keyedit.c:851 +msgid "trust" +msgstr "trust" + +#: g10/keyedit.c:851 +msgid "change the ownertrust" +msgstr "áëëáãÞ ôçò åìðéóôïóýíçò éäéïêôÞôç" + +#: g10/keyedit.c:852 +msgid "revsig" +msgstr "revsig" + +#: g10/keyedit.c:852 +msgid "revoke signatures" +msgstr "áíÜêëçóç õðïãñáöþí" + +#: g10/keyedit.c:853 +msgid "revkey" +msgstr "revkey" + +#: g10/keyedit.c:853 +msgid "revoke a secondary key" +msgstr "áíÜêëçóç åíüò äåõôåñåýïíôïò êëåéäéïý" + +#: g10/keyedit.c:854 +msgid "disable" +msgstr "disable" + +#: g10/keyedit.c:854 +msgid "disable a key" +msgstr "áðåíåñãïðïéåß Ýíá êëåéäß" + +#: g10/keyedit.c:855 +msgid "enable" +msgstr "enable" + +#: g10/keyedit.c:855 +msgid "enable a key" +msgstr "åíåñãïðïéåß Ýíá êëåéäß" + +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "showphoto" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "áðåéêüíéóç photo ID" + +#: g10/delkey.c:112 g10/keyedit.c:876 +msgid "can't do that in batchmode\n" +msgstr "äåí ìðïñåß íá ãßíåé áõôü óå êáôÜóôáóç äÝóìçò (batchmode)\n" + +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ìõóôéêïý ìðëïê êëåéäéïý `%s': %s\n" + +#: g10/keyedit.c:931 +msgid "Secret key is available.\n" +msgstr "Ôï ìõóôéêü êëåéäß åßíáé äéáèÝóéìï.\n" + +#: g10/keyedit.c:962 +msgid "Command> " +msgstr "ÅíôïëÞ> " + +#: g10/keyedit.c:994 +msgid "Need the secret key to do this.\n" +msgstr "Áðáéôåßôáé ôï ìõóôéêü êëåéäß ãéá íá ãßíåé áõôü.\n" + +#: g10/keyedit.c:998 +msgid "Please use the command \"toggle\" first.\n" +msgstr "Ðáñáêáëþ ÷ñçóéìïðïéåßóôå ôçí åíôïëÞ \"toggle\" ðñþôá.\n" + +#: g10/keyedit.c:1047 +msgid "Key is revoked." +msgstr "Ôï êëåéäß áíáêëÞèçêå." + +#: g10/keyedit.c:1066 +msgid "Really sign all user IDs? " +msgstr "Óßãïõñá íá õðïãñáöïýí üëá ôá user ID; " + +#: g10/keyedit.c:1067 +msgid "Hint: Select the user IDs to sign\n" +msgstr "ÓõìâïõëÞ: ÅðéëÝîôå ôï user ID ãéá õðïãñáöÞ\n" + +#: g10/keyedit.c:1092 +#, c-format +msgid "This command is not allowed while in %s mode.\n" +msgstr "ÁõôÞ ç åíôïëÞ áðáãïñåýåôå óå áõôÞ ôçí êáôÜóôáóç %s.\n" + +#: g10/keyedit.c:1112 g10/keyedit.c:1133 +msgid "You must select at least one user ID.\n" +msgstr "ÐñÝðåé íá åðéëÝîåôå ôï ëéãüôåñï Ýíá user ID.\n" + +#: g10/keyedit.c:1114 +msgid "You can't delete the last user ID!\n" +msgstr "Äåí ìðïñåßôå íá äéáãñÜøåôå ôï ôåëåõôáßï user ID!\n" + +#: g10/keyedit.c:1117 +msgid "Really remove all selected user IDs? " +msgstr "Óßãïõñá èÝëåôå íá äéáãñáöïýí üëá ôá åðéëåãìÝíá user ID; " + +#: g10/keyedit.c:1118 +msgid "Really remove this user ID? " +msgstr "Óßãïõñá èÝëåôå íá äéáãñáöåß áõôü ôï user ID; " + +#: g10/keyedit.c:1156 g10/keyedit.c:1178 +msgid "You must select at least one key.\n" +msgstr "ÐñÝðåé íá åðéëÝîåôå ôïõëÜ÷éóôïí Ýíá êëåéäß.\n" + +#: g10/keyedit.c:1160 +msgid "Do you really want to delete the selected keys? " +msgstr "Óßãïõñá èÝëåôå íá äéáãñáöïýí ôá åðéëåãìÝíá êëåéäéÜ; " + +#: g10/keyedit.c:1161 +msgid "Do you really want to delete this key? " +msgstr "Óßãïõñá èÝëåôå íá äéáãñáöåß áõôü ôï êëåéäß; " + +#: g10/keyedit.c:1182 +msgid "Do you really want to revoke the selected keys? " +msgstr "Óßãïõñá èÝëåôå íá áíáêëçèïýí ôá åðéëåãìÝíá êëåéäéÜ; " + +#: g10/keyedit.c:1183 +msgid "Do you really want to revoke this key? " +msgstr "Óßãïõñá èÝëåôå íá áíáêëçèåß áõôü ôï êëåéäß; " + +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "" +"Óßãïõñá èÝëåôå íá áíáíåùèïýí ïé ðñïåðéëïãÝò ãéá ôï åðéëåãìÝíï user ID; " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Óßãïõñá íá áíáíåùèïýí ïé ðñïåðéëïãÝò;" + +#: g10/keyedit.c:1292 +msgid "Save changes? " +msgstr "ÁðïèÞêåõóç ôùí áëëáãþí; " + +#: g10/keyedit.c:1295 +msgid "Quit without saving? " +msgstr "Ôåñìáôéóìüò ÷ùñßò áðïèÞêåõóç; " + +#: g10/keyedit.c:1306 +#, c-format +msgid "update failed: %s\n" +msgstr "ç åíçìÝñùóç áðÝôõ÷å: %s\n" + +#: g10/keyedit.c:1313 +#, c-format +msgid "update secret failed: %s\n" +msgstr "ç åíçìÝñùóç ìõóôéêïý áðÝôõ÷å: %s\n" + +#: g10/keyedit.c:1320 +msgid "Key not changed so no update needed.\n" +msgstr "Ôï êëåéäß äåí Üëëáîå ïðüôå äåí ÷ñåéÜæåôáé åíçìÝñùóç.\n" + +#: g10/keyedit.c:1332 +msgid "Invalid command (try \"help\")\n" +msgstr "Ìç Ýãêõñç åíôïëÞ (äïêéìÜóôå \"help\")\n" + +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Áõôü ôï êëåéäß ìðïñåß íá áíáêëçèåß áðü %s êëåéäß %s%s\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (åõáßóèçôï)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 +#, c-format +msgid "%s%c %4u%c/%08lX created: %s expires: %s" +msgstr "%s%c %4u%c/%08lX äçìéïõñãßá: %s ëÞîç: %s" + +#: g10/keyedit.c:1506 +#, c-format +msgid " trust: %c/%c" +msgstr " åìðéóôïóýíç: %c/%c" + +#: g10/keyedit.c:1510 +msgid "This key has been disabled" +msgstr "Áõôü ôï êëåéäß Ý÷åé áðåíåñãïðïéçèåß" + +#: g10/keyedit.c:1539 +#, c-format +msgid "rev! subkey has been revoked: %s\n" +msgstr "rev! ôï êëåéäß áíáêëÞèçêå: %s\n" + +#: g10/keyedit.c:1542 +msgid "rev- faked revocation found\n" +msgstr "rev- âñÝèçêå ðáñáðïéçìÝíç áíÜêëçóç\n" + +#: g10/keyedit.c:1544 +#, c-format +msgid "rev? problem checking revocation: %s\n" +msgstr "rev? ðñüâëçìá óôïí Ýëåã÷ï áíÜêëçóçò: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" +"Ç åããõñüôçôá ôïõ áðåéêïíéæüìåíïõ êëåéäéïý äåí åßíáé áðáñáßôçôá Ýããõñç\n" +"åêôüò êáé åÜí åðáíáêéíÞóåôå ôï ðñüãñáììá.\n" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï êëåéäß Ý÷åé Þäç ìéá photo ID.\n" +" Ç ðñïóèÞêç åíüò áêüìç photo ID ìðïñåß íá ìðåñäÝøåé êÜðïéåò åêäüóåéò " +"PGP.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Óßãïõñá áêüìá èÝëåôå íá ôï ðñïóèÝóåôå; (y/N) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Ìðïñåßôå íá Ý÷åôå ìüíï ìéá photo ID óå Ýíá êëåéäß.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü Ýéíáé Ýíá êëåéäß ôýðïõ PGP2. Ç ðñïóèÞêç åíüò photo ID\n" +" ìðïñåß íá êÜíåé ìåñéêÝò åêäüóåéò PGP íá ôï áðïññßøïõí.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "Äåí ìðïñåßôå íá ðñïóèÝóåôå ìéá photo ID óå Ýíá êëåéäß ôýðïõ PGP2.\n" + +#: g10/keyedit.c:1832 +msgid "Delete this good signature? (y/N/q)" +msgstr "ÄéáãñáöÞ áõôÞò ôçò êáëÞò õðïãñáöÞò; (y/N/q)" + +#: g10/keyedit.c:1842 +msgid "Delete this invalid signature? (y/N/q)" +msgstr "ÄéáãñáöÞ áõôÞò ôçò ìç Ýãêõñçò õðïãñáöÞò; (y/N/q)" + +#: g10/keyedit.c:1846 +msgid "Delete this unknown signature? (y/N/q)" +msgstr "ÄéáãñáöÞ áõôÞò ôçò Üãíùóôçò õðïãñáöÞò; (y/N/q)" + +#: g10/keyedit.c:1852 +msgid "Really delete this self-signature? (y/N)" +msgstr "Óßãïõñá íá äéáãñáöåß áõôÞ ç éäéï-õðïãñáöÞ; (y/N)" + +#: g10/keyedit.c:1866 +#, c-format +msgid "Deleted %d signature.\n" +msgstr "ÄéáãñÜöôçêå %d õðïãñáöÞ.\n" + +#: g10/keyedit.c:1867 +#, c-format +msgid "Deleted %d signatures.\n" +msgstr "ÄéáãñÜöçêáí %d õðïãñáöÝò.\n" + +#: g10/keyedit.c:1870 +msgid "Nothing deleted.\n" +msgstr "Ôßðïôá äåí äéáãñÜöôçêå.\n" + +#: g10/keyedit.c:1943 +msgid "Please remove selections from the secret keys.\n" +msgstr "Ðáñáêáëþ áöáéñÝóôå ôéò åðéëïãÝò áðü ôá ìõóôéêÜ êëåéäéÜ.\n" + +#: g10/keyedit.c:1949 +msgid "Please select at most one secondary key.\n" +msgstr "Ðáñáêáëþ åðéëÝîôå ôï ðïëý Ýíá äåõôåñåýïí êëåéäß.\n" + +#: g10/keyedit.c:1953 +msgid "Changing expiration time for a secondary key.\n" +msgstr "ÁëëáãÞ çìåñïìçíßáò ëÞîçò ãéá Ýíá äåõôåñåýïí êëåéäß.\n" + +#: g10/keyedit.c:1955 +msgid "Changing expiration time for the primary key.\n" +msgstr "ÁëëáãÞ çìåñïìçíßáò ëÞîçò ãéá Ýíá ðñùôåýïí êëåéäß.\n" + +#: g10/keyedit.c:1997 +msgid "You can't change the expiration date of a v3 key\n" +msgstr "Äåí ìðïñåßôå íá áëëÜîåôå ôçí çìåñïìçíßá ëÞîçò óå Ýíá v3 êëåéäß\n" + +#: g10/keyedit.c:2013 +msgid "No corresponding signature in secret ring\n" +msgstr "Äåí âñÝèçêå áíôßóôïé÷ç õðïãñáöÞ óôç ìõóôéêÞ êëåéäïèÞêç\n" + +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "ÐñÝðåé íá åðéëÝîåôå áêñéâþò Ýíá user ID.\n" + +#: g10/keyedit.c:2284 +#, c-format +msgid "No user ID with index %d\n" +msgstr "Äåí õðÜñ÷åé user ID ìå äåßêôç %d\n" + +#: g10/keyedit.c:2330 +#, c-format +msgid "No secondary key with index %d\n" +msgstr "Äåí õðÜñ÷åé äåõôåñåýïí êëåéäß ìå äåßêôç %d\n" + +#: g10/keyedit.c:2444 +msgid "user ID: \"" +msgstr "user ID: \"" + +#: g10/keyedit.c:2449 +#, c-format +msgid "" +"\"\n" +"signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"õðïãñÜöèçêå ìå ôï êëåéäß óáò %08lX óôéò %s\n" + +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"õðïãñÜöèçêå ôïðéêÜ ìå ôï êëåéäß óáò %08lX óôéò %s\n" + +#: g10/keyedit.c:2457 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "ÁõôÞ ç õðïãñáöÞ Ýëçîå óôéò %s.\n" + +#: g10/keyedit.c:2461 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Óßãïõñá èÝëåôå íá áíáêëçèåß áõôü ôï êëåéäß; " + +#: g10/keyedit.c:2465 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "Äçìéïõñãßá åíüò ðéóôïðïéçôéêïý áíÜêëçóçò ãéá áõôÞ ôçí õðïãñáöÞ; (y/N)" + +#. FIXME: detect duplicates here +#: g10/keyedit.c:2490 +msgid "You have signed these user IDs:\n" +msgstr "¸÷åôå õðïãñÜøåé áõôÜ ôá user ID:\n" + +#: g10/keyedit.c:2504 +#, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr " õðïãñÜöèçêå áðü %08lX óôéò %s%s%s\n" + +#: g10/keyedit.c:2512 +#, c-format +msgid " revoked by %08lX at %s\n" +msgstr " áíáêëÞèçêå áðü %08lX óôéò %s\n" + +#: g10/keyedit.c:2532 +msgid "You are about to revoke these signatures:\n" +msgstr "Óêïðåýåôå íá áíáêáëÝóåôå áõôÝò ôéò õðïãñáöÝò:\n" + +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " õðïãñÜöèçêå áðü %08lX óôéò %s%s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr " (ìç-åîáãþãéìï)" + +#: g10/keyedit.c:2551 +msgid "Really create the revocation certificates? (y/N) " +msgstr "Óßãïõñá íá äçìéïõñãçèïýí ôá ðéóôïðïéçôéêÜ áíÜêëçóçò; (y/N)" + +#: g10/keyedit.c:2581 +msgid "no secret key\n" +msgstr "êáíÝíá ìõóôéêü êëåéäß\n" + +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "Áðåéêüíéóç %s photo ID ìåãÝèïõò %ld ãéá ôï êëåéäß 0x%08lX (uid %d)\n" + +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "ÐïëéôéêÞ õðïãñáöÞò: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: âñÝèçêáí ìç Ýãêõñá äåäïìÝíá óçìåßùóçò\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Óçìåßùóç õðïãñáöÞò: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "ìç áíáãíþóéìï" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "ÊëåéäïèÞêç" + +#. of subkey +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format +msgid " [expires: %s]" +msgstr " [ëÞãåé: %s]" + +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Fingerprint:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Áðïôýðùìá:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Áðïôýðùìá êëåéäéïý =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s êñõðôïãñáöçìÝíá äåäïìÝíá\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "êñõðôïãñáöçìÝíï ìå Üãíùóôï áëãüñéèìï %d\n" + +#: g10/mainproc.c:280 +#, c-format +msgid "public key is %08lX\n" +msgstr "äçìüóéï êëåéäß åßíáé %08lX\n" + +#: g10/mainproc.c:326 +msgid "public key encrypted data: good DEK\n" +msgstr "êñõðôïãñáöçìÝíá äåäïìÝíá ìå äçìüóéï êëåéäß: êáëü DEK\n" + +#: g10/mainproc.c:378 +#, c-format +msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" +msgstr "êñõðôïãñáöçìÝíï ìå %u-bit %s êëåéäß, ID %08lX, äçìéïõñãÞèçêå %s\n" + +#: g10/mainproc.c:388 +#, c-format +msgid "encrypted with %s key, ID %08lX\n" +msgstr "êñõðôïãñáöçìÝíï ìå %s key, ID %08lX\n" + +#: g10/mainproc.c:402 +#, c-format +msgid "public key decryption failed: %s\n" +msgstr "êñõðôïãñÜöçóç ìå äçìüóéï êëåéäß áðÝôõ÷å: %s\n" + +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "õðüèåóç %s êñõðôïãñáöçìÝíùí äåäïìÝíùí\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" +"Êñõðôáëãüñéèìïò IDEA ìç äéáèÝóéìïò, áéóéüäïîç ðñïóðÜèåéá ÷ñÞóçò ôïõ\n" +"%s áíôßèåôá\n" + +#: g10/mainproc.c:466 +msgid "decryption okay\n" +msgstr "áðïêñõðôïãñÜöçóç OK\n" + +#: g10/mainproc.c:471 +msgid "WARNING: encrypted message has been manipulated!\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï êñõðôïãñáöçìÝíï ìÞíõìá Ý÷åé ðåéñá÷èåß!\n" + +#: g10/mainproc.c:476 +#, c-format +msgid "decryption failed: %s\n" +msgstr "áðïêñõðôïãñÜöçóç áðÝôõ÷å: %s\n" + +#: g10/mainproc.c:495 +msgid "NOTE: sender requested \"for-your-eyes-only\"\n" +msgstr "ÓÇÌÅÉÙÓÇ: ï áðïóôïëÝáò æÞôçóå \"ãéá-ôá-ìÜôéá-óáò-ìüíï\"\n" + +#: g10/mainproc.c:497 +#, c-format +msgid "original file name='%.*s'\n" +msgstr "áñ÷éêü üíïìá áñ÷åßïõ='%.*s'\n" + +#: g10/mainproc.c:672 +msgid "standalone revocation - use \"gpg --import\" to apply\n" +msgstr "áíåîÜñôçôç áíÜêëçóç - ÷ñçóéìïðïéåßóôå \"gpg --import\" ãéá åöáñìïãÞ\n" + +#: g10/mainproc.c:733 +msgid "Notation: " +msgstr "Óçìåßùóç: " + +#: g10/mainproc.c:745 +msgid "Policy: " +msgstr "ÐïëéôéêÞ: " + +#: g10/mainproc.c:1198 +msgid "signature verification suppressed\n" +msgstr "êáôáóôïëÞ áíÜêëçóçò õðïãñáöÞò\n" + +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "áäõíáìßá ÷åéñéóìïý áõôþí ôùí ðïëëáðëþí õðïãñáöþí\n" + +#: g10/mainproc.c:1261 +#, c-format +msgid "Signature made %.*s using %s key ID %08lX\n" +msgstr "ÕðïãñáöÞ %.*s ìå ÷ñÞóç ôïõ êëåéäéïý%s ID %08lX\n" + +#: g10/mainproc.c:1305 g10/mainproc.c:1327 +msgid "BAD signature from \"" +msgstr "ÊÁÊÇ õðïãñáöÞ áðü \"" + +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "ËçãìÝíç õðïãñáöÞ áðü \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 +msgid "Good signature from \"" +msgstr "ÊáëÞ õðïãñáöÞ áðü \"" + +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[áâÝâáéï]" + +#: g10/mainproc.c:1351 +msgid " aka \"" +msgstr " ãíùóôü óáí \"" + +#: g10/mainproc.c:1412 +#, c-format +msgid "Can't check signature: %s\n" +msgstr "Áäõíáìßá åëÝã÷ïõ ôçò õðïãñáöÞò: %s\n" + +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "äåí åßíáé áðïêïììÝíç õðïãñáöÞ\n" + +#: g10/mainproc.c:1508 +#, c-format +msgid "standalone signature of class 0x%02x\n" +msgstr "áíåîÜñôçôç õðïãñáöÞ êëÜóçò 0x%02x\n" + +#: g10/mainproc.c:1565 +msgid "old style (PGP 2.x) signature\n" +msgstr "õðïãñáöÞ ðáëéïý óôõë (PGP 2.x)\n" + +#: g10/mainproc.c:1572 +msgid "invalid root packet detected in proc_tree()\n" +msgstr "ìç Ýãêõñï ñéæéêü(root) ðáêÝôï áíé÷íåýôçêå óôï proc_tree()\n" + +#: g10/misc.c:101 +#, c-format +msgid "can't disable core dumps: %s\n" +msgstr "áäõíáìßá áðåíåñãïðïßçóçò ôùí core dump: %s\n" + +#: g10/misc.c:211 +msgid "Experimental algorithms should not be used!\n" +msgstr "Ðåéñáìáôéêïß áëãüñéèìïé äåí ðñÝðåé íá ÷ñçóéìïðïéïýíôáé!\n" + +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" +msgstr "" +"ç ÷ñÞóç áõôïý ôïõ áëãüñéèìïõ êñõðôïãñÜöçóçò äåí óõíéóôÜôáé. ×ñçóéìïðïéÞóôå " +"Ýíá ðéï óõíçèéóìÝíï!\n" + +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Ðñïåéäïðïßçóç: ìç áóöáëÞò éäéïêôçóßá óôï %s \"%s\"\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Ðñïåéäïðïßçóç: ìç áóöáëåßò Üäåéåò óôï %s \"%s\"\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "ôï âýóìá ôïõ êñõðôáëãüñéèìïõ IDEA äåí õðÜñ÷åé\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" +"äåßôå ôï http://www.gnupg.org/why-not-idea.html ãéá ðåñéóóüôåñåò " +"ðëçñïöïñßåò\n" + +#: g10/parse-packet.c:119 +#, c-format +msgid "can't handle public key algorithm %d\n" +msgstr "áäõíáìßá ÷åéñéóìïý ôïõ áëãüñéèìïõ äçìïóßïõ êëåéäéïý %d\n" + +#: g10/parse-packet.c:1053 +#, c-format +msgid "subpacket of type %d has critical bit set\n" +msgstr "õðïðáêÝôï ôýðïõ %d Ý÷åé ïñéóìÝíï ôï êñéôéêü bit\n" + +#: g10/passphrase.c:442 g10/passphrase.c:489 +msgid "gpg-agent is not available in this session\n" +msgstr "ï gpg-agent äåí åßíáé äéáèÝóéìïò óå áõôÞ ôç óõíåäñßá\n" + +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "áäõíáìßá ïñéóìïý ôïõ pid ôïõ ðåëÜôç óéá ôï agent\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "áäõíáìßá áíÜãíùóçò ôïõ FD áðü ôï äéáêïìéóôÞ ãéá ôïí agent\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "áäõíáìßá åããñáöÞò ôïõ FD áðü ôï äéáêïìéóôÞ ãéá ôïí agent\n" + +#: g10/passphrase.c:498 +msgid "malformed GPG_AGENT_INFO environment variable\n" +msgstr "êáêïäéáôõðïìÝíç ìåôáâëçôÞ ðåñéâÜëëïíôïò GPG_AGENT_INFO\n" + +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "äåí õðïóôçñßæåôáé ç Ýêäïóç ðñùôïêüëëïõ %d ôïõ gpg-agent\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format +msgid "can't connect to `%s': %s\n" +msgstr "áäõíáìßá óýíäåóçò óôï `%s': %s\n" + +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "ðñüâëçìá åðéêïéíùíßáò ìå ôï gpg-agent\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "ðñüâëçìá ìå ôïí agent - áðåíåñãïðïéÞóç ôçò ÷ñÞóçò ôïõ agent\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 +#, c-format +msgid " (main key ID %08lX)" +msgstr " (êýñéï êëåéäß, ID %08lX)" + +#: g10/passphrase.c:641 +#, c-format +msgid "" +"You need a passphrase to unlock the secret key for user:\n" +"\"%.*s\"\n" +"%u-bit %s key, ID %08lX, created %s%s\n" +msgstr "" +"×ñåéÜæåóôå ìéá öñÜóç êëåéäß ãéá íá îåêëåéäþóåôå ôï ìõóôéêü êëåéäß ãéá ôï " +"÷ñÞóôç:\n" +"\"%.*s\"\n" +"%u-bit %s êëåéäß, ID %08lX, äçìéïõñãßá %s%s\n" + +#: g10/passphrase.c:662 +msgid "Enter passphrase\n" +msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß\n" + +#: g10/passphrase.c:664 +msgid "Repeat passphrase\n" +msgstr "ÅðáíáëÜâåôå ôç öñÜóç\n" + +#: g10/passphrase.c:705 +msgid "passphrase too long\n" +msgstr "ç öñÜóç êëåéäß åßíáé ðïëý ìåãÜëç\n" + +#: g10/passphrase.c:718 +msgid "invalid response from agent\n" +msgstr "ìç Ýãêõñç áðÜíôçóç áðü ôïí agent\n" + +#: g10/passphrase.c:727 g10/passphrase.c:808 +msgid "cancelled by user\n" +msgstr "áêõñþèçêå áðü ôï ÷ñÞóôç\n" + +#: g10/passphrase.c:729 g10/passphrase.c:890 +#, c-format +msgid "problem with the agent: agent returns 0x%lx\n" +msgstr "ðñüâëçìá ìå ôïí agent: agent åðéóôñÝöåé 0x%lx\n" + +#: g10/passphrase.c:1003 +msgid "" +"\n" +"You need a passphrase to unlock the secret key for\n" +"user: \"" +msgstr "" +"\n" +"×ñåéÜæåóôå ìéá öñÜóç êëåéäß ãéá íá îåêëåéäþóåôå ôï ìõóôéêü êëåéäß\n" +"ãéá ôï ÷ñÞóôç: \"" + +#: g10/passphrase.c:1012 +#, c-format +msgid "%u-bit %s key, ID %08lX, created %s" +msgstr "%u-bit %s êëåéäß, ID %08lX, äçìéïõñãßá %s" + +#: g10/passphrase.c:1063 +msgid "can't query password in batchmode\n" +msgstr "áäõíáìßá åñþôçóçò ôçò ëÝîçò êëåéäß óå êáôÜóôáóç äÝóìçò\n" + +#: g10/passphrase.c:1067 +msgid "Enter passphrase: " +msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß: " + +#: g10/passphrase.c:1071 +msgid "Repeat passphrase: " +msgstr "ÅðáíáëÜâåôå ôç öñÜóç êëåéäß: " + +#: g10/plaintext.c:67 +msgid "data not saved; use option \"--output\" to save it\n" +msgstr "äåäïìÝíá äåí áðïèçêåýôçêáí. ÁðïèÞêåõóç ìå ôçí åðéëïãÞ \"--output\"\n" + +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "óöÜëìá êáôÜ ôç äçìéïõñãßá ôïõ `%s': %s\n" + +#: g10/plaintext.c:337 +msgid "Detached signature.\n" +msgstr "ÁðïêïììÝíç õðïãñáöÞ.\n" + +#: g10/plaintext.c:341 +msgid "Please enter name of data file: " +msgstr "ÅéóÜãåôå ôï üíïìá áñ÷åßïõ äåäïìÝíùí: " + +#: g10/plaintext.c:362 +msgid "reading stdin ...\n" +msgstr "áíÜãíùóç ôçò stdin ...\n" + +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "äåí õðÜñ÷ïõí õðïãåãñáììÝíá äåäïìÝíá\n" + +#: g10/plaintext.c:404 +#, c-format +msgid "can't open signed data `%s'\n" +msgstr "áäõíáìßá ðñüóâáóçò õðïãåãñáììÝíùí äåäïìÝíùí `%s'\n" + +#: g10/pubkey-enc.c:100 +#, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "áíþíõìïò ðáñáëÞðôçò· äïêéìÞ ìõóôéêïý êëåéäéïý %08lX ...\n" + +#: g10/pubkey-enc.c:106 +msgid "okay, we are the anonymous recipient.\n" +msgstr "åíôÜîåé, åßìáóôå ï áíþíõìïò ðáñáëÞðôçò.\n" + +#: g10/pubkey-enc.c:158 +msgid "old encoding of the DEK is not supported\n" +msgstr "ðáëáéÜ êùäéêïðïßçóç ôïõ DEK äåí õðïóôçñßæåôáé\n" + +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "ï áëãüñéèìïò êñõðôïãñÜöçóçò %d%s åßíáé Üãíùóôïò Þ áðåíåñãïðïéçìÝíïò\n" + +#: g10/pubkey-enc.c:220 +#, c-format +msgid "NOTE: cipher algorithm %d not found in preferences\n" +msgstr "ÓÇÌÅÉÙÓÇ: ï áëãüñéèìïò êñõðôïãñÜöçóçò %d äåí åßíáé óôéò åðéëïãÝò\n" + +#: g10/pubkey-enc.c:242 +#, c-format +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "ÓÇÌÅÉÙÓÇ: ôï ìõóôéêü êëåéäß %08lX Ýëçîå óôéò %s\n" + +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "áßôçóç êëåéäéïý %08lX áðü ôï HKP äéáêïìéóôÞ êëåéäéþí %s ...\n" + +#: g10/hkp.c:94 +#, c-format +msgid "can't get key from keyserver: %s\n" +msgstr "áäõíáìßá ëÞøçò ôïõ êëåéäéïý áðü ôï äéáêïìéóôÞ: %s\n" + +#: g10/hkp.c:171 +#, c-format +msgid "error sending to `%s': %s\n" +msgstr "óöÜëìá óôç áðïóôïëÞ ðñïò ôï `%s': %s\n" + +#: g10/hkp.c:186 +#, c-format +msgid "success sending to `%s' (status=%u)\n" +msgstr "åðéôõ÷ßá ôçò áðïóôïëÞò óôï `%s' (êáôÜóôáóç=%u)\n" + +#: g10/hkp.c:189 +#, c-format +msgid "failed sending to `%s': status=%u\n" +msgstr "áðïôõ÷ßá óôçí áðïóôïëÞ ðñïò ôï `%s': êáôÜóôáóç=%u\n" + +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "áíáæÞôçóç ôïõ \"%s\" áðü ôï HKP äéáêïìéóôÞ %s\n" + +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "áäõíáìßá áíáæÞôçóçò äéáêïìéóôÞ: %s\n" + +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "ôìÞìáôá ôïõ ìõóôéêïý êëåéäéïý äåí åßíáé äéáèÝóéìá\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "äåí õðïóôçñßæåôáé ï áëãüñéèìïò ðñïóôáóßáò %d%s\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Ìç Ýãêõñç öñÜóç êëåéäß, äïêéìÜóôå îáíÜ" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 +msgid "WARNING: Weak key detected - please change passphrase again.\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áíé÷íåýôçêå áäýíáìï êëåéäß - áëëÜîôå ôç öñÜóç êëåéäß\n" + +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" +"äçìéïõñãßá ôïõ ìç óõíåéóôüìåíïõ 16-bit checksum ãéá ôç ðñïóôáóßá ôïõ\n" +"ìõóôéêïý êëåéäéïý\n" + +#: g10/sig-check.c:205 +msgid "" +"this is a PGP generated ElGamal key which is NOT secure for signatures!\n" +msgstr "" +"áõôü ôï, äçìéïõñãÞìåíï áðü PGP, êëåéäß ElGamal ÄÅÍ åßíáé áóöáëÝò ãéá " +"õðïãñáöÝò!\n" + +#: g10/sig-check.c:213 +#, c-format +msgid "public key is %lu second newer than the signature\n" +msgstr "ôï äçìüóéï êëåéäß åßíáé %lu äåõôåñüëåðôï íåüôåñï áðü ôçí õðïãñáöÞ\n" + +#: g10/sig-check.c:214 +#, c-format +msgid "public key is %lu seconds newer than the signature\n" +msgstr "ôï äçìüóéï êëåéäß åßíáé %lu äåõôåñüëåðôá íåüôåñï áðü ôçí õðïãñáöÞ\n" + +#: g10/sig-check.c:237 +#, c-format +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "ÓÇÌÅÉÙÓÇ: ôï êëåéäß õðïãñáöÞò %08lX Ýëçîå óôéò %s\n" + +#: g10/sig-check.c:318 +msgid "assuming bad signature due to an unknown critical bit\n" +msgstr "õðüèåóç êáêÞò õðïãñáöÞò ëüãù Üãíùóôïõ êñßóéìïõ bit\n" + +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: áäõíáìßá óôç %%-áíÜðôõîç ôïõ url ðïëéôéêÞò (ðïëõ ìåãÜëï).\n" +" ×ñÞóç ìç áíåðôõãìÝíïõ.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "áðÝôõ÷å ï Ýëåã÷ïò ôçò õðïãñáöÞò ðïõ äçìéïõñãÞèçêå: %s\n" + +#: g10/sign.c:283 +#, c-format +msgid "%s signature from: %s\n" +msgstr "%s õðïãñáöÞ áðü: %s\n" + +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: `%s' åßíáé Ýíá Üäåéï áñ÷åßï\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"ìðïñåßôå íá õðïãñÜøåôå ìå êëåéäéÜ ôýðïõ PGP 2.x ìüíï óå --pgp2 êáôÜóôáóç\n" + +#: g10/sign.c:643 g10/sign.c:812 +#, c-format +msgid "can't create %s: %s\n" +msgstr "áäõíáìßá äçìéïõñãßáò ôïõ %s: %s\n" + +#: g10/sign.c:704 +msgid "signing:" +msgstr "õðïãñáöÞ:" + +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"ìðïñåßôå íá õðïãñÜøåôå êáèáñÜ ìå êëåéäéÜ ôýðïõ PGP 2.x óå êáôÜóôáóç --pgp2\n" + +#: g10/sign.c:953 +#, c-format +msgid "%s encryption will be used\n" +msgstr "%s êñõðôïãñÜöçóç èá ÷ñçóéìïðïéçèåß\n" + +#: g10/textfilter.c:134 +#, c-format +msgid "can't handle text lines longer than %d characters\n" +msgstr "áäõíáìßá ÷åéñéóìïý ãñáììþí êåéìÝíïõ ìåãáëýôåñåò áðü %d ÷áñáêôÞñåò\n" + +#: g10/textfilter.c:231 +#, c-format +msgid "input line longer than %d characters\n" +msgstr "ãñáììÞ åéóüäïõ ìåãáëýôåñç áðü %d ÷áñáêôÞñåò\n" + +#: g10/tdbio.c:121 g10/tdbio.c:1382 +#, c-format +msgid "trustdb rec %lu: lseek failed: %s\n" +msgstr "trustdb rec %lu: áðïôõ÷ßá lseek: %s\n" + +#: g10/tdbio.c:127 g10/tdbio.c:1389 +#, c-format +msgid "trustdb rec %lu: write failed (n=%d): %s\n" +msgstr "trustdb rec %lu: áðïôõ÷ßá write (n=%d): %s\n" + +#: g10/tdbio.c:237 +msgid "trustdb transaction too large\n" +msgstr "ðïëý ìåãÜëç óõíáëëáãÞ trustdb\n" + +#: g10/tdbio.c:454 +#, c-format +msgid "%s: can't access: %s\n" +msgstr "%s: áäõíáìßá ðñüóâáóçò: %s\n" + +#: g10/tdbio.c:468 +#, c-format +msgid "%s: directory does not exist!\n" +msgstr "%s: ï öÜêåëïò äåí õðÜñ÷åé!\n" + +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 +#, c-format +msgid "%s: can't create lock\n" +msgstr "%s: áäõíáìßá äçìéïõñãßáò êëåéäþìáôïò (lock)\n" + +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: áäõíáìßá äçìéïõñãßáò êëåéäþìáôïò (lock)\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: áäõíáìßá äçìéïõñãßáò: %s\n" + +#: g10/tdbio.c:503 +#, c-format +msgid "%s: failed to create version record: %s" +msgstr "%s: áðïôõ÷ßá äçìéïõñãßáò ìéáò åããñáöÞò Ýêäïóçò: %s" + +#: g10/tdbio.c:507 +#, c-format +msgid "%s: invalid trustdb created\n" +msgstr "%s: äçìéïõñãÞèçêå ìç Ýãêõñç trustdb\n" + +#: g10/tdbio.c:510 +#, c-format +msgid "%s: trustdb created\n" +msgstr "%s: äçìéïõñãÞèçêå ç trustdb\n" + +#: g10/tdbio.c:565 +#, c-format +msgid "%s: invalid trustdb\n" +msgstr "%s: ìç Ýãêõñç trustdb\n" + +#: g10/tdbio.c:597 +#, c-format +msgid "%s: failed to create hashtable: %s\n" +msgstr "%s: áäõíáìßá äçìéïõñãßáò hashtable: %s\n" + +#: g10/tdbio.c:605 +#, c-format +msgid "%s: error updating version record: %s\n" +msgstr "%s: óöÜëìá óôçí åíçìÝñùóç ôçò åããñáöÞò Ýêäïóçò: %s\n" + +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 +#, c-format +msgid "%s: error reading version record: %s\n" +msgstr "%s: óöÜëìá óôçí áíÜãíùóç ôçò åããñáöÞò Ýêäïóçò: %s\n" + +#: g10/tdbio.c:634 g10/tdbio.c:680 +#, c-format +msgid "%s: error writing version record: %s\n" +msgstr "%s: óöÜëìá óôçí åããñáöÞ ôçò åããñáöÞò Ýêäïóçò: %s\n" + +#: g10/tdbio.c:1119 +#, c-format +msgid "trustdb: lseek failed: %s\n" +msgstr "trustdb: áðÝôõ÷å lseek: %s\n" + +#: g10/tdbio.c:1127 +#, c-format +msgid "trustdb: read failed (n=%d): %s\n" +msgstr "trustdb: read áðÝôõ÷å (n=%d): %s\n" + +#: g10/tdbio.c:1148 +#, c-format +msgid "%s: not a trustdb file\n" +msgstr "%s: äåí åßíáé trustdb áñ÷åßï\n" + +#: g10/tdbio.c:1165 +#, c-format +msgid "%s: version record with recnum %lu\n" +msgstr "%s: åããñáöÞ Ýêäïóçò ìå recnum %lu\n" + +#: g10/tdbio.c:1170 +#, c-format +msgid "%s: invalid file version %d\n" +msgstr "%s: ìç Ýãêõñç Ýêäïóç áñ÷åßïõ %d\n" + +#: g10/tdbio.c:1348 +#, c-format +msgid "%s: error reading free record: %s\n" +msgstr "%s: óöÜëìá óôçí áíÜãíùóç ôçò åããñáöÞò free : %s\n" + +#: g10/tdbio.c:1356 +#, c-format +msgid "%s: error writing dir record: %s\n" +msgstr "%s: óöÜëìá óôçí åããñáöÞ ôçò åããñáöÞò dir : %s\n" + +#: g10/tdbio.c:1366 +#, c-format +msgid "%s: failed to zero a record: %s\n" +msgstr "%s: áðïôõ÷ßá óôïí ìçäåíéóìü ìéáò åããñáöÞò: %s\n" + +#: g10/tdbio.c:1396 +#, c-format +msgid "%s: failed to append a record: %s\n" +msgstr "%s: áðïôõ÷ßá óôçí ðñïóèÞêç ìéáò åããñáöÞò: %s\n" + +#: g10/tdbio.c:1441 +msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" +msgstr "ç trustdb åßíáé öèáñìÝíç - ÷ñçóéìïðïéåßóôå ôï \"gpg --fix-trustdb\".\n" + +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' äåí åßíáé Ýãêõñï ìáêñý keyID\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "êëåéäß %08lX: áðïäï÷Þ óáí êëåéäß ìå åìðéóôïóýíç\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "ôï êëåéäß %08lX õðÜñ÷åé ðÜíù áðü ìéá öïñÜ óôçí trustdb\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "" +"êëåéäß %08lX: êáíÝíá äçìüóéï êëåéäß ãéá ôï êëåéäß ìå åìðéóôïóýíç - " +"ðáñÜëåéøç\n" + +#: g10/trustdb.c:332 +#, c-format +msgid "trust record %lu, req type %d: read failed: %s\n" +msgstr "åããñáöÞ trust %lu, req ôýðïò %d: read áðÝôõ÷å: %s\n" + +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "ç åããñáöÞ trust %lu äåí åßíáé ôïõ æçôïýìåíïõ ôýðïõ %d\n" + +#: g10/trustdb.c:353 +#, c-format +msgid "trust record %lu, type %d: write failed: %s\n" +msgstr "åããñáöÞ trust %lu, ôýðïò %d: write áðÝôõ÷å: %s\n" + +#: g10/trustdb.c:368 +#, c-format +msgid "trustdb: sync failed: %s\n" +msgstr "trustdb: sync áðÝôõ÷å: %s\n" + +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "äåí õðÜñ÷åé áíÜãêç ãéá Ýëåã÷ï ôçò trustdb\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 +#, c-format +msgid "next trustdb check due at %s\n" +msgstr "åðüìåíïò Ýëåã÷ïò ôçò trustdb èá ãßíåé óôéò %s\n" + +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "Ýëåã÷ïò ôçò trustdb\n" + +#: g10/trustdb.c:933 +#, c-format +msgid "public key %08lX not found: %s\n" +msgstr "ôï äçìüóéï êëåéäß %08lX äåí âñÝèçêå: %s\n" + +#: g10/trustdb.c:1515 +#, c-format +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "" +"äå âñÝèçêå ôï äçìüóéï êëåéäß ôïõ áðüëõôá åìðéóôåýóéìïõ êëåéäéïý %08lX\n" + +#: g10/trustdb.c:1593 +#, c-format +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "Ýëåã÷ïò óå âÜèïò %d õðïãñáöèçêå=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" + +#: g10/verify.c:108 +msgid "" +"the signature could not be verified.\n" +"Please remember that the signature file (.sig or .asc)\n" +"should be the first file given on the command line.\n" +msgstr "" +"áäõíáìßá åðáëÞèåõóçò ôçò õðïãñáöÞò.\n" +"Ðáñáêáëþ ìçí îå÷íÜôå üôé ôï áñ÷åßï õðïãñáöÞò (.sig or .asc)\n" +"ðñÝðåé íá åßíáé ôï ðñþôï áñ÷åßï óôç ãñáììÞ åíôïëþí.\n" + +#: g10/verify.c:173 +#, c-format +msgid "input line %u too long or missing LF\n" +msgstr "ãñáììÞ åéóüäïõ %u åßíáé ðïëý ìåãÜëç Þ ôçò ëåßðåé ôï LF\n" + +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"ôï êëåéäß äåí Ý÷åé óçìåéùèåß óáí áíáóöáëÝò - äåí ìðïñåß íá ÷ñçóéìïðïéçèåß ìå " +"øåýôéêç RNG!\n" + +#: g10/skclist.c:138 +#, c-format +msgid "skipped `%s': duplicated\n" +msgstr "ðáñáëåßöèçêå `%s': áíôéãñÜöôçêå\n" + +#: g10/skclist.c:145 g10/skclist.c:153 +#, c-format +msgid "skipped `%s': %s\n" +msgstr "ðáñáëåßöèçêå `%s': %s\n" + +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "ðáñáëåßöèçêå: ìõóôéêü êëåéäß Þäç ðáñþí\n" + +#: g10/skclist.c:160 +#, c-format +msgid "" +"skipped `%s': this is a PGP generated ElGamal key which is not secure for " +"signatures!\n" +msgstr "" +"ðáñáëåßöèçêå `%s': áõôü åßíáé äçìéïõñãçìÝíï áðü PGP êëåéäß ElGamal êáé äåí " +"åßíáé áóöáëÝò ãéá õðïãñáöÝò!\n" + +#. do not overwrite +#: g10/openfile.c:84 +#, c-format +msgid "File `%s' exists. " +msgstr "Ôï áñ÷åßï `%s' õðÜñ÷åé Þäç. " + +#: g10/openfile.c:86 +msgid "Overwrite (y/N)? " +msgstr "ÅðéêÜëõøç (y/N); " + +#: g10/openfile.c:119 +#, c-format +msgid "%s: unknown suffix\n" +msgstr "%s: Üãíùóôç êáôÜëçîç\n" + +#: g10/openfile.c:141 +msgid "Enter new filename" +msgstr "ÐëçêôñïëïãÞóôå Ýíá íÝï üíïìá áñ÷åßïõ" + +#: g10/openfile.c:184 +msgid "writing to stdout\n" +msgstr "åããñáöÞ óôçí stdout\n" + +#: g10/openfile.c:273 +#, c-format +msgid "assuming signed data in `%s'\n" +msgstr "õðüèåóç õðïãåãñáììÝíùí äåäïìÝíùí óôï `%s'\n" + +#: g10/openfile.c:323 +#, c-format +msgid "%s: new options file created\n" +msgstr "%s: äçìéïõñãÞèçêå íÝï áñ÷åßï åðéëïãþí\n" + +#: g10/openfile.c:350 +#, c-format +msgid "%s: can't create directory: %s\n" +msgstr "%s: áäõíáìßá äçìéïõñãßáò êáôáëüãïõ: %s\n" + +#: g10/openfile.c:353 +#, c-format +msgid "%s: directory created\n" +msgstr "%s: êáôÜëïãïò äçìéïõñãÞèçêå\n" + +#: g10/openfile.c:355 +msgid "you have to start GnuPG again, so it can read the new options file\n" +msgstr "" +"ðñÝðåé íá åðáíåêêéíÞóåôå ôï GnuPG, þóôå íá äéáâÜóåé ôï íÝï áñ÷åßï åðéëïãþí\n" + +#: g10/encr-data.c:91 +msgid "" +"WARNING: message was encrypted with a weak key in the symmetric cipher.\n" +msgstr "" +"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï ìÞíõìá êñõðôïãñáöÞèçêå ìå áäýíáìï êëåéäß óôï\n" +"óõììåôñéêü êñõðôáëãüñéèìï.\n" + +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "ðñüâëçìá óôï ÷åéñéóìü êñõðôïãñáöçìÝíïõ ðáêÝôïõ\n" + +#: g10/seskey.c:52 +msgid "weak key created - retrying\n" +msgstr "äçìéïõñãÞèçêå áäýíáìï êëåéäß - åðáíÜëçøç ðñïóðÜèåéáò\n" + +#: g10/seskey.c:57 +#, c-format +msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" +msgstr "" +"áäõíáìßá áðïöõãÞò áäýíáìïõ êëåéäéïý ãéá óõììåôñéêü êñõðôáëãüñéèìï, äïêéìÞ " +"ãéá %d öïñÝò!\n" + +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "ï DSA áðáéôåß ôç ÷ñÞóç åíüò 160 bit áëãüñéèìïõ hash\n" + +#: g10/delkey.c:116 +msgid "can't do that in batchmode without \"--yes\"\n" +msgstr "äåí ìðïñåß íá ãßíåé áõôü óå êáôÜóôáóç äÝóìçò ÷ùñßò ôï \"--yes\"\n" + +#: g10/delkey.c:138 +msgid "Delete this key from the keyring? " +msgstr "ÄéáãñáöÞ áõôïý ôïõ êëåéäéïý áðü ôç êëåéäïèÞêç; " + +#: g10/delkey.c:146 +msgid "This is a secret key! - really delete? " +msgstr "Áõôü åßíáé Ýíá ìõóôéêü êëåéäß! - Óßãïõñá íá äéáãñáöåß; " + +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "äéáãñáöÞ block êëåéäéþí áðÝôõ÷å: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "êáèáñéóìüò ðëçñïöïñéþí åìðéóôïóýíçò-éäéïêôÞôç\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "õðÜñ÷åé Ýíá ìõóôéêü êëåéäß ãéá ôï äçìüóéï êëåéäß \"%s\"!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "" +"÷ñçóéìïðïéåßóôå ðñþôá ôçí åðéëïãÞ \"--delete-secret-key\" ãéá äéáãñáöÞ ôïõ.\n" + +#: g10/helptext.c:47 +msgid "" +"It's up to you to assign a value here; this value will never be exported\n" +"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" +"to do with the (implicitly created) web-of-certificates." +msgstr "" +"Åßíáé áðüöáóç óáò íá ïñßóåôå ôéìÞ åäþ. ÁõôÞ ç ôéìÞ äåí èá åîá÷èåß\n" +"ðïôÝ óå ôñßôï ðñüóùðï. Ôç ÷ñåéáæüìáóôå ãéá åöáñìïãÞ ôïõ éóôïý-" +"åìðéóôïóýíçò,\n" +"äåí Ý÷åé ôßðïôá íá êÜíåé ìå ôïí (óéùðçëÜ äçìéïõñãçìÝíï) éóôü-ðéóôïðïéçôéêþí." + +#: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Ãéá ôç äüìçóç åíüò Éóôïý-Åìðéóôïóýíçò, ôï GnuPG ðñÝðåé íá îÝñåé ðïéÜ " +"êëåéäéÜ\n" +"åßíáé ðëÞñçò åìðéóôïóýíçò - áõôÜ åßíáé óõíÞèùò êëåéäéÜ óôá ïðïßá Ý÷åôå\n" +"ðñüóâáóç óôï ìõóôéêü êëåéäß. ÁðáíôÞóôå \"yes\" (íáé) ãéá íá äïèåß óôï " +"êëåéäß\n" +"áõôü ðëÞñç åìðéóôïóýíç\n" + +#: g10/helptext.c:60 +msgid "If you want to use this revoked key anyway, answer \"yes\"." +msgstr "" +"ÅÜí èÝëåôå íá ÷ñçóéìïðïéÞóåôå áõôü ôï áíáêëÞèåí êëåéäß, áðáíôÞóôå \"yes\"." + +#: g10/helptext.c:64 +msgid "If you want to use this untrusted key anyway, answer \"yes\"." +msgstr "" +"ÅÜí èÝëåôå íá ÷ñçóéìïðïéÞóåôå áõôü ôï ìç åìðéóôåõìÝíï êëåéäß, áðáíôÞóôå \"yes" +"\"." + +#: g10/helptext.c:68 +msgid "" +"Enter the user ID of the addressee to whom you want to send the message." +msgstr "" +"ÐëçêôñïëïãÞóôå ôï user ID ôïõ áðïäÝêôç áõôïý ðïõ èÝëåôå íá óôåßëåôå ìÞíõìá." + +#: g10/helptext.c:72 +msgid "" +"Select the algorithm to use.\n" +"\n" +"DSA (aka DSS) is the digital signature algorithm which can only be used\n" +"for signatures. This is the suggested algorithm because verification of\n" +"DSA signatures are much faster than those of ElGamal.\n" +"\n" +"ElGamal is an algorithm which can be used for signatures and encryption.\n" +"OpenPGP distinguishs between two flavors of this algorithms: an encrypt " +"only\n" +"and a sign+encrypt; actually it is the same, but some parameters must be\n" +"selected in a special way to create a safe key for signatures: this program\n" +"does this but other OpenPGP implementations are not required to understand\n" +"the signature+encryption flavor.\n" +"\n" +"The first (primary) key must always be a key which is capable of signing;\n" +"this is the reason why the encryption only ElGamal key is not available in\n" +"this menu." +msgstr "" +"ÅðéëÝîôå ôïí áëãüñéèìï ðïõ èÝëåôå íá ÷ñçóéìïðïéÞóåôå.\n" +"\n" +"DSA (åðßóçò ãíùóôüò óáí DSS) åßíáé ï áëãüñéèìïò øçöéáêÞò õðïãñáöÞò\n" +"êáé ìðïñåß íá ÷ñçóéìïðïéçèåß ìüíï ãéá õðïãñáöÝò. Åßíáé ï ðñïôåéíüìåíïò\n" +"áëãüñéèìïò åðåéäÞ ç åðáëÞèåõóç ôùí DSA õðïãñáöþí åßíáé ôá÷ýôåñç áðü\n" +"ôùí õðïãñáöþí ôýðïõ ElGamal.\n" +"\n" +"ElGamal åßíáé Ýíáò áëãüñéèìïò ãéá ÷ñÞóç êáé óå õðïãñáöÝò êáé ãéá êñõðôï-\n" +"ãñÜöçóç. Ôï OpenPGP îå÷ùñßæåé ôéò äýï \"ãåýóåéò\" áõôïý ôïõ áëãüñéèìïõ:\n" +"Ýíá êñõðôïãñÜöçóçò-ìüíï êáé Ýíá õðïãñáöÞò-êáé-êñõðôïãñÜöçóçò, óôçí\n" +"ðñáãìáôéêüôçôá åßíáé ï ßäéïò, áëëÜ êÜðïéïé ðáñÜìåôñïé ðñÝðåé íá åðéëåãïýí\n" +"ìå Ýíá åéäéêü ôñüðï ãéá íá äçìéïõñãçèåß Ýíá áóöáëÝò êëåéäß ãéá õðïãñáöÝò.\n" +"Áõôü ôï ðñüãñáììá ôï êÜíåé, áëëÜ óå Üëëåò OpenPGP õëïðïéÞóåéò äåí\n" +"åßíáé áðáñáßôçôï íá êáôáëáâáßíïõí áõôü ôï óõíäõáóìü (ãåýóç).\n" +"\n" +"Ôï ðñþôï (ðñùôåýïí) êëåéäß ðñÝðåé íá åßíáé ðÜíôïôå Ýíá êëåéäß éêáíü ãéá\n" +"õðïãñáöÞ. Áõôüò åßíáé ï ëüãïò ãéá ôïí ïðïßï ï êñõðôïãñÜöçóçò-ìüíï\n" +"êëåéäß ElGamal äåí åßíáé äéáèÝóéìï óå áõôü ôï ìåíïý." + +#: g10/helptext.c:92 +msgid "" +"Although these keys are defined in RFC2440 they are not suggested\n" +"because they are not supported by all programs and signatures created\n" +"with them are quite large and very slow to verify." +msgstr "" +"Áí êáé áõôÜ ôá êëåéäéÜ ðåñéãñÜöïíôáé óôï RFC2440 äåí ðñïôåßíïíôáé\n" +"åðåéäÞ äåí õðïóôçñßæïíôáé áðü üëá ôá ðñïãñÜììáôá êáé ïé õðïãñáöÝò ðïõ\n" +"Ý÷ïõí äçìéïõñãçèåß áðü áõôÜ åßíáé ìåãÜëåò êáé ðïëý áñãÝò óôçí åðáëÞèåõóç." + +#: g10/helptext.c:99 +msgid "Enter the size of the key" +msgstr "ÐëçêôñïëïãÞóôå ôï ìÝãåèïò ôïõ êëåéäéïý" + +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 +msgid "Answer \"yes\" or \"no\"" +msgstr "ÁðáíôÞóôå \"yes\"(íáé) Þ \"no\"(ü÷é)" + +#: g10/helptext.c:113 +msgid "" +"Enter the required value as shown in the prompt.\n" +"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" +"get a good error response - instead the system tries to interpret\n" +"the given value as an interval." +msgstr "" +"ÐëçêôñïëïãÞóôå ôçí áðáéôïýìåíç ôéìÞ üðùò áðåéêïíßæåôå.\n" +"Ìðïñåßôå íá åéóÜãåôå ìéá çìåñïìçíßá ISO (YYYY-MM-DD) áëëÜ\n" +"äåí èá ëÜâåôå ìéá êáëÞ áðÜíôçóç óöÜëìáôïò - áíôßèåôá ôï óýóôçìá\n" +"ðñïóðáèåß íá åñìçíåýóåé ôçí ôéìÞ óáí äéÜóôçìá." + +#: g10/helptext.c:125 +msgid "Enter the name of the key holder" +msgstr "ÐëçêôñïëïãÞóôå ôï üíïìá ôïõ êëåéäïêñÜôïñá" + +#: g10/helptext.c:130 +msgid "please enter an optional but highly suggested email address" +msgstr "ðëçêôñïëïãÞóôå ðñïáéñåôéêÜ ìéá äéåýèõíóç email (óõíéóôÜôáé)" + +#: g10/helptext.c:134 +msgid "Please enter an optional comment" +msgstr "Ðáñáêáëþ ðñïáéñåôéêÜ ðëçêôñïëïãÞóôå Ýíá ó÷üëéï" + +#: g10/helptext.c:139 +msgid "" +"N to change the name.\n" +"C to change the comment.\n" +"E to change the email address.\n" +"O to continue with key generation.\n" +"Q to to quit the key generation." +msgstr "" +"N ãéá áëëáãÞ ôïõ ïíüìáôïò.\n" +"C ãéá áëëáãÞ ôïõ ó÷ïëßïõ.\n" +"E ãéá áëëáãÞ ôçò äéåýèõíóçò email.\n" +"O ãéá óõíÝ÷åéá ôçò äçìéïõñãßáò êëåéäéïý.\n" +"Q ãéá íá ôåñìáôßóåôå ôç äçìéïõñãßá êëåéäéïý." + +#: g10/helptext.c:148 +msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." +msgstr "" +"ÁðáíôÞóôå \"yes\" (Þ áðëÜ \"y\") åÜí åßíáé åíôÜîåé íá äçìéïõñãçèåß ôï " +"õðïêëåéäß." + +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"¼ôáí õðïãñÜöåôå Ýíá user ID óå Ýíá êëåéäß, ðñÝðåé ðñþôá íá âåâáéùèåßôå üôé\n" +"ôï êëåéäß áíÞêåé óôï ðñüóùðï ðïõ áíáöÝñåôå óôï user ID. Åßíáé ÷ñÞóéìï " +"ãéáôïõò Üëëïõò, íá îÝñïõí ðüóï ðñïóåêôéêÜ êÜíáôå áõôÞ ôç ðéóôïðïßçóç.\n" +"\n" +"\"0\" óçìáßíåé ïôé äåí áðáíôÜôå êáôá ðüóï ðñïóåêôéêÜ ðéóôïðïéÞóáôå ôï " +"êëåéäß.\n" +"\"1\" óçìáßíåé üôé ðéóôåýåôå ïôé ôï êëåéäß áíÞêåé óôï Üôïìï ðïõ ëÝåé üôé " +"ôïõ\n" +" áíÞêåé, áëëÜ äåí ìðïñåßôå Þ äåí åðéâåâáéþóáôå êáèüëïõ ôï êëåéäß. Áõôü\n" +" åßíáé ÷ñÞóéìï üôáí õðïãñÜöåôå ôï êëåéäß åíüò \"øåõäþíõìïõ\" ÷ñÞóôç.\n" +"\n" +"\"2\" óçìáßíåé üôé êÜíáôå ôçí óõíÞèç ðéóôïðïßçóç ôïõ êëåéäéïý. Ãéá " +"ðáñÜäåéãìá\n" +" áõôü ìðïñåß íá óçìáßíåé üôé ðéóôïðïéÞóáôå ôï êëåéäß êáé åëÝãîáôå ôï\n" +" user ID óôï êëåéäß ìå ìéá photo ID.\n" +"\n" +"\"3\" óçìáßíåé üôé êÜíáôå åêôåôáìÝíï Ýëåã÷ï óôï êëåéäß. Ãéá ðáñÜäåéãìá, " +"áõôü\n" +" áõôü ìðïñåß íá óçìáßíåé üôé åëÝãîáôå ôï áðïôýðùìá ôïõ êëåéäéïý ìå ôïí\n" +" éäéïêôÞôç ôïõ êëåéäéïý \"öõóéêÜ\" ðáñþí êáé åëÝãîáôå üôé ôï photo ID " +"ôïõ\n" +" êëåéäéïý åßíáé üìïéï ìå áõôü óå Ýíá äýóêïëá íá ðáñá÷áñá÷èåß Ýããñáöï ð." +"÷.\n" +" ôáõôüôçôá, äéáâáôÞñéï, äßðëùìá ïäÞãçóçò.\n" +"\n" +"¸÷åôå õðüøç üôé ôá ðáñáäåßãìáôá ðïõ äþèçêáí óôá \"åðßðåäá\" 2 êáé 3 åßíáé\n" +"*ìüíï* ðáñáäåßãìáôá. Óôï ôÝëïò åîáñôÜôå ìüíï áðü åóÜò íá áðïöáóßóåôå ôé\n" +"óçìáßíåé \"óõíÞèåò\" êáé ôé \"åêôåôôáìÝíï\" óå åóÜò üôáí õðïãñÜöåôå " +"êëåéäéÜ.\n" +"\n" +"ÅÜí äåí îÝñåôå ðïéÜ åßíáé ç óùóôÞ áðÜíôçóç, äþóôå \"0\"." + +#: g10/helptext.c:194 +msgid "Answer \"yes\" is you want to sign ALL the user IDs" +msgstr "ÁðáíôÞóôå \"yes\" åÜí èÝëåôå íá õðïãñÜøåôå ÏËÁ ôá user ID" + +#: g10/helptext.c:198 +msgid "" +"Answer \"yes\" if you really want to delete this user ID.\n" +"All certificates are then also lost!" +msgstr "" +"ÁðáíôÞóôå \"yes\" åÜí ðñáãìáôéêÜ èÝëåôå íá äéáãñáöåß áõôü\n" +"ôï user ID. ¼ëá ôá ðéóôïðïéçôéêÜ èá ÷áèïýí ôüôå!" + +#: g10/helptext.c:203 +msgid "Answer \"yes\" if it is okay to delete the subkey" +msgstr "ÁðáíôÞóôå \"yes\" åÜí åßíáé åíôÜîåé íá äéáãñáöåß ôï õðïêëåéäß" + +#: g10/helptext.c:208 +msgid "" +"This is a valid signature on the key; you normally don't want\n" +"to delete this signature because it may be important to establish a\n" +"trust connection to the key or another key certified by this key." +msgstr "" +"ÁõôÞ åßíáé ìéá Ýãêõñç õðïãñáöÞ óôï êëåéäß. ÊáíïíéêÜ äåí èá èÝëáôå\n" +"íá äéáãñáöåß áõôÞ ç õðïãñáöÞ åðåéäÞ ìðïñåß íá åßíáé áðáñáßôçôç ãéá\n" +"êáèéÝñùóç ìéá óýíäåóçò åìðéóôïóýíçò óôï êëåéäß Þ óå Ýíá Üëëï êëåéäß\n" +"ðéóôïðïéçìÝíï áðü áõôü." + +#: g10/helptext.c:213 +msgid "" +"This signature can't be checked because you don't have the\n" +"corresponding key. You should postpone its deletion until you\n" +"know which key was used because this signing key might establish\n" +"a trust connection through another already certified key." +msgstr "" +"ÁõôÞ ç õðïãñáöÞ äåí ìðïñåß íá åëåã÷èåß åðåéäÞ äåí Ý÷åôå ôï áíôßóôïé÷ï\n" +"êëåéäß. ÐñÝðåé íá áíáâÜëëåôå ôç äéáãñáöÞ ôïõ, ìÝ÷ñé íá ìÜèåôå ðéï êëåéäß\n" +"÷ñçóéìïðïéÞèçêå ãéáôß áõôü ôï êëåéäß õðïãñáöÞò ìðïñåß íá êáèéåñþóåé\n" +"ìéá óýíäåóç åìðéóôïóýíçò ìÝóù åíüò Üëëïõ Þäç ðéóôïðïéçìÝíïõ êëåéäéïý." + +#: g10/helptext.c:219 +msgid "" +"The signature is not valid. It does make sense to remove it from\n" +"your keyring." +msgstr "" +"Ç õðïãñáöÞ äåí åßíáé Ýãêõñç. Åßíáé óõíåôü íá äéáãñáöåß áðü ôç\n" +"êëåéäïèÞêç óáò." + +#: g10/helptext.c:223 +msgid "" +"This is a signature which binds the user ID to the key. It is\n" +"usually not a good idea to remove such a signature. Actually\n" +"GnuPG might not be able to use this key anymore. So do this\n" +"only if this self-signature is for some reason not valid and\n" +"a second one is available." +msgstr "" +"ÁõôÞ åßíáé ìéá õðïãñáöÞ ðïõ óõíäÝåé ôï user ID óôï êëåéäß. Äåí\n" +"åßíáé óõíÞèùò êáëÞ éäÝá íá äéáãñáöåß ìéá ôÝôïéá õðïãñáöÞ. Óôçí\n" +"ðñáãìáôéêüôçôá ôï GnuPG ßóùò íá ìç ìðïñåß íá ÷ñçóéìïðïéÞóåé áõôü\n" +"ôï êëåéäß ðéá. Ïðüôå íá óõíå÷ßóåôå ìüíï åÜí áõôÞ ç éäéï-õðïãñáöÞ ãéá\n" +"êÜðïéï ëüãï äåí åßíáé Ýãêõñç Þ õðÜñ÷åé ìéá äåýôåñç." + +#: g10/helptext.c:231 +msgid "" +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" +"ÁëëÜîôå ôéò ðñïåðéëïãÝò üëùí ôùí user ID (Þ ìüíï ôùí åðéëåãìÝíùí)\n" +"óôçí ðñïõðÜñ÷ïõóá ëßóôá ðñïåðéëïãþí. Ç çìåñïìçíßá üëùí ôùí åðçñåáóìÝíùí\n" +"éäéï-õðïãñáöþí èá áõîçèåß êáôÜ 1 äåõôåñüëåðôï.\n" + +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß· áõôÞ åßíáé ìéá ìõóôéêÞ ðñüôáóç \n" + +#: g10/helptext.c:244 +msgid "Please repeat the last passphrase, so you are sure what you typed in." +msgstr "Ðáñáêáëþ åðáíáëÜâåôå ôç ôåëåõôáßá öñÜóç êëåéäß, ãéá óéãïõñéÜ." + +#: g10/helptext.c:248 +msgid "Give the name of the file to which the signature applies" +msgstr "Äþóôå ôï üíïìá ôïõ áñ÷åßïõ óôï ïðïßï åöáñìüæåôáé ç õðïãñáöÞ" + +#: g10/helptext.c:253 +msgid "Answer \"yes\" if it is okay to overwrite the file" +msgstr "ÁðáíôÞóôå \"yes\" åÜí åßíáé åíôÜîåé íá åðéêáëõöèåß ôï áñ÷åßï" + +#: g10/helptext.c:258 +msgid "" +"Please enter a new filename. If you just hit RETURN the default\n" +"file (which is shown in brackets) will be used." +msgstr "" +"Ðáñáêáëþ åéóÜãåôå Ýíá íÝï üíïìá áñ÷åßïõ. ÅÜí áðëÜ ðáôÞóåôå RETURN\n" +"ôï åî'ïñéóìïý áñ÷åßï (áðåéêïíßæåôáé óôéò áãêýëåò) èá ÷ñçóéìïðïéçèåß." + +#: g10/helptext.c:264 +msgid "" +"You should specify a reason for the certification. Depending on the\n" +"context you have the ability to choose from this list:\n" +" \"Key has been compromised\"\n" +" Use this if you have a reason to believe that unauthorized persons\n" +" got access to your secret key.\n" +" \"Key is superseded\"\n" +" Use this if you have replaced this key with a newer one.\n" +" \"Key is no longer used\"\n" +" Use this if you have retired this key.\n" +" \"User ID is no longer valid\"\n" +" Use this to state that the user ID should not longer be used;\n" +" this is normally used to mark an email address invalid.\n" +msgstr "" +"ÐñÝðåé íá ïñßóåôå Ýíá ëüãï ãéá ôçí ðéóôïðïßçóç. ÁíÜëïãá ìå ôá\n" +"óõìöñáæüìåíá, Ý÷åôå ôç äõíáôüôçôá íá åðéëÝîåôå áðü ôç ëßóôá:\n" +" \"Ôï êëåéäß Ý÷åé åêôåèåß\"\n" +" ×ñçóéìïðïéåßóôå åÜí ðéóôåýåôå üôé ìç åîïõóéïäïôçìÝíá ðñüóùðá\n" +" Ý÷ïõí ðñüóâáóç óôï ìõóôéêü êëåéäß óáò.\n" +" \"Ôï êëåéäß Ý÷åé ðáñáêáìèåß\"\n" +" ×ñçóéìïðïéåßóôå åÜí Ý÷åôå áíôéêáôáóôÞóåé ôï êëåéäß ìå Ýíá Üëëï.\n" +" \"Ôï êëåéäß äåí ÷ñçóéìïðïéåßôå ðëÝïí\"\n" +" ×ñçóéìïðïéåßóôå åÜí Ý÷åôå áðïóýñåé áõôü ôï êëåéäß.\n" +" \"Ôï user ID äåí åßíáé ðëÝïí Ýãêõñï\"\n" +" ×ñçóéìïðïéåßóôå áõôü ãéá íá äçëþóåôå üôé ôï user ID äåí ðñÝðåé\n" +" íá ÷ñçóéìïðïéåßôáé ðéá. Ãéá íá ïñßóåôå Üêõñç ìéá äéåýèõíóç email.\n" + +#: g10/helptext.c:280 +msgid "" +"If you like, you can enter a text describing why you issue this\n" +"revocation certificate. Please keep this text concise.\n" +"An empty line ends the text.\n" +msgstr "" +"ÅÜí åðéèõìåßôå, ìðïñåßôå íá ðëçêôñïëïãÞóåôå Ýíá êåßìåíï ðïõ\n" +"ðåñéãñÜöåé ôïí ëüãï ðïõ åêäßäåôáé áõôü ôï ðéóôïðïéçôéêü áíÜêëçóçò.\n" +"Ðáñáêáëþ êñáôÞóôå áõôü ôï êåßìåíï óõíïðôéêü. Ìéá Üäåéá ãñáììÞ\n" +"ëÞãåé ôï êåßìåíï.\n" + +#: g10/helptext.c:295 +msgid "No help available" +msgstr "Äåí õðÜñ÷åé äéáèÝóéìç âïÞèåéá" + +#: g10/helptext.c:303 +#, c-format +msgid "No help available for `%s'" +msgstr "Äåí õðÜñ÷åé äéáèÝóéìç âïÞèåéá ãéá `%s'" + +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "áäõíáìßá äçìéïõñãßáò ôçò êëåéäïèÞêçò `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "ç áëëáãÞ áäåßáò ôïõ `%s' áðÝôõ÷å: %s\n" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "êëåéäïèÞêç `%s' äçìéïõñãÞèçêå\n" + +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "áðïôõ÷ßá åðáíáäüìçóçò ôçò cache êëåéäïèÞêçò: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: 2 áñ÷åßá ìå åìðéóôåõôéêÝò ðëçñïöïñßåò õðÜñ÷ïõí.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s åßíáé ôï áìåôÜâëçôï\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s åßíáé ôï íÝï\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Ðáñáêáëþ äéïñèþóôå áõôÞ ôçí ðéèáíÞ \"ôñýðá\" áóöáëåßáò\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "Ýëåã÷ïò êëåéäïèÞêçò `%s'\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu êëåéäéÜ Ý÷ïõí ìÝ÷ñé ôþñá åëåã÷èåß (%lu õðïãñáöÝò)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu êëåéäéÜ Ý÷ïõí åëåã÷èåß (%lu õðïãñáöÝò)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: êëåéäïèÞêç äçìéïõñãÞèçêå\n" diff --git a/po/eo.po b/po/eo.po index 8c1e2803e..c36a2b73a 100644 --- a/po/eo.po +++ b/po/eo.po @@ -1,301 +1,329 @@ # Mesaøoj por la programo GnuPG -# Copyright (C) 2000 Free Software Foundation, Inc. -# Edmund GRIMLEY EVANS , 2000. +# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. +# Edmund GRIMLEY EVANS , 2000-2002. # msgid "" msgstr "" -"Project-Id-Version: gnupg 1.0.1e\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 2000-06-02 21:04+01:00\n" +"Project-Id-Version: gnupg 1.0.6d\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-14 14:33+0100\n" "Last-Translator: Edmund GRIMLEY EVANS \n" -"Language-Team: Esperanto \n" +"Language-Team: Esperanto \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-3\n" "Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Averto: uzas malsekuran memoron!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "bonvolu vidi http://www.gnupg.org/faq.html por pliaj informoj\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "operacio ne eblas sen sekura memoro kun komenca valoro\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(eble vi uzis la maløustan programon por æi tiu tasko)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "jes" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "jJ" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "ne" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "fini" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "fF" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "øenerala eraro" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "nekonata paketo-speco" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "nekonata versio" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "nekonata publikþlosila metodo" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "nekonata kompendi-metodo" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "malbona publika þlosilo" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "malbona sekreta þlosilo" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "malbona subskribo" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "eraro en kontrolsumo" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "malbona pasfrazo" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "publika þlosilo ne trovita" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "nekonata æifrad-metodo" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "ne povas malfermi la þlosilaron" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "nevalida paketo" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "nevalida kiraso" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "uzantidentigilo ne ekzistas" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "sekreta þlosilo ne havebla" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "maløusta sekreta þlosilo uzata" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "ne realigita" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "malbona þlosilo" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "legeraro æe dosiero" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "skriberaro æe dosiero" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "nekonata densig-metodo" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "eraro æe malfermo de dosiero" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "eraro æe kreo de dosiero" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "nevalida pasfrazo" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "nerealigita publikþlosila metodo" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "nerealigita æifrad-metodo" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "nekonata klaso de subskribo" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "eraro en fido-datenaro" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "malbona MPI" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "trafis rimedolimon" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "nevalida þlosilaro" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "malbona atestilo" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "misformita uzantidentigilo" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "eraro æe fermo de dosiero" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "eraro æe renomado de dosiero" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "eraro æe forviþo de dosiero" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "neatendita dateno" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "malkongruo de tempostampoj" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "neuzebla publikþlosila metodo" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "dosiero ekzistas" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "malforta þlosilo" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "nevalida argumento" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "malbona URI" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "nerealigita URI" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "reteraro" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "ne æifrita" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "ne traktita" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "neuzebla publika þlosilo" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "neuzebla sekreta þlosilo" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "þlosilservila eraro" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... æi tio estas cimo (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "vi trovis cimon ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "ne povas malfermi '%s': %s\n" -#: cipher/random.c:325 +#: cipher/random.c:324 #, c-format msgid "can't stat `%s': %s\n" msgstr "ne povas stat-i '%s': %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "'%s' ne estas normala dosiero - ignorita\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" msgstr "noto: dosiero random_seed estas malplena\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "averto: nevalida grando de la dosiero random_seen - ne uzita\n" -#: cipher/random.c:349 +#: cipher/random.c:348 #, c-format msgid "can't read `%s': %s\n" msgstr "ne povas legi '%s': %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" msgstr "noto: dosiero random_seed ne aktualigita\n" -#: cipher/random.c:407 +#: cipher/random.c:406 #, c-format msgid "can't create `%s': %s\n" msgstr "ne povas krei '%s': %s\n" -#: cipher/random.c:414 +#: cipher/random.c:413 #, c-format msgid "can't write `%s': %s\n" msgstr "ne povas skribi '%s': %s\n" -#: cipher/random.c:417 +#: cipher/random.c:416 #, c-format msgid "can't close `%s': %s\n" msgstr "ne povas fermi '%s': %s\n" -#: cipher/random.c:428 -#, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "tro da stokastaj bitoj petitaj; la limo estas %d\n" - -#: cipher/random.c:659 +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVERTO: uzas malsekuran stokastilon!!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -309,7 +337,7 @@ msgstr "" "NE UZU DATENOJN KREITAJN DE ÆI TIU PROGRAMO!!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -320,19 +348,7 @@ msgstr "" "Nesufiæe da stokastaj datenoj. Bonvolu fari ion por ebligi al la\n" "mastruma sistemo kolekti pli da entropio! (Mankas %d bitokoj)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Averto: uzas malsekuran memoron!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "operacio ne eblas sen sekura memoro kun komenca valoro\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(eble vi uzis la maløustan programon por æi tiu tasko)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -340,139 +356,163 @@ msgstr "" "@Komandoj:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[dosiero]|fari subskribon" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[dosiero]|fari klartekstan subskribon" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "fari apartan subskribon" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "æifri datenojn" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[dosieroj]|æifri dosierojn" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "æifri nur kun simetria æifro" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "nur skribi" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "malæifri datenojn (implicita elekto)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[dosieroj]|malæifri dosierojn" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "kontroli subskribon" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "listigi þlosilojn" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "listigi þlosilojn kaj subskribojn" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "kontroli þlosilsubskribojn" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "listigi þlosilojn kaj fingroþpurojn" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "listigi sekretajn þlosilojn" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "krei novan þlosilparon" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" -msgstr "forigi þlosilon de la publika þlosilaro" +#: g10/g10.c:307 +msgid "remove keys from the public keyring" +msgstr "forigi þlosilojn de la publika þlosilaro" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" -msgstr "forigi þlosilon de la sekreta þlosilaro" +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "forigi þlosilojn de la sekreta þlosilaro" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "subskribi þlosilon" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "subskribi þlosilon loke" -#: g10/gpg.c:224 +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "subskribi þlosilon nerevokeble" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "subskribi þlosilon loke kaj nerevokeble" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "subskribi aý redakti þlosilon" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "krei revokatestilon" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "eksporti þlosilojn" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "eksporti þlosilojn al þlosilservilo" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "importi þlosilojn de þlosilservilo" -#: g10/gpg.c:232 +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "seræi þlosilojn æe þlosilservilo" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "aktualigi æiujn þlosilojn de þlosilservilo" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "importi/kunfandi þlosilojn" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "listigi nur la sinsekvon de paketoj" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "eksporti la posedantofido-valorojn" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importi posedantofido-valorojn" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "aktualigi la fido-datenaron" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NOMOJ]|kontroli la fido-datenaron" +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "senintervena aktualigo de fido-datenaro" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "ripari fuþitan fido-datenaron" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "elkirasigi dosieron aý la normalan enigon" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "enkirasigi dosieron aý la normalan enigon" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|metodo [dosieroj]|presi mesaøo-kompendiojn" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -482,156 +522,196 @@ msgstr "" "Opcioj:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "krei eligon en askia kiraso" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NOMO|æifri por NOMO" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NOMO|uzi NOMOn kiel implicitan ricevonton" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "uzi la implicitan þlosilon kiel implicitan ricevonton" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "uzi æi tiun uzantidentigilon por subskribi aý malæifri" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|difini densig-nivelon N (0=nenia)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "uzi tekstan reøimon" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "uzi dosieron por eligo" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "detala eligo" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "iom malpli da informoj" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "tute ne uzi la terminalon" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "devigi v3-subskribojn" -#: g10/gpg.c:275 +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "ne devigi v3-subskribojn" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "devigi v4-subskribojn" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "ne devigi v4-þlosilsubskribojn" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "æiam uzi sigelon (MDC) por æifrado" -#: g10/gpg.c:276 +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "neniam uzi MDC por æifrado" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "fari neniajn þanøojn" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "uzi gpg-agent" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "neinteraga reøimo: neniam demandi" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "supozi \"jes\" æe la plej multaj demandoj" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "supozi \"ne\" æe la plej multaj demandoj" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "aldoni æi tiun þlosilaron al la listo de þlosilaroj" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "aldoni æi tiun sekretan þlosilaron al la listo" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "montri, en kiu þlosilaro estas listigita þlosilo" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NOMO|uzi NOMOn kiel la implicitan sekretan þlosilon" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|SERVILO|uzi æi tiun þlosilservilon por seræi þlosilojn" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NOMO|difini NOMOn kiel la signaron de la terminalo" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "legi la opciojn el dosiero" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "|FD|skribi statusinformojn al FD (dosierpriskribilo)" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "" +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[dosiero]|skribi statusinformojn al dosiero" -#: g10/gpg.c:297 +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|KEYID|fidi æi tiun þlosilon absolute" + +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|DOSIERO|legi aldonan bibliotekon DOSIERO" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "imiti la reøimon priskribitan en RFC 1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "þalti æiujn paket-, æifrad- kaj kompendi-opciojn al OpenPGP-konduto" -#: g10/gpg.c:300 +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "þalti æiujn paket-, æifrad- kaj kompendi-opciojn al PGP-2.x-konduto" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|uzi pasfraz-reøimon N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NOMO|uzi kompendi-metodon NOMO por pasfrazoj" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NOMO|uzi æifrad-metodon NOMO por pasfrazoj" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOMO|uzi æifrad-metodon NOMO" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOMO|uzi kompendi-metodon NOMO" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|uzi densig-metodon N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "forigi la þlosilidentigilon de æifritaj paketoj" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Montri Foto-Identigilojn" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Ne montri Foto-Identigilojn" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "Agordi komandlinion por montri Foto-Identigilojn" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NOMO=VALORO|uzi æi tiun notacian datenon" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" @@ -639,7 +719,7 @@ msgstr "" "@\n" "(Vidu la manpaøon por kompleta listo de æiuj komandoj kaj opcioj)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -659,15 +739,15 @@ msgstr "" " --list-keys [nomoj] montri þlosilojn\n" " --fingerprint [nomoj] montri fingroþpurojn\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "Bonvolu raporti cimojn al .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uzado: gpg [opcioj] [dosieroj] (-h por helpo)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -677,7 +757,7 @@ msgstr "" "subskribi, kontroli, æifri aý malæifri\n" "implicita operacio dependas de la enigataj datenoj\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -685,191 +765,248 @@ msgstr "" "\n" "Realigitaj metodoj:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "uzado: gpg [opcioj] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "malkongruaj komandoj\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTO: mankas implicita opcio-dosiero '%s'\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "opcio-dosiero '%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "legas opciojn el '%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s ne estas valida signaro\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "ne povis analizi URI de þlosilservilo\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "AVERTO: '%s' estas malplena dosiero\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "AVERTO: programo povas krei core-dosieron!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "AVERTO: %s nuligas %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTO: %s ne estas por normala uzado!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s ne eblas kun %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s ne havas sencon kun %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "eblas fari nur apartajn kaj klartekstajn subskribojn kun --pgp2\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "ne eblas samtempe subskribi kaj æifri kun --pgp2\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "necesas uzi dosierojn (kaj ne tubon) kun --pgp2\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "æifri mesaøon kun --pgp2 postulas la æifron IDEA\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "æi tiu mesaøo povas ne esti uzebla de PGP 2.x\n" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "elektita æifrad-metodo ne validas\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "elektita kompendi-metodo ne validas\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "la donita gvidlinia URL ne validas\n" +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "la donita gvidlinia URL por subskriboj ne validas\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "la donita gvidlinia URL por atestado ne validas\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "la densig-metodo devas esti inter %d kaj %d\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed devas esti pli granda ol 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed devas esti pli granda ol 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth devas esti inter 1 kaj 255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTO: simpla S2K-reøimo (0) estas forte malrekomendata\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "nevalida S2K-reøimo; devas esti 0, 1 aý 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "nevalida default-check-level; devas esti 0, 1, 2 aý 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "nevalidaj preferoj\n" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "malsukcesis doni komencajn valorojn al fido-datenaro: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [dosiero]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [dosiero]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [dosiero]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [dosiero]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [dosiero]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [dosiero]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [dosiero]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [dosiero]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key uzantidentigilo" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key uzantidentigilo" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key uzantidentigilo" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key uzantidentigilo" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key uzantidentigilo [komandoj]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key uzantidentigilo" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key uzantidentigilo" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "ne povas malfermi %s: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [uzantidentigilo] [þlosilaro]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "elkirasigo malsukcesis: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "enkirasigo malsukcesis: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "nevalida kompendi-metodo '%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[dosiero]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Ektajpu vian mesaøon ...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "ne povas malfermi '%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "la unua signo de notacia nomo devas esti litero aý substreko\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -877,249 +1014,228 @@ msgstr "" "notacia nomo devas enhavi nur literojn, ciferojn, punktojn aý substrekojn " "kaj fini per '='\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "punktoj en notacia nomo devas esti inter aliaj signoj\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "notacia valoro ne povas enhavi stirsignojn\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "kiraso: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "nevalida kirasoæapo: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "kirasoæapo: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "nevalida æapo de klarteksta subskribo\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "ingitaj klartekstaj subskriboj\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "nevalida strek-eskapita linio: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "neatendita kiraso:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "nevalida signo %02x en bazo 64 ignorita\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "tro frua dosierfino (nenia CRC)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "tro frua dosierfino (en CRC)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "misformita CRC\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "CRC-eraro; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "tro frua dosierfino (en vosto)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "eraro en vostolinio\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "Por informoj vidu http://www.gnupg.org" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "validaj OpenPGP-datenoj ne trovitaj.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "nevalida kiraso: linio pli longa ol %d signojn\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "quoted-printable-signo en kiraso - verþajne cima poþtotransendilo estis " "uzata\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Fingrospuro:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Fingrospuro:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" msgstr "Nenia kialo specifita" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" +#: g10/pkclist.c:63 +msgid "Key is superseded" msgstr "Þlosilo estas anstataýigita." -#: g10/pkclist.c:121 +#: g10/pkclist.c:65 msgid "Key has been compromised" msgstr "Þlosilo estas kompromitita" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" msgstr "Þlosilo estas ne plu uzata" -#: g10/pkclist.c:125 -#, fuzzy +#: g10/pkclist.c:69 msgid "User ID is no longer valid" msgstr "Uzantidentigilo ne plu validas" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " msgstr "Kialo por revoko: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " msgstr "Komento pri revoko: " #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "iImMfF" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMfFsS" -#: g10/pkclist.c:308 +#: g10/pkclist.c:258 #, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" -"Nenia fidovaloro atribuita al %lu:\n" +"Nenia fidovaloro atribuita al:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Bonvolu decidi, kiagrade vi fidas al æi tiu uzanto øuste\n" "kontroli la þlosilojn de aliaj uzantoj (rigardante pasportojn,\n" "kontrolante fingrospurojn el diversaj fontoj ...)?\n" "\n" -" 1 = Ne scias\n" -" 2 = Mi NE fidas\n" -" 3 = Mi iom fidas\n" -" 4 = Mi plene fidas\n" -" i = Montru pli da informoj\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = Ne scias\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = Ni NE fidas æi tiun þlosilon\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Mi fidas iomete\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Mi plene fidas\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Mi fidas absolute\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = bonvolu montri pli da informoj\n" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = reen al la æefmenuo\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = supersalti æi tiun þlosilon\n" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " f = fini\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Via decido? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Æu vi vere volas þanøi æi tiun þlosilon al absoluta fido? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" -msgstr "Atestiloj, kiuj kondukas fine al fidata þlosilo:\n" +msgstr "Atestiloj, kiuj kondukas al absolute fidata þlosilo:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Ne povis trovi validan fidovojon al la þlosilo. Ni vidu, æu eblas\n" -"atribui iujn mankantajn posedantofido-valorojn.\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"Nenia vojo trovita, kiu kondukas al unu el niaj þlosiloj.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Neniom da atestiloj trovitaj kun nedifinita fidovaloro.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Neniuj fidovaloroj þanøitaj.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "þlosilo %08lX: þlosilo estas revokita!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Æu tamen uzi æi tiun þlosilon? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "þlosilo %08lX: subþlosilo estas revokita!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: þlosilo eksvalidiøis\n" -#: g10/pkclist.c:519 +#: g10/pkclist.c:442 #, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: mankas informoj por kalkuli fidovaloron\n" +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +"%08lX: Estas nenia indiko, ke æi tiu þlosilo vere apartenas al la posedanto\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: Ni NE fidas æi tiun þlosilon\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1128,15 +1244,15 @@ msgstr "" "%08lX: Ne estas certe, ke æi tiu þlosilo vere apartenas al la posedanto,\n" "sed øi tamen estas akceptita\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Æi tiu þlosilo verþajne apartenas al la posedanto\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Æi tiu þlosilo apartenas al ni\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1148,171 +1264,195 @@ msgstr "" "la sekva demando per \"jes\"\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "AVERTO: Uzas nefidatan þlosilon!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVERTO: Æi tiu þlosilo estas revokita de sia posedanto!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Tio povas signifi, ke la subskribo estas falsa.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVERTO: Æi tiu subþlosilo estas revokita de sia posedanto!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Noto: Æi tiu þlosilo estas malþaltita.\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Noto: Æi tiu þlosilo eksvalidiøis!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVERTO: Æi tiu þlosilo ne estas atestita kun fidata subskribo!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Estas nenia indiko, ke la subskribo apartenas al la posedanto.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVERTO: Ni NE fidas æi tiun þlosilon!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " La subskribo verþajne estas FALSA.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVERTO: Æi tiu þlosilo ne estas atestita kun sufiæe fidataj subskriboj!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Ne estas certe, ke la subskribo apartenas al la posedanto.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignorita: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ignorita: publika þlosilo jam æeestas\n" -#: g10/pkclist.c:855 +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "Vi ne specifis uzantidentigilon. (Vi povas uzi \"-r\")\n" + +#: g10/pkclist.c:762 msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" "\n" +"Enter the user ID. End with an empty line: " msgstr "" -"Vi ne specifis uzantidentigilon. (Vi povas uzi \"-r\")\n" "\n" +"Donu la uzantidentigilon. Finu per malplena linio: " -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Donu la uzantidentigilon: " - -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Uzantidentigilo ne ekzistas.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "ignorita: publika þlosilo jam difinita kiel implicita ricevonto\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "Publika þlosilo estas malþaltita.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "ignorita: publika þlosilo jam difinita per --encrypt-to\n" +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "ignorita: publika þlosilo jam agordita\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "nekonata implicita ricevonto '%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: eraro dum kontrolo de þlosilo: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: ignorita: publika þlosilo estas malþaltita\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "mankas validaj adresitoj\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "prefero %c%lu ne estas valida\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "prefero %c%lu ripetita\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "tro da '%c'-preferoj\n" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "nevalida signo en signoæeno\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "skribas mem-subskribon\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "skribas þlosilbindan subskribon\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "þlosilgrando nevalida; uzas %u bitojn\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "þlosilgrando rondigita øis %u bitoj\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Bonvolu elekti, kian þlosilon vi deziras:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA kaj ElGamal (implicita elekto)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (nur subskribi)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (nur æifri)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (subskribi kaj æifri)\n" -#: g10/keygen.c:643 -#, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (subskribi kaj æifri)\n" +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (nur subskribi)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (nur æifri)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Via elekto? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Æu vi vere volas krei subskriban kaj æifran þlosilon? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "Uzado de æi tiu algoritmo estas malrekomendata - æu tamen krei? " -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Nevalida elekto.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1325,21 +1465,20 @@ msgstr "" " implicita þlosilgrando estas 1024 bitoj\n" " plej granda rekomendata þlosilgrando estas 2048 bitoj\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Kiun þlosilgrandon vi deziras? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permesas þlosilgrandon nur inter 512 kaj 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "þlosilgrando tro malgranda; 768 estas plej eta permesata valoro.\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "þlosilgrando tro malgranda; 1024 estas plej eta valoro por RSA.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "þlosilgrando tro malgranda; 768 estas plej eta permesata valoro.\n" #. It is ridiculous and an annoyance to use larger key sizes! @@ -1350,12 +1489,12 @@ msgstr " #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "þlosilgrando tro granda; %d estas plej granda permesata valoro.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1363,11 +1502,11 @@ msgstr "" "Þlosilgrandoj pli grandaj ol 2048 ne estas rekomendataj,\n" "æar la komputado daýras TRE longe!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Æu vi estas certa, ke vi deziras æi tiun þlosilgrandon? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1375,21 +1514,17 @@ msgstr "" "Bone, sed pripensu, ke la elradiado de viaj ekrano kaj klavaro estas tre " "facile kaptebla!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Æu vi vere bezonas tiom grandan þlosilgrandon? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Petita þlosilgrando estas %u bitoj\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "rondigita øis %u bitoj\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1405,25 +1540,46 @@ msgstr "" " m = þlosilo eksvalidiøos post n monatoj\n" " y = þlosilo eksvalidiøos post n jaroj\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Bonvolu specifi, kiom longe la þlosilo validu.\n" +" 0 = þlosilo neniam eksvalidiøos\n" +" = þlosilo eksvalidiøos post n tagoj\n" +" w = þlosilo eksvalidiøos post n semajnoj\n" +" m = þlosilo eksvalidiøos post n monatoj\n" +" y = þlosilo eksvalidiøos post n jaroj\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "Þlosilo validu ...? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Þlosilo validu por ...? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "nevalida valoro\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "Þlosilo neniam eksvalidiøos\n" +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s neniam eksvalidiøos\n" #. print the date when the key expires -#: g10/keygen.c:828 +#: g10/keygen.c:992 #, c-format -msgid "Key expires at %s\n" -msgstr "Þlosilo eksvalidiøos je %s\n" +msgid "%s expires at %s\n" +msgstr "%s eksvalidiøos je %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1431,11 +1587,11 @@ msgstr "" "Via sistemo ne povas montri datojn post 2038.\n" "Tamen, øi estos øuste traktata øis 2106.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Æu tio estas øusta (j/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1450,44 +1606,44 @@ msgstr "" " \"Heinrich Heine (la poeto) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Vera nomo: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Nevalida signo en nomo\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Nomo ne povas komenciøi per cifero\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Nomo devas havi almenaý 5 signojn\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Retadreso: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Nevalida retadreso\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Komento: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Nevalida signo en komento\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Vi uzas la signaron '%s'.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1498,27 +1654,27 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Bonvolu ne meti la retadreson en la veran nomon aý la komenton\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnKkAaBbFf" -#: g10/keygen.c:986 +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Þanøu (N)omon, (K)omenton, (A)adreson, aý (F)ini? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Þanøu (N)omon, (K)omenton, (A)adreson, aý (B)one/(F)ini? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" msgstr "Bonvolu korekti la eraron unue\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1526,11 +1682,16 @@ msgstr "" "Vi bezonas pasfrazon por protekti vian sekretan þlosilon.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "la pasfrazo ne estis øuste ripetita; provu denove.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "la pasfrazo ne estis øuste ripetita; provu denove" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1542,7 +1703,7 @@ msgstr "" "uzante æi tiun programon kun la opcio \"--edit-key\".\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1554,29 +1715,53 @@ msgstr "" "kreado de la primoj; tio donas al la stokastilo pli bonan þancon\n" "akiri sufiæe da entropio.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "DSA-þlosilparo havos 1024 bitojn.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Kreado de þlosiloj nuligita.\n" -#: g10/keygen.c:1668 +#: g10/keygen.c:1883 g10/keygen.c:1963 #, c-format msgid "writing public key to `%s'\n" msgstr "skribas publikan þlosilon al '%s'\n" -#: g10/keygen.c:1669 +#: g10/keygen.c:1884 g10/keygen.c:1965 #, c-format msgid "writing secret key to `%s'\n" msgstr "skribas sekretan þlosilon al '%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "neniu skribebla publika þlosilaro trovita: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "neniu skribebla sekreta þlosilaro trovita: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "eraro dum skribado de publika þlosilaro '%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "eraro dum skribado de sekreta þlosilaro '%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "publika kaj sekreta þlosiloj kreitaj kaj subskribitaj.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "þlosilo markita kiel absolute fidata.\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" @@ -1584,12 +1769,12 @@ msgstr "" "Notu, ke æi tiu þlosilo ne estas uzebla por æifrado. Vi eble volos\n" "uzi la komandon \"--edit-key\" por krei flankan þlosilon por tiu celo.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "Kreado de þlosiloj malsukcesis: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1597,7 +1782,7 @@ msgstr "" "þlosilo estis kreita %lu sekundon en la estonteco (tempotordo aý " "horloøeraro)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1605,305 +1790,359 @@ msgstr "" "þlosilo estis kreita %lu sekundojn en la estonteco (tempotordo aý " "horloøeraro)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "NOTO: krei subþlosilojn por v3-þlosiloj ne estas OpenPGP-kongrue\n" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Æu vere krei? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output ne funkcias por æi tiu komando\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "'%s' jam densigita\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: ne povas malfermi: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "eraro dum kreado de pasfrazo: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: AVERTO: malplena dosiero\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "eblas æifri nur per RSA-þlosiloj de maksimume 2048 bitoj kun --pgp2\n" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "legas el '%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "ne povas uzi la æifron IDEA por æiuj þlosiloj, al kiuj vi æifras.\n" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s-æifrita por: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 +#: g10/delkey.c:69 g10/export.c:141 #, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: uzanto ne trovita: %s\n" +msgid "key `%s' not found: %s\n" +msgstr "þlosilo '%s' ne trovita: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "eraro dum legado de þlosilbloko: %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "þlosilo %08lX: ne estas RFC-2440-þlosilo - ignorita\n" -#: g10/export.c:175 +#: g10/export.c:180 #, c-format msgid "key %08lX: not protected - skipped\n" msgstr "þlosilo %08lX: ne protektita - ignorita\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "þlosilo %08lX: PGP-2.x-stila þlosilo - ignorita\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "AVERTO: nenio estis eksportita\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "tro da registroj en pk-staplo - malþaltas\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "tro da registroj en unk-staplo - malþaltas\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[Uzantidentigilo ne trovita]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, fuzzy, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "Nevalida þlosilo %08lX validigita per --always-trust\n" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "uzas flankan þlosilon %08lX anstataý la æefa þlosilo %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "þlosilo %08lX: sekreta þlosilo sen publika þlosilo - ignorita\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: uzanto ne trovita\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "ignoras blokon de speco %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu þlosiloj jam traktitaj\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "eraro dum legado de '%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr " Nombro traktita entute: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " novaj subþlosiloj: %lu\n" +msgstr " ignoritaj novaj þlosiloj: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sen uzantidentigilo: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " importitaj: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " neþanøitaj: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " novaj uzantidentigiloj: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " novaj subþlosiloj: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " novaj subskriboj: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr " novaj þlosilrevokoj: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " sekretaj þlosiloj legitaj: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr "sekretaj þlosiloj importitaj: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "sekretaj þlosiloj neþanøitaj: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "þlosilo %08lX: mankas uzantidentigilo\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "þlosilo %08lX: akceptis ne-mem-subskribitan uzantidentigilon '" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "þlosilo %08lX: mankas valida uzantidentigilo\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "tio povas esti kaýzata de mankanta mem-subskribo\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "þlosilo %08lX: publika þlosilo ne trovita: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "þlosilo %08lX: ne estas RFC-2440-þlosilo - ignorita\n" +msgstr "þlosilo %08lX: nova þlosilo - ignorita\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "neniu skribebla þlosilaro trovita: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "skribas al '%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "eraro dum skribado de þlosilaro '%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "þlosilo %08lX: publika þlosilo importita\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "þlosilo %08lX: diferencas de nia kopio\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "þlosilo %08lX: ne povas trovi originalan þlosilblokon: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "þlosilo %08lX: ne povas legi originalan þlosilblokon: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "þlosilo %08lX: 1 nova uzantidentigilo\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "þlosilo %08lX: %d novaj uzantidentigiloj\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "þlosilo %08lX: 1 nova subskribo\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "þlosilo %08lX: %d novaj subskriboj\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "þlosilo %08lX: 1 nova subþlosilo\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "þlosilo %08lX: %d novaj subþlosiloj\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "þlosilo %08lX: ne þanøita\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "mankas implicita sekreta þlosilaro: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "þlosilo %08lX: sekreta þlosilo importita\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "þlosilo %08lX: jam en sekreta þlosilaro\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "þlosilo %08lX: sekreta þlosilo ne trovita: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "þlosilo %08lX: publika þlosilo mankas - ne povas apliki revokatestilon\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "þlosilo %08lX: nevalida revokatestilo: %s - malakceptita\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "þlosilo %08lX: revokatestilo importita\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "þlosilo %08lX: mankas uzantidentigilo por subskribo\n" -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" msgstr "þlosilo %08lX: nerealigita publikþlosila metodo\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" msgstr "þlosilo %08lX: nevalida mem-subskribo\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "þlosilo %08lX: mankas subþlosilo por þlosilbindado\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "þlosilo %08lX: nerealigita publikþlosila metodo\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "þlosilo %08lX: nevalida subþlosila bindado\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "þlosilo %08lX: akceptis ne-mem-subskribitan uzantidentigilon '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "þlosilo %08lX: ignoris uzantidentigilon '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "þlosilo %08lX: ignoris subþlosilon\n" @@ -1912,93 +2151,197 @@ msgstr " #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "þlosilo %08lX: neeksportebla subskribo (klaso %02x) - ignorita\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "þlosilo %08lX: revokatestilo en maløusta loko - ignorita\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "þlosilo %08lX: nevalida revokatestilo: %s - ignorita\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "þlosilo %08lX: trovis ripetitan uzantidentigilon - kunfandita\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "þlosilo %08lX: revokatestilo aldonita\n" -#: g10/import.c:1130 g10/import.c:1183 +#: g10/import.c:1231 #, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "þlosilo %08lX: nia kopio ne havas mem-subskribon\n" +msgid "key %08lX: direct key signature added\n" +msgstr "þlosilo %08lX: rekta þlosilsubskribo aldonita\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[revoko]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[mem-subskribo]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 malbona subskribo\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d malbonaj subskriboj\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 subskribo ne kontrolita pro manko de þlosilo\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d subskriboj ne kontrolitaj pro manko de þlosiloj\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 subskribo ne kontrolita pro eraro\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d subskriboj ne kontrolitaj pro eraroj\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "1 uzantidentigilo sen valida mem-subskribo estis trovita\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d uzantidentigiloj sen valida mem-subskribo estis trovitaj\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 -#, c-format -msgid "Already signed by key %08lX\n" -msgstr "Jam subskribita per þlosilo %08lX\n" +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Uzantidentigilo \"%s\" estas revokita.\n" -#: g10/keyedit.c:319 +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +#, fuzzy +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Æu vi estas certa, ke vi ankoraý volas subskribi øin?\n" + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr "" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, fuzzy, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Via aktuala subskribo sur \"%s\"\n" +"estas loka subskribo.\n" +"\n" +"Æu vi volas igi øin plena eksportebla subskribo?\n" + +#: g10/keyedit.c:368 +#, fuzzy +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" +"Via aktuala subskribo sur \"%s\"\n" +"estas loka subskribo.\n" +"\n" +"Æu vi volas igi øin plena eksportebla subskribo?\n" + +#: g10/keyedit.c:388 +#, fuzzy, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" jam estis %ssubskribita per þlosilo %08lX\n" + +#: g10/keyedit.c:393 +#, fuzzy, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" jam estis %ssubskribita per þlosilo %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nenio por subskribi per þlosilo %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Æi tiu þlosilo eksvalidiøis!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Æi tiu þlosilo eksvalidiøos je %s.\n" + +#: g10/keyedit.c:444 +#, fuzzy +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Æu vi volas, ke via subskribo eksvalidiøu je la sama tempo? (j/n) " + +#: g10/keyedit.c:477 +#, fuzzy +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "eblas subskribi nur per PGP-2.x-stilaj þlosiloj kun --pgp2\n" + +#: g10/keyedit.c:479 +#, fuzzy +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "æi tiu mesaøo povas ne esti uzebla de PGP 2.x\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Kiom zorge vi kontrolis, ke la þlosilo, kiun vi subskribos, vere apartenas\n" +"al la supre nomita persono? Se vi ne scias la respondon, donu \"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Mi ne respondas.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Mi tute ne kontrolis.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Mi malzorge kontrolis.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Mi tre zorge kontrolis.%s\n" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2006,41 +2349,73 @@ msgstr "" "Æu vi estas tute certa, ke vi volas subskribi æi tiun þlosilon\n" "per via þlosilo: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 msgid "" +"\n" "The signature will be marked as non-exportable.\n" -"\n" msgstr "" -"La subskribo estos markita kiel neeksportebla.\n" "\n" +"La subskribo estos markita kiel neeksportebla.\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"La subskribo estos markita kiel nerevokebla.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Mi tute ne kontrolis æi tiun þlosilon.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Mi malzorge kontrolis æi tiun þlosilon.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Mi tre zorge kontrolis æi tiun þlosilon.\n" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Æu vere subskribi? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "subskribado malsukcesis: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Æi tiu þlosilo ne estas protektita.\n" -#: g10/keyedit.c:426 +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" msgstr "Sekretaj partoj de æefa þlosilo ne estas disponataj.\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "Þlosilo estas protektita.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Ne povas redakti æi tiun þlosilon: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2048,7 +2423,7 @@ msgstr "" "Donu la novan pasfrazon por æi tiu sekreta þlosilo.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2056,421 +2431,554 @@ msgstr "" "Vi ne deziras pasfrazon - tio verþajne estas *malbona* ideo!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Æu vi vere volas fari tion? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "movas þlosilsubskribon al la øusta loko\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "forlasi æi tiun menuon" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "f" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "skribi" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "skribi kaj fini" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "helpo" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "montri æi tiun helpon" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fsp" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "montri fingrospuron" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "listo" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "listigi þlosilojn kaj uzantidentigilojn" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "elekti uzantidentigilon N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "þlosilo" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "elekti flankan þlosilon N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "kontroli" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "listigi subskribojn" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "k" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "subskribi" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "subskribi la þlosilon" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsub" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "subskribi la þlosilon loke" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsub" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "subskribi la þlosilon nerevokeble" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsub" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "subskribi la þlosilon loke kaj nerevokeble" + +#: g10/keyedit.c:832 msgid "debug" msgstr "spuri" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "aluid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "aldoni uzantidentigilon" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "alfoto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "aldoni foto-identigilon" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "foruid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "forviþi uzantidentigilon" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "forfoto" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "al" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "aldoni flankan þlosilon" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "for" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "forviþi flankan þlosilon" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "forsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "forviþi subskribojn" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "eksval" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "þanøi la daton de eksvalidiøo" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "æefa" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "marku uzantidentigilon kiel æefan" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "alia" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "de sekreta aý publika listo iri al la alia" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "a" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "listigi preferojn" +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "listigi preferojn (spertula)" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "monpref" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "listigi preferojn (detale)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "agpref" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "agordi liston de preferoj" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "aktpref" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "aktualigitaj preferoj" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "pasf" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "þanøi la pasfrazon" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "fido" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "þanøi la posedantofidon" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "revoki subskribojn" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "rev" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "revoki flankan þlosilon" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "el" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "malþalti þlosilon" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "en" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "þalti þlosilon" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "monfoto" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "montri foto-identigilon" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "ne povas fari tion en neinteraga reøimo\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "eraro dum legado de sekreta þlosilbloko '%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Sekreta þlosilo estas havebla.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Komando> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "Bezonas la sekretan þlosilon por fari tion.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" msgstr "Bonvolu uzi la komandon \"toggle\" unue.\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "Þlosilo estas revokita.\n" + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Æu vere subskribi æiujn uzantidentigilojn? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Sugesto: Elekti la uzantidentigilojn por subskribi\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "aktualigo de fido-datenaro malsukcesis: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "Tiu komando ne eblas en la reøimo %s.\n" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Vi devas elekti almenaý unu uzantidentigilon.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Vi ne povas forviþi la lastan uzantidentigilon!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Æu vere forigi æiujn elektitajn uzantidentigilojn? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Æu vere forigi æi tiun uzantidentigilon? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Vi devas elekti almenaý unu þlosilon.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Æu vi vere volas forviþi la elektitajn þlosilojn? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Æu vi vere volas forviþi æi tiun þlosilon? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Æu vi vere volas revoki la elektitajn þlosilojn? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Æu vi vere volas revoki æi tiun þlosilon? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "Æu vere aktualigi la preferojn por la elektitaj uzantidentigiloj? " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Æu vere aktualigi la preferojn? " + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Æu skribi þanøojn? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Æu fini sen skribi þanøojn? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "aktualigo malsukcesis: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "aktualigo de sekreto malsukcesis: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "Þlosilo ne þanøita, do aktualigo ne necesas.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Nevalida komando (provu per \"helpo\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Æi tiu þlosilo estas revokebla per %s þlosilo %s%s\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (sentema)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX kreita: %s eksvalidiøos: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " fido: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Æi tiu þlosilo estas malþaltita" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "þlosilo %08lX: subþlosilo estas revokita!\n" +msgstr "rev! subþlosilo estas revokita: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr " novaj þlosilrevokoj: %lu\n" +msgstr "rev- falsita revoko trovita\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" +msgstr "rev? problemo en kontrolo de revoko: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" msgstr "" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"AVERTO: Æi tiu þlosilo jam havas foto-identigilon.\n" +" Aldono de alia foto-identigilo eble konfuzos iujn versiojn de PGP.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Æu vi estas certa, ke vi ankoraý volas aldoni øin? (j/n) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Eblas havi nur unu foto-identigilon sur þlosilo.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"AVERTO: Æi tiu estas PGP2-stila þlosilo. Aldono de foto-identigilo eble\n" +" kaýzos, ke iuj versioj de PGP malakceptos la þlosilon.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "Ne eblas aldoni foto-identigilon al PGP2-stila þlosilo.\n" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Æu forviþi æi tiun bonan subskribon? (j/N/f)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Æu forviþi æi tiun nevalidan subskribon? (j/N/f)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Æu forviþi æi tiun nekonatan subskribon? (j/N/f)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Æu vere forviþi æi tiun mem-subskribon? (j/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "Forviþis %d subskribon.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "Forviþis %d subskribojn.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Nenio estis forviþita.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Bonvolu malelekti la sekretajn þlosilojn.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Bonvolu elekti maksimume unu flankan þlosilon.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Þanøas la daton de eksvalidiøo de flanka þlosilo.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Þanøas la daton de eksvalidiøo de la æefa þlosilo.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Vi ne povas þanøi la daton de eksvalidiøo de v3-þlosilo\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Mankas responda subskribo en sekreta þlosilaro\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Bonvolu elekti precize unu uzantidentigilon.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Mankas uzantidentigilo kun indekso %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Mankas flanka þlosilo kun indekso %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "uzantidentigilo: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2479,243 +2987,372 @@ msgstr "" "\"\n" "subskribita per via þlosilo %08lX je %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, fuzzy, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"subskribita per via þlosilo %08lX je %s\n" + +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "Æi tiu þlosilo eksvalidiøos je %s.\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Æu vi estas certa, ke vi ankoraý volas aldoni øin? (j/n) " + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Æu krei revokatestilon por æi tiu subskribo? (j/N)" #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Vi subskribis la sekvajn uzantidentigilojn:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 -#, c-format -msgid " signed by %08lX at %s\n" -msgstr " subskribita per %08lX je %s\n" +#: g10/keyedit.c:2504 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr " subskribita per %08lX je %s%s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " revokita de %08lX je %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Vi revokos la sekvajn subskribojn:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " subskribita per %08lX je %s%s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " msgstr "Æu vere krei la revokatestilojn? (j/N)" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "mankas sekreta þlosilo\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "nevalida kiraso" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "rev" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Subskribo-gvidlinioj: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "AVERTO: nevalida notacia dateno trovita\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Subskribo-notacio: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "ne homlegebla" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Þlosilaro" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 +#: g10/keylist.c:423 g10/mainproc.c:856 #, c-format msgid " [expires: %s]" msgstr " [eksvalidiøos: %s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Fingrospuro:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Fingrospuro:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Þlosilo-fingrospuro =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s-æifritaj datenoj\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "æifrita per nekonata metodo %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "publika þlosilo estas %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "publikþlosile æifritaj datenoj: bona DEK\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "æifrita per %u-bita %s-þlosilo, %08lX, kreita je %s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "æifrita per %s-þlosilo, %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "mankas sekreta þlosilo por malæifrado\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "publikþlosila malæifrado malsukcesis: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "supozas %s æifritajn datenojn\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "Æifro IDEA ne disponata, optimisme provas uzi %s anstataýe\n" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "malæifrado sukcesis\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "AVERTO: æifrita mesaøo estis manipulita!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "malæifrado malsukcesis: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTO: sendinto petis konfidencon (\"for-your-eyes-only\")\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "originala dosiernomo='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "memstara revoko - uzu \"gpg --import\" por apliki øin\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "AVERTO: nevalida notacia dateno trovita\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Notacio: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Gvidlinio: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "kontrolo de subskribo estas malþaltita\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "ne povas trakti æi tiujn pluroblajn subskribojn\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Subskribo farita je %.*s per %s, þlosilo %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "MALBONA subskribo de \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Eksvalidiøinta subskribo de \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Bona subskribo de \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[malcerta]" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " alinome \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Ne povas kontroli subskribon: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "ne aparta subskribo\n" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "memstara subskribo de klaso 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "malnovstila subskribo (PGP 2.x)\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "nevalida radikpaketo trovita en proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "ne povas malþalti kreadon de core-dosieroj: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Eksperimentaj metodoj ne estu uzataj!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "æi tiu æifrad-metodo estas malrekomendata; bonvolu uzi pli normalan!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "la aldona¼o por la æifro IDEA en æeestas\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" +"bonvolu vidi http://www.gnupg.org/why-not-idea.html por pliaj informoj\n" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "ne povas trakti publikþlosilan metodon %d\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpaketo de speco %d havas þaltitan \"critical bit\"\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" -msgstr "" +msgstr "gpg-agent ne estas disponata en æi tiu sesio\n" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "ne povas agordi kliento-PID por la agento\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "ne povas akiri lego-FD de servilo por la agento\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "ne povas akiri skribo-FD de servilo por la agento\n" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "malbona valoro de la media variablo GPG_AGENT_INFO\n" -#: g10/hkp.c:158 g10/passphrase.c:223 +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "protokolversio %d de gpg-agent ne estas uzebla\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 #, c-format msgid "can't connect to `%s': %s\n" msgstr "ne povas konektiøi al '%s': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "komunikproblemo kun gpg-agent\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "problemo kun agento - malþaltas uzadon de agento\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (æefþlosilo %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" -"Vi bezonas pasfrazon por malþlosi la sekretan þlosilon\n" -"por la uzanto: \"" +"Vi bezonas pasfrazon por malþlosi la sekretan þlosilon por la uzanto:\n" +"\"%.*s\"\n" +"%u-bita %s þlosilo, ID %08lX, kreita je %s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Donu pasfrazon: " +msgstr "Donu pasfrazon\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Ripetu pasfrazon: " +msgstr "Ripetu pasfrazon\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "" +msgstr "pasfrazo estas tro longa\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "nevalida respondo de agento\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "nuligita de uzanto\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "problemo kun agento: agento redonas 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2725,20 +3362,20 @@ msgstr "" "Vi bezonas pasfrazon por malþlosi la sekretan þlosilon\n" "por la uzanto: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "%u-bita %s-þlosilo, %08lX, kreita je %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "ne povas kontroli pasvorton en neinteraga reøimo\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Donu pasfrazon: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Ripetu pasfrazon: " @@ -2746,147 +3383,194 @@ msgstr "Ripetu pasfrazon: " msgid "data not saved; use option \"--output\" to save it\n" msgstr "datenoj ne savitaj; uzu la opcion \"--output\" por savi ilin\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "eraro dum kreado de '%s': %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" msgstr "Aparta subskribo.\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Bonvolu doni la nomon de la dosiero: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "legas la normalan enigon ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "mankas subskribitaj datenoj\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "ne povas malfermi subskribitan dosieron '%s'\n" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "nenomita ricevonto; provas per sekreta þlosilo %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "bone; ni estas la nenomita ricevonto.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "malnova kodado de DEK ne estas realigita\n" -#: g10/pubkey-enc.c:216 +#: g10/pubkey-enc.c:177 #, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "æifrad-metodo %d estas nekonata aý malþaltita\n" +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "æifrad-metodo %d%s estas nekonata aý malþaltita\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "NOTO: æifrad-metodo %d ne trovita en preferoj\n" -#: g10/pubkey-enc.c:261 +#: g10/pubkey-enc.c:242 #, c-format msgid "NOTE: secret key %08lX expired at %s\n" msgstr "NOTO: sekreta þlosilo %08lX eksvalidiøis je %s\n" -#: g10/hkp.c:62 +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "petas la þlosilon %08lX de %s ...\n" +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "petas la þlosilon %08lX de HKP-þlosilservilo %s ...\n" -#: g10/hkp.c:75 +#: g10/hkp.c:94 #, c-format msgid "can't get key from keyserver: %s\n" msgstr "ne povas akiri þlosilon de þlosilservilo: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "neniu þlosilservilo konata (uzu la opcion --keyserver)\n" - -#: g10/hkp.c:106 -#, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s: ne valida þlosilidentigilo\n" - -#: g10/hkp.c:182 +#: g10/hkp.c:171 #, c-format msgid "error sending to `%s': %s\n" msgstr "eraro dum sendo al '%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" msgstr "sukceso dum sendo al '%s' (statuso=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" msgstr "malsukceso dum sendo al '%s': statuso=%u\n" -#: g10/seckey-cert.c:89 +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "seræas pri \"%s\" æe HKP-servilo %s\n" + +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "ne povas seræi æe þlosilservilo: %s\n" + +#: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "sekretaj þlosilpartoj ne estas disponataj\n" -#: g10/seckey-cert.c:95 +#: g10/seckey-cert.c:59 #, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "protekto-metodo %d ne estas realigita\n" +msgid "protection algorithm %d%s is not supported\n" +msgstr "protekto-metodo %d%s ne estas realigita\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "Nevalida pasfrazo; bonvolu provi denove ...\n" +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Nevalida pasfrazo; bonvolu provi denove" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVERTO: Malforta þlosilo trovita - bonvolu þanøi la pasfrazon denove.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "æi tio estas PGP-kreita ElGamal-þlosilo, kiu NE estas sekura por " "subskribado!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "la publika þlosilo estas %lu sekundon pli nova ol la subskribo\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "la publika þlosilo estas %lu sekundojn pli nova ol la subskribo\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "NOTO: subskribo-þlosilo eksvalidiøis je %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "NOTO: subskribo-þlosilo %08lX eksvalidiøis je %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "supozas malbonan subskribon pro nekonata \"critical bit\"\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"AVERTO: ne povas %%-kompletigi gvidlinian URL (tro granda); uzas sen " +"kompletigo.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "kontrolo de kreita subskribo malsukcesis: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "%s-subskribo de: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "AVERTO: '%s' estas malplena dosiero\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "eblas subskribi nur per PGP-2.x-stilaj þlosiloj kun --pgp2\n" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "ne povas krei %s: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "subskribas:" -#: g10/sign.c:583 +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"eblas klartekste subskribi nur per PGP-2.x-stilaj þlosiloj kun --pgp2\n" + +#: g10/sign.c:953 #, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "AVERTO: '%s' estas malplena dosiero\n" +msgid "%s encryption will be used\n" +msgstr "%s æifrado estos aplikata\n" #: g10/textfilter.c:134 #, c-format @@ -2898,420 +3582,205 @@ msgstr "ne povas trakti tekstliniojn pli longajn ol %d signojn\n" msgid "input line longer than %d characters\n" msgstr "enigata linio pli longa ol %d signojn\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "fido-datenaro loko %lu: lseek malsukcesis: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "fido-datenaro loko %lu: skribo malsukcesis (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "fido-datenaro-transakcio tro granda\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: ne povas aliri: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: dosierujo ne ekzistas!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: ne povas krei: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: ne povas krei þloson\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: ne povas krei þloson\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: ne povas krei: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: malsukcesis krei versiregistron: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: nevalida fido-datenaro kreita\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: fido-datenaro kreita\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: nevalida fido-datenaro\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: malsukcesis krei haktabelon: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: eraro dum aktualigo de versiregistro: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: eraro dum legado de versiregistro: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: eraro dum skribado de versiregistro: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "fido-datenaro: lseek malsukcesis: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "fido-datenaro: lego malsukcesis (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: ne estas fido-datenaro\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versiregistro kun registronumero %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: nevalida dosiero-versio %d\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: eraro dum legado de libera registro: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: eraro dum skribo de dosieruja registro: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: malsukcesis nuligi registron: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: malsukcesis aldoni registron: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "la fido-datenaro estas fuþita; bonvolu ruli \"gpg --fix-trustdb\".\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "'%s' ne estas valida longa þlosilidentigilo\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "þlosilo %08lX: akceptita kiel fidata þlosilo\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "þlosilo %08lX aperas pli ol unufoje en la fido-datenaro\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "þlosilo %08lX: mankas publika þlosilo por fidata þlosilo - ignorita\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "fido-datenaro loko %lu, petospeco %d: lego malsukcesis: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "fido-registro %lu ne havas petitan specon %d\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "fido-datenaro %lu, speco %d: skribo malsukcesis: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "fido-registro %lu: forviþo malsukcesis: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "fido-datenaro: sync malsukcesis: %s\n" -#: g10/trustdb.c:377 +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "kontrolo de fido-datenaro ne estas bezonata\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "eraro dum legado de dosieruja registro por LID %lu: %s\n" +msgid "next trustdb check due at %s\n" +msgstr "sekva kontrolo de fido-datenaro je %s\n" -#: g10/trustdb.c:384 +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "kontrolas la fido-datenaron\n" + +#: g10/trustdb.c:933 #, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: atendis dosierujan registron, trovis specon %d\n" +msgid "public key %08lX not found: %s\n" +msgstr "publika þlosilo %08lX ne trovita: %s\n" -#: g10/trustdb.c:389 +#: g10/trustdb.c:1515 #, c-format -msgid "no primary key for LID %lu\n" -msgstr "mankas æefa þlosilo por LID %lu\n" +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "publika þlosilo de absolute fidata þlosilo %08lX ne trovita\n" -#: g10/trustdb.c:394 +#: g10/trustdb.c:1593 #, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "eraro dum legado de æefa þlosilo por LID %lu: %s\n" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record malsukcesis: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "%s: ne valida þlosilidentigilo\n" - -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "þlosilo %08lX: ne povas meti øin en la fido-datenaron\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "þlosilo %08lX: peto-registro malsukcesis\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "þlosilo %08lX: jam en tabelo de fidataj þlosiloj\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "þlosilo %08lX: akceptita kiel fidata þlosilo.\n" - -#: g10/trustdb.c:547 -#, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "þlosilo %08lX: ne protektita - ignorita\n" - -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "NOTO: sekreta þlosilo %08lX NE estas protektita.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "þlosilo %08lX: sekreta kaj publika þlosiloj ne kongruas\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "listigo de sekretaj þlosiloj malsukcesis: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "þlosilo %08lX.%lu: Bona subþlosila bindado\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "þlosilo %08lX.%lu: Nevalida subþlosila bindado: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "þlosilo %08lX.%lu: Valida þlosilrevoko\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "þlosilo %08lX.%lu: Nevalida þlosilrevoko: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "þlosilo %08lX.%lu: Valida subþlosilrevoko\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Bona mem-subskribo" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Nevalida mem-subskribo" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "Valida uzantidentigil-revoko ignorita pro pli nova mem-subskribo" - -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Valida uzantidentigil-revoko" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Nevalida uzantidentigil-revoko" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Valida atestilrevoko" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Bona atestilo" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Nevalida atestilrevoko" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Nevalida atestilo" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "subskribo-registro %lu[%d] montras al maløusta registro.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "ripetita atestilo - forviþita" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir malsukcesis: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: enþovo malsukcesis: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: enþovo malsukcesis: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: enþovita\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "eraro dum legado de dosieruja registro: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu þlosiloj traktitaj\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu þlosiloj kun eraroj\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu þlosiloj enþovitaj\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "listigo de þlosilblokoj malsukcesis: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: dosieruja registro sen þlosilo - ignorita\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu pro novaj publikaj þlosiloj\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu þlosiloj ignoritaj\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu þlosiloj aktualigitaj\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Hu, mankas þlosiloj\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Hu, mankas uzantidentigiloj\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: seræo pri dosieruja registro malsukcesis: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "þlosilo %08lX: enþovo de fidoregistro malsukcesis: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "þlosilo %08lX.%lu: enþovis en fido-datenaron\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -"þlosilo %08lX.%lu: kreita en la estonteco (tempotordo aý horloøeraro)\n" +"kontrolas æe profundo %d subskribita=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "þlosilo %08lX.%lu: eksvalidiøis je %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "þlosilo %08lX.%lu: fido-kontrolo malsukcesis: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "uzanto '%s' ne trovita: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "problemo dum trovo de '%s' en fido-datenaro: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "uzanto '%s' ne estas en fido-datenaro - enþovas\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "malsukcesis meti '%s' en fido-datenaron: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "AVERTO: ne povas trakti longajn preferoregistrojn\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3321,45 +3790,32 @@ msgstr "" "Bonvolu memori, ke la subskribodosiero (.sig aý .asc)\n" "devas esti la unua dosiero donita en la komandlinio.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "enigata linio %u tro longa, aý mankas linifino\n" -#: g10/ringedit.c:296 +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"þlosilo ne estas markita kiel malsekura - ne povas uzi øin kun falsa " +"stokastilo!\n" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: ne povas krei þlosilaron: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "ignoris '%s': ripetita\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: þlosilaro kreita\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "AVERTO: ekzistas 2 dosieroj kun sekretaj informoj.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s estas la neþanøita\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s estas la nova\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Bonvolu ripari æi tiun eblan sekurecproblemon\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "ignoris '%s': %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "ignorita: sekreta þlosilo jam æeestas\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3378,90 +3834,98 @@ msgstr "Dosiero '%s' ekzistas. " msgid "Overwrite (y/N)? " msgstr "Æu surskribi (j/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: nekonata sufikso\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Donu novan dosiernomon" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "skribas al la normala eligo\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "supozas subskribitajn datenojn en '%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: nova opcio-dosiero kreita\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: ne povas krei dosierujon: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: dosierujo kreita\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "" "vi devas restartigi GnuPG, por ke øi povu legi la novan opcio-dosieron\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "æifrita per nekonata metodo %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "%s-æifritaj datenoj\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "AVERTO: mesaøo estis æifrita per malforta þlosilo en la simetria æifro.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problemo æe traktado de æifrita paketo\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "malforta þlosilo kreita - provas denove\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "ne povas eviti malfortajn þlosilojn por simetria æifro; provis %d fojojn!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "mankas sekreta þlosilo por æi tiu publika þlosilo!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "uzu la opcion \"--delete-secret-key\" por forviþi øin unue.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "ne povas fari tion en neinteraga reøimo sen \"--yes\"\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Æu forviþi æi tiun þlosilon de la þlosilaro? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "Tio estas sekreta þlosilo! Æu vere forviþi øin? " +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "forviþo de þlosilbloko malsukcesis: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "estas sekreta þlosilo por la publika þlosilo \"%s\"!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "uzu la opcion \"--delete-secret-key\" por forviþi øin unue.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3473,22 +3937,34 @@ msgstr "" "rilatas al la (implicite kreita) atestilo-reto." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Por konstrui la fido-reton, GnuPG devas scii, kiuj þlosiloj estas\n" +"absolute fidataj; normale tiuj estas la þlosiloj, por kiuj vi havas\n" +"aliron al la sekreta þlosilo. Respondu \"jes\" por igi æi tiun þlosilon\n" +"absolute fidata\n" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "" "Se vi tamen volas uzi æi tiun revokitan þlosilon, respondu per \"jes\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Se vi tamen volas uzi æi tiun nefidatan þlosilon, respondu per \"jes\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Donu la uzantidentigilon de la adresito, al kiu vi volas sendi la mesaøon." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3524,7 +4000,7 @@ msgstr "" "La unua (æefa) þlosilo devas esti þlosilo uzebla por subskribado;\n" "tial la nuræifra ElGamal-þlosilo ne estas proponata en æi tiu menuo." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3534,16 +4010,16 @@ msgstr "" "rekomendataj, æar ili ne estas komprenataj de æiuj programoj, kaj\n" "subskriboj kreitaj per ili etas iom grandaj kaj malrapide kontroleblaj." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Donu la þlosilgrandon" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Respondu per \"jes\" aý \"ne\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3555,19 +4031,19 @@ msgstr "" "bonan eraromesaøon; anstataýe la sistemo provas interpreti\n" "la donitan valoron kiel gamon." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Donu la nomon de la þlosilposedanto" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "bonvolu doni retadreson (ne devige, sed tre rekomendate)" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Bonvolu doni nedevigan komenton" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3581,15 +4057,85 @@ msgstr "" "B por daýrigi kun la þlosilkreado.\n" "F por interrompi la þlosilkreadon kaj fini." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Respondu per \"jes\" (aý nur \"j\"), se la subþlosilo estu kreita." -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Kiam vi subskribas uzantidentigilon sur þlosilo, vi devas unue kontroli,\n" +"ke la þlosilo apartenas al la persono nomita en la identigilo. Estas\n" +"utile por aliaj homoj scii, kiom zorge vi kontrolis tion.\n" +"\n" +"\"0\" signifas, ke vi faras nenian specifan aserton pri tio, kiel zorge vi\n" +" kontrolis la þlosilon.\n" +"\n" +"\"1\" signifas, ke vi kredas, ke la þlosilo apartenas al la homo, kiu\n" +" pretendas posedi øin, sed vi ne povis kontroli, aý simple ne\n" +" kontrolis la þlosilon. Tio estas utila, kiam oni subskribas la\n" +" þlosilon de pseýdonoma uzanto.\n" +"\n" +"\"2\" signifas, ke vi malzorge kontrolis la þlosilon. Ekzemple, povas esti,\n" +" ke vi kontrolis la fingroþpuron de la þlosilo kaj komparis la\n" +" uzantidentigilon sur la þlosilo kun foto-identigilo.\n" +"\n" +"\"3\" signifas, ke vi zorge kontrolis la þlosilon. Ekzemple, povas esti,\n" +" ke vi kontrolis la fingroþpuron persone æe la posedanto de la\n" +" þlosilo, kaj vi kontrolis, per malfacile falsebla dokumento kun\n" +" foto-identigilo (ekzemple pasporto), ke la nomo de þlosilposedanto\n" +" kongruas kun la nomo en la uzantidentigilo sur la þlosilo, kaj fine\n" +" vi kontrolis (per interþanøo de retmesaøoj), ke la retadreso sur\n" +" la þlosilo apartenas al la posedanto de la þlosilo.\n" +"\n" +"Notu, ke la ekzemploj donitaj supre por la niveloj 2 kaj 3 estas nur\n" +"ekzemploj. Vi devas fine mem decidi, kion precize signifas \"malzorga\"\n" +"kaj \"zorga\", kiam vi subskribas aliajn þlosilojn.\n" +"\n" +"Se vi ne scias la øustan respondon, respondu per \"0\"." + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Respondu per \"jes\", se vi volas subskribi æiujn uzantidentigilojn" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3597,11 +4143,11 @@ msgstr "" "Respondu per \"jes\", se vi vere volas forviþi la uzantidentigilon.\n" "Tiam ankaý æiuj atestiloj perdiøos!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Respondu per \"jes\", se la subþlosilo estu forviþita" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3611,7 +4157,7 @@ msgstr "" "æi tiun subskribon, æar eble øi estos grava por establi fido-ligon\n" "al la þlosilo aý al alia þlosilo atestita per æi tiu þlosilo." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3623,7 +4169,7 @@ msgstr "" "þlosilo estis uzita, æar la subskribanta þlosilo eble establos\n" "fido-ligon tra alia jam atestita þlosilo." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." @@ -3631,7 +4177,7 @@ msgstr "" "La subskribo ne estas valida. Estas prudente forigi øin de\n" "via þlosilaro." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3645,28 +4191,35 @@ msgstr "" "mem-subskribo estas ial nevalida, kaj dua mem-subskribo estas\n" "havebla." -#: g10/helptext.c:202 +#: g10/helptext.c:231 +#, fuzzy msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" msgstr "" -"Bonvolu doni la pasfrazon; tio estas sekreta frazo, kiu ne\n" -"estas facile divenebla." +"Þanøi la preferojn de æiuj uzantidentigiloj (aý nur la elektitaj)\n" +"al la aktuala listo de preferoj. La dato de æiuj trafitaj\n" +"mem-subskriboj estos antaýenigitaj je unu sekundo.\n" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Bonvolu doni la pasfrazon; tio estas sekreta frazo \n" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Bonvolu ripeti la pasfrazon, por kontroli, ke vi bone scias, kion vi tajpis." -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "Donu la nomon de la dosiero, al kiu la subskribo aplikiøas" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Respondu per \"jes\", se la dosiero estu surskribita" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3674,15 +4227,14 @@ msgstr "" "Bonvolu doni novan dosiernomon. Se vi premas nur ENEN, la implicita\n" "dosiero (montrita en parentezo) estos uzata." -#: g10/helptext.c:229 -#, fuzzy +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3703,7 +4255,7 @@ msgstr "" " Uzu æi tion por aserti, ke la uzantidentigilo ne plu estu uzata;\n" " normale oni uzas æi tion por marki retadreson kiel nevalidan.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" @@ -3713,18 +4265,332 @@ msgstr "" "æi tiun revokatestilon. Bonvolu fari æi tiun tekston konciza.\n" "Malplena linio finas la tekston.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Nenia helpo disponata" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Nenia helpo disponata por '%s'" +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "eraro dum kreado de þlosilaro '%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "þanøo de permesoj de '%s' malsukcesis: %s\n" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "þlosilaro '%s' kreita\n" + +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "malsukcesis rekonstrui þlosilaran staplon: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "AVERTO: ekzistas 2 dosieroj kun sekretaj informoj.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s estas la neþanøita\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s estas la nova\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Bonvolu ripari æi tiun eblan sekurecproblemon\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "kontrolas þlosilaron '%s'\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu þlosiloj jam kontrolitaj (%lu subskriboj)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu þlosiloj kontrolitaj (%lu subskriboj)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: þlosilaro kreita\n" + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Æu vi vere bezonas tiom grandan þlosilgrandon? " + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "þlosilo %08lX: nia kopio ne havas mem-subskribon\n" + +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr " Æu vi estas certa, ke vi ankoraý volas subskribi øin?\n" + +#~ msgid " signed by %08lX at %s\n" +#~ msgstr " subskribita per %08lX je %s\n" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key uzantidentigilo" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key uzantidentigilo" + +#~ msgid "Enter the user ID: " +#~ msgstr "Donu la uzantidentigilon: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "ignorita: publika þlosilo jam difinita per --encrypt-to\n" + +#~ msgid "sSmMqQ" +#~ msgstr "iImMfF" + +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "neniu þlosilservilo konata (uzu la opcion --keyserver)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s: ne valida þlosilidentigilo\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NOMOJ]|kontroli la fido-datenaron" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Ne povis trovi validan fidovojon al la þlosilo. Ni vidu, æu eblas\n" +#~ "atribui iujn mankantajn posedantofido-valorojn.\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "Nenia vojo trovita, kiu kondukas al unu el niaj þlosiloj.\n" +#~ "\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "Neniom da atestiloj trovitaj kun nedifinita fidovaloro.\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Neniuj fidovaloroj þanøitaj.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "%08lX: mankas informoj por kalkuli fidovaloron\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: eraro dum kontrolo de þlosilo: %s\n" + +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "tro da registroj en unk-staplo - malþaltas\n" + +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "aktualigo de fido-datenaro malsukcesis: %s\n" + +#~ msgid "assuming bad MDC due to an unknown critical bit\n" +#~ msgstr "supozas malbonan sigelon (MDC) pro nekonata \"critical bit\"\n" + +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "eraro dum legado de dosieruja registro por LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lid %lu: atendis dosierujan registron, trovis specon %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "mankas æefa þlosilo por LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "eraro dum legado de æefa þlosilo por LID %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record malsukcesis: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "þlosilo %08lX: peto-registro malsukcesis\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "þlosilo %08lX: jam en tabelo de fidataj þlosiloj\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "NOTO: sekreta þlosilo %08lX NE estas protektita.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "þlosilo %08lX: sekreta kaj publika þlosiloj ne kongruas\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "listigo de sekretaj þlosiloj malsukcesis: %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "þlosilo %08lX.%lu: Bona subþlosila bindado\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "þlosilo %08lX.%lu: Nevalida subþlosila bindado: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "þlosilo %08lX.%lu: Valida þlosilrevoko\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "þlosilo %08lX.%lu: Nevalida þlosilrevoko: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "þlosilo %08lX.%lu: Valida subþlosilrevoko\n" + +#~ msgid "Good self-signature" +#~ msgstr "Bona mem-subskribo" + +#~ msgid "Invalid self-signature" +#~ msgstr "Nevalida mem-subskribo" + +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "Valida uzantidentigil-revoko ignorita pro pli nova mem-subskribo" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Valida uzantidentigil-revoko" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Nevalida uzantidentigil-revoko" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Valida atestilrevoko" + +#~ msgid "Good certificate" +#~ msgstr "Bona atestilo" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Nevalida atestilrevoko" + +#~ msgid "Invalid certificate" +#~ msgstr "Nevalida atestilo" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "subskribo-registro %lu[%d] montras al maløusta registro.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "ripetita atestilo - forviþita" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir malsukcesis: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: enþovo malsukcesis: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: enþovo malsukcesis: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: enþovita\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "eraro dum legado de dosieruja registro: %s\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu þlosiloj enþovitaj\n" + +#~ msgid "enumerate keyblocks failed: %s\n" +#~ msgstr "listigo de þlosilblokoj malsukcesis: %s\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: dosieruja registro sen þlosilo - ignorita\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr "\t%lu pro novaj publikaj þlosiloj\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu þlosiloj ignoritaj\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu þlosiloj aktualigitaj\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Hu, mankas þlosiloj\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Hu, mankas uzantidentigiloj\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: seræo pri dosieruja registro malsukcesis: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "þlosilo %08lX: enþovo de fidoregistro malsukcesis: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "þlosilo %08lX.%lu: enþovis en fido-datenaron\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "þlosilo %08lX.%lu: kreita en la estonteco (tempotordo aý horloøeraro)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "þlosilo %08lX.%lu: eksvalidiøis je %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "þlosilo %08lX.%lu: fido-kontrolo malsukcesis: %s\n" + +#~ msgid "user '%s' not found: %s\n" +#~ msgstr "uzanto '%s' ne trovita: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "problemo dum trovo de '%s' en fido-datenaro: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "uzanto '%s' ne estas en fido-datenaro - enþovas\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "malsukcesis meti '%s' en fido-datenaron: %s\n" + +#~ msgid "too many random bits requested; the limit is %d\n" +#~ msgstr "tro da stokastaj bitoj petitaj; la limo estas %d\n" + +#~ msgid "For info see http://www.gnupg.org" +#~ msgstr "Por informoj vidu http://www.gnupg.org" + +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) RSA (subskribi kaj æifri)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "Æu vi vere volas krei subskriban kaj æifran þlosilon? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: uzanto ne trovita: %s\n" + #~ msgid "certificate read problem: %s\n" #~ msgstr "problemo æe legado de atestilo: %s\n" +#~ msgid "can't lock keyring `%s': %s\n" +#~ msgstr "ne povas þlosi la þlosilaron '%s': %s\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: uzanto ne trovita\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "AVERTO: ne povas trakti longajn preferoregistrojn\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: ne povas krei þlosilaron: %s\n" + #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "RSA-þlosilo ne estas uzebla kun æi tiu versio\n" @@ -3734,32 +4600,11 @@ msgstr "Nenia helpo disponata por '%s'" #~ msgid "No user ID for key\n" #~ msgstr "Mankas uzantidentigilo por þlosilo\n" -#~ msgid "no default public keyring\n" -#~ msgstr "mankas implicita publika þlosilaro\n" +#~ msgid "invalid" +#~ msgstr "nevalida" -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "ne povas þlosi la þlosilaron '%s': %s\n" +#~ msgid "revoked" +#~ msgstr "revokita" -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "þlosilo %08lX: ne povas legi originalan þlosilblokon: %s\n" - -#~ msgid "%s: user not found\n" -#~ msgstr "%s: uzanto ne trovita\n" - -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "RSA-þlosiloj estas malrekomendataj; bonvolu pripensi krei novan þlosilon kaj " -#~ "uzi tiun en la estonteco\n" - -#~ msgid "not processed" -#~ msgstr "ne traktita" - -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "supozas malbonan sigelon (MDC) pro nekonata \"critical bit\"\n" - -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "þlosilo ne estas markita kiel malsekura - ne povas uzi øin kun falsa " -#~ "stokastilo!\n" +#~ msgid "no secret key for decryption available\n" +#~ msgstr "mankas sekreta þlosilo por malæifrado\n" diff --git a/po/es_ES.po b/po/es.po similarity index 53% rename from po/es_ES.po rename to po/es.po index ac414ac36..5d45b834e 100644 --- a/po/es_ES.po +++ b/po/es.po @@ -1,311 +1,366 @@ -# Spanish messages for gnupg -# Urko Lusa , 1998-99 -# I've tried to mantain the terminology used by Armando Ramos -# is his PGP 2.3.6i translation. -# I also got inspiration from it.po by Marco d'Itri +# Mensajes en español para GnuPG. +# Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. +# Urko Lusa , 1998, 1999. +# I've tried to mantain the terminology used by Armando Ramos +# in his PGP 2.3.6i translation. +# I also got inspiration from it.po by Marco d'Itri +# Jaime Suárez , 2001. # -# GPG version: 1.0.0 msgid "" msgstr "" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 1999-10-27 06:35+0200\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Date: 1998-11-13 10:49:25+0100\n" -"From: Urko Lusa \n" -"Updated: 1998-01-12\n" -"By: Luca Olivetti \n" -"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " -"--keyword=_ --keyword=N_ --files-from=./POTFILES.in\n" -"Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " -"cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " -"g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " -"g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c " -"g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c\n" +"Project-Id-Version: GNU gnupg 1.0.6\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-22 21:27+0200\n" +"Last-Translator: Jaime Suárez \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "ATENCIÓN: ¡se está usando memoria insegura!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "operación imposible sin memoria segura inicializada\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(es posible que haya usado el programa incorrecto para esta tarea)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "sí" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "sS" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" -msgstr "" +msgstr "no" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" -msgstr "" +msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" -msgstr "" +msgstr "salir" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" -msgstr "" +msgstr "sS" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "Error general" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "Formato desconocido" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "Versión desconocida" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "Algoritmo de clave pública desconocido" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "Algoritmo desconocido de resumen de mensaje" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "Clave pública incorrecta" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "Clave secreta incorrecta" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "Firma incorrecta" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" -msgstr "Error en suma de comprobación" +msgstr "Error en la suma de comprobación" -#: util/errors.c:64 +# ¿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? :-) +# +#: util/errors.c:63 msgid "bad passphrase" msgstr "Contraseña incorrecta" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "Clave pública no encontrada" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "Algoritmo de cifrado desconocido" -#: util/errors.c:67 +# ¿y llavero? +# Hombre... las claves son parecidas a las llaves pero no lo mismo +# toda la literatura en castellano usa "anillos de claves" si un +# programa nos habla del llavero ¿no puedo abrir el llavero? nos +# miraremos en el bolsillo bastante desconcertados. No creo que se +# trate de establecer una nomenclatura propia. +# A lo mejor toda esa literatura está producida por gente que no sabía +# cómo se dice llavero en inglés... +# Si los ingleses dicen llavero en su idioma ¿por qué no vamos a poder +# nosotros decir lo mismo en el nuestro? +#: util/errors.c:66 msgid "can't open the keyring" -msgstr "No se puede abrir el anillo" +msgstr "No se puede abrir el anillo de claves" + +#: util/errors.c:67 +msgid "invalid packet" +msgstr "Paquete inválido" #: util/errors.c:68 -msgid "invalid packet" -msgstr "Valor no válido" +msgid "invalid armor" +msgstr "Armadura inválida" #: util/errors.c:69 -msgid "invalid armor" -msgstr "Armadura no válida" - -#: util/errors.c:70 msgid "no such user id" msgstr "No existe el ID de usuario" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "Clave secreta no disponible" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "Clave secreta incorrecta" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" -msgstr "No soportado" +msgstr "No disponible" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "Clave incorrecta" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "Error de lectura" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "error de escritura" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "Algoritmo de compresión desconocido" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "Error al abrir fichero" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "Error al crear fichero" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "Contraseña incorrecta" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "Algoritmo de clave pública no implementado" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "Algoritmo de cifrado no implementado" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "Clase de firma desconocida" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "Error en la base de datos de confianza" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "MPI incorrecto" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "Límite de recurso" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" -msgstr "Anillo no válido" +msgstr "Anillo inválido" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "Certificado incorrecto" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "ID de usuario mal formado" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "Error al cerrar fichero" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "Error al renombrar fichero" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "Error al borrar fichero" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "Datos inesperados" -#: util/errors.c:94 +# o tal vez "en el sello..." +# Creo que es mejor "con el sello de fecha", no es un conflicto +# del sello en si mismo sino en relación con el mensaje. +# Ok. +#: util/errors.c:93 msgid "timestamp conflict" -msgstr "Conflicto con sello de fecha" +msgstr "Conflicto con el sello de fecha" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "Algoritmo de clave pública no utilizable" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" -msgstr "El fichero existe." +msgstr "El fichero existe" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "Clave débil" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" -msgstr "Argumento no válido" +msgstr "Argumento inválido" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "URI incorrecto" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" -msgstr "URI no soportado" +msgstr "URI no disponible" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "Error de red" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "No cifrado" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "no procesado" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "Clave pública inutilizable" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "Clave secreta inutilizable" + +#: util/errors.c:107 +#, fuzzy +msgid "keyserver error" +msgstr "Error general" + +# bicho :-) +# ¿Error simplemente? +# Uf, preferiría bug, si leo "error" voy a pensar en otra cosa distinta... +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... esto es un bug (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" -msgstr "Ha encontrado Vd. un bug... (%s:%d)\n" +msgstr "Ha encontrado un error... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" -msgstr "no puede abrirse `%s': %s\n" +msgstr "no se puede abrir `%s': %s\n" -#: cipher/random.c:325 -#, fuzzy, c-format +#: cipher/random.c:324 +#, c-format msgid "can't stat `%s': %s\n" -msgstr "no puede abrirse `%s': %s\n" +msgstr "no se puede obtener información de `%s': %s\n" -#: cipher/random.c:330 +# ignore no es ignorar, es no tener en cuenta, ignorar es not to know. +# Sugerencia: descartar. +# Sugerencia a la sugerencia: ¿qué tal omitido? (pasar en silencio una +# cosa; excluirla de lo que se habla o escribe) dice el diccionario. +# Bien. También se puede poner "descartado". +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" -msgstr "" +msgstr "`%s` no es un fichero regular - omitido\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" -msgstr "" +msgstr "nota: el fichero de semillas aleatorias está vacío\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" +"atención: tamaño incorrecto del fichero de semillas aleatorias - no se usa\n" -#: cipher/random.c:349 -#, fuzzy, c-format -msgid "can't read `%s': %s\n" -msgstr "no puede abrirse `%s': %s\n" - -#: cipher/random.c:387 -msgid "note: random_seed file not updated\n" -msgstr "" - -#: cipher/random.c:407 -#, fuzzy, c-format -msgid "can't create `%s': %s\n" -msgstr "no puede crearse %s: %s\n" - -#: cipher/random.c:414 -#, fuzzy, c-format -msgid "can't write `%s': %s\n" -msgstr "no puede abrirse `%s': %s\n" - -#: cipher/random.c:417 -#, fuzzy, c-format -msgid "can't close `%s': %s\n" -msgstr "no puede abrirse `%s': %s\n" - -#: cipher/random.c:428 +#: cipher/random.c:348 #, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" +msgid "can't read `%s': %s\n" +msgstr "no se puede leer `%s': %s\n" -#: cipher/random.c:659 +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "nota: el fichero de semillas aleatorias no se ha actualizado\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "no se puede crear %s: %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "no se puede escribir `%s': %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "no se puede cerrar `%s': %s\n" + +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" -msgstr "" -"ATENCIÓN: ¡se está usando un generador de números aleatorios inseguro!\n" +msgstr "ATENCIÓN: ¡usando un generador de números aleatorios inseguro!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -313,13 +368,13 @@ msgid "" "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" "\n" msgstr "" -"EL generador de números aleatorios es sólo un apaño\n" -"para poder compilar. ¡No es en absoluto seguro!\n" +"El generador de números aleatorios es sólo un apaño\n" +"para poder compilar. ¡No es en absoluto un generador seguro!\n" "\n" -"¡NO USE NINGÚN DATO GENERADO POR ESTE PROGRAMA!\n" +"¡NO USE DATOS GENERADOS POR ESTE PROGRAMA!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -331,160 +386,182 @@ msgstr "" "otro trabajo para que el sistema pueda recolectar más entropía\n" "(se necesitan %d bytes más).\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "ATENCIÓN: ¡se está usando memoria insegura!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "operación imposible sin memoria segura inicializada\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(es posible que haya usado el programa incorrecto para esta tarea)\n" - -#: g10/gpg.c:201 +# Órdenes, please... +# Sí, este no he podido ser yo :-) Por cierto, ¿por qué la O no se +# puede acentuar? ¿demasiado alta? +# ¿Quién dice que no se puede? :-) +#: g10/g10.c:287 msgid "" "@Commands:\n" " " msgstr "" -"@Comandos:\n" +"@Órdenes:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" -msgstr "|[file]|hace una firma" +msgstr "|[file]|crea una firma" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" -msgstr "|[file]|hace una firma en texto claro" +msgstr "|[file]|crea una firma en texto claro" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" -msgstr "hace una firma separada" +msgstr "crea una firma separada" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "cifra datos" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "cifra sólo con un cifrado simétrico" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "sólo almacenar" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "descifra datos (predefinido)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "verifica una firma" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "lista claves" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "lista claves y firmas" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "comprueba las firmas de las claves" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "lista claves y huellas dactilares" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "lista claves secretas" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "genera un nuevo par de claves" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" -msgstr "elimina la clave del anillo público" - -#: g10/gpg.c:221 +#: g10/g10.c:307 #, fuzzy -msgid "remove key from the secret keyring" +msgid "remove keys from the public keyring" msgstr "elimina la clave del anillo público" -#: g10/gpg.c:222 +#: g10/g10.c:309 +#, fuzzy +msgid "remove keys from the secret keyring" +msgstr "elimina la clave del anillo privado" + +#: g10/g10.c:310 msgid "sign a key" msgstr "firma la clave" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "firma la clave localmente" -#: g10/gpg.c:224 +#: g10/g10.c:312 +#, fuzzy +msgid "sign a key non-revocably" +msgstr "firma la clave localmente" + +#: g10/g10.c:313 +#, fuzzy +msgid "sign a key locally and non-revocably" +msgstr "firma la clave localmente" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "firma o modifica una clave" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "genera un certificado de revocación" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "exporta claves" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "exporta claves a un servidor de claves" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "importa claves desde un servidor de claves" -#: g10/gpg.c:232 +#: g10/g10.c:320 +#, fuzzy +msgid "search for keys on a key server" +msgstr "exporta claves a un servidor de claves" + +#: g10/g10.c:322 +#, fuzzy +msgid "update all keys from a keyserver" +msgstr "importa claves desde un servidor de claves" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "importa/fusiona claves" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "lista sólo la secuencia de paquetes" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "exporta los valores de confianza" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importa los valores de confianza" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "actualiza la base de datos de confianza" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NOMBRES]|comprueba la base de datos de confianza" +#: g10/g10.c:336 +#, fuzzy +msgid "unattended trust database update" +msgstr "actualiza la base de datos de confianza" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "arregla una base de datos de confianza dañada" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" -msgstr "quita la armadura de un fichero o stdin" +msgstr "quita la armadura de un fichero o de la entrada estándar" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" -msgstr "crea la armadura a un fichero o stdin" +msgstr "crea la armadura a un fichero o a la entrada estándar" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [ficheros]|imprime resúmenes de mensaje" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -494,168 +571,223 @@ msgstr "" "Opciones:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "crea una salida ascii con armadura" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NOMBRE|cifra para NOMBRE" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NOMBRE|usa NOMBRE como destinatario por defecto" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "usa la clave por defecto como destinatario" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "usa este usuario para firmar o descifrar" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|nivel de compresión N (0 no comprime)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "usa modo de texto canónico" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "usa como fichero de salida" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "prolijo" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "algo más discreto" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "no usa la terminal en absoluto" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "fuerza firmas v3" -#: g10/gpg.c:275 +#: g10/g10.c:376 +#, fuzzy +msgid "do not force v3 signatures" +msgstr "fuerza firmas v3" + +#: g10/g10.c:377 +#, fuzzy +msgid "force v4 key signatures" +msgstr "fuerza firmas v3" + +#: g10/g10.c:378 +#, fuzzy +msgid "do not force v4 key signatures" +msgstr "fuerza firmas v3" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "siempre usa un MCD para cifrar" -#: g10/gpg.c:276 +#: g10/g10.c:381 +#, fuzzy +msgid "never use a MDC for encryption" +msgstr "siempre usa un MCD para cifrar" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "no hace ningún cambio" +# usa +# Vale. #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "usa el agente gpg" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "proceso por lotes: nunca preguntar" -#: g10/gpg.c:280 +# assume -> suponer, no asumir +# No estoy seguro. El diccionario Collins en la acepción b) de asumir +# dice "b) (suponer) to assume, suppose..." +# Además una de las acepciones de asumir es "aceptar algo" y suponer +# viene a ser asumir una idea como propia. Suponer "sí" en casi todas las +# preguntas no me acaba de gustar. +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "asume \"sí\" en casi todas las preguntas" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "asume \"no\" en casi todas las preguntas" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "añade este anillo a la lista de anillos" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "añade este anillo secreto a la lista" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NOMBRE|usa NOMBRE como clave secreta por defecto" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|SERVIDOR|usa este servidor de claves" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NOMBRE|usa el juego de caracteres NOMBRE" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "lee opciones del fichero" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" -msgstr "|DF|escribe información de estado en descriptor DF" +msgstr "|DF|escribe información de estado en este descriptor de fichero" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" +#: g10/g10.c:404 +#, fuzzy +msgid "|[file]|write status info to file" +msgstr "|DF|escribe información de estado en este descriptor de fichero" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" msgstr "|ID-CLAVE|confía plenamente en esta clave" -#: g10/gpg.c:297 +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|FICHERO|carga módulo de extensiones FICHERO" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "emula el modo descrito en la RFC1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" -msgstr "" -"todas las opciones de paquete, cifrado y\n" -"resumen tipo OpenPGP" +msgstr "todas las opciones de paquete, cifrado y resumen tipo OpenPGP" -#: g10/gpg.c:300 +#: g10/g10.c:414 +#, fuzzy +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "todas las opciones de paquete, cifrado y resumen tipo OpenPGP" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|usa modo de contraseña N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "" -"|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE\n" -"para las contraseñas" +"|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE para las contraseñas" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" -msgstr "" -"|NOMBRE|usa el algoritmo de cifrado NOMBRE para las\n" -"contraseñas" +msgstr "|NOMBRE|usa el algoritmo de cifrado NOMBRE para las contraseñas" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOMBRE|usa el algoritmo de cifrado NOMBRE" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|usa el algoritmo de compresión N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "elimina campo keyid de los paquetes cifrados" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NOMBRE=VALOR|usa estos datos de notación" -#: g10/gpg.c:312 +# ordenes -> órdenes +# página man -> página de manual +# Vale. ¿del manual mejor? +# Hmm, no sé, en man-db se usa "de". La verdad es que no lo he pensado. +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" +"@\n" +"(Véase en la página del manual la lista completo de órdenes y opciones)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -675,217 +807,285 @@ msgstr "" " --list-keys [nombres] muestra las claves\n" " --fingerprint [nombres] muestra las huellas dactilares\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "Por favor, informe de posibles \"bugs\" a .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opciones] [ficheros] (-h para ayuda)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Sintaxis: gpg [opciones] [ficheros]\n" -"Firma, comprueba, cifra o descifra.\n" -"La operación por defecto depende del tipo de datos de entrada.\n" +"firma, comprueba, cifra o descifra\n" +"la operación por defecto depende del tipo de datos de entrada.\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" -"Algoritmos soportados:\n" +"Algoritmos disponibles:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "uso: gpg [opciones] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" -msgstr "comandos incompatibles\n" +msgstr "órdenes incompatibles\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: no existe el fichero de opciones predefinido `%s'\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "fichero de opciones `%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "leyendo opciones desde `%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s no es un juego de caracteres válido\n" -#: g10/gpg.c:1016 -msgid "WARNING: program may create a core file!\n" -msgstr "ATENCIÓN: ¡el programa podría crear un fichero core dump!\n" +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "ATENCIÓN `%s' es un fichero vacío\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 +msgid "WARNING: program may create a core file!\n" +msgstr "ATENCIÓN: ¡el programa podría volcar un fichero core!\n" + +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: ¡%s no es para uso normal!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "¡%s no permitido con %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "¡%s no tiene sentido con %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" -msgstr "el algoritmo de cifrado seleccionado no es válido\n" +msgstr "el algoritmo de cifrado seleccionado es inválido\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" -msgstr "el algoritmo de resumen seleccionado no es válido\n" +msgstr "el algoritmo de resumen seleccionado no inválido\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "URL de política no válida\n" +#: g10/g10.c:1492 +#, fuzzy +msgid "the given signature policy URL is invalid\n" +msgstr "URL de política inválida\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +#, fuzzy +msgid "the given certification policy URL is invalid\n" +msgstr "URL de política inválida\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "el algoritmo de compresión debe estar en el rango %d-%d\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed debe ser mayor que 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed debe ser mayor que 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth debe estar en el rango 1-255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: el modo S2K simple (0) no es nada recomendable\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K incorrecto; debe ser 0, 1 o 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +#, fuzzy +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "modo S2K incorrecto; debe ser 0, 1 o 3\n" + +#: g10/g10.c:1519 +#, fuzzy +msgid "invalid preferences\n" +msgstr "muestra preferencias" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "inicialización de la base de datos de confianza fallida: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [nombre_fichero]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [nombre_fichero]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [nombre_fichero]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [nombre_fichero]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nombre_fichero]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +#, fuzzy +msgid "--sign --symmetric [filename]" +msgstr "--symmetric [nombre_fichero]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [nombre_fichero]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [nombre_fichero]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key id-usuario" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key id-usuario" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +#, fuzzy +msgid "--nrsign-key user-id" +msgstr "--sign-key id-usuario" + +#: g10/g10.c:1754 +#, fuzzy +msgid "--nrlsign-key user-id" +msgstr "--lsign-key id-usuario" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" -msgstr "--edit-key id-usuario [comandos]" +msgstr "--edit-key id-usuario [órdenes]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key id-usuario" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key id-usuario" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" -msgstr "no puede abrirse `%s': %s\n" +msgstr "no se puede abrir `%s': %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-usuario] [anillo]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "eliminación de armadura fallida: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "creación de armadura fallida: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" -msgstr "algoritmo de distribución no válido `%s'\n" +msgstr "algoritmo de distribución inválido `%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[nombre_fichero]" -#: g10/gpg.c:1605 +# Falta un espacio. +# En español no se deja espacio antes de los puntos suspensivos +# (Real Academia dixit) :) +# Tomo nota :-). Este comentario déjalo siempre. +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Adelante, teclee su mensaje...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" -msgstr "no puede abrirse `%s'\n" +msgstr "no se puede abrir `%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" -msgstr "El primer caracter de una notación debe ser una letra o un subrayado\n" +msgstr "El primer carácter de una notación debe ser una letra o un subrayado\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -893,158 +1093,138 @@ msgstr "" "un nombre de notación debe tener sólo letras, dígitos, puntos o subrayados, " "y acabar con un '='\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "los puntos en una notación deben estar rodeados por otros caracteres\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "un valor de notación no debe usar ningún caracter de control\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " -msgstr "cabecera de armadura no válida: " +msgstr "cabecera de armadura inválida: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "cabecera de armadura: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" -msgstr "cabecera de firma clara no válida\n" +msgstr "cabecera de firma clara inválida\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "firmas en texto claro anidadas\n" -#: g10/armor.c:525 -msgid "invalid dash escaped line: " -msgstr "Línea con guiones no válida: " - #: g10/armor.c:537 +msgid "invalid dash escaped line: " +msgstr "Línea con guiones inválida: " + +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "armadura inesperada" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" -msgstr "caracteres no válidos radix64 %02x ignorados\n" +msgstr "caracteres inválidos radix64 %02x omitidos\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" -msgstr "Fin de fichero prematuro\n" +msgstr "Fin de fichero prematuro (falta suma de comprobación)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "Fin de suma de comprobación prematuro\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "Suma de comprobación mal creada\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "Error en suma de comprobación: %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "fin de fichero prematuro (en el cierre)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "error en la línea de cierre\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "no se han encontrados datos OpenPGP válidos\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura incorrecta: línea más larga de %d caracteres\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caracter \"quoted printable\" en la armadura - probablemente se usó\n" "un MTA defectuoso\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Huella dactilar:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Huella dactilar:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" -msgstr "" +msgstr "No se dio ninguna razón" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" -msgstr "La clave está protegida.\n" +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "La clave ha sido reemplazada." -#: g10/pkclist.c:121 -#, fuzzy +#: g10/pkclist.c:65 msgid "Key has been compromised" -msgstr "Esta clave está deshabilitada" +msgstr "La clave ha sido comprometida" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" -msgstr "" +msgstr "La clave ya no está en uso" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" -msgstr "" +msgstr "El identificador de usuario ya no es válido" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " -msgstr "" +msgstr "Razón para la revocación: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " -msgstr "" +msgstr "Comentario a la revocación: " #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "iImMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "" -#: g10/pkclist.c:308 -#, c-format +#: g10/pkclist.c:258 +#, fuzzy, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" "No hay confianza definida para %lu:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 +#, fuzzy msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Por favor, decida su nivel de confianza para que este usuario\n" "verifique las claves de otros usuarios (mirando pasaportes,\n" @@ -1056,104 +1236,108 @@ msgstr "" " 4 = Me fío completamente\n" " i = Mostrar más información\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr "" + +#: g10/pkclist.c:274 +#, fuzzy, c-format +msgid " %d = I do NOT trust\n" +msgstr "%08lX: ¡Esta clave NO es de confianza!\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr "" + +#: g10/pkclist.c:276 +#, fuzzy, c-format +msgid " %d = I trust fully\n" +msgstr "%s: no es una base de datos de confianza\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr "" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr "" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = volver al menú principal\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr "" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = salir\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Su decisión: " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +#, fuzzy +msgid "Do you really want to set this key to ultimate trust? " +msgstr "¿De verdad quiere borrar esta clave? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que llevan a una clave de confianza absoluta:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"No puede encontrarse una ruta de confianza válida para esta clave. Veamos\n" -"si es posible asignar algunos valores de confianza perdidos.\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"No se ha encontrado ninguna ruta con una de nuestras claves.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"No se ha encontrado ningún certificado sin valor de confianza.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"No se cambió ningún valor de confianza.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "clave %08lX: ¡esta clave ha sido revocada!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "¿Usar esta clave de todas formas? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "clave %08lX: ¡esta subclave ha sido revocada!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: clave caducada\n" -#: g10/pkclist.c:519 -#, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: no hay información para calcular la probabilidad de confianza\n" +#: g10/pkclist.c:442 +#, fuzzy, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr " No hay indicios de que la firma pertenezca al propietario.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: ¡Esta clave NO es de confianza!\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" "but it is accepted anyway\n" msgstr "" -"%08lX: No hay seguridad que esta clave pertenezca realmente a su " -"proprietario\n" -"pero se acepta igualmente\n" +"%08lX: No hay seguridad que esta clave pertenezca realmente a su \n" +"proprietario pero se acepta igualmente\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Esta clave probablemente pertenece a su proprietario\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Esta clave nos pertenece\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1165,172 +1349,199 @@ msgstr "" "\"sí\" a la siguiente pregunta.\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "ATENCIÓN: ¡Usando una clave no fiable!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATENCIÓN: ¡Esta clave ha sido revocada por su propietario!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Esto puede significar que la firma está falsificada.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ATENCIÓN: ¡Esta clave ha sido revocada por su propietario!\n" -#: g10/pkclist.c:680 -msgid "Note: This key has expired!\n" -msgstr "Nota: ¡Esta clave está caducada!\n" +#: g10/pkclist.c:574 +#, fuzzy +msgid "Note: This key has been disabled.\n" +msgstr "Esta clave está deshabilitada" -#: g10/pkclist.c:688 +#: g10/pkclist.c:579 +msgid "Note: This key has expired!\n" +msgstr "Nota: ¡Esta clave ha caducado!\n" + +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " No hay indicios de que la firma pertenezca al propietario.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATENCIÓN: ¡Esta clave NO es de confianza!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " La firma es probablemente una FALSIFICACIÓN.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ATENCIÓN: ¡Esta clave no está certificada con suficientes firmas de " "confianza!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " No es seguro que la firma pertenezca al propietario.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" -msgstr "%s: ignorado: %s\n" +msgstr "%s: omitido: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" -msgstr "%s: ignorado: clave pública ya presente\n" +msgstr "%s: omitida: clave pública ya presente\n" -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" +#: g10/pkclist.c:752 +#, fuzzy +msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "No se ha especificado un ID de usuario (puede usar \"-r\")\n" "\n" -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Introduzca el ID de usuario: " +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "ID de usuario inexistente.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" -msgstr "ignorado: clave pública ya designada como destinataria por defecto\n" +msgstr "omitida: clave pública ya designada como destinataria por defecto\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "Clave pública deshabilitada.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "ignorado: clave pública ya designada con --encrypt-to\n" +#: g10/pkclist.c:806 +#, fuzzy +msgid "skipped: public key already set\n" +msgstr "%s: omitida: clave pública ya presente\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "desconocido el destinatario predefinido `%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: error comprobando la clave: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" -msgstr "%s: ignorado: clave pública deshabilitada\n" +msgstr "%s: omitida: clave pública deshabilitada\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "no hay direcciones válidas\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "" + +#: g10/keygen.c:187 +#, fuzzy, c-format +msgid "preference %c%lu duplicated\n" +msgstr "`%s' omitido: duplicado\n" + +#: g10/keygen.c:192 +#, fuzzy, c-format +msgid "too many `%c' preferences\n" +msgstr "Demasiadas preferencias" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "Caracter inválido en el nombre\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "escribiendo autofirma\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "escribiendo la firma de comprobación de clave\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 -#, fuzzy, c-format +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format msgid "keysize invalid; using %u bits\n" -msgstr "El tamaño requerido es de %u bits\n" +msgstr "tamaño de clave incorrecto; se usarán %u bits\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 -#, fuzzy, c-format +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format msgid "keysize rounded up to %u bits\n" -msgstr "redondeados a %u bits\n" +msgstr "tamaño de clave redondeado a %u bits\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Por favor seleccione tipo de clave deseado:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA y ElGamal (por defecto)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" -msgstr " (%d) DSA (sólo firma)\n" +msgstr " (%d) DSA (sólo firmar)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" -msgstr " (%d) ElGamal (sólo cifrado)\n" +msgstr " (%d) ElGamal (sólo cifrar)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" -msgstr " (%d) ElGamal (firma y cifrado)\n" +msgstr " (%d) ElGamal (firmar y cifrar)\n" -#: g10/keygen.c:643 +#: g10/keygen.c:784 #, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (firma y cifrado)\n" +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) DSA (sólo firmar)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, fuzzy, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) ElGamal (sólo cifrar)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Su elección: " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "¿De verdad quiere crear una clave de firma y cifrado? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "El uso de este algoritmo está desaconsejado - ¿crear de todas formas?" -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" -msgstr "Elección no válida.\n" +msgstr "Elección inválida.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1343,21 +1554,20 @@ msgstr "" " el tamaño por defecto es 1024 bits\n" " el tamaño máximo recomendado es 2048 bits\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "¿De qué tamaño quiere la clave (1024)? " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA sólo permite tamaños desde 512 a 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "tamaño insuficiente; 768 es el valor mínimo permitido\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "tamaño de clave insuficiente; 1024 es el mínimo permitido para RSA.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "tamaño insuficiente; 768 es el valor mínimo permitido\n" #. It is ridiculous and an annoyance to use larger key sizes! @@ -1368,47 +1578,42 @@ msgstr "tama #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "tamaño excesivo; %d es el máximo valor permitido.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "No se recomiendan claves de más de 2048 bits porque\n" -"el tiempo de computación es REALMENTE largo.\n" +"¡el tiempo de cálculo es REALMENTE largo!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "¿Seguro que quiere una clave de este tamaño? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" -"De acuerdo, ¡pero tenga en cuenta que las radiaciones de su monitor y " -"teclado\n" -"también son vulnerables a un ataque!\n" +"De acuerdo, ¡pero tenga en cuenta que las radiaciones de su monitor y\n" +"teclado también son vulnerables a un ataque!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "¿De verdad necesita una clave tan grande? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "El tamaño requerido es de %u bits\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "redondeados a %u bits\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1424,35 +1629,60 @@ msgstr "" " m = la clave caduca en n meses\n" " y = la clave caduca en n años\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +#, fuzzy +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Por favor, especifique el período de validez de la clave.\n" +" 0 = la clave nunca caduca\n" +" = la clave caduca en n días\n" +" w = la clave caduca en n semanas\n" +" m = la clave caduca en n meses\n" +" y = la clave caduca en n años\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "¿Validez de la clave (0)? " -#: g10/keygen.c:817 -msgid "invalid value\n" -msgstr "valor no válido\n" +#: g10/keygen.c:975 +#, fuzzy +msgid "Signature is valid for? (0) " +msgstr "¿Validez de la clave (0)? " -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" +#: g10/keygen.c:980 +msgid "invalid value\n" +msgstr "valor inválido\n" + +#: g10/keygen.c:985 +#, fuzzy, c-format +msgid "%s does not expire at all\n" msgstr "La clave nunca caduca\n" #. print the date when the key expires -#: g10/keygen.c:828 -#, c-format -msgid "Key expires at %s\n" +#: g10/keygen.c:992 +#, fuzzy, c-format +msgid "%s expires at %s\n" msgstr "La clave caduca el %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" +"Su sistema no puede mostrar fechas más allá del 2038.\n" +"Sin embargo funcionará correctamente hasta el 2106.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "¿Es correcto (s/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1462,52 +1692,50 @@ msgid "" "\n" msgstr "" "\n" -"Necesita un identificativo de usuario para identificar su clave. El " -"programa\n" -"construye el identificativo a partir del Nombre Real, Comentario y " -"Dirección\n" +"Necesita un identificador de usuario para identificar su clave. El programa\n" +"construye el identificador a partir del Nombre Real, Comentario y Dirección\n" "de Correo Electrónico de esta forma:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Nombre y apellidos: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" -msgstr "Caracter no válido en el nombre\n" +msgstr "Caracter inválido en el nombre\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "El nombre no puede empezar con un número\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "El nombre debe tener al menos 5 caracteres\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Dirección de correo electrónico: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" -msgstr "Dirección no válida\n" +msgstr "Dirección inválida\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Comentario: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" -msgstr "Caracter no válido en el comentario\n" +msgstr "Caracter inválido en el comentario\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Está usando el juego de caracteres `%s'.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1518,28 +1746,29 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" +"Por favor no ponga la dirección de correo-e en el nombre realo en el " +"comentario\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnCcDdVvSs" -#: g10/keygen.c:986 -#, fuzzy +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " -msgstr "¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? " +msgstr "¿Cambia (N)ombre, (C)omentario, (D)irección o (S)alir? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" -msgstr "" +msgstr "Por favor corrija primero el error.\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1547,11 +1776,17 @@ msgstr "" "Necesita una contraseña para proteger su clave secreta.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +#, fuzzy +msgid "passphrase not correctly repeated; try again" msgstr "contraseña repetida incorrecta, inténtelo de nuevo.\n" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1563,7 +1798,7 @@ msgstr "" "la opción \"--edit-key\".\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1576,43 +1811,67 @@ msgstr "" "generador de números aleatorios mayor oportunidad de recoger suficiente\n" "entropía.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "El par de claves DSA tendrá 1024 bits.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Creación de claves cancelada.\n" -#: g10/keygen.c:1668 -#, fuzzy, c-format +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format msgid "writing public key to `%s'\n" -msgstr "escribiendo certificado público en `%s'\n" +msgstr "escribiendo clave pública en `%s'\n" -#: g10/keygen.c:1669 -#, fuzzy, c-format +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format msgid "writing secret key to `%s'\n" -msgstr "escribiendo certificado privado en `%s'\n" +msgstr "escribiendo clave privada en `%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, fuzzy, c-format +msgid "no writable public keyring found: %s\n" +msgstr "clave %08lX: clave pública no encontrada: %s\n" + +#: g10/keygen.c:1958 +#, fuzzy, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "no puede bloquearse el anillo secreto: %s\n" + +#: g10/keygen.c:1972 +#, fuzzy, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "error escribiendo anillo `%s': %s\n" + +#: g10/keygen.c:1979 +#, fuzzy, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "error escribiendo anillo `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" -msgstr "Claves pública y secreta creadas y firmadas.\n" +msgstr "claves pública y secreta creadas y firmadas.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +#, fuzzy +msgid "key marked as ultimately trusted.\n" +msgstr "Certificados que llevan a una clave de confianza absoluta:\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" msgstr "" "Tenga en cuenta que esta clave no puede ser usada para cifrado. Puede usar\n" -"el comando \"--edit-key\" para crear una clave secundaria con este " -"propósito.\n" +"la orden \"--edit-key\" para crear una clave secundaria con este propósito.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "Creación de la clave fallida: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1620,7 +1879,7 @@ msgstr "" "clave pública creada %lu segundos en el futuro (salto en el tiempo o\n" "problemas con el reloj)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1628,402 +1887,546 @@ msgstr "" "clave pública creada %lu segundos en el futuro (salto en el tiempo o\n" "problemas con el reloj)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "NOTA: crear subclaves para claves V3 no sigue el estándar OpenPGP\n" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "¿Crear de verdad? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "" + +#: g10/encode.c:92 g10/encode.c:296 +#, fuzzy, c-format +msgid "`%s' already compressed\n" +msgstr "se han procesado %lu claves\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" -msgstr "%s: no puede abrirse: %s\n" +msgstr "%s: no se puede abrir: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "error creando contraseña: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: ATENCIÓN: fichero vacío\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "leyendo desde `%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s cifrado para: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 -#, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: usuario no encontrado: %s\n" +#: g10/delkey.c:69 g10/export.c:141 +#, fuzzy, c-format +msgid "key `%s' not found: %s\n" +msgstr "usuario '%s' no encontrado: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, fuzzy, c-format +msgid "error reading keyblock: %s\n" +msgstr "error leyendo `%s': %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" -msgstr "clave %08lX: no es conforme a rfc2440 - ignorada\n" +msgstr "clave %08lX: no es conforme a rfc2440 - omitida\n" -#: g10/export.c:175 -#, fuzzy, c-format +#: g10/export.c:180 +#, c-format msgid "key %08lX: not protected - skipped\n" -msgstr "clave %08lX: no es conforme a rfc2440 - ignorada\n" +msgstr "clave %08lX: no protegida - omitida\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, fuzzy, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "clave %08lX: clave nueva - omitida\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "ATENCIÓN: no se ha exportado nada\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "demasiados registros en la cache pk - anulada\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "demasiados registros en la cache unk - anulada\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[Identificador de usuario no encontrado]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "usando clave secundaria %08lX en vez de clave primaria %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" -msgstr "clave %08lX: clave secreta sin clave pública - ignorada\n" +msgstr "clave %08lX: clave secreta sin clave pública - omitida\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: usuario no encontrado\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" -msgstr "ignorando bloque de tipo %d\n" +msgstr "omitiendo bloque de tipo %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "hasta ahora se han procesado %lu claves\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "error leyendo `%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" -msgstr " Cantidad total procesada: %lu\n" +msgstr "Cantidad total procesada: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " nuevas subclaves: %lu\n" +msgstr " omitidas nuevas claves: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" -msgstr " sin identificativo: %lu\n" +msgstr " sin identificador: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" -msgstr " importadas: %lu" +msgstr " importadas: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" -msgstr " sin cambios: %lu\n" +msgstr " sin cambios: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " nuevos identificativos: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " nuevas subclaves: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " nuevas firmas: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" -msgstr " nuevas revocaciones: %lu\n" +msgstr " nuevas revocaciones de claves: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " claves secretas leídas: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr " claves secretas importadas: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "claves secretas sin cambios: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" -msgstr "clave %08lX: no hay identificativo de usuario\n" +msgstr "clave %08lX: sin identificador de usuario\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "clave %08lX: aceptado ID de usuario sin autofirma '" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" -msgstr "clave %08lX: no hay identificativos de usuario válidos\n" +msgstr "clave %08lX: sin identificadores de usuario válidos\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "esto puede ser debido a la ausencia de autofirma\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "clave %08lX: clave pública no encontrada: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "clave %08lX: no es conforme a rfc2440 - ignorada\n" +msgstr "clave %08lX: clave nueva - omitida\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, fuzzy, c-format +msgid "no writable keyring found: %s\n" +msgstr "no puede escribirse el anillo: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "escribiendo en `%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "error escribiendo anillo `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "clave %08lX: clave pública importada\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" -msgstr "clave %08lX: no se corresponde con nuestra copia\n" +msgstr "clave %08lX: no coincide con nuestra copia\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "clave %08lX: no puede localizarse el bloque de claves original: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "clave %08lX: no puede leerse el bloque de claves original: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" -msgstr "clave %08lX: 1 nuevo identificativo de usuario\n" +msgstr "clave %08lX: 1 nuevo identificador de usuario\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" -msgstr "clave %08lX: %d nuevos identificativos de usuario\n" +msgstr "clave %08lX: %d nuevos identificadores de usuario\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "clave %08lX: 1 nueva firma\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "clave %08lX: %d nuevas firmas\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "clave %08lX: 1 nueva subclave\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "clave %08lX: %d nuevas subclaves\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "clave %08lX: sin cambios\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, fuzzy, c-format +msgid "no default secret keyring: %s\n" +msgstr "no puede bloquearse el anillo secreto: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "clave %08lX: clave secreta importada\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "clave %08lX: ya estaba en el anillo secreto\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "clave %08lX: clave secreta no encontrada: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" -"clave %08lX: falta la clave pública - imposibile applicar el\n" +"clave %08lX: falta la clave pública - imposible emplear el\n" "certificado de revocación\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" -msgstr "clave %08lX: certificado de revocación no válido: %s - rechazado\n" +msgstr "clave %08lX: certificado de revocación inválido: %s - rechazado\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "clave %08lX: certificado de revocación importado\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" -msgstr "clave %08lX: no hay identificativo de usuario para la firma\n" +msgstr "clave %08lX: no hay identificador de usuario para la firma\n" -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" -msgstr "clave %08lX: algoritmo de clave pública no soportado\n" +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "clave %08lX: algoritmo de clave pública no disponible\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" -msgstr "clave %08lX: autofirma no válida\n" +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "clave %08lX: autofirma inválida\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" -msgstr "clave %08lX: no hay subclave para unir\n" +msgstr "clave %08lX: no hay subclave que unir\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "clave %08lX: algoritmo de clave pública no disponible\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" -msgstr "clave %08lX.%lu: unión de subclave no válida\n" +msgstr "clave %08lX: unión de subclave inválida\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "clave %08lX: aceptado ID de usuario sin autofirma '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" -msgstr "clave %08lX: ignorado ID de usuario '" +msgstr "clave %08lX: omitido ID de usuario '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" -msgstr "clave %08lX: subclave ignorada\n" +msgstr "clave %08lX: subclave omitida\n" #. here we violate the rfc a bit by still allowing #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" -msgstr "clave %08lX: firma no exportable (clase %02x) - ignorada\n" +msgstr "clave %08lX: firma no exportable (clase %02x) - omitida\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" -msgstr "" -"clave %08lX: certificado de revocación en lugar equivocado - ignorado\n" +msgstr "clave %08lX: certificado de revocación en lugar equivocado - omitido\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" -msgstr "clave %08lX: certificado de revocación no valido: %s - ignorado\n" +msgstr "clave %08lX: certificado de revocación no valido: %s - omitido\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "clave %08lX: detectado usuario duplicado - fusionada\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "clave %08lX: certificado de revocación añadido\n" -#: g10/import.c:1130 g10/import.c:1183 -#, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "clave %08lX: nuestra copia no tiene autofirma\n" +#: g10/import.c:1231 +#, fuzzy, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "clave %08lX: %d nuevas firmas\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[revocación]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[autofirma]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 firma incorrecta\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d firmas incorrectas\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 firma no comprobada por falta de clave\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d firmas no comprobadas por falta de clave\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 firma no comprobada por causa de un error\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d firmas no comprobadas por causa de un error\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" -msgstr "Detectado 1 identificativo de usuario sin autofirma válida\n" +msgstr "Detectado 1 identificador de usuario sin autofirma válida\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" -msgstr "Detectados %d identificativos de usuario sin autofirma válida\n" +msgstr "Detectados %d identificadores de usuario sin autofirma válida\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "La clave está protegida.\n" + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +#, fuzzy +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "¿Seguro que quiere una clave de este tamaño? " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr "" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 #, c-format -msgid "Already signed by key %08lX\n" +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" + +#: g10/keyedit.c:388 +#, fuzzy, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" msgstr "Ya firmada por la clave %08lX\n" -#: g10/keyedit.c:319 +#: g10/keyedit.c:393 +#, fuzzy, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "Ya firmada por la clave %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nada que firmar con la clave %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +#, fuzzy +msgid "This key has expired!" +msgstr "Nota: ¡Esta clave ha caducado!\n" + +#: g10/keyedit.c:440 +#, fuzzy, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Esta clave no está protegida.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "" + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr "" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr "" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr "" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr "" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2031,42 +2434,69 @@ msgstr "" "¿Está realmente seguro de querer firmar esta clave\n" "con su clave: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 +#, fuzzy msgid "" -"The signature will be marked as non-exportable.\n" "\n" +"The signature will be marked as non-exportable.\n" msgstr "" "La firma se marcará como no exportable.\n" "\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +#, fuzzy +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"La firma se marcará como no exportable.\n" +"\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "¿Firmar de verdad? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "firma fallida: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Esta clave no está protegida.\n" -#: g10/keyedit.c:426 -#, fuzzy +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" -msgstr "Clave secreta no disponible" +msgstr "Las partes secretas de la clave primaria no están disponibles.\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "La clave está protegida.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "No puede editarse esta clave: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2074,7 +2504,7 @@ msgstr "" "Introduzca la nueva contraseña para esta clave secreta.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2082,421 +2512,564 @@ msgstr "" "No ha especificado contraseña. Esto es probablemente una *mala* idea.\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "¿Realmente quiere hacer esto? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "moviendo la firma de la clave al lugar correcto\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "sale de este menú" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" -msgstr "" +msgstr "s" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" -msgstr "" +msgstr "graba" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "graba y sale" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" -msgstr "" +msgstr "ayuda" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "muestra esta ayuda" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" -msgstr "" +msgstr "hdac" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "muestra huella dactilar" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" -msgstr "" +msgstr "lista" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" -msgstr "lista clave e identificativos de usuario" +msgstr "lista clave e identificadores de usuario" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" -msgstr "" +msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" -msgstr "" +msgstr "idu" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" -msgstr "selecciona identificativo de usuario N" +msgstr "selecciona identificador de usuario N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" -msgstr "" +msgstr "clave" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "selecciona clave secundaria N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" -msgstr "" +msgstr "comprueba" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "lista firmas" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" -msgstr "" +msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" -msgstr "" +msgstr "firma" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "firma la clave" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" -msgstr "" +msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" -msgstr "" +msgstr "firmal" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "firma la clave localmente" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +#, fuzzy +msgid "nrsign" +msgstr "firma" + +#: g10/keyedit.c:830 +#, fuzzy +msgid "sign the key non-revocably" +msgstr "firma la clave localmente" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "nrlsign" +msgstr "firmal" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "sign the key locally and non-revocably" +msgstr "firma la clave localmente" + +#: g10/keyedit.c:832 msgid "debug" -msgstr "" +msgstr "depura" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" -msgstr "" +msgstr "añaidu" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" -msgstr "añade un identificativo de usuario" +msgstr "añade un identificador de usuario" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "" + +#: g10/keyedit.c:834 +#, fuzzy +msgid "add a photo ID" +msgstr "añade un identificador de usuario" + +#: g10/keyedit.c:835 msgid "deluid" -msgstr "" +msgstr "borridu" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" -msgstr "borra un identificativo de usuario" +msgstr "borra un identificador de usuario" -#: g10/keyedit.c:593 -msgid "addkey" +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" msgstr "" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 +msgid "addkey" +msgstr "añacla" + +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "añade una clave secundaria" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" -msgstr "" +msgstr "borrcla" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "borra una clave secundaria" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" -msgstr "" +msgstr "borrfir" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "borra firmas" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" -msgstr "" +msgstr "expira" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "cambia fecha de caducidad" -#: g10/keyedit.c:597 -msgid "toggle" +#: g10/keyedit.c:842 +msgid "primary" msgstr "" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "" + +#: g10/keyedit.c:843 +msgid "toggle" +msgstr "cambia" + +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "cambia entre lista de claves secretas y públicas" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" -msgstr "" +msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" -msgstr "" +msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" +#: g10/keyedit.c:846 +#, fuzzy +msgid "list preferences (expert)" msgstr "muestra preferencias" -#: g10/keyedit.c:601 -msgid "passwd" -msgstr "" +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "verpref" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +#, fuzzy +msgid "list preferences (verbose)" +msgstr "muestra preferencias" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "setpref" +msgstr "pref" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "set preference list" +msgstr "muestra preferencias" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updpref" +msgstr "pref" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updated preferences" +msgstr "muestra preferencias" + +#: g10/keyedit.c:850 +msgid "passwd" +msgstr "contr" + +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "cambia la contraseña" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" -msgstr "" +msgstr "conf" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "cambia valores de confianza" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" -msgstr "" +msgstr "revfir" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "revoca firmas" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" -msgstr "" +msgstr "revcla" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "revoca una clave secundaria" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" -msgstr "" +msgstr "descla" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "deshabilita una clave" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" -msgstr "" +msgstr "habcla" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "habilita una clave" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "imposible hacer esto en modo de proceso por lotes\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, fuzzy, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "error leyendo `%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Clave secreta disponible.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " -msgstr "Comando> " +msgstr "Orden> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "Se necesita la clave secreta para hacer esto.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" +msgstr "Por favor use la orden \"cambia\" primero.\n" + +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "La clave está protegida.\n" + +#: g10/keyedit.c:1066 +msgid "Really sign all user IDs? " +msgstr "¿Firmar realmente todos los identificadores de usuario? " + +#: g10/keyedit.c:1067 +msgid "Hint: Select the user IDs to sign\n" +msgstr "Sugerencia: seleccione los identificadores de usuario para firmar\n" + +#: g10/keyedit.c:1092 +#, c-format +msgid "This command is not allowed while in %s mode.\n" msgstr "" -#: g10/keyedit.c:769 -msgid "Really sign all user IDs? " -msgstr "¿Firmar realmente todos los identificativos de usuario? " - -#: g10/keyedit.c:770 -msgid "Hint: Select the user IDs to sign\n" -msgstr "Sugerencia: seleccione los identificativos de usuario a firmar\n" - -#: g10/keyedit.c:802 g10/keyedit.c:984 -#, c-format -msgid "update of trustdb failed: %s\n" -msgstr "actualización de confianza fallida: %s\n" - -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" -msgstr "Debe seleccionar por lo menos un identificativo de usuario.\n" +msgstr "Debe seleccionar por lo menos un identificador de usuario.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" -msgstr "¡No puede borrar el último identificativo de usuario!\n" +msgstr "¡No puede borrar el último identificador de usuario!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " -msgstr "¿Borrar realmente todos los identificativos seleccionados? " +msgstr "¿Borrar realmente todos los identificadores seleccionados? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " -msgstr "¿Borrar realmente este identificativo? " +msgstr "¿Borrar realmente este identificador de usuario? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Debe seleccionar por lo menos una clave.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " -msgstr "¿Borrar realmente las claves seleccionadas? " +msgstr "¿De verdad quiere borrar las claves seleccionadas? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " -msgstr "¿Borrar realmente esta clave? " +msgstr "¿De verdad quiere borrar esta clave? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " -msgstr "¿Revocar realmente las claves seleccionadas? " +msgstr "¿De verdad quiere revocar las claves seleccionadas? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " -msgstr "¿Revocar realmente esta clave? " +msgstr "¿De verdad quiere revocar esta clave? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +#, fuzzy +msgid "Really update the preferences for the selected user IDs? " +msgstr "¿Borrar realmente todos los identificadores seleccionados? " + +#: g10/keyedit.c:1254 +#, fuzzy +msgid "Really update the preferences? " +msgstr "¿Crear los certificados de revocación realmente? (s/N)" + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "¿Grabar cambios? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "¿Salir sin grabar? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "actualización fallida: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "actualización de la clave secreta fallida: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "Clave sin cambios, no se necesita actualización.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" -msgstr "Comando no válido (pruebe \"help\")\n" +msgstr "Orden inválida (pruebe \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, fuzzy, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "ATENCIÓN: ¡Esta clave ha sido revocada por su propietario!\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr "" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX creada: %s expira: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " confianza: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Esta clave está deshabilitada" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "clave %08lX: ¡esta subclave ha sido revocada!\n" +msgstr "rev! ¡esta subclave ha sido revocada! %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr " nuevas revocaciones: %lu\n" +msgstr "rev- se encontró una revocación falsificada\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" +msgstr "rev? problema comprobando la revocación: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" msgstr "" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "¿Seguro que quiere una clave de este tamaño? " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "¿Borrar esta firma correcta? (s/N/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" -msgstr "¿Borrar esta firma no válida? (s/N/q)" +msgstr "¿Borrar esta firma inválida? (s/N/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "¿Borrar esta firma desconocida? (s/N/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "¿Borrar realmente esta autofirma? (s/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "%d firmas borradas.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d firmas borradas\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "No se borró nada\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Por favor, quite la selección de las claves secretas.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Por favor, seleccione como máximo una clave secundaria.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Cambiando caducidad de clave secundaria.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Cambiando caducidad de clave primaria.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "No puede cambiar la fecha de caducidad de una clave v3\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" -msgstr "No hay firma correspondiente en anillo secreto\n" +msgstr "No existe la firma correspondiente en el anillo secreto\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +#, fuzzy +msgid "Please select exactly one user ID.\n" +msgstr "Debe seleccionar por lo menos un identificador de usuario.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" -msgstr "No hay ningún identificativo de usuario con el índice %d\n" +msgstr "No hay ningún identificador de usuario con el índice %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "No hay ninguna clave secundaria con el índice %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "ID de usuario: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2505,245 +3078,378 @@ msgstr "" "\"\n" "firmada con su clave %08lX el %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, fuzzy, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"firmada con su clave %08lX el %s\n" + +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "firma %s de: %s\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "¿De verdad quiere revocar esta clave? " + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " msgstr "¿Crear un certificado de revocación para esta clave (s/N)?" #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Ha firmado los siguientes IDs de usuario:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 -#, c-format -msgid " signed by %08lX at %s\n" +#: g10/keyedit.c:2504 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s%s\n" msgstr " firmada por %08lX el %s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " revocada por %08lX el %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" -msgstr "Va Vd. a revocar las siguientes firmas:\n" +msgstr "Va a revocar las siguientes firmas:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " firmada por %08lX el %s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " msgstr "¿Crear los certificados de revocación realmente? (s/N)" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "no hay clave secreta\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "Armadura no válida" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" -#: g10/keylist.c:178 -msgid "revoked" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +#, fuzzy +msgid "Signature policy: " +msgstr "firma %s de: %s\n" + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "ATENCIÓN: encontrados datos de notación inválidos\n" + +#. This is UTF8 +#: g10/keylist.c:120 +#, fuzzy +msgid "Signature notation: " +msgstr "Notación: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "" + +#: g10/keylist.c:216 +msgid "Keyring" msgstr "" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 -#, fuzzy, c-format +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format msgid " [expires: %s]" -msgstr "La clave caduca el %s\n" +msgstr " [caduca el %s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Huella dactilar:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Huella dactilar:" + +#: g10/keylist.c:899 +#, fuzzy +msgid " Key fingerprint =" +msgstr " Huella dactilar:" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "datos cifrados %s\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "cifrado con algoritmo desconocido %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "la clave pública es %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" -msgstr "datos cifrados de la clave pública: DEK bueno\n" +msgstr "datos cifrados de la clave pública: DEK correcta\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "cifrado con clave %2$s de %1$u bits, ID %3$08lX, creada el %4$s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "cifrado con clave %s, ID %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "clave secreta para descifrado no disponible\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "descifrado de la clave pública fallido: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, fuzzy, c-format +msgid "assuming %s encrypted data\n" +msgstr "datos cifrados %s\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "descifrado correcto\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATENCIÓN: ¡el mensaje cifrado ha sido manipulado!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "descifrado fallido: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: el remitente solicitó \"sólo-para-tus-ojos\"\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "nombre fichero original='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" -msgstr "" +msgstr "revocación independiente - use \"gpg --import\" para aplicarla\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "ATENCIÓN: encontrados datos de notación no válidos\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Notación: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Política: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "suprimida la verificación de la firma\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "no se puede trabajar con firmas múltiples\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Firma creada el %.*s usando clave %s ID %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "Firma INCORRECTA de \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +#, fuzzy +msgid "Expired signature from \"" +msgstr "Firma correcta de \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Firma correcta de \"" -#: g10/mainproc.c:1109 -msgid " aka \"" -msgstr "también conocido como \"" +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1351 +msgid " aka \"" +msgstr " alias \"" + +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Imposible comprobar la firma: %s\n" -#: g10/mainproc.c:1230 -#, fuzzy, c-format +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "no es una firma separada\n" + +#: g10/mainproc.c:1508 +#, c-format msgid "standalone signature of class 0x%02x\n" -msgstr "Clase de firma desconocida" +msgstr "firma independiente de clase 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" -msgstr "firma viejo estilo (PGP 2.x)\n" +msgstr "firma al viejo estilo (PGP 2.x)\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" -msgstr "paquete raíz no válido detectado en proc_tree()\n" +msgstr "paquete raíz inválido detectado en proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" -msgstr "no se pueden desactivar los core dumps: %s\n" +msgstr "no se pueden desactivar los volcados de core: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "¡No se deberían usar algoritmos experimentales!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "" -"este algoritmo de cifrado está en desuso, considere el uso de uno más " -"estándar.\n" +"ese algoritmo de cifrado está desacreditado;¡por favor use uno más " +"estándar!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "no puedo manejar el algoritmo de clave pública %d\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "el subpaquete de tipo %d tiene el bit crítico activado\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" +msgstr "el agente gpg no esta disponible en esta sesión\n" + +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" msgstr "" -#: g10/passphrase.c:204 +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" +msgstr "variable de entorno GPG_AGENT_INFO malformada\n" + +#: g10/passphrase.c:511 +#, fuzzy, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "el algoritmo de protección %d no puede ser utilizado\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format +msgid "can't connect to `%s': %s\n" +msgstr "no se puede conectar con `%s': %s\n" + +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" msgstr "" -#: g10/hkp.c:158 g10/passphrase.c:223 -#, fuzzy, c-format -msgid "can't connect to `%s': %s\n" -msgstr "no puede abrirse `%s': %s\n" +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +#, fuzzy +msgid "problem with the agent - disabling agent use\n" +msgstr "problema con el agente: el agente devuelve 0x%lx\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr "(ID clave primaria %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" "Necesita una contraseña para desbloquear la clave secreta\n" -"del usuario: \"" +"del usuario: \"%2$.*1$s\"\n" +"clave %4$s de %3$u bits, ID %5$08lX, creada el %6$s%7$s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Introduzca contraseña: " +msgstr "Introduzca contraseña\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Repita contraseña: " +msgstr "Repita contraseña\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 -#, fuzzy +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "linea demasiado larga\n" +msgstr "contraseña demasiado larga\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "respuesta del agente inválida\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "cancelado por el usuario\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "problema con el agente: el agente devuelve 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2753,20 +3459,20 @@ msgstr "" "Necesita una contraseña para desbloquear la clave secreta\n" "del usuario: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "clave %2$s de %1$u bits, ID %3$08lX, creada el %4$s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "imposible pedir contraseña en modo de proceso por lotes\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Introduzca contraseña: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Repita contraseña: " @@ -2774,149 +3480,192 @@ msgstr "Repita contrase msgid "data not saved; use option \"--output\" to save it\n" msgstr "datos no grabados; use la opción \"--output\" para grabarlos\n" -#: g10/plaintext.c:324 -#, fuzzy -msgid "Detached signature.\n" -msgstr "%d firmas borradas.\n" +#: g10/plaintext.c:108 +#, fuzzy, c-format +msgid "error creating `%s': %s\n" +msgstr "error leyendo `%s': %s\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:337 +msgid "Detached signature.\n" +msgstr "Firma separada.\n" + +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Introduzca el nombre del fichero de datos: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "leyendo stdin...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "no hay datos firmados\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "imposible abrir datos firmados `%s'\n" -#: g10/pubkey-enc.c:135 -#, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +#: g10/pubkey-enc.c:100 +#, fuzzy, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "destinatario anónimo, probando clave secreta %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "de acuerdo, somos el destinatario anónimo.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" -msgstr "la codificación vieja de DEK no está soportada\n" +msgstr "la antigua codificación de la DEK no puede usarse\n" -#: g10/pubkey-enc.c:216 +#: g10/pubkey-enc.c:177 #, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "el algoritmo de protección %d no está soportado\n" +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "algoritmo de cifrado %d desconocido o desactivado\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "NOTA: algoritmo de cifrado %d no encontrado en las preferencias\n" -#: g10/pubkey-enc.c:261 -#, fuzzy, c-format -msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "NOTA: clave de la firma caducada el %s\n" - -#: g10/hkp.c:62 +#: g10/pubkey-enc.c:242 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "NOTA: clave secreta %08lX caducada el %s\n" -#: g10/hkp.c:75 +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 #, fuzzy, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "solicitando clave %08lX de %s ...\n" + +#: g10/hkp.c:94 +#, c-format msgid "can't get key from keyserver: %s\n" -msgstr "no puede escribirse en el anillo: %s\n" +msgstr "no puede obtenerse la clave en el servidor: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "'%s' no es un identificativo largo de clave válido\n" - -#: g10/hkp.c:182 -#, fuzzy, c-format +#: g10/hkp.c:171 +#, c-format msgid "error sending to `%s': %s\n" -msgstr "error leyendo `%s': %s\n" +msgstr "error enviando a `%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" -msgstr "" +msgstr "envió correcto a `%s` (estado=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" +msgstr "falló el envio a `%s': status=%u\n" + +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" msgstr "" -#: g10/seckey-cert.c:89 -#, fuzzy +#: g10/hkp.c:521 +#, fuzzy, c-format +msgid "can't search keyserver: %s\n" +msgstr "no puede obtenerse la clave en el servidor: %s\n" + +#: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" -msgstr "Clave secreta no disponible" +msgstr "las partes de la clave privada no están disponibles\n" -#: g10/seckey-cert.c:95 -#, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "el algoritmo de protección %d no está soportado\n" +#: g10/seckey-cert.c:59 +#, fuzzy, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "el algoritmo de protección %d no puede ser utilizado\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" +#: g10/seckey-cert.c:215 +#, fuzzy +msgid "Invalid passphrase; please try again" msgstr "Contraseña incorrecta, inténtelo de nuevo...\n" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "ATENCIÓN: detectada clave débil - por favor cambie la contraseña.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "¡esto es una clave ElGamal generada por PGP que NO es segura para las " "firmas!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "la clave pública es %lu segundos más nueva que la firma\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "la clave pública es %lu segundos más nueva que la firma\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "NOTA: clave de la firma caducada el %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "NOTA: clave de la firma %08lX caducada el %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "asumiendo firma incorrecta debido a un bit crítico desconocido\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "la comprobación de la firma creada falló: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "firma %s de: %s\n" -#: g10/sign.c:435 g10/sign.c:690 -#, c-format -msgid "can't create %s: %s\n" -msgstr "no puede crearse %s: %s\n" - -#: g10/sign.c:538 -msgid "signing:" -msgstr "firmando:" - -#: g10/sign.c:583 +#: g10/sign.c:430 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ATENCIÓN `%s' es un fichero vacío\n" +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:643 g10/sign.c:812 +#, c-format +msgid "can't create %s: %s\n" +msgstr "no se puede crear %s: %s\n" + +#: g10/sign.c:704 +msgid "signing:" +msgstr "firmando:" + +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:953 +#, fuzzy, c-format +msgid "%s encryption will be used\n" +msgstr "descifrado fallido: %s\n" + #: g10/textfilter.c:134 #, c-format msgid "can't handle text lines longer than %d characters\n" @@ -2927,476 +3676,248 @@ msgstr "no se pueden manejar l msgid "input line longer than %d characters\n" msgstr "línea de longitud superior a %d caracteres\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "registro base de datos de confianza %lu: lseek fallido: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "resgistro base de datos de confianza %lu: escritura fallida (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "transacción en la base de datos de confianza demasiado grande\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" -msgstr "%s: no puede abrirse: %s\n" +msgstr "%s: no se puede abrir: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: ¡el directorio no existe!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: no puede crearse: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" -msgstr "%s: no puede crearse bloqueo\n" +msgstr "%s: no se puede crear bloqueo\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, fuzzy, c-format +msgid "%s: can't make lock\n" +msgstr "%s: no se puede crear bloqueo\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: no se puede crear: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: fallo en la creación del registro de versión: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" -msgstr "%s: se ha creado base de datos de confianza no válida\n" +msgstr "%s: se ha creado base de datos de confianza inválida\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: se ha creado base de datos de confianza\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" -msgstr "%s: base de datos de confianza no válida\n" +msgstr "%s: base de datos de confianza inválida\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: fallo en la creación de la tabla hash: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: error actualizando el registro de versión: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: error leyendo registro de versión: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: error escribiendo registro de versión: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de datos de confianza: fallo lseek: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de datos de confianza: error lectura (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: no es una base de datos de confianza\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: registro de versión con número de registro %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" -msgstr "%s: versión del fichero %d no válida\n" +msgstr "%s: versión del fichero %d inválida\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: error leyendo registro libre: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: error escribiendo registro de directorio: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: fallo en poner a cero un registro: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: fallo al añadir un registro: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "La base de datos de confianza está dañada. Por favor, ejecute\n" "\"gpg --fix-trust-db\".\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, fuzzy, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "'%s' no es un identificador largo de clave válido\n" + +#: g10/trustdb.c:235 +#, fuzzy, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "clave %08lX: aceptada como clave de confianza.\n" + +#: g10/trustdb.c:274 +#, fuzzy, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "clave %08lX: imposible incluirla en la base de datos de confianza\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "clave %08lX: clave fiable sin clave pública - omitida\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "registro de confianza %lu, petición tipo %d: fallo lectura: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, fuzzy, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "registro de confianza %lu: fallo al borrar: %s\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "registro de confianza %lu, tipo %d: fallo escritura: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "registro de confianza %lu: fallo al borrar: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de datos de confianza: fallo sincronización: %s\n" -#: g10/trustdb.c:377 -#, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "error leyendo registro de directorio del LID %lu: %s\n" +#: g10/trustdb.c:468 +#, fuzzy +msgid "no need for a trustdb check\n" +msgstr "%s: no es una base de datos de confianza\n" -#: g10/trustdb.c:384 -#, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: esperaba registro directorio, encontrado tipo %d\n" - -#: g10/trustdb.c:389 -#, c-format -msgid "no primary key for LID %lu\n" -msgstr "no hay clave primaria para el LID %lu\n" - -#: g10/trustdb.c:394 -#, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "error leyendo clave primaria para el LID %lu: %s\n" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record fallida: %s\n" - -#: g10/trustdb.c:474 +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "'%s' no es un identificativo largo de clave válido\n" +msgid "next trustdb check due at %s\n" +msgstr "inserción del registro de confianza fallida: %s\n" -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "clave %08lX: imposible incluirla en la base de datos de confianza\n" +#: g10/trustdb.c:779 +#, fuzzy +msgid "checking the trustdb\n" +msgstr "cambia valores de confianza" -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "clave %08lX: petición de registro fallida\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "clave %08lX: ya está en la tabla de confianza\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "clave %08lX: aceptada como clave de confianza.\n" - -#: g10/trustdb.c:547 -#, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "clave %08lX: clave de confianza sin clave pública - ignorada\n" - -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "NOTA: la clave secreta %08lX NO está protegida.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "clave %08lX: las claves pública y secreta no se corresponden\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "enumeración de claves secretas fallida: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "clave %08lX.%lu: unión de subclave válida\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "clave %08lX.%lu: unión de subclave no válida: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "clave %08lX.%lu: revocación de clave válida\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "clave %08lX.%lu: revocación de clave no válida: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "clave %08lX.%lu: revocación de subclave válida\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Autofirma válida" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Autofirma no válida" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "" -"Revocación válida de ID de usuario ignorada debido a autofirma más reciente" - -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Revocación de ID de usuario válida" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Revocación de ID de usuario no válida." - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Revocación de certificado válida" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Certificado correcto" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Certificado de revocación incorrecto" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Certificado incorrecto" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "registro de firma %lu[%d] apunta al registro equivocado.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "certificado duplicado - eliminado" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir fallida: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: inserción fallida: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: inserción fallida: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: insertada\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "error leyendo registro de directorio: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "se han procesado %lu claves\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu claves con errores\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu claves insertadas\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "enumeración bloques de clave fallido: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: registro de directiorio sin clave - ignorado\n" - -#: g10/trustdb.c:1884 +#: g10/trustdb.c:933 #, fuzzy, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "clave %08lX: %d nuevas subclaves\n" +msgid "public key %08lX not found: %s\n" +msgstr "Clave pública no encontrada" -#: g10/trustdb.c:1886 +#: g10/trustdb.c:1515 #, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu claves ignoradas\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu claves actualizadas\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Oh oh, no hay claves\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Oh oh, no hay ningún ID de usuario\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: búsqueda registro directorio fallida: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "clave %08lX: inserción del registro de confianza fallida: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "clave %08lX.%lu: incluida en la base de datos de confianza\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +msgid "public key of ultimately trusted key %08lX not found\n" msgstr "" -"clave %08lX.%lu: creada en el futuro (salto en el tiempo o\n" -"problemas con el reloj)\n" -#: g10/trustdb.c:2433 +#: g10/trustdb.c:1593 #, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "clave %08lX.%lu: caducada el %s\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "" -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "clave %08lX.%lu: comprobación de confianza fallida: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "usuario '%s' no encontrado: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "problema buscando '%s' en la tabla de confianza: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "usuario '%s' no está en la tabla de confianza - insertando\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "fallo al poner '%s' en la tabla de confianza: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "ATENCÍON: todavía no puedo tratar registros de preferencias largos\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" +"la firma no se pudo verificar.\n" +"Por favor recuerde que el fichero de firma (.sig o .asc)\n" +"debería ser el primero que se da en la línea de órdenes.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" -msgstr "" +msgstr "la línea %u es demasiado larga o no tiene avance de línea (LF)\n" -#: g10/ringedit.c:296 +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "clave no marcada como insegura - no puede usarse con el pseudo RNG\n" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: no se puede crear el anillo: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "`%s' omitido: duplicado\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: anillo creado\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "ATENCIÓN: existen 2 ficheros con información confidencial.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s es el que no se ha modificado\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s es el nuevo\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Por favor arregle este posible fallo de seguridad\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" -msgstr "`%s' ignorado: %s\n" +msgstr "`%s' omitido: %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "omitido: clave secreta ya presente\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" -"`%s' ignorada: esta es una clave ElGamal generada por PGP que NO es segura " +"`%s' omitida: esta es una clave ElGamal generada por PGP que NO es segura " "para las firmas\n" #. do not overwrite @@ -3409,90 +3930,99 @@ msgstr "El fichero `%s' ya existe. " msgid "Overwrite (y/N)? " msgstr "¿Sobreescribir (s/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: sufijo desconocido\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Introduzca nuevo nombre de fichero" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "escribiendo en stdout\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "asumiendo que hay datos firmados en `%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: se ha creado un nuevo fichero de opciones\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" -msgstr "%s: no puede crearse el directorio: %s\n" +msgstr "%s: no se puede crear el directorio: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: directorio creado\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" -msgstr "" +msgstr "reinicie GnuPG otra vez para que lea el nuevo fichero de opciones\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "cifrado con algoritmo desconocido %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "datos cifrados %s\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATENCIÓN: mensaje cifrado con una clave débil en el cifrado simétrico.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problema trabajando con un paquete cifrado\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "creada clave débil - reintentando\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "¡imposible evitar clave débil para cifrado simétrico después de %d " "intentos!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "¡hay una clave secreta para esta clave pública!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "use la opción \"--delete-secret-key\" para borrarla antes.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "imposible hacer esto en modo de proceso por lotes sin \"--yes\"\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "¿Eliminar esta clave del anillo? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "¡Esta es una clave secreta! ¿Eliminar realmente? " +#: g10/delkey.c:156 +#, fuzzy, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "enumeración de bloques de clave fallida: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, fuzzy, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "¡hay una clave secreta para esta clave pública!\n" + +#: g10/delkey.c:196 +#, fuzzy +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "use la opción \"--delete-secret-key\" para borrarla antes.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3504,22 +4034,27 @@ msgstr "" "que ver con la red de certificados (implícitamente creada)." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "Si quiere usar esta clave revocada de todos modos, conteste \"sí\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." -msgstr "" -"Si quiere usar esta clave no confiable de todos modos, conteste \"sí\"." +msgstr "Si quiere usar esta clave no fiable de todos modos, conteste \"sí\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." -msgstr "" -"Introduzca el ID de usuario de la dirección a la que quiere enviar el " -"mensaje." +msgstr "Introduzca el ID de usuario al que quiere enviar el mensaje." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3539,42 +4074,42 @@ msgid "" "this is the reason why the encryption only ElGamal key is not available in\n" "this menu." msgstr "" -"Seleccione el algoritmo a usar.\n" +"Seleccione el algoritmo que usará.\n" "\n" -"DSA (también conocido como DSS) es el algoritmo de firma digital que sólo\n" +"DSA (también conocido como DSS) es un algoritmo de firma digital que sólo\n" "puede usarse para firmas. Es el algoritmo sugerido porque la verificación\n" "de firmas DSA es mucho más rápida que la de firmas ElGamal.\n" "\n" "ElGamal es un algoritmo que puede ser usado para firma y cifrado. OpenPGP\n" -"distingue entre dos tipos de estos algoritmos: para sólo cifrado y para\n" +"distingue entre dos tipos de estos algoritmos: sólo para cifrado y para\n" "firma y cifrado. En realidad es lo mismo, pero se deben seleccionar ciertos\n" "parámetros de una forma particular para crear una clave segura para firmas.\n" "Este programa lo hace así, pero otras implementaciones de OpenPGP no tienen\n" -"porqué entender el tipo de firma y cifrado.\n" +"por qué entender el tipo de firma y cifrado.\n" "\n" "La clave primaria debe ser una clave capaz de firmar, es por ello que la\n" "opción de clave ElGamal sólo para cifrado no está disponible en este menú." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" "with them are quite large and very slow to verify." msgstr "" -"Aunque estas claves están definidas en la RFC2440, no se sugiere su uso,\n" -"ya que no están soportadas por todos los programas y las firmas creadas\n" +"Aunque estas claves están definidas en RFC2440, no se aconseja su uso,\n" +"ya que no todos los programas pueden utilizarlas y las firmas creadas\n" "con ellas son bastante grandes y lentas de verificar." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Introduzca la longitud de la clave" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Responda \"sí\" o \"no\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3586,21 +4121,21 @@ msgstr "" "buena respuesta a los errores; el sistema intentará interpretar el valor\n" "introducido como un intervalo." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Introduzca el nombre del dueño de la clave" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "" "Introduzca una dirección de correo electrónico (opcional pero muy\n" "recomendable)" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Introduzca un comentario opcional" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3614,15 +4149,56 @@ msgstr "" "O para continuar con la generación de clave.\n" "S para interrumpir la generación de clave." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Responda \"sí\" (o sólo \"s\") para generar la subclave." -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Responda \"sí\" si quiere firmar TODOS los IDs de usuario" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3630,11 +4206,11 @@ msgstr "" "Responda \"sí\" si realmente quiere borrar este ID de usuario.\n" "¡También se perderán todos los certificados!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Responda \"sí\" si quiere borrar esta subclave" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3644,7 +4220,7 @@ msgstr "" "borrar esta firma ya que puede ser importante para establecer una conexión\n" "de confianza con la clave o con otra clave certificada por ésta." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3656,13 +4232,13 @@ msgstr "" "se usó, ya que dicha clave podría establecer una conexión de confianza\n" "a través de otra clave certificada." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "Esta firma no es válida. Tiene sentido borrarla de su anillo." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3670,49 +4246,53 @@ msgid "" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" -"Esta es una firma que une el ID de usuario a la clave. No suele ser una " -"buena\n" -"idea borrar dichas firmas. De hecho, GnuPG podría no ser capaz de volver a\n" -"usar esta clave. Así que bórrela tan sólo si esta autofirma no es válida " -"por\n" -"alguna razón y hay otra disponible." +"Esta es una firma que une el ID de usuario a la clave. No suele ser una\n" +"buena idea borrar dichas firmas. De hecho, GnuPG podría no ser capaz de\n" +"volver a usar esta clave. Así que bórrela tan sólo si esta autofirma no\n" +"es válida por alguna razón y hay otra disponible." -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" + +#: g10/helptext.c:238 +#, fuzzy +msgid "Please enter the passhrase; this is a secret sentence \n" msgstr "Por favor introduzca la contraseña" -#: g10/helptext.c:209 +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Repita la última contraseña para asegurarse de lo que tecleó." -#: g10/helptext.c:213 -#, fuzzy +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "Introduzca el nombre del fichero al que corresponde la firma" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Responda \"sí\" para sobreescribir el fichero" -#: g10/helptext.c:223 +# Sugerencia: ENTER -> INTRO. +# Aceptada. +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" -"Introduzca un nuevo nombre de fichero. Si pulsa ENTER se usará el fichero " -"por\n" -"omisión (mostrado entre corchetes)." +"Introduzca un nuevo nombre de fichero. Si pulsa INTRO se usará el fichero\n" +"por omisión (mostrado entre corchetes)." -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3720,26 +4300,375 @@ msgid "" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" +"Debería especificar un motivo para la certificación. Dependiendo del\n" +"contexto puede elegir una opción de esta lista:\n" +" \"La clave ha sido comprometida\"\n" +" Use esto si tiene razones para pensar que personas no autorizadas\n" +" tuvieron acceso a su clave secreta.\n" +" \"La clave ha sido sustituida\"\n" +" Use esto si ha reemplazado la clave por otra más nueva.\n" +" \"La clave ya no está en uso\"\n" +" Use esto si ha dejado de usar esta clave.\n" +" \"La identificación de usuario ya no es válida\"\n" +" Use esto para señalar que la identificación de usuario no debería\n" +" seguir siendo usada; esto se utiliza normalmente para marcar una\n" +" dirección de correo-e como inválida.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" +"Si lo desea puede introducir un texto explicando por qué emite\n" +"este certificado de revocación. Por favor, que el texto sea breve.\n" +"Una línea vacía pone fin al texto.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Ayuda no disponible" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" -msgstr "Ayuda no disponible para `%s'" +msgstr "No hay ayuda disponible para `%s'" + +#: g10/keydb.c:177 +#, fuzzy, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "error escribiendo anillo `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "" + +#: g10/keydb.c:197 +#, fuzzy, c-format +msgid "keyring `%s' created\n" +msgstr "%s: anillo creado\n" + +#: g10/keydb.c:587 +#, fuzzy, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "%s: fallo en la creación de la tabla hash: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "ATENCIÓN: existen 2 ficheros con información confidencial.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s es el que no se ha modificado\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s es el nuevo\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Por favor arregle este posible fallo de seguridad\n" + +#: g10/keyring.c:1337 +#, fuzzy, c-format +msgid "checking keyring `%s'\n" +msgstr "no puede bloquearse el anillo `%s': %s\n" + +#: g10/keyring.c:1368 +#, fuzzy, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "hasta ahora se han procesado %lu claves\n" + +#: g10/keyring.c:1379 +#, fuzzy, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "lista claves y firmas" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: anillo creado\n" + +#, fuzzy +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "¿Seguro que quiere una clave de este tamaño? " + +#, fuzzy +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr "¿Seguro que quiere una clave de este tamaño? " + +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "¿Firmar de verdad? " + +#~ msgid "too many random bits requested; the limit is %d\n" +#~ msgstr "se solicitan demasiados bits aleatorios; el límite es %d\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NOMBRES]|comprueba la base de datos de confianza" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key id-usuario" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key id-usuario" + +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key id-usuario" + +#~ msgid "For info see http://www.gnupg.org" +#~ msgstr "Información en http://www.gnupg.org" + +#~ msgid "sSmMqQ" +#~ msgstr "iImMqQ" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "No puede encontrarse una ruta de confianza válida para esta clave. " +#~ "Veamos\n" +#~ "si es posible asignar algunos valores de confianza perdidos.\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "No se ha encontrado ninguna ruta con una de nuestras claves.\n" +#~ "\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "No se ha encontrado ningún certificado sin valor de confianza.\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "No se cambió ningún valor de confianza.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "" +#~ "%08lX: no hay información para calcular la probabilidad de confianza\n" + +#~ msgid "Enter the user ID: " +#~ msgstr "Introduzca el ID de usuario: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "omitida: clave pública ya designada con --encrypt-to\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: error comprobando la clave: %s\n" + +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) RSA (firmar y cifrar)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "¿De verdad quiere crear una clave de firma y cifrado? " + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "¿De verdad necesita una clave tan grande? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: usuario no encontrado: %s\n" #~ msgid "certificate read problem: %s\n" #~ msgstr "problema en la lectura del certificado: %s\n" +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "demasiados registros en la cache unk - anulada\n" + +#~ msgid "no default public keyring\n" +#~ msgstr "no hay anillo público por defecto\n" + +#~ msgid "secret key %08lX not imported (use %s to allow for it)\n" +#~ msgstr "clave secreta %08lX no importada (use %s para permitirlo)\n" + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "clave %08lX: nuestra copia no tiene autofirma\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: usuario no encontrado\n" + +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "actualización de base de datos de confianza fallida: %s\n" + +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "no hay servidores de claves conocidos (use opción --keyserver)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "'%s' no es un identificador de clave válido\n" + +#~ msgid "assuming bad MDC due to an unknown critical bit\n" +#~ msgstr "asumiendo MDC incorrecto debido a un bit crítico desconocido\n" + +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "error leyendo registro de directorio del LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lid %lu: esperaba registro directorio, encontrado tipo %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "no hay clave primaria para el LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "error leyendo clave primaria para el LID %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record fallida: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "clave %08lX: petición de registro fallida\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "clave %08lX: ya está en la tabla de confianza\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "NOTA: la clave secreta %08lX NO está protegida.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "clave %08lX: las claves pública y secreta no se corresponden\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "enumeración de claves secretas fallida: %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "clave %08lX.%lu: unión de subclave válida\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "clave %08lX.%lu: unión de subclave inválida: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "clave %08lX.%lu: revocación de clave válida\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "clave %08lX.%lu: revocación de clave inválida: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "clave %08lX.%lu: revocación de subclave válida\n" + +#~ msgid "Good self-signature" +#~ msgstr "Autofirma válida" + +#~ msgid "Invalid self-signature" +#~ msgstr "Autofirma inválida" + +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "" +#~ "Revocación válida de ID de usuario omitida, existe autofirma más reciente" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Revocación de ID de usuario válida" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Revocación de ID de usuario inválida." + +#~ msgid "Valid certificate revocation" +#~ msgstr "Revocación de certificado válida" + +#~ msgid "Good certificate" +#~ msgstr "Certificado correcto" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Certificado de revocación incorrecto" + +#~ msgid "Invalid certificate" +#~ msgstr "Certificado incorrecto" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "registro de firma %lu[%d] apunta al registro equivocado.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "certificado duplicado - eliminado" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir fallida: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: inserción fallida: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: inserción fallida: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: insertada\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "error leyendo registro de directorio: %s\n" + +#~ msgid "\t%lu keys with errors\n" +#~ msgstr "\t%lu claves con errores\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu claves insertadas\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: registro de directiorio sin clave - omitido\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr "\t%lu debido a las nuevas claves públicas\n" + +# msgstr "clave %08lX: %d nuevas subclaves\n" +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu claves omitidas\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu claves actualizadas\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Oh oh, no hay claves\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Oh oh, no hay ningún ID de usuario\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: búsqueda registro directorio fallida: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "clave %08lX: inserción del registro de confianza fallida: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "clave %08lX.%lu: incluida en la base de datos de confianza\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "clave %08lX.%lu: creada en el futuro (salto en el tiempo o\n" +#~ "problemas con el reloj)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "clave %08lX.%lu: caducada el %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "clave %08lX.%lu: comprobación de confianza fallida: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "problema buscando '%s' en la tabla de confianza: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "usuario '%s' no está en la tabla de confianza - insertando\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "fallo al poner '%s' en la tabla de confianza: %s\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "" +#~ "ATENCÍON: todavía no puedo tratar registros de preferencias largos\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: no se puede crear el anillo: %s\n" + +#, fuzzy +#~ msgid "invalid" +#~ msgstr "Armadura no válida" + #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "No puede usarse clave RSA en esta versión\n" @@ -3749,39 +4678,16 @@ msgstr "Ayuda no disponible para `%s'" #~ msgid "No user ID for key\n" #~ msgstr "No hay clave secreta para tal usuario\n" -#~ msgid "no default public keyring\n" -#~ msgstr "no hay anillo público por defecto\n" - -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "no puede bloquearse el anillo `%s': %s\n" - -#~ msgid "error writing keyring `%s': %s\n" -#~ msgstr "error escribiendo anillo `%s': %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "clave %08lX: no puede leerse el bloque de claves original: %s\n" - -#~ msgid "%s: user not found\n" -#~ msgstr "%s: usuario no encontrado\n" +#~ msgid "no secret key for decryption available\n" +#~ msgstr "clave secreta para descifrado no disponible\n" #~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" +#~ "RSA keys are deprecated; please consider creating a new key and use this " +#~ "key in the future\n" #~ msgstr "" #~ "Las claves RSA están en desuso, considere la creación de una nueva clave " #~ "para futuros usos\n" -#, fuzzy -#~ msgid "not processed" -#~ msgstr "se han procesado %lu claves\n" - -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "asumiendo MDC incorrecto debido a un bit crítico desconocido\n" - -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "clave no marcada como insegura - no puede usarse con el pseudo RNG\n" - #~ msgid "set debugging flags" #~ msgstr "establece los parámetros de depuración" @@ -3853,9 +4759,6 @@ msgstr "Ayuda no disponible para `%s'" #~ msgid "lid %lu: can't get keyblock: %s\n" #~ msgstr "lid %lu: no puedo obtener el bloque de clave: %s\n" -#~ msgid "Too many preferences" -#~ msgstr "Demasiadas preferencias" - #~ msgid "Too many preference items" #~ msgstr "Demasiados ítems de preferencias" @@ -3892,6 +4795,9 @@ msgstr "Ayuda no disponible para `%s'" #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "no puede bloquearse el anillo público `%s': %s\n" +#~ msgid "error writing keyring `%': %s\n" +#~ msgstr "error escribiendo anillo `%s': %s\n" + #~ msgid "can't open file: %s\n" #~ msgstr "no puede abrirse el fichero: %s\n" @@ -3904,12 +4810,6 @@ msgstr "Ayuda no disponible para `%s'" #~ msgid "can't write keyblock: %s\n" #~ msgstr "no puede escribirse el bloque de claves: %s\n" -#~ msgid "can't lock secret keyring: %s\n" -#~ msgstr "no puede bloquearse el anillo secreto: %s\n" - -#~ msgid "can't write keyring: %s\n" -#~ msgstr "no puede escribirse el anillo: %s\n" - #, fuzzy #~ msgid "encrypted message is valid\n" #~ msgstr "el algoritmo de resumen seleccionado no es válido\n" @@ -3946,9 +4846,6 @@ msgstr "Ayuda no disponible para `%s'" #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: lectura registro preferencias fallida: %s\n" -#~ msgid "lid %lu: read sig record failed: %s\n" -#~ msgstr "lid %lu: lectura registro firma fallida: %s\n" - #~ msgid "user '%s' read problem: %s\n" #~ msgstr "problema de lectura usuario '%s': %s\n" @@ -3986,9 +4883,6 @@ msgstr "Ayuda no disponible para `%s'" #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Oh oh: la clave ahora está en la tabla de confianza???\n" -#~ msgid "insert trust record failed: %s\n" -#~ msgstr "inserción del registro de confianza fallida: %s\n" - #~ msgid "Hmmm, public key lost?" #~ msgstr "Oh oh, ¿se ha perdido la clave pública?" diff --git a/po/et.po b/po/et.po new file mode 100644 index 000000000..ee1577aed --- /dev/null +++ b/po/et.po @@ -0,0 +1,4317 @@ +# Estonian translations for gnupg. +# Copyright (C) 2001, 2002 Free Software Foundation, Inc. +# Toomas Soome , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: gnupg 1.0.6d\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-22 12:07+0200\n" +"Last-Translator: Toomas Soome \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Hoiatus: kasutan ebaturvalist mälu!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "Lisainfot leiate lehelt http://www.gnupg.org/faq.html\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "initsialiseerimata turvalise mäluta ei ole operatsioon võimalik\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(te kasutasite vahest selle töö jaoks valet programmi)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 +msgid "yes" +msgstr "jah" + +#: util/miscutil.c:297 util/miscutil.c:334 +msgid "yY" +msgstr "jJ" + +#: util/miscutil.c:298 util/miscutil.c:332 +msgid "no" +msgstr "ei" + +#: util/miscutil.c:299 util/miscutil.c:335 +msgid "nN" +msgstr "eE" + +#: g10/keyedit.c:815 util/miscutil.c:333 +msgid "quit" +msgstr "välju" + +#: util/miscutil.c:336 +msgid "qQ" +msgstr "vV" + +#: util/errors.c:54 +msgid "general error" +msgstr "üldine viga" + +#: util/errors.c:55 +msgid "unknown packet type" +msgstr "tundmatu paketi tüüp" + +#: util/errors.c:56 +msgid "unknown version" +msgstr "tundmatu versioon" + +#: util/errors.c:57 +msgid "unknown pubkey algorithm" +msgstr "tundmatu avaliku võtme algoritm" + +#: util/errors.c:58 +msgid "unknown digest algorithm" +msgstr "tundmatu lühendi algoritm" + +#: util/errors.c:59 +msgid "bad public key" +msgstr "halb avalik võti" + +#: util/errors.c:60 +msgid "bad secret key" +msgstr "halb salajane võti" + +#: util/errors.c:61 +msgid "bad signature" +msgstr "halb allkiri" + +#: util/errors.c:62 +msgid "checksum error" +msgstr "kontrollsumma viga" + +#: util/errors.c:63 +msgid "bad passphrase" +msgstr "halb parool" + +#: util/errors.c:64 +msgid "public key not found" +msgstr "ei leia avalikku võtit" + +#: util/errors.c:65 +msgid "unknown cipher algorithm" +msgstr "tundmatu ¨ifri algoritm" + +#: util/errors.c:66 +msgid "can't open the keyring" +msgstr "võtmehoidlat ei õnnestu avada" + +#: util/errors.c:67 +msgid "invalid packet" +msgstr "vigane pakett" + +#: util/errors.c:68 +msgid "invalid armor" +msgstr "vigane pakend" + +#: util/errors.c:69 +msgid "no such user id" +msgstr "sellist kasutaja id pole" + +#: util/errors.c:70 +msgid "secret key not available" +msgstr "salajane võti ei ole kättesaadav" + +#: util/errors.c:71 +msgid "wrong secret key used" +msgstr "kasutati valet salajast võtit" + +#: util/errors.c:72 +msgid "not supported" +msgstr "ei ole toetatud" + +#: util/errors.c:73 +msgid "bad key" +msgstr "halb võti" + +#: util/errors.c:74 +msgid "file read error" +msgstr "viga faili lugemisel" + +#: util/errors.c:75 +msgid "file write error" +msgstr "viga faili kirjutamisel" + +#: util/errors.c:76 +msgid "unknown compress algorithm" +msgstr "tundmatu pakkimisalgoritm" + +#: util/errors.c:77 +msgid "file open error" +msgstr "viga faili avamisel" + +#: util/errors.c:78 +msgid "file create error" +msgstr "viga faili loomisel" + +#: util/errors.c:79 +msgid "invalid passphrase" +msgstr "vigane parool" + +#: util/errors.c:80 +msgid "unimplemented pubkey algorithm" +msgstr "realiseerimata avaliku võtme algoritm" + +#: util/errors.c:81 +msgid "unimplemented cipher algorithm" +msgstr "realiseerimata ¨ifri algoritm" + +#: util/errors.c:82 +msgid "unknown signature class" +msgstr "tundmatu allkirja klass" + +#: util/errors.c:83 +msgid "trust database error" +msgstr "usalduse andmebaasi viga" + +#: util/errors.c:84 +msgid "bad MPI" +msgstr "halb MPI" + +#: util/errors.c:85 +msgid "resource limit" +msgstr "ressursi limiit" + +#: util/errors.c:86 +msgid "invalid keyring" +msgstr "vigane võtmehoidla" + +#: util/errors.c:87 +msgid "bad certificate" +msgstr "halb sertifikaat" + +#: util/errors.c:88 +msgid "malformed user id" +msgstr "vigane kasutaja id" + +#: util/errors.c:89 +msgid "file close error" +msgstr "viga faili sulgemisel" + +#: util/errors.c:90 +msgid "file rename error" +msgstr "viga faili ümber nimetamisel" + +#: util/errors.c:91 +msgid "file delete error" +msgstr "viga faili kustutamisel" + +#: util/errors.c:92 +msgid "unexpected data" +msgstr "ootamatud andmed" + +#: util/errors.c:93 +msgid "timestamp conflict" +msgstr "ajatemplite konflikt" + +#: util/errors.c:94 +msgid "unusable pubkey algorithm" +msgstr "mittekasutatav avaliku võtme algoritm" + +#: util/errors.c:95 +msgid "file exists" +msgstr "fail on olemas" + +#: util/errors.c:96 +msgid "weak key" +msgstr "nõrk võti" + +#: util/errors.c:97 +msgid "invalid argument" +msgstr "vigane argument" + +#: util/errors.c:98 +msgid "bad URI" +msgstr "halb URI" + +#: util/errors.c:99 +msgid "unsupported URI" +msgstr "mittetoetatud URI" + +#: util/errors.c:100 +msgid "network error" +msgstr "võrgu viga" + +#: util/errors.c:102 +msgid "not encrypted" +msgstr "krüptimata" + +#: util/errors.c:103 +msgid "not processed" +msgstr "ei töödeldud" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "mittekasutatav avalik võti" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "mittekasutatav salajane võti" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "võtmeserveri viga" + +#: util/logger.c:249 +#, c-format +msgid "... this is a bug (%s:%d:%s)\n" +msgstr "... see on viga (%s:%d:%s)\n" + +#: util/logger.c:255 +#, c-format +msgid "you found a bug ... (%s:%d)\n" +msgstr "te leidsite vea ... (%s:%d)\n" + +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 +#, c-format +msgid "can't open `%s': %s\n" +msgstr "`%s' ei õnnestu avada: %s\n" + +#: cipher/random.c:324 +#, c-format +msgid "can't stat `%s': %s\n" +msgstr "ei õnnestu lugeda `%s' atribuute: %s\n" + +#: cipher/random.c:329 +#, c-format +msgid "`%s' is not a regular file - ignored\n" +msgstr "`%s' ei ole tavaline fail - ignoreerin\n" + +#: cipher/random.c:334 +msgid "note: random_seed file is empty\n" +msgstr "märkus: random_seed fail on tühi\n" + +#: cipher/random.c:340 +msgid "warning: invalid size of random_seed file - not used\n" +msgstr "hoiatus: vigane random_seed faili suurus - ei kasuta\n" + +#: cipher/random.c:348 +#, c-format +msgid "can't read `%s': %s\n" +msgstr "`%s' ei õnnestu lugeda: %s\n" + +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "märkus: random_seed faili ei uuendatud\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "`%s' ei õnnestu luua: %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "`%s' ei õnnestu kirjutada: %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "`%s' ei õnnestu sulgeda: %s\n" + +#: cipher/random.c:662 +msgid "WARNING: using insecure random number generator!!\n" +msgstr "HOIATUS: kasutan ebaturvalist juhuarvude generaatorit!!\n" + +#: cipher/random.c:663 +msgid "" +"The random number generator is only a kludge to let\n" +"it run - it is in no way a strong RNG!\n" +"\n" +"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" +"\n" +msgstr "" +"Juhuarvude generaator on ainult tühi kest, et programmid\n" +"käiks - see EI OLE tugev juhuarvude generaator!\n" +"\n" +"ÄRGE KASUTAGE SELLE PROGRAMMI POOLT GENEREERITUD ANDMEID!!\n" +"\n" + +#: cipher/rndlinux.c:142 +#, c-format +msgid "" +"\n" +"Not enough random bytes available. Please do some other work to give\n" +"the OS a chance to collect more entropy! (Need %d more bytes)\n" +msgstr "" +"\n" +"Juhuslikke baite ei ole piisavalt. Palun tehke arvutiga muid töid,\n" +"et anda masinal võimalust koguda enam entroopiat! (Vajatakse %d baiti)\n" + +#: g10/g10.c:287 +msgid "" +"@Commands:\n" +" " +msgstr "" +"@Käsud:\n" +" " + +#: g10/g10.c:289 +msgid "|[file]|make a signature" +msgstr "|[fail]|loo allkiri" + +#: g10/g10.c:290 +msgid "|[file]|make a clear text signature" +msgstr "|[fail]|loo avateksti allkiri" + +#: g10/g10.c:291 +msgid "make a detached signature" +msgstr "loo eraldiseisev allkiri" + +#: g10/g10.c:292 +msgid "encrypt data" +msgstr "krüpteeri andmed" + +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[failid]|krüpteeri failid" + +#: g10/g10.c:294 +msgid "encryption only with symmetric cipher" +msgstr "krüpteerimine kasutades ainult sümmeetrilist ¨ifrit" + +#: g10/g10.c:295 +msgid "store only" +msgstr "ainult salvesta" + +#: g10/g10.c:296 +msgid "decrypt data (default)" +msgstr "dekrüpteeri andmed (vaikimisi)" + +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[failid]|dekrüpteeri failid" + +#: g10/g10.c:298 +msgid "verify a signature" +msgstr "kontrolli allkirja" + +#: g10/g10.c:300 +msgid "list keys" +msgstr "näita võtmeid" + +#: g10/g10.c:302 +msgid "list keys and signatures" +msgstr "näita võtmeid ja allkirju" + +#: g10/g10.c:303 +msgid "check key signatures" +msgstr "kontrolli võtmete allkirju" + +#: g10/g10.c:304 +msgid "list keys and fingerprints" +msgstr "näita võtmeid ja sõrmejälgi" + +#: g10/g10.c:305 +msgid "list secret keys" +msgstr "näita salajasi võtmeid" + +#: g10/g10.c:306 +msgid "generate a new key pair" +msgstr "genereeri uus võtmepaar" + +#: g10/g10.c:307 +msgid "remove keys from the public keyring" +msgstr "eemalda võtmed avalike võtmete hoidlast" + +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "eemalda võtmed salajaste võtmete hoidlast" + +#: g10/g10.c:310 +msgid "sign a key" +msgstr "allkirjasta võti" + +#: g10/g10.c:311 +msgid "sign a key locally" +msgstr "allkirjasta võti lokaalselt" + +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "allkirjasta võti mitte-tühistatavana" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "allkirjasta võti lokaalselt ja mitte-tühistatavana" + +#: g10/g10.c:314 +msgid "sign or edit a key" +msgstr "allkirjasta või toimeta võtit" + +#: g10/g10.c:315 +msgid "generate a revocation certificate" +msgstr "genereeri tühistamise sertifikaat" + +#: g10/g10.c:316 +msgid "export keys" +msgstr "ekspordi võtmed" + +#: g10/g10.c:317 +msgid "export keys to a key server" +msgstr "ekspordi võtmed võtmeserverisse" + +#: g10/g10.c:318 +msgid "import keys from a key server" +msgstr "impordi võtmed võtmeserverist" + +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "otsi võtmeid võtmeserverist" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "uuenda võtmeid võtmeserverist" + +#: g10/g10.c:326 +msgid "import/merge keys" +msgstr "impordi/mesti võtmed" + +#: g10/g10.c:328 +msgid "list only the sequence of packets" +msgstr "näita ainult pakettide järjendeid" + +#: g10/g10.c:330 +msgid "export the ownertrust values" +msgstr "ekspordi usalduse väärtused" + +#: g10/g10.c:332 +msgid "import ownertrust values" +msgstr "impordi usalduse väärtused" + +#: g10/g10.c:334 +msgid "update the trust database" +msgstr "uuenda usalduse andmebaasi" + +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "hooldusvaba usalduse andmebaasi uuendamine" + +#: g10/g10.c:337 +msgid "fix a corrupted trust database" +msgstr "paranda vigane usalduse andmebaas" + +#: g10/g10.c:338 +msgid "De-Armor a file or stdin" +msgstr "Pakenda fail või standardsisend lahti" + +#: g10/g10.c:340 +msgid "En-Armor a file or stdin" +msgstr "Pakenda fail või standardsisend" + +#: g10/g10.c:342 +msgid "|algo [files]|print message digests" +msgstr "|algo [failid]|trüki teatelühendid" + +#: g10/g10.c:346 +msgid "" +"@\n" +"Options:\n" +" " +msgstr "" +"@\n" +"Võtmed:\n" +" " + +#: g10/g10.c:348 +msgid "create ascii armored output" +msgstr "loo ascii pakendis väljund" + +#: g10/g10.c:350 +msgid "|NAME|encrypt for NAME" +msgstr "|NIMI|krüpti NIMEle" + +#: g10/g10.c:353 +msgid "|NAME|use NAME as default recipient" +msgstr "|NIMI|kasuta NIME vaikimisi saajana" + +#: g10/g10.c:355 +msgid "use the default key as default recipient" +msgstr "kasuta vaikimisi saajana vaikimisi võtit" + +#: g10/g10.c:361 +msgid "use this user-id to sign or decrypt" +msgstr "kasuta seda kasutaja IDd" + +#: g10/g10.c:362 +msgid "|N|set compress level N (0 disables)" +msgstr "|N|määra pakkimise tase N (0 blokeerib)" + +#: g10/g10.c:364 +msgid "use canonical text mode" +msgstr "kasuta kanoonilist tekstimoodi" + +#: g10/g10.c:371 +msgid "use as output file" +msgstr "kasuta väljundfailina" + +#: g10/g10.c:372 +msgid "verbose" +msgstr "ole jutukas" + +#: g10/g10.c:373 +msgid "be somewhat more quiet" +msgstr "ole mõnevõrra vaiksem" + +#: g10/g10.c:374 +msgid "don't use the terminal at all" +msgstr "ära kasuta terminali" + +#: g10/g10.c:375 +msgid "force v3 signatures" +msgstr "kasuta v3 allkirju" + +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "ära kasuta v3 allkirju" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "kasuta v4 võtme allkirju" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "ära kasuta v3 võtme allkirju" + +#: g10/g10.c:379 +msgid "always use a MDC for encryption" +msgstr "krüptimisel kasuta alati MDC" + +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "krüptimisel ära kasuta kunagi MDC" + +#: g10/g10.c:383 +msgid "do not make any changes" +msgstr "ära tee mingeid muutusi" + +#. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, +#: g10/g10.c:385 +msgid "use the gpg-agent" +msgstr "kasuta gpg-agenti" + +#: g10/g10.c:388 +msgid "batch mode: never ask" +msgstr "pakettmood: ära küsi kunagi" + +#: g10/g10.c:389 +msgid "assume yes on most questions" +msgstr "eelda enamus küsimustele jah vastust" + +#: g10/g10.c:390 +msgid "assume no on most questions" +msgstr "eelda enamus küsimustele ei vastust" + +#: g10/g10.c:391 +msgid "add this keyring to the list of keyrings" +msgstr "lisa see võtmehoidla võtmehoidlate nimekirja" + +#: g10/g10.c:392 +msgid "add this secret keyring to the list" +msgstr "lisa see salajaste võtmete hoidla nimekirja" + +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "näita millisesse võtmehoidlasse näidatud võti kuulub" + +#: g10/g10.c:394 +msgid "|NAME|use NAME as default secret key" +msgstr "|NIMI|kasuta NIME vaikimisi salajase võtmena" + +#: g10/g10.c:395 +msgid "|HOST|use this keyserver to lookup keys" +msgstr "|HOST|kasuta seda võtmeserverit" + +#: g10/g10.c:397 +msgid "|NAME|set terminal charset to NAME" +msgstr "|NIMI|terminali kooditabel on NIMI" + +#: g10/g10.c:398 +msgid "read options from file" +msgstr "loe võtmed failist" + +#: g10/g10.c:402 +msgid "|FD|write status info to this FD" +msgstr "|FP|kirjuta olekuinfo sellesse failipidemesse" + +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[fail]|kirjuta olekuinfo faili" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|VÕTMEID|usalda seda võtit täielikult" + +#: g10/g10.c:411 +msgid "|FILE|load extension module FILE" +msgstr "|FAIL|lae laiendusmoodul FAIL" + +#: g10/g10.c:412 +msgid "emulate the mode described in RFC1991" +msgstr "emuleeri dokumendis RFC1991 kirjeldatud moodi" + +#: g10/g10.c:413 +msgid "set all packet, cipher and digest options to OpenPGP behavior" +msgstr "kasuta kõikides tegevustes OpenPGP võtmeid" + +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "kasuta kõikide pakettide, ¨iffrite ja lühendi seadeid PGP 2.x moodis" + +#: g10/g10.c:418 +msgid "|N|use passphrase mode N" +msgstr "|N|kasuta parooli moodi N" + +#: g10/g10.c:420 +msgid "|NAME|use message digest algorithm NAME for passphrases" +msgstr "|NIMI|kasuta paroolidega lühendialgoritmi NIMI" + +#: g10/g10.c:422 +msgid "|NAME|use cipher algorithm NAME for passphrases" +msgstr "|NIMI|kasuta paroolidega ¨ifri algoritmi NIMI" + +#: g10/g10.c:424 +msgid "|NAME|use cipher algorithm NAME" +msgstr "|NIMI|kasuta ¨ifri algoritmi NIMI" + +#: g10/g10.c:425 +msgid "|NAME|use message digest algorithm NAME" +msgstr "|NIMI|kasuta teatelühendi algoritmi NIMI" + +#: g10/g10.c:426 +msgid "|N|use compress algorithm N" +msgstr "|N|kasuta pakkimisalgoritmi N" + +#: g10/g10.c:427 +msgid "throw keyid field of encrypted packets" +msgstr "ära lisa krüptimisel võtme id" + +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Esita foto IDd" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Ei esita foto IDd" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "Sea käsurida foto ID vaatamiseks" + +#: g10/g10.c:431 +msgid "|NAME=VALUE|use this notation data" +msgstr "|NIMI=VÄÄRTUS|kasuta neid noteerimise andmeid" + +#: g10/g10.c:434 +msgid "" +"@\n" +"(See the man page for a complete listing of all commands and options)\n" +msgstr "" +"@\n" +"(Kõikide käskude ja võtmete täieliku kirjelduse leiate manualist)\n" + +#: g10/g10.c:437 +msgid "" +"@\n" +"Examples:\n" +"\n" +" -se -r Bob [file] sign and encrypt for user Bob\n" +" --clearsign [file] make a clear text signature\n" +" --detach-sign [file] make a detached signature\n" +" --list-keys [names] show keys\n" +" --fingerprint [names] show fingerprints\n" +msgstr "" +"@\n" +"Näited:\n" +"\n" +" -se -r Bob [fail] allkirjasta ja krüpti kasutajale Bob\n" +" --clearsign [fail] loo avateksti allkiri\n" +" --detach-sign [fail] loo eraldiseisev allkiri\n" +" --list-keys [nimed] näita võtmeid\n" +" --fingerprint [nimed] näita sõrmejälgi\n" + +#: g10/g10.c:579 +msgid "Please report bugs to .\n" +msgstr "Palun saatke veateated aadressil .\n" + +#: g10/g10.c:583 +msgid "Usage: gpg [options] [files] (-h for help)" +msgstr "Kasuta: gpg [võtmed] [failid] (-h näitab abiinfot)" + +#: g10/g10.c:586 +msgid "" +"Syntax: gpg [options] [files]\n" +"sign, check, encrypt or decrypt\n" +"default operation depends on the input data\n" +msgstr "" +"Süntaks: gpg [võtmed] [failid]\n" +"allkirjasta, kontrolli, krüpti ja dekrüpti\n" +"vaikimisi operatsioon sõltub sisendandmetest\n" + +#: g10/g10.c:597 +msgid "" +"\n" +"Supported algorithms:\n" +msgstr "" +"\n" +"Toetatud algoritmid:\n" + +#: g10/g10.c:671 +msgid "usage: gpg [options] " +msgstr "kasuta: gpg [võtmed] " + +#: g10/g10.c:728 +msgid "conflicting commands\n" +msgstr "vastuolulised käsud\n" + +#: g10/g10.c:903 +#, c-format +msgid "NOTE: no default option file `%s'\n" +msgstr "MÄRKUS: vaikimisi võtmete fail `%s' puudub\n" + +#: g10/g10.c:907 +#, c-format +msgid "option file `%s': %s\n" +msgstr "võtmete fail `%s': %s\n" + +#: g10/g10.c:914 +#, c-format +msgid "reading options from `%s'\n" +msgstr "loen võtmeid failist `%s'\n" + +#: g10/g10.c:1197 +#, c-format +msgid "%s is not a valid character set\n" +msgstr "%s ei ole lubatud kooditabel\n" + +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "ei saa parsida võtmeserveri URI\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "exec-path väärtuseks ei õnnestu seada %s\n" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "HOIATUS: võtit %s ei soovitata kasutada.\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "palun kasutage selle asemel \"--keyserver-options %s\"\n" + +#: g10/g10.c:1347 +msgid "WARNING: program may create a core file!\n" +msgstr "HOIATUS: programm võib salvestada oma mälupildi!\n" + +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "HOIATUS: %s määrab üle %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 +#, c-format +msgid "NOTE: %s is not for normal use!\n" +msgstr "MÄRKUS: %s ei ole tavapäraseks kasutamiseks!\n" + +#: g10/g10.c:1360 g10/g10.c:1380 +#, c-format +msgid "%s not allowed with %s!\n" +msgstr "%s ja %s ei ole koos lubatud!\n" + +#: g10/g10.c:1363 +#, c-format +msgid "%s makes no sense with %s!\n" +msgstr "%s ja %s ei oma koos mõtet!\n" + +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" +"--pgp2 moodis saate luua ainult eraldiseisvaid või avateksti allkirju\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "--pgp2 moodis ei saa korraga allkirjastada ja krüpteerida\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "--pgp2 moodis peate kasutama faile (ja mitte toru).\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "teate krüpteerimine --pgp2 moodis nõuab IDEA ¨iffrit\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "see teade ei pruugi olla PGP 2.x programmidega kasutatav\n" + +#: g10/g10.c:1470 g10/g10.c:1482 +msgid "selected cipher algorithm is invalid\n" +msgstr "valitud ¨ifri algoritm ei ole lubatud\n" + +#: g10/g10.c:1476 g10/g10.c:1488 +msgid "selected digest algorithm is invalid\n" +msgstr "valitud lühendi algoritm ei ole lubatud\n" + +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "antud allkirja poliisi URL on vigane\n" + +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "antud sertifikaadi poliisi URL on vigane\n" + +#: g10/g10.c:1499 +#, c-format +msgid "compress algorithm must be in range %d..%d\n" +msgstr "pakkimise algoritm peab olema vahemikust %d..%d\n" + +#: g10/g10.c:1501 +msgid "completes-needed must be greater than 0\n" +msgstr "completes-needed peab olema suurem, kui 0\n" + +#: g10/g10.c:1503 +msgid "marginals-needed must be greater than 1\n" +msgstr "marginals-needed peab olema suurem, kui 1\n" + +#: g10/g10.c:1505 +msgid "max-cert-depth must be in range 1 to 255\n" +msgstr "max-cert-depth peab olema vahemikus 1 kuni 255\n" + +#: g10/g10.c:1508 +msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" +msgstr "MÄRKUS: lihtne S2K mood (0) ei soovitata kasutada\n" + +#: g10/g10.c:1512 +msgid "invalid S2K mode; must be 0, 1 or 3\n" +msgstr "vigane S2K mood; peab olema 0, 1 või 3\n" + +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "vigane vaikimisi kontrolli mood; peab olema 0, 1, 2 või 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "vigased eelistused\n" + +#: g10/g10.c:1613 +#, c-format +msgid "failed to initialize the TrustDB: %s\n" +msgstr "TrustDB initsialiseerimine ebaõnnestus: %s\n" + +#: g10/g10.c:1633 +msgid "--store [filename]" +msgstr "--store [failinimi]" + +#: g10/g10.c:1640 +msgid "--symmetric [filename]" +msgstr "--symmetric [failinimi]" + +#: g10/g10.c:1648 +msgid "--encrypt [filename]" +msgstr "--encrypt [failinimi]" + +#: g10/g10.c:1665 +msgid "--sign [filename]" +msgstr "--sign [failinimi]" + +#: g10/g10.c:1678 +msgid "--sign --encrypt [filename]" +msgstr "--sign --encrypt [failinimi]" + +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [failinimi]" + +#: g10/g10.c:1701 +msgid "--clearsign [filename]" +msgstr "--clearsign [failinimi]" + +#: g10/g10.c:1719 +msgid "--decrypt [filename]" +msgstr "--decrypt [failinimi]" + +#: g10/g10.c:1730 +msgid "--sign-key user-id" +msgstr "--sign-key kasutaja-id" + +#: g10/g10.c:1738 +msgid "--lsign-key user-id" +msgstr "--lsign-key kasutaja-id" + +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key kasutaja-id" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key kasutaja-id" + +#: g10/g10.c:1762 +msgid "--edit-key user-id [commands]" +msgstr "--edit-key kasutaja-id [käsud]" + +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 +#, c-format +msgid "can't open %s: %s\n" +msgstr "%s ei õnnestu avada: %s\n" + +#: g10/g10.c:1833 +msgid "-k[v][v][v][c] [user-id] [keyring]" +msgstr "-k[v][v][v][c] [kasutaja-id] [võtmehoidla]" + +#: g10/g10.c:1916 +#, c-format +msgid "dearmoring failed: %s\n" +msgstr "lahtipakendamine ebaõnnestus: %s\n" + +#: g10/g10.c:1924 +#, c-format +msgid "enarmoring failed: %s\n" +msgstr "pakendamine ebaõnnestus: %s\n" + +#: g10/g10.c:2011 +#, c-format +msgid "invalid hash algorithm `%s'\n" +msgstr "vigane teatelühendi algoritm `%s'\n" + +#: g10/g10.c:2097 +msgid "[filename]" +msgstr "[failinimi]" + +#: g10/g10.c:2101 +msgid "Go ahead and type your message ...\n" +msgstr "Kirjutage nüüd oma teade ...\n" + +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 +#, c-format +msgid "can't open `%s'\n" +msgstr "`%s' ei õnnestu avada\n" + +#: g10/g10.c:2313 +msgid "" +"the first character of a notation name must be a letter or an underscore\n" +msgstr "esimene sümbol noteerimise nimes peab olema täht või alakriips\n" + +#: g10/g10.c:2319 +msgid "" +"a notation name must have only letters, digits, dots or underscores and end " +"with an '='\n" +msgstr "" +"noteerimise nimes võivad olla ainult tähed, numbrid, punktid ja alakriipsud\n" +"ning lõpus peab olema '='\n" + +#: g10/g10.c:2325 +msgid "dots in a notation name must be surrounded by other characters\n" +msgstr "" +"punktid noteerimise nimes peavad olema ümbritsetud teiste sümbolitega\n" + +#: g10/g10.c:2333 +msgid "a notation value must not use any control characters\n" +msgstr "noteerimise väärtus ei või sisaldada kontroll sümboleid\n" + +#: g10/armor.c:314 +#, c-format +msgid "armor: %s\n" +msgstr "pakend: %s\n" + +#: g10/armor.c:343 +msgid "invalid armor header: " +msgstr "vigane pakendi päis: " + +#: g10/armor.c:350 +msgid "armor header: " +msgstr "pakendi päis: " + +#: g10/armor.c:361 +msgid "invalid clearsig header\n" +msgstr "vigane avateksti allkirja päis\n" + +#: g10/armor.c:413 +msgid "nested clear text signatures\n" +msgstr "avateksti allkirjad üksteise sees\n" + +#: g10/armor.c:537 +msgid "invalid dash escaped line: " +msgstr "vigane kriipsudega märgitud rida: " + +#: g10/armor.c:549 +msgid "unexpected armor:" +msgstr "ootamatu pakend:" + +#: g10/armor.c:675 g10/armor.c:1242 +#, c-format +msgid "invalid radix64 character %02x skipped\n" +msgstr "vigane radix64 sümbol %02x vahele jäetud\n" + +#: g10/armor.c:718 +msgid "premature eof (no CRC)\n" +msgstr "enneaegne faililõpp (puudub CRC)\n" + +#: g10/armor.c:752 +msgid "premature eof (in CRC)\n" +msgstr "enneaegne faililõpp (poolik CRC)\n" + +#: g10/armor.c:756 +msgid "malformed CRC\n" +msgstr "vigane CRC\n" + +#: g10/armor.c:760 g10/armor.c:1279 +#, c-format +msgid "CRC error; %06lx - %06lx\n" +msgstr "CRC viga; %06lx - %06lx\n" + +#: g10/armor.c:780 +msgid "premature eof (in Trailer)\n" +msgstr "enneaegne faililõpp (lõpetaval real)\n" + +#: g10/armor.c:784 +msgid "error in trailer line\n" +msgstr "viga lõpetaval real\n" + +#: g10/armor.c:1057 +msgid "no valid OpenPGP data found.\n" +msgstr "ei leia OpenPGP andmeid.\n" + +#: g10/armor.c:1062 +#, c-format +msgid "invalid armor: line longer than %d characters\n" +msgstr "vigane pakend: rida on pikem, kui %d sümbolit\n" + +#: g10/armor.c:1066 +msgid "" +"quoted printable character in armor - probably a buggy MTA has been used\n" +msgstr "" +"kvooditud sümbol pakendis - tõenäoliselt on kasutatud vigast MTA programmi\n" + +#: g10/pkclist.c:61 +msgid "No reason specified" +msgstr "Põhjus puudub" + +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "Võti on asendatud" + +#: g10/pkclist.c:65 +msgid "Key has been compromised" +msgstr "Võti on kompromiteeritud" + +#: g10/pkclist.c:67 +msgid "Key is no longer used" +msgstr "Võti ei ole enam kasutusel" + +#: g10/pkclist.c:69 +msgid "User ID is no longer valid" +msgstr "Kasutaja ID ei ole enam kehtiv" + +#: g10/pkclist.c:73 +msgid "Reason for revocation: " +msgstr "Tühistamise põhjus: " + +#: g10/pkclist.c:90 +msgid "Revocation comment: " +msgstr "Tühistamise kommentaar: " + +#. a string with valid answers +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iItTvVjJ" + +#: g10/pkclist.c:258 +#, c-format +msgid "" +"No trust value assigned to:\n" +"%4u%c/%08lX %s \"" +msgstr "" +"Usalduse väärtus puudub:\n" +"%4u%c/%08lX %s \"" + +#: g10/pkclist.c:270 +msgid "" +"Please decide how far you trust this user to correctly\n" +"verify other users' keys (by looking at passports,\n" +"checking fingerprints from different sources...)?\n" +"\n" +msgstr "" +"Palun otsustage, kuivõrd te usaldate seda kasutajat\n" +"teiste kasutajate võtmete kontrollimisel (kontrollige\n" +"passe, kontrollige erinevatest allikatest näpujälgi...)?\n" +"\n" + +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = Ei tea\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = EI usalda\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Usaldan vähesel määral\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Usaldan täiesti\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Usaldan absoluutselt\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = esita palun täiendavat infot\n" + +#: g10/pkclist.c:281 +msgid " m = back to the main menu\n" +msgstr " t = tagasi põhimenüüsse\n" + +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " j = jäta see võti vahele\n" + +#: g10/pkclist.c:285 +msgid " q = quit\n" +msgstr " v = välju\n" + +#: g10/pkclist.c:292 +msgid "Your decision? " +msgstr "Teie otsus? " + +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Kas te tõesti soovite seda võtit absoluutselt usaldada? " + +#: g10/pkclist.c:325 +msgid "Certificates leading to an ultimately trusted key:\n" +msgstr "Sertifikaadid täiesti usaldatava võtmeni:\n" + +#: g10/pkclist.c:399 +#, c-format +msgid "key %08lX: key has been revoked!\n" +msgstr "võti %08lX: võti on tühistatud!\n" + +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 +msgid "Use this key anyway? " +msgstr "Kasutan seda võtit ikka? " + +#: g10/pkclist.c:411 +#, c-format +msgid "key %08lX: subkey has been revoked!\n" +msgstr "võti %08lX: alamvõti on tühistatud!\n" + +#: g10/pkclist.c:432 +#, c-format +msgid "%08lX: key has expired\n" +msgstr "%08lX: võti on aegunud\n" + +#: g10/pkclist.c:442 +#, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "%08lX: Ei ole midagi, mis näitaks, et see võti kuulub omanikule\n" + +#: g10/pkclist.c:448 +#, c-format +msgid "%08lX: We do NOT trust this key\n" +msgstr "%08lX: Me EI usalda seda võtit\n" + +#: g10/pkclist.c:454 +#, c-format +msgid "" +"%08lX: It is not sure that this key really belongs to the owner\n" +"but it is accepted anyway\n" +msgstr "" +"%08lX: Ei ole kindel, et see võti tõesti kuulub omanikule,\n" +"aktsepteerime seda siiski\n" + +#: g10/pkclist.c:460 +msgid "This key probably belongs to the owner\n" +msgstr "See võti kuulub tõenäoliselt omanikule\n" + +#: g10/pkclist.c:465 +msgid "This key belongs to us\n" +msgstr "See võti kuulub meile\n" + +#: g10/pkclist.c:507 +msgid "" +"It is NOT certain that the key belongs to its owner.\n" +"If you *really* know what you are doing, you may answer\n" +"the next question with yes\n" +"\n" +msgstr "" +"EI ole kindel, et see võti kuulub tema omanikule.\n" +"Kui te *tõesti* teate, mida te teete, võite järgnevale\n" +"küsimusele vastata jaatavalt\n" +"\n" + +#: g10/pkclist.c:521 g10/pkclist.c:543 +msgid "WARNING: Using untrusted key!\n" +msgstr "HOIATUS: Kasutan mitteusaldatavat võtit!\n" + +#: g10/pkclist.c:562 +msgid "WARNING: This key has been revoked by its owner!\n" +msgstr "HOIATUS: See võti on omaniku poolt tühistatud!\n" + +#: g10/pkclist.c:563 +msgid " This could mean that the signature is forgery.\n" +msgstr " See võib tähendada, et allkiri on võltsing.\n" + +#: g10/pkclist.c:569 +msgid "WARNING: This subkey has been revoked by its owner!\n" +msgstr "HOIATUS: See alamvõti on omaniku poolt tühistatud!\n" + +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Märkus: See võti on blokeeritud.\n" + +#: g10/pkclist.c:579 +msgid "Note: This key has expired!\n" +msgstr "Märkus: See võti on aegunud!\n" + +#: g10/pkclist.c:590 +msgid "WARNING: This key is not certified with a trusted signature!\n" +msgstr "HOIATUS: Seda võtit ei ole sertifitseeritud usaldatava allkirjaga!\n" + +#: g10/pkclist.c:592 +msgid "" +" There is no indication that the signature belongs to the owner.\n" +msgstr " Ei ole midagi, mis näitaks, et allkiri kuulub omanikule.\n" + +#: g10/pkclist.c:600 +msgid "WARNING: We do NOT trust this key!\n" +msgstr "HOIATUS: Me EI usalda seda võtit!\n" + +#: g10/pkclist.c:601 +msgid " The signature is probably a FORGERY.\n" +msgstr " Allkiri on tõenäoliselt VÕLTSING.\n" + +#: g10/pkclist.c:609 +msgid "" +"WARNING: This key is not certified with sufficiently trusted signatures!\n" +msgstr "" +"HOIATUS: Seda võtit ei ole sertifitseeritud piisavalt usaldatava " +"allkirjaga!\n" + +#: g10/pkclist.c:611 +msgid " It is not certain that the signature belongs to the owner.\n" +msgstr " Ei ole kindel, et allkiri kuulub omanikule.\n" + +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 +#, c-format +msgid "%s: skipped: %s\n" +msgstr "%s: jätsin vahele: %s\n" + +#: g10/pkclist.c:723 g10/pkclist.c:911 +#, c-format +msgid "%s: skipped: public key already present\n" +msgstr "%s: jätsin vahele: avalik võti on juba olemas\n" + +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "Te ei määranud kasutaja IDd. (võite kasutada võtit \"-r\")\n" + +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" +"\n" +"Sisestage kasutaja ID. Lõpetage tühja reaga: " + +#: g10/pkclist.c:776 +msgid "No such user ID.\n" +msgstr "Tundmatu kasutaja ID.\n" + +#: g10/pkclist.c:781 g10/pkclist.c:857 +msgid "skipped: public key already set as default recipient\n" +msgstr "jätsin vahele: avalik võti on juba vaikimisi saaja\n" + +#: g10/pkclist.c:799 +msgid "Public key is disabled.\n" +msgstr "Avalik võti on blokeeritud.\n" + +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "jätsin vahele: avalik võti on juba olemas\n" + +#: g10/pkclist.c:849 +#, c-format +msgid "unknown default recipient `%s'\n" +msgstr "tundmatu vaikimisi saaja `%s'\n" + +#: g10/pkclist.c:893 +#, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: jätsin vahele: avalik võti on blokeeritud\n" + +#: g10/pkclist.c:943 +msgid "no valid addressees\n" +msgstr "kehtivaid aadresse pole\n" + +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "eelistus %c%lu ei ole lubatud\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "eelistus %c%lu on duplikaat\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "liiga palju `%c' eelistusi\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "lubamatu sümbol eelistuste sõnes\n" + +#: g10/keygen.c:399 +msgid "writing self signature\n" +msgstr "kirjutan iseenda allkirja\n" + +#: g10/keygen.c:443 +msgid "writing key binding signature\n" +msgstr "kirjutan võtit siduva allkirja\n" + +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format +msgid "keysize invalid; using %u bits\n" +msgstr "vigane võtme suurus; kasutan %u bitti\n" + +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format +msgid "keysize rounded up to %u bits\n" +msgstr "võtme suurus ümardatud üles %u bitini\n" + +#: g10/keygen.c:777 +msgid "Please select what kind of key you want:\n" +msgstr "Palun valige, millist võtmetüüpi te soovite:\n" + +#: g10/keygen.c:779 +#, c-format +msgid " (%d) DSA and ElGamal (default)\n" +msgstr " (%d) DSA ja ElGamal (vaikimisi)\n" + +#: g10/keygen.c:780 +#, c-format +msgid " (%d) DSA (sign only)\n" +msgstr " (%d) DSA (ainult allkirjastamiseks)\n" + +#: g10/keygen.c:782 +#, c-format +msgid " (%d) ElGamal (encrypt only)\n" +msgstr " (%d) ElGamal (ainult krüptimiseks)\n" + +#: g10/keygen.c:783 +#, c-format +msgid " (%d) ElGamal (sign and encrypt)\n" +msgstr " (%d) ElGamal (allkirjastamiseks ja krüptimiseks)\n" + +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (ainult allkirjastamiseks)\n" + +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (ainult krüpteerimiseks)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 +msgid "Your selection? " +msgstr "Teie valik? " + +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "Selle algoritmi kasutamine ei ole soovitatav - loon ikkagi? " + +#: g10/keyedit.c:529 g10/keygen.c:823 +msgid "Invalid selection.\n" +msgstr "Vigane valik.\n" + +#: g10/keygen.c:836 +#, c-format +msgid "" +"About to generate a new %s keypair.\n" +" minimum keysize is 768 bits\n" +" default keysize is 1024 bits\n" +" highest suggested keysize is 2048 bits\n" +msgstr "" +"Enne uue %s võtmepaari genereerimist.\n" +" minimaalne võtmepikkus on 768 bitti\n" +" vaikimisi võtmepikkus on 1024 bitti\n" +" suurim soovitatav võtmepikkus on 2048 bitti\n" + +#: g10/keygen.c:845 +msgid "What keysize do you want? (1024) " +msgstr "Millist võtmepikkust te soovite? (1024) " + +#: g10/keygen.c:850 +msgid "DSA only allows keysizes from 512 to 1024\n" +msgstr "DSA lubab võtmepikkuseid ainult vahemikus 512 kuni 1024\n" + +#: g10/keygen.c:852 +msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "võtmepikkus on liiga väike; RSA korral on väikseim väärtus 1024.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "võtmepikkus on liiga väike; väikseim lubatud väärtus on 768.\n" + +#. It is ridiculous and an annoyance to use larger key sizes! +#. * GnuPG can handle much larger sizes; but it takes an eternity +#. * to create such a key (but less than the time the Sirius +#. * Computer Corporation needs to process one of the usual +#. * complaints) and {de,en}cryption although needs some time. +#. * So, before you complain about this limitation, I suggest that +#. * you start a discussion with Marvin about this theme and then +#. * do whatever you want. +#: g10/keygen.c:866 +#, c-format +msgid "keysize too large; %d is largest value allowed.\n" +msgstr "võtmepikkus on liiga suur; suurim lubatud väärtus on %d.\n" + +#: g10/keygen.c:871 +msgid "" +"Keysizes larger than 2048 are not suggested because\n" +"computations take REALLY long!\n" +msgstr "" +"Suuremad võtmepikkused kui 2048 ei ole soovitatavad, kuna\n" +"arvutused võtavad VÄGA palju aega!\n" + +#: g10/keygen.c:874 +msgid "Are you sure that you want this keysize? " +msgstr "Olete kindel, et soovite sellist võtmepikkust? " + +#: g10/keygen.c:875 +msgid "" +"Okay, but keep in mind that your monitor and keyboard radiation is also very " +"vulnerable to attacks!\n" +msgstr "" +"Olgu, kuid pidage meeles, et ka teie monitor ja klaviatuur on samuti\n" +"võimalikud ründeobjektid!\n" + +#: g10/keygen.c:884 +#, c-format +msgid "Requested keysize is %u bits\n" +msgstr "Soovitud võtmepikkus on %u bitti\n" + +#: g10/keygen.c:887 g10/keygen.c:891 +#, c-format +msgid "rounded up to %u bits\n" +msgstr "ümardatud üles %u bitini\n" + +#: g10/keygen.c:942 +msgid "" +"Please specify how long the key should be valid.\n" +" 0 = key does not expire\n" +" = key expires in n days\n" +" w = key expires in n weeks\n" +" m = key expires in n months\n" +" y = key expires in n years\n" +msgstr "" +"Palun määrake, kui kaua on võti kehtiv.\n" +" 0 = võti ei aegu\n" +" = võti aegub n päevaga\n" +" w = võti aegub n nädalaga\n" +" m = võti aegub n kuuga\n" +" y = võti aegub n aastaga\n" + +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Palun määrake, kui kaua allkiri kehtib.\n" +" 0 = allkiri ei aegu\n" +" = allkiri aegub n päevaga\n" +" w = allkiri aegub n nädalaga\n" +" m = allkiri aegub n kuuga\n" +" y = allkiri aegub n aastaga\n" + +#: g10/keygen.c:973 +msgid "Key is valid for? (0) " +msgstr "Võti on kehtiv kuni? (0) " + +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Allkiri on kehtiv kuni? (0) " + +#: g10/keygen.c:980 +msgid "invalid value\n" +msgstr "vigane väärtus\n" + +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s ei aegu kunagi\n" + +#. print the date when the key expires +#: g10/keygen.c:992 +#, c-format +msgid "%s expires at %s\n" +msgstr "%s aegub %s\n" + +#: g10/keygen.c:998 +msgid "" +"Your system can't display dates beyond 2038.\n" +"However, it will be correctly handled up to 2106.\n" +msgstr "" +"Teie süsteem ei saa esitada kuupäevi peale aastat 2038.\n" +"Siiski käsitletakse neid korrektselt aastani 2106.\n" + +#: g10/keygen.c:1003 +msgid "Is this correct (y/n)? " +msgstr "On see õige (j/e)? " + +#: g10/keygen.c:1046 +msgid "" +"\n" +"You need a User-ID to identify your key; the software constructs the user " +"id\n" +"from Real Name, Comment and Email Address in this form:\n" +" \"Heinrich Heine (Der Dichter) \"\n" +"\n" +msgstr "" +"\n" +"Võtme identifitseerimiseks on vaja määrata kasutaja; tarkvara konstrueerib\n" +"kasutaja id kasutades pärisnime, kommentaari ja e-posti aadressi kujul:\n" +" \"Heinrich Heine (Der Dichter) \"\n" +"\n" + +#: g10/keygen.c:1058 +msgid "Real name: " +msgstr "Pärisnimi: " + +#: g10/keygen.c:1066 +msgid "Invalid character in name\n" +msgstr "Lubamatu sümbol nimes\n" + +#: g10/keygen.c:1068 +msgid "Name may not start with a digit\n" +msgstr "Nimi ei või alata numbriga\n" + +#: g10/keygen.c:1070 +msgid "Name must be at least 5 characters long\n" +msgstr "Nimes peab olema vähemalt 5 sümbolit\n" + +#: g10/keygen.c:1078 +msgid "Email address: " +msgstr "E-posti aadress: " + +#: g10/keygen.c:1089 +msgid "Not a valid email address\n" +msgstr "Selline e-posti aadress ei ole lubatud\n" + +#: g10/keygen.c:1097 +msgid "Comment: " +msgstr "Kommentaar: " + +#: g10/keygen.c:1103 +msgid "Invalid character in comment\n" +msgstr "Lubamatu sümbol kommentaaris\n" + +#: g10/keygen.c:1126 +#, c-format +msgid "You are using the `%s' character set.\n" +msgstr "Te kasutate kooditabelit `%s'.\n" + +#: g10/keygen.c:1132 +#, c-format +msgid "" +"You selected this USER-ID:\n" +" \"%s\"\n" +"\n" +msgstr "" +"Te valisite selle KASUTAJA-ID:\n" +" \"%s\"\n" +"\n" + +#: g10/keygen.c:1136 +msgid "Please don't put the email address into the real name or the comment\n" +msgstr "Ärge palun kirjutage e-posti aadressi pärisnimesse ega kommentaari\n" + +#: g10/keygen.c:1141 +msgid "NnCcEeOoQq" +msgstr "NnKkEeOoVv" + +#: g10/keygen.c:1151 +msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " +msgstr "Muuda (N)ime, (K)ommentaari, (E)posti või (V)älju? " + +#: g10/keygen.c:1152 +msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " +msgstr "Muuda (N)ime, (K)ommentaari, (E)posti või (O)k/(V)älju? " + +#: g10/keygen.c:1171 +msgid "Please correct the error first\n" +msgstr "Palun parandage kõigepealt viga\n" + +#: g10/keygen.c:1210 +msgid "" +"You need a Passphrase to protect your secret key.\n" +"\n" +msgstr "" +"Te vajate oma salajase võtme kaitsmiseks parooli.\n" +"\n" + +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "parooli ei korratud õieti; proovige uuesti" + +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"I will do it anyway. You can change your passphrase at any time,\n" +"using this program with the option \"--edit-key\".\n" +"\n" +msgstr "" +"Te ei soovi parooli - see on tõenäoliselt *halb* idee!\n" +"Ma siiski täidan teie soovi. Te saate oma parooli alati muuta,\n" +"kasutades seda programmi võtmega \"--edit-key\".\n" +"\n" + +#: g10/keygen.c:1246 +msgid "" +"We need to generate a lot of random bytes. It is a good idea to perform\n" +"some other action (type on the keyboard, move the mouse, utilize the\n" +"disks) during the prime generation; this gives the random number\n" +"generator a better chance to gain enough entropy.\n" +msgstr "" +"Me peame genereerima palju juhuslikke baite. Praegu oleks hea teostada\n" +"arvutil mingeid teisi tegevusi (kirjutada klaviatuuril, liigutada hiirt,\n" +"kasutada kettaid jne), see annaks juhuarvude generaatorile võimaluse\n" +"koguda paremat entroopiat.\n" + +#: g10/keygen.c:1741 +msgid "DSA keypair will have 1024 bits.\n" +msgstr "DSA võtmepaari pikkuseks saab 1024 bitti.\n" + +#: g10/keygen.c:1795 +msgid "Key generation canceled.\n" +msgstr "Võtme genereerimine katkestati.\n" + +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format +msgid "writing public key to `%s'\n" +msgstr "kirjutan avaliku võtme faili `%s'\n" + +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format +msgid "writing secret key to `%s'\n" +msgstr "kirjutan salajase võtme faili `%s'\n" + +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "kirjutatavat avalike võtmete hoidlat pole: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "kirjutatavat salajaste võtmete hoidlat pole: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "viga avaliku võtme võtmehoidlasse `%s' kirjutamisel: %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "viga salajase võtme võtmehoidlasse `%s' kirjutamisel: %s\n" + +#: g10/keygen.c:1999 +msgid "public and secret key created and signed.\n" +msgstr "avalik ja salajane võti on loodud ja allkirjastatud.\n" + +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "võti on märgitud abslouutselt usaldatuks.\n" + +#: g10/keygen.c:2011 +msgid "" +"Note that this key cannot be used for encryption. You may want to use\n" +"the command \"--edit-key\" to generate a secondary key for this purpose.\n" +msgstr "" +"Pidage silmas, et seda võtit ei saa kasutada krüptimiseks. \n" +"Krüptimiseks tuleb genereerida teine võti, seda saate teha\n" +"kasutades võtit \"--edit-key\".\n" + +#: g10/keygen.c:2023 g10/keygen.c:2131 +#, c-format +msgid "Key generation failed: %s\n" +msgstr "Võtme genereerimine ebaõnnestus: %s\n" + +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 +#, c-format +msgid "" +"key has been created %lu second in future (time warp or clock problem)\n" +msgstr "võti loodi %lu sekund tulevikus (ajahüpe või kella probleem)\n" + +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 +#, c-format +msgid "" +"key has been created %lu seconds in future (time warp or clock problem)\n" +msgstr "võti loodi %lu sekundit tulevikus (ajahüpe või kella probleem)\n" + +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "MÄRKUS: v3 võtmetele alamvõtmete loomine ei ole OpenPGP ühilduv\n" + +#: g10/keygen.c:2107 +msgid "Really create? " +msgstr "Loon tõesti? " + +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "võti --output ei tööta selle käsuga\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' on juba pakitud\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 +#, c-format +msgid "%s: can't open: %s\n" +msgstr "%s: ei õnnestu avada: %s\n" + +#: g10/encode.c:122 g10/sign.c:959 +#, c-format +msgid "error creating passphrase: %s\n" +msgstr "viga parooli loomisel: %s\n" + +#: g10/encode.c:185 g10/encode.c:383 +#, c-format +msgid "%s: WARNING: empty file\n" +msgstr "%s: HOIATUS: tühi fail\n" + +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"RSA võtmeid pikkusega kuni 2048 bitti saab krüpteerida ainult --pgp2 moodis\n" + +#: g10/encode.c:313 +#, c-format +msgid "reading from `%s'\n" +msgstr "loen failist `%s'\n" + +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "kõikide krüpteeritavate võtmetega ei saa IDEA ¨iffrit kasutada.\n" + +#: g10/encode.c:563 +#, c-format +msgid "%s/%s encrypted for: %s\n" +msgstr "%s/%s krüptitud kasutajale: %s\n" + +#: g10/delkey.c:69 g10/export.c:141 +#, c-format +msgid "key `%s' not found: %s\n" +msgstr "võtit '%s' ei leitud: %s\n" + +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "viga võtmebloki lugemisel: %s\n" + +#: g10/export.c:169 +#, c-format +msgid "key %08lX: not a rfc2440 key - skipped\n" +msgstr "võti %08lX: ei ole rfc2440 võti - jätsin vahele\n" + +#: g10/export.c:180 +#, c-format +msgid "key %08lX: not protected - skipped\n" +msgstr "võti %08lX: ei ole kaitstud - jätsin vahele\n" + +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "võti %08lX: PGP 2.x stiilis võti - jätsin vahele\n" + +#: g10/export.c:255 +msgid "WARNING: nothing exported\n" +msgstr "HOIATUS: midagi ei eksporditud\n" + +#: g10/getkey.c:151 +msgid "too many entries in pk cache - disabled\n" +msgstr "avalike võtmete puhvris on liiga palju võtmeid - blokeerin\n" + +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[Kasutaja id puudub]" + +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" +"Vigane võti %08lX muudeti kehtivaks võtme --allow-non-selfsigned-uid " +"kasutamisega\n" + +#: g10/getkey.c:1989 +#, c-format +msgid "using secondary key %08lX instead of primary key %08lX\n" +msgstr "kasutan sekundaarset võtit %08lX primaarse võtme %08lX asemel\n" + +#: g10/getkey.c:2036 +#, c-format +msgid "key %08lX: secret key without public key - skipped\n" +msgstr "võti %08lX: salajane võti avaliku võtmeta - jätsin vahele\n" + +#: g10/import.c:206 +#, c-format +msgid "skipping block of type %d\n" +msgstr "jätan bloki tüübiga %d vahele\n" + +#: g10/import.c:213 +#, c-format +msgid "%lu keys so far processed\n" +msgstr "%lu võtit on seni töödeldud\n" + +#: g10/import.c:218 +#, c-format +msgid "error reading `%s': %s\n" +msgstr "viga `%s' lugemisel: %s\n" + +#: g10/import.c:230 +#, c-format +msgid "Total number processed: %lu\n" +msgstr "Töödeldud kokku: %lu\n" + +#: g10/import.c:232 +#, c-format +msgid " skipped new keys: %lu\n" +msgstr " vahele jäetud uusi võtmeid: %lu\n" + +#: g10/import.c:235 +#, c-format +msgid " w/o user IDs: %lu\n" +msgstr " puudub kasutaja ID: %lu\n" + +#: g10/import.c:237 +#, c-format +msgid " imported: %lu" +msgstr " imporditud: %lu" + +#: g10/import.c:243 +#, c-format +msgid " unchanged: %lu\n" +msgstr " muutmata: %lu\n" + +#: g10/import.c:245 +#, c-format +msgid " new user IDs: %lu\n" +msgstr " uusi kasutajaid: %lu\n" + +#: g10/import.c:247 +#, c-format +msgid " new subkeys: %lu\n" +msgstr " uusi alamvõtmeid: %lu\n" + +#: g10/import.c:249 +#, c-format +msgid " new signatures: %lu\n" +msgstr " uusi allkirju: %lu\n" + +#: g10/import.c:251 +#, c-format +msgid " new key revocations: %lu\n" +msgstr " uusi tühistamisi: %lu\n" + +#: g10/import.c:253 +#, c-format +msgid " secret keys read: %lu\n" +msgstr " loetud salajasi võtmeid: %lu\n" + +#: g10/import.c:255 +#, c-format +msgid " secret keys imported: %lu\n" +msgstr " salajasi võtmeid imporditud: %lu\n" + +#: g10/import.c:257 +#, c-format +msgid " secret keys unchanged: %lu\n" +msgstr " muutmata salajasi võtmeid: %lu\n" + +#: g10/import.c:438 g10/import.c:657 +#, c-format +msgid "key %08lX: no user ID\n" +msgstr "võti %08lX: kasutaja ID puudub\n" + +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "" +"võti %08lX: aktsepteerisin iseenda poolt allakirjutamata kasutaja ID '%s'\n" + +#: g10/import.c:462 +#, c-format +msgid "key %08lX: no valid user IDs\n" +msgstr "võti %08lX: puudub kehtiv kasutaja ID\n" + +#: g10/import.c:464 +msgid "this may be caused by a missing self-signature\n" +msgstr "see võib olla põhjustatud puuduvast iseenda allkirjast\n" + +#: g10/import.c:474 g10/import.c:726 +#, c-format +msgid "key %08lX: public key not found: %s\n" +msgstr "võti %08lX: avalikku võtit ei leitud: %s\n" + +#: g10/import.c:479 +#, c-format +msgid "key %08lX: new key - skipped\n" +msgstr "võti %08lX: uus võti - jätsin vahele\n" + +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "ei leia kirjutatavat võtmehoidlat: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 +#, c-format +msgid "writing to `%s'\n" +msgstr "kirjutan faili `%s'\n" + +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "viga võtmehoidlasse `%s' kirjutamisel: %s\n" + +#: g10/import.c:505 +#, c-format +msgid "key %08lX: public key imported\n" +msgstr "võti %08lX: avalik võti on imporditud\n" + +#: g10/import.c:524 +#, c-format +msgid "key %08lX: doesn't match our copy\n" +msgstr "võti %08lX: ei sobi meie koopiaga\n" + +#: g10/import.c:542 g10/import.c:743 +#, c-format +msgid "key %08lX: can't locate original keyblock: %s\n" +msgstr "võti %08lX: ei leia algset võtmeblokki: %s\n" + +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "võti %08lX: ei õnnestu lugeda algset võtmeblokki: %s\n" + +#: g10/import.c:579 +#, c-format +msgid "key %08lX: 1 new user ID\n" +msgstr "võti %08lX: 1 uus kasutaja ID\n" + +#: g10/import.c:582 +#, c-format +msgid "key %08lX: %d new user IDs\n" +msgstr "võti %08lX: %d uut kasutaja IDd\n" + +#: g10/import.c:585 +#, c-format +msgid "key %08lX: 1 new signature\n" +msgstr "võti %08lX: 1 uus allkiri\n" + +#: g10/import.c:588 +#, c-format +msgid "key %08lX: %d new signatures\n" +msgstr "võti %08lX: %d uut allkirja\n" + +#: g10/import.c:591 +#, c-format +msgid "key %08lX: 1 new subkey\n" +msgstr "võti %08lX: 1 uus alamvõti\n" + +#: g10/import.c:594 +#, c-format +msgid "key %08lX: %d new subkeys\n" +msgstr "võti %08lX: %d uut alamvõtit\n" + +#: g10/import.c:604 +#, c-format +msgid "key %08lX: not changed\n" +msgstr "võti %08lX: ei muudetud\n" + +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "puudub salajaste võtmete vaikimisi võtmehoidla: %s\n" + +#: g10/import.c:682 +#, c-format +msgid "key %08lX: secret key imported\n" +msgstr "võti %08lX: salajane võti on imporditud\n" + +#. we can't merge secret keys +#: g10/import.c:686 +#, c-format +msgid "key %08lX: already in secret keyring\n" +msgstr "võti %08lX: on juba salajaste võtmete hoidlas\n" + +#: g10/import.c:691 +#, c-format +msgid "key %08lX: secret key not found: %s\n" +msgstr "võti %08lX: salajast võtit ei leitud: %s\n" + +#: g10/import.c:720 +#, c-format +msgid "key %08lX: no public key - can't apply revocation certificate\n" +msgstr "" +"võti %08lX: avalik võti puudub - tühistamise sertifikaati ei saa rakendada\n" + +#: g10/import.c:760 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - rejected\n" +msgstr "võti %08lX: vigane tühistamise sertifikaat: %s - lükkasin tagasi\n" + +#: g10/import.c:791 +#, c-format +msgid "key %08lX: revocation certificate imported\n" +msgstr "võti %08lX: tühistamise sertifikaat imporditud\n" + +#: g10/import.c:826 +#, c-format +msgid "key %08lX: no user ID for signature\n" +msgstr "võti %08lX: allkirjal puudub kasutaja ID\n" + +#: g10/import.c:839 +#, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "võti %08lX: mittetoetatud avaliku võtme algoritm kasutajaga \"%s\"\n" + +#: g10/import.c:841 +#, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "võti %08lX: kasutajal \"%s\" on vigane iseenda allkiri\n" + +#: g10/import.c:858 +#, c-format +msgid "key %08lX: no subkey for key binding\n" +msgstr "võti %08lX: võtmeseosel puudub alamvõti\n" + +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "võti %08lX: mittetoetatud avaliku võtme algoritm\n" + +#: g10/import.c:869 +#, c-format +msgid "key %08lX: invalid subkey binding\n" +msgstr "võti %08lX: vigane alamvõtme seos\n" + +#: g10/import.c:899 +#, c-format +msgid "key %08lX: skipped user ID '" +msgstr "võti %08lX: jätsin vahele kasutaja ID '" + +#: g10/import.c:922 +#, c-format +msgid "key %08lX: skipped subkey\n" +msgstr "võti %08lX: jätsin alamvõtme vahele\n" + +#. here we violate the rfc a bit by still allowing +#. * to import non-exportable signature when we have the +#. * the secret key used to create this signature - it +#. * seems that this makes sense +#: g10/import.c:945 +#, c-format +msgid "key %08lX: non exportable signature (class %02x) - skipped\n" +msgstr "võti %08lX: mitte eksporditav allkiri (klass %02x) - jätan vahele\n" + +#: g10/import.c:954 +#, c-format +msgid "key %08lX: revocation certificate at wrong place - skipped\n" +msgstr "võti %08lX: tühistamise sertifikaat on vales kohas - jätan vahele\n" + +#: g10/import.c:971 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - skipped\n" +msgstr "võti %08lX: vigane tühistamise sertifikaat: %s - jätan vahele\n" + +#: g10/import.c:1072 +#, c-format +msgid "key %08lX: duplicated user ID detected - merged\n" +msgstr "võti %08lX: tuvastasin dubleeritud kasutaja ID - mestisin\n" + +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"Hoiatus: võti %08lX võib olla tühistatud: laen tühistamise võtit %08lX\n" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" +"Hoiatus: võti %08lX võib olla tühistatud: tühistamise võtit %08lX pole.\n" + +#: g10/import.c:1201 +#, c-format +msgid "key %08lX: revocation certificate added\n" +msgstr "võti %08lX: tühistamise sertifikaat lisatud\n" + +#: g10/import.c:1231 +#, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "võti %08lX: lisatud vahetu võtme allkiri\n" + +#: g10/keyedit.c:142 +msgid "[revocation]" +msgstr "[tühistamine]" + +#: g10/keyedit.c:143 +msgid "[self-signature]" +msgstr "[iseenda allkiri]" + +#: g10/keyedit.c:214 g10/keylist.c:139 +msgid "1 bad signature\n" +msgstr "1 halb allkiri\n" + +#: g10/keyedit.c:216 g10/keylist.c:141 +#, c-format +msgid "%d bad signatures\n" +msgstr "%d halba allkirja\n" + +#: g10/keyedit.c:218 g10/keylist.c:143 +msgid "1 signature not checked due to a missing key\n" +msgstr "1 allkiri jäi testimata, kuna võti puudub\n" + +#: g10/keyedit.c:220 g10/keylist.c:145 +#, c-format +msgid "%d signatures not checked due to missing keys\n" +msgstr "%d allkirja jäi testimata, kuna võtmed puuduvad\n" + +#: g10/keyedit.c:222 g10/keylist.c:147 +msgid "1 signature not checked due to an error\n" +msgstr "1 allkiri jäi vea tõttu kontrollimata\n" + +#: g10/keyedit.c:224 g10/keylist.c:149 +#, c-format +msgid "%d signatures not checked due to errors\n" +msgstr "%d allkirja jäi vigade tõttu kontrollimata\n" + +#: g10/keyedit.c:226 +msgid "1 user ID without valid self-signature detected\n" +msgstr "tuvastasin ühe kehtiva iseenda allkirjata kasutaja ID\n" + +#: g10/keyedit.c:228 +#, c-format +msgid "%d user IDs without valid self-signatures detected\n" +msgstr "tuvastasin %d kehtiva iseenda allkirjata kasutaja IDd\n" + +#: g10/keyedit.c:335 +#, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Kasutaja ID \"%s\" on tühistatud." + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Olete kindel, et soovite seda ikka allkirjastada? (j/e) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr " Ei saa allkirjastada.\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Teie praegune allkiri \"%s\"\n" +"on lokaalne allkiri.\n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" +"Kas te soovite seda edutada täielikuks eksporditavaks allkirjaks? (j/E) " + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" on juba lokaalselt allkirjastatud võtmega %08lX\n" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" on juba allkirjastatud võtmega %08lX\n" + +#: g10/keyedit.c:405 +#, c-format +msgid "Nothing to sign with key %08lX\n" +msgstr "Võtmega %08lX pole midagi allkirjastada\n" + +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "See võti on aegunud!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "See võti aegub %s.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Soovite, et teie allkiri aeguks samal ajal? (J/e) " + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "--pgp2 moodis ei saa PGP 2.x võtmele OpenPGP allkirja anda.\n" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "See muudab võtme PGP 2.x programmidega mitte-kasutatavaks.\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Kui hoolikalt te olete kontrollinud et võti, mida te asute allkirjastama,\n" +"kuulub ka tegelikult ülal mainitud isikule? Kui te ei tea, mida vastata,\n" +"sisestage \"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Ma ei vasta.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Ma ei ole üldse kontrollinud.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Ma olen teinud pealiskaudset kontrolli.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Ma olen kontrollinud väga hoolikalt.%s\n" + +#: g10/keyedit.c:535 +msgid "" +"Are you really sure that you want to sign this key\n" +"with your key: \"" +msgstr "" +"Olete tõesti kindel, et soovite seda võtit oma\n" +"võtmega allkirjastada: \"" + +#: g10/keyedit.c:544 +msgid "" +"\n" +"The signature will be marked as non-exportable.\n" +msgstr "" +"\n" +"Allkiri märgitakse mitte-eksporditavaks.\n" + +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"Allkiri märgitakse kehtetuks mitte-tunnistatavaks.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Ma ei ole seda võtit üldse kontrollinud.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Ma olen seda võtit kontrollinud ainult pealiskaudselt.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Ma olen kontrollinud seda võtit väga hoolikalt.\n" + +#: g10/keyedit.c:569 +msgid "Really sign? " +msgstr "Allkirjastan tõesti? " + +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 +#, c-format +msgid "signing failed: %s\n" +msgstr "allkirjastamine ebaõnnestus: %s\n" + +#: g10/keyedit.c:658 +msgid "This key is not protected.\n" +msgstr "See võti ei ole kaitstud.\n" + +#: g10/keyedit.c:662 +msgid "Secret parts of primary key are not available.\n" +msgstr "Primaarse võtme salajased komponendid ei ole kättesaadavad.\n" + +#: g10/keyedit.c:666 +msgid "Key is protected.\n" +msgstr "Võti on kaitstud.\n" + +#: g10/keyedit.c:686 +#, c-format +msgid "Can't edit this key: %s\n" +msgstr "Seda võtit ei õnnestu toimetada: %s\n" + +#: g10/keyedit.c:692 +msgid "" +"Enter the new passphrase for this secret key.\n" +"\n" +msgstr "" +"Sisestage sellele salajasele võtmele uus parool.\n" +"\n" + +#: g10/keyedit.c:706 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"\n" +msgstr "" +"Te ei soovi parooli - see on tõenäoliselt *halb* idee!\n" +"\n" + +#: g10/keyedit.c:709 +msgid "Do you really want to do this? " +msgstr "Kas te tõesti soovite seda teha? " + +#: g10/keyedit.c:773 +msgid "moving a key signature to the correct place\n" +msgstr "tõstan võtme allkirja õigesse kohta\n" + +#: g10/keyedit.c:815 +msgid "quit this menu" +msgstr "välju sellest menüüst" + +#: g10/keyedit.c:816 +msgid "q" +msgstr "v" + +#: g10/keyedit.c:817 +msgid "save" +msgstr "save" + +#: g10/keyedit.c:817 +msgid "save and quit" +msgstr "salvesta ja välju" + +#: g10/keyedit.c:818 +msgid "help" +msgstr "help" + +#: g10/keyedit.c:818 +msgid "show this help" +msgstr "näita seda abiinfot" + +#: g10/keyedit.c:820 +msgid "fpr" +msgstr "fpr" + +#: g10/keyedit.c:820 +msgid "show fingerprint" +msgstr "näita sõrmejälge" + +#: g10/keyedit.c:821 +msgid "list" +msgstr "list" + +#: g10/keyedit.c:821 +msgid "list key and user IDs" +msgstr "näita võtit ja kasutaja IDd" + +#: g10/keyedit.c:822 +msgid "l" +msgstr "l" + +#: g10/keyedit.c:823 +msgid "uid" +msgstr "uid" + +#: g10/keyedit.c:823 +msgid "select user ID N" +msgstr "vali kasutaja ID N" + +#: g10/keyedit.c:824 +msgid "key" +msgstr "key" + +#: g10/keyedit.c:824 +msgid "select secondary key N" +msgstr "vali sekundaarne võti N" + +#: g10/keyedit.c:825 +msgid "check" +msgstr "check" + +#: g10/keyedit.c:825 +msgid "list signatures" +msgstr "näita allkirju" + +#: g10/keyedit.c:826 +msgid "c" +msgstr "c" + +#: g10/keyedit.c:827 +msgid "sign" +msgstr "sign" + +#: g10/keyedit.c:827 +msgid "sign the key" +msgstr "allkirjasta võti" + +#: g10/keyedit.c:828 +msgid "s" +msgstr "s" + +#: g10/keyedit.c:829 +msgid "lsign" +msgstr "lsign" + +#: g10/keyedit.c:829 +msgid "sign the key locally" +msgstr "allkirjasta võti lokaalselt" + +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "allkirjasta võti kehtetuks mitte-tunnistatavana" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "allkirjasta võti lokaalselt ja kehtetuks mitte-tunnistatavana" + +#: g10/keyedit.c:832 +msgid "debug" +msgstr "debug" + +#: g10/keyedit.c:833 +msgid "adduid" +msgstr "adduid" + +#: g10/keyedit.c:833 +msgid "add a user ID" +msgstr "lisa kasutaja ID" + +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "lisa foto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "lisa foto ID" + +#: g10/keyedit.c:835 +msgid "deluid" +msgstr "deluid" + +#: g10/keyedit.c:835 +msgid "delete user ID" +msgstr "kustuta kasutaja ID" + +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:838 +msgid "addkey" +msgstr "addkey" + +#: g10/keyedit.c:838 +msgid "add a secondary key" +msgstr "lisa sekundaarne võti" + +#: g10/keyedit.c:839 +msgid "delkey" +msgstr "delkey" + +#: g10/keyedit.c:839 +msgid "delete a secondary key" +msgstr "kustuta sekundaarne võti" + +#: g10/keyedit.c:840 +msgid "delsig" +msgstr "delsig" + +#: g10/keyedit.c:840 +msgid "delete signatures" +msgstr "kustuta allkirjad" + +#: g10/keyedit.c:841 +msgid "expire" +msgstr "expire" + +#: g10/keyedit.c:841 +msgid "change the expire date" +msgstr "muuda aegumise kuupäeva" + +#: g10/keyedit.c:842 +msgid "primary" +msgstr "primaarne" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "märgi kasutaja ID primaarseks" + +#: g10/keyedit.c:843 +msgid "toggle" +msgstr "lülita" + +#: g10/keyedit.c:843 +msgid "toggle between secret and public key listing" +msgstr "lülita salajaste või avalike võtmete loendi vahel" + +#: g10/keyedit.c:845 +msgid "t" +msgstr "t" + +#: g10/keyedit.c:846 +msgid "pref" +msgstr "pref" + +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "näita eelistusi (ekspert)" + +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "näita eelistusi (detailsena)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "sea eelistuste nimekiri" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "uuendatud eelistused" + +#: g10/keyedit.c:850 +msgid "passwd" +msgstr "passwd" + +#: g10/keyedit.c:850 +msgid "change the passphrase" +msgstr "muuda parooli" + +#: g10/keyedit.c:851 +msgid "trust" +msgstr "trust" + +#: g10/keyedit.c:851 +msgid "change the ownertrust" +msgstr "muuda omaniku usaldust" + +#: g10/keyedit.c:852 +msgid "revsig" +msgstr "revsig" + +#: g10/keyedit.c:852 +msgid "revoke signatures" +msgstr "tühista allkirjad" + +#: g10/keyedit.c:853 +msgid "revkey" +msgstr "revkey" + +#: g10/keyedit.c:853 +msgid "revoke a secondary key" +msgstr "tühista sekundaarne võti" + +#: g10/keyedit.c:854 +msgid "disable" +msgstr "disable" + +#: g10/keyedit.c:854 +msgid "disable a key" +msgstr "blokeeri võti" + +#: g10/keyedit.c:855 +msgid "enable" +msgstr "enable" + +#: g10/keyedit.c:855 +msgid "enable a key" +msgstr "luba võti" + +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "showphoto" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "näita foto ID" + +#: g10/delkey.c:112 g10/keyedit.c:876 +msgid "can't do that in batchmode\n" +msgstr "seda ei saa teha pakettmoodis\n" + +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "viga salajase võtmebloki `%s' lugemisel: %s\n" + +#: g10/keyedit.c:931 +msgid "Secret key is available.\n" +msgstr "Salajane võti on kasutatav.\n" + +#: g10/keyedit.c:962 +msgid "Command> " +msgstr "Käsklus> " + +#: g10/keyedit.c:994 +msgid "Need the secret key to do this.\n" +msgstr "Selle tegamiseks on vaja salajast võtit.\n" + +#: g10/keyedit.c:998 +msgid "Please use the command \"toggle\" first.\n" +msgstr "Palun kasutage kõigepealt käsku \"toggle\".\n" + +#: g10/keyedit.c:1047 +msgid "Key is revoked." +msgstr "Võti on tühistatud." + +#: g10/keyedit.c:1066 +msgid "Really sign all user IDs? " +msgstr "Kas allkirjastan tõesti kõik kasutaja IDd? " + +#: g10/keyedit.c:1067 +msgid "Hint: Select the user IDs to sign\n" +msgstr "Vihje: Valige allkirjastamiseks kasutaja\n" + +#: g10/keyedit.c:1092 +#, c-format +msgid "This command is not allowed while in %s mode.\n" +msgstr "See käsklus ei ole %s moodis lubatud.\n" + +#: g10/keyedit.c:1112 g10/keyedit.c:1133 +msgid "You must select at least one user ID.\n" +msgstr "Te peate valima vähemalt ühe kasutaja ID.\n" + +#: g10/keyedit.c:1114 +msgid "You can't delete the last user ID!\n" +msgstr "Viimast kasutaja ID ei saa kustutada!\n" + +#: g10/keyedit.c:1117 +msgid "Really remove all selected user IDs? " +msgstr "Kas kustutan tõesti kõik kasutaja IDd? " + +#: g10/keyedit.c:1118 +msgid "Really remove this user ID? " +msgstr "Kas eemaldan tõesti selle kasutaja ID? " + +#: g10/keyedit.c:1156 g10/keyedit.c:1178 +msgid "You must select at least one key.\n" +msgstr "Te peata valima vähemalt ühe võtme.\n" + +#: g10/keyedit.c:1160 +msgid "Do you really want to delete the selected keys? " +msgstr "Kas te tõesti soovite valitud võtmeid kustutada? " + +#: g10/keyedit.c:1161 +msgid "Do you really want to delete this key? " +msgstr "Kas te tõesti soovite seda võtit kustutada? " + +#: g10/keyedit.c:1182 +msgid "Do you really want to revoke the selected keys? " +msgstr "Kas te tõesti soovite valitud võtmeid tühistada? " + +#: g10/keyedit.c:1183 +msgid "Do you really want to revoke this key? " +msgstr "Kas te tõesti soovite seda võtit tühistada? " + +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "Kas uuendan tõesti kõik kasutaja ID-de seaded? " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Kas tõesti uuendan seaded? " + +#: g10/keyedit.c:1292 +msgid "Save changes? " +msgstr "Salvestan muutused? " + +#: g10/keyedit.c:1295 +msgid "Quit without saving? " +msgstr "Väljun salvestamata? " + +#: g10/keyedit.c:1306 +#, c-format +msgid "update failed: %s\n" +msgstr "uuendamine ebaõnnestus: %s\n" + +#: g10/keyedit.c:1313 +#, c-format +msgid "update secret failed: %s\n" +msgstr "salajase võtme uuendamine ebaõnnestus: %s\n" + +#: g10/keyedit.c:1320 +msgid "Key not changed so no update needed.\n" +msgstr "Võtit ei muudetud, seega pole uuendamist vaja.\n" + +#: g10/keyedit.c:1332 +msgid "Invalid command (try \"help\")\n" +msgstr "Vigane käsklus (proovige \"help\")\n" + +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Selle võtme võib olla tühistanud %s võti %s%s\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (tundlik)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 +#, c-format +msgid "%s%c %4u%c/%08lX created: %s expires: %s" +msgstr "%s%c %4u%c/%08lX loodud: %s aegub: %s" + +#: g10/keyedit.c:1506 +#, c-format +msgid " trust: %c/%c" +msgstr " usaldus: %c/%c" + +#: g10/keyedit.c:1510 +msgid "This key has been disabled" +msgstr "See võti on blokeeritud" + +#: g10/keyedit.c:1539 +#, c-format +msgid "rev! subkey has been revoked: %s\n" +msgstr "rev! alamvõti on tühistatud: %s\n" + +#: g10/keyedit.c:1542 +msgid "rev- faked revocation found\n" +msgstr "rev- leitud võltsitud tühistamine\n" + +#: g10/keyedit.c:1544 +#, c-format +msgid "rev? problem checking revocation: %s\n" +msgstr "rev? probleem tühistamise kontrollimisel: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" +"Tuleb tähele panna, et kuni te pole programmi uuesti käivitanud,ei pruugi " +"näidatud võtme kehtivus olla tingimata korrektne.\n" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"HOIATUS: Sellel võtmel on juba foto ID.\n" +" Järgmise foto ID lisamine võib tekitada segadusi mõne PGP\n" +" versiooni kasutamisel.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Olete kindel, et soovite seda ikka lisada? (j/E) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Võtmel võib olla ainult üks foto ID.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"HOIATUS: See on PGP2-stiilis võti. Foto ID lisamine võib sundida mõningaid\n" +" PGP versioone seda võtit tagasi lükkama.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "Foto IDd ei saa PGP2 võtmele lisada.\n" + +#: g10/keyedit.c:1832 +msgid "Delete this good signature? (y/N/q)" +msgstr "Kustutan selle korrektse allkirja? (j/E/v)" + +#: g10/keyedit.c:1842 +msgid "Delete this invalid signature? (y/N/q)" +msgstr "Kustutan selle vigase allkirja? (j/E/v)" + +#: g10/keyedit.c:1846 +msgid "Delete this unknown signature? (y/N/q)" +msgstr "Kustutan selle tundmatu allkirja? (j/E/v)" + +#: g10/keyedit.c:1852 +msgid "Really delete this self-signature? (y/N)" +msgstr "Kas tõesti kustutan selle iseenda allkirja? (j/E)" + +#: g10/keyedit.c:1866 +#, c-format +msgid "Deleted %d signature.\n" +msgstr "Kustutatud %d allkiri.\n" + +#: g10/keyedit.c:1867 +#, c-format +msgid "Deleted %d signatures.\n" +msgstr "Kustutatud %d allkirja.\n" + +#: g10/keyedit.c:1870 +msgid "Nothing deleted.\n" +msgstr "Midagi ei kustutatud.\n" + +#: g10/keyedit.c:1943 +msgid "Please remove selections from the secret keys.\n" +msgstr "Palun eemaldage salajastelt võtmetelt valikud.\n" + +#: g10/keyedit.c:1949 +msgid "Please select at most one secondary key.\n" +msgstr "palun valige ülimalt üks sekundaarne võti.\n" + +#: g10/keyedit.c:1953 +msgid "Changing expiration time for a secondary key.\n" +msgstr "Muudan sekundaarse võtme aegumise aega.\n" + +#: g10/keyedit.c:1955 +msgid "Changing expiration time for the primary key.\n" +msgstr "Muudan primaarse võtme aegumise aega.\n" + +#: g10/keyedit.c:1997 +msgid "You can't change the expiration date of a v3 key\n" +msgstr "v3 võtme aegumise aega ei saa muuta.\n" + +#: g10/keyedit.c:2013 +msgid "No corresponding signature in secret ring\n" +msgstr "Vastavat allkirja salajaste võtmete hoidlas pole\n" + +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Palun valige täpselt üks kasutaja ID.\n" + +#: g10/keyedit.c:2284 +#, c-format +msgid "No user ID with index %d\n" +msgstr "Kasutaja ID numbriga %d puudub\n" + +#: g10/keyedit.c:2330 +#, c-format +msgid "No secondary key with index %d\n" +msgstr "Sekundaarne võti numbriga %d puudub\n" + +#: g10/keyedit.c:2444 +msgid "user ID: \"" +msgstr "kasutaja ID: \"" + +#: g10/keyedit.c:2449 +#, c-format +msgid "" +"\"\n" +"signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"allkirjastatud teie võtmega %08lX %s\n" + +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"lokaalselt allkirjastatud teie võtmega %08lX %s\n" + +#: g10/keyedit.c:2457 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "See allkiri aegub %s.\n" + +#: g10/keyedit.c:2461 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Olete kindel, et soovite seda ikka tühistada? (j/E) " + +#: g10/keyedit.c:2465 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "Loon sellele allkirjale tühistamise sertifikaadi? (j/E) " + +#. FIXME: detect duplicates here +#: g10/keyedit.c:2490 +msgid "You have signed these user IDs:\n" +msgstr "Te olete allkirjastanud järgnevad kasutaja IDd:\n" + +#: g10/keyedit.c:2504 +#, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr " allkirjastanud %08lX %s%s%s\n" + +#: g10/keyedit.c:2512 +#, c-format +msgid " revoked by %08lX at %s\n" +msgstr " tühistanud %08lX %s\n" + +#: g10/keyedit.c:2532 +msgid "You are about to revoke these signatures:\n" +msgstr "Te asute tühistama järgmisi allkirju:\n" + +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " allkirjastanud %08lX %s%s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr " (mitte-eksporditav)" + +#: g10/keyedit.c:2551 +msgid "Really create the revocation certificates? (y/N) " +msgstr "Kas tõesti loon tühistamise sertifikaadid? (j/E) " + +#: g10/keyedit.c:2581 +msgid "no secret key\n" +msgstr "salajast võtit pole\n" + +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "Näitan %s foto IDd suurusega %ld, võti 0x%08lX (uid %d)\n" + +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Allkirja poliitika: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "HOIATUS: leidsin vigased noteerimise andmed\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Allkirja noteerimine: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "pole inimese poolt loetav" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Võtmehoidla" + +#. of subkey +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format +msgid " [expires: %s]" +msgstr " [aegub: %s]" + +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Sõrmejälg:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Sõrmejälg:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Võtme sõrmejälg =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s krüpteeritud andmed\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "krüpteeritud tundmatu algoritmiga %d\n" + +#: g10/mainproc.c:280 +#, c-format +msgid "public key is %08lX\n" +msgstr "avalik võti on %08lX\n" + +#: g10/mainproc.c:326 +msgid "public key encrypted data: good DEK\n" +msgstr "avaliku võtmega krüpteeritud andmed: hea DEK\n" + +#: g10/mainproc.c:378 +#, c-format +msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" +msgstr "krüpteeritud %u-bitise %s võtmega, ID %08lX, loodud %s\n" + +#: g10/mainproc.c:388 +#, c-format +msgid "encrypted with %s key, ID %08lX\n" +msgstr "krüpteeritud %s võtmega, ID %08lX\n" + +#: g10/mainproc.c:402 +#, c-format +msgid "public key decryption failed: %s\n" +msgstr "avaliku võtmega lahtikrüpteerimine ebaõnnestus: %s\n" + +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "eeldan %s krüpteeritud andmeid\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "IDEA ¨iffer pole saadaval, loodan kasutada selle asemel %s\n" + +#: g10/mainproc.c:466 +msgid "decryption okay\n" +msgstr "lahtikrüpteerimine õnnestus\n" + +#: g10/mainproc.c:471 +msgid "WARNING: encrypted message has been manipulated!\n" +msgstr "HOIATUS: krüpteeritud teadet on muudetud!\n" + +#: g10/mainproc.c:476 +#, c-format +msgid "decryption failed: %s\n" +msgstr "lahtikrüpteerimine ebaõnnestus: %s\n" + +#: g10/mainproc.c:495 +msgid "NOTE: sender requested \"for-your-eyes-only\"\n" +msgstr "MÄRKUS: saatja nõudis \"ainult-teie-silmadele\"\n" + +#: g10/mainproc.c:497 +#, c-format +msgid "original file name='%.*s'\n" +msgstr "algne failinimi on='%.*s'\n" + +#: g10/mainproc.c:672 +msgid "standalone revocation - use \"gpg --import\" to apply\n" +msgstr "eraldiseisev tühistus - realiseerimiseks kasutage \"gpg --import\"\n" + +#: g10/mainproc.c:733 +msgid "Notation: " +msgstr "Noteering: " + +#: g10/mainproc.c:745 +msgid "Policy: " +msgstr "Poliis: " + +#: g10/mainproc.c:1198 +msgid "signature verification suppressed\n" +msgstr "allkirja kontroll jäeti ära\n" + +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "neid allkirju ei õnnestu töödelda\n" + +#: g10/mainproc.c:1261 +#, c-format +msgid "Signature made %.*s using %s key ID %08lX\n" +msgstr "Allkirja lõi %.*s kasutades %s võtit ID %08lX\n" + +#: g10/mainproc.c:1305 g10/mainproc.c:1327 +msgid "BAD signature from \"" +msgstr "HALB allkiri kasutajalt \"" + +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Aegunud allkiri kasutajalt \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 +msgid "Good signature from \"" +msgstr "Korrektne allkiri kasutajalt \"" + +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[ebakindel]" + +#: g10/mainproc.c:1351 +msgid " aka \"" +msgstr " ka \"" + +#: g10/mainproc.c:1412 +#, c-format +msgid "Can't check signature: %s\n" +msgstr "Allkirja ei saa kontrollida: %s\n" + +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "ei ole eraldiseisev allkiri\n" + +#: g10/mainproc.c:1508 +#, c-format +msgid "standalone signature of class 0x%02x\n" +msgstr "eraldiseisev allkiri klassiga 0x%02x\n" + +#: g10/mainproc.c:1565 +msgid "old style (PGP 2.x) signature\n" +msgstr "vana stiili (PGP 2.x) allkiri\n" + +#: g10/mainproc.c:1572 +msgid "invalid root packet detected in proc_tree()\n" +msgstr "proc_tree() tuvastas vigase juurmise paketi\n" + +#: g10/misc.c:101 +#, c-format +msgid "can't disable core dumps: %s\n" +msgstr "ei õnnestu blokeerida mälupildi salvestamist: %s\n" + +#: g10/misc.c:211 +msgid "Experimental algorithms should not be used!\n" +msgstr "Eksperimentaalseid algoritme ei peaks kasutama!\n" + +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" +msgstr "" +"see ¨ifri algoritm ei ole soovitatav; kasutage palun mõnd standardsemat!\n" + +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Hoiatus: ebaturvaline omanik %s \"%s\"\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Hoiatus: ebaturvalised õigused %s \"%s\"\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "IDEA ¨ifri lisandprogrammi pole\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "lisainfot leiate lehelt http://www.gnupg.org/why-not-idea.html\n" + +#: g10/parse-packet.c:119 +#, c-format +msgid "can't handle public key algorithm %d\n" +msgstr "ei oska käsitleda avaliku võtme algoritmi %d\n" + +#: g10/parse-packet.c:1053 +#, c-format +msgid "subpacket of type %d has critical bit set\n" +msgstr "alampaketil tüübiga %d on kriitiline bitt seatud\n" + +#: g10/passphrase.c:442 g10/passphrase.c:489 +msgid "gpg-agent is not available in this session\n" +msgstr "gpg-agent ei ole sesses sessioonis kasutatav\n" + +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "agendile ei õnnestu seada kliendi pid\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "agendiga suhtlemiseks ei õnnestu saada lugemise FD\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "agendiga suhtlemiseks ei õnnestu saada kirjutamise FD\n" + +#: g10/passphrase.c:498 +msgid "malformed GPG_AGENT_INFO environment variable\n" +msgstr "vigane GPG_AGENT_INFO keskkonnamuutuja\n" + +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "gpg-agendi protokolli versioon %d ei ole toetatud\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format +msgid "can't connect to `%s': %s\n" +msgstr "ei õnnestu luua ühendust serveriga `%s': %s\n" + +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "probleem gpg-agent programmiga suhtlemisel\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "probleem agendiga - blokeerin agendi kasutamise\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 +#, c-format +msgid " (main key ID %08lX)" +msgstr " (peamise võtme ID %08lX)" + +#: g10/passphrase.c:641 +#, c-format +msgid "" +"You need a passphrase to unlock the secret key for user:\n" +"\"%.*s\"\n" +"%u-bit %s key, ID %08lX, created %s%s\n" +msgstr "" +"Te vajate kasutaja salajase võtme lahtilukustamiseks parooli:\n" +"\"%.*s\"\n" +"%u-bitti %s võti, ID %08lX, loodud %s%s\n" + +#: g10/passphrase.c:662 +msgid "Enter passphrase\n" +msgstr "Sisestage parool\n" + +#: g10/passphrase.c:664 +msgid "Repeat passphrase\n" +msgstr "Korrake parooli\n" + +#: g10/passphrase.c:705 +msgid "passphrase too long\n" +msgstr "liiga pikk parool\n" + +#: g10/passphrase.c:718 +msgid "invalid response from agent\n" +msgstr "vigane vastus agendilt\n" + +#: g10/passphrase.c:727 g10/passphrase.c:808 +msgid "cancelled by user\n" +msgstr "katkestatud kasutaja poolt\n" + +#: g10/passphrase.c:729 g10/passphrase.c:890 +#, c-format +msgid "problem with the agent: agent returns 0x%lx\n" +msgstr "probleem agendiga: agent tagastas 0x%lx\n" + +#: g10/passphrase.c:1003 +msgid "" +"\n" +"You need a passphrase to unlock the secret key for\n" +"user: \"" +msgstr "" +"\n" +"Te vajate kasutaja salajase võtme lahtilukustamiseks\n" +"parooli: \"" + +#: g10/passphrase.c:1012 +#, c-format +msgid "%u-bit %s key, ID %08lX, created %s" +msgstr "%u-bitine %s võti, ID %08lX, loodud %s" + +#: g10/passphrase.c:1063 +msgid "can't query password in batchmode\n" +msgstr "pakettmoodis ei saa parooli küsida\n" + +#: g10/passphrase.c:1067 +msgid "Enter passphrase: " +msgstr "Sisestage parool: " + +#: g10/passphrase.c:1071 +msgid "Repeat passphrase: " +msgstr "Korrake parooli: " + +#: g10/plaintext.c:67 +msgid "data not saved; use option \"--output\" to save it\n" +msgstr "andmeid ei salvestatud; salvestamiseks kasutage võtit \"--output\"\n" + +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "viga `%s' loomisel: %s\n" + +#: g10/plaintext.c:337 +msgid "Detached signature.\n" +msgstr "Eraldiseisev allkiri.\n" + +#: g10/plaintext.c:341 +msgid "Please enter name of data file: " +msgstr "Palun sisestage andmefaili nimi: " + +#: g10/plaintext.c:362 +msgid "reading stdin ...\n" +msgstr "loen standardsisendit ...\n" + +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "allkirjastatud andmeid pole\n" + +#: g10/plaintext.c:404 +#, c-format +msgid "can't open signed data `%s'\n" +msgstr "allkirjastatud andmete avamine ebaõnnestus `%s'\n" + +#: g10/pubkey-enc.c:100 +#, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "anonüümne saaja; proovin salajast võtit %08lX ...\n" + +#: g10/pubkey-enc.c:106 +msgid "okay, we are the anonymous recipient.\n" +msgstr "ok, me oleme anonüümne teate saaja.\n" + +#: g10/pubkey-enc.c:158 +msgid "old encoding of the DEK is not supported\n" +msgstr "vana DEK kodeerimine ei ole toetatud\n" + +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "¨ifri algoritm %d%s on tundmatu või blokeeritud\n" + +#: g10/pubkey-enc.c:220 +#, c-format +msgid "NOTE: cipher algorithm %d not found in preferences\n" +msgstr "MÄRKUS: ¨ifri algoritm %d puudub eelistustes\n" + +#: g10/pubkey-enc.c:242 +#, c-format +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "MÄRKUS: salajane võti %08lX aegus %s\n" + +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "küsin võtit %08lX HKP võtmeserverist %s\n" + +#: g10/hkp.c:94 +#, c-format +msgid "can't get key from keyserver: %s\n" +msgstr "võtmeserverist ei saa võtit: %s\n" + +#: g10/hkp.c:171 +#, c-format +msgid "error sending to `%s': %s\n" +msgstr "viga teate saatmisel serverile `%s': %s\n" + +#: g10/hkp.c:186 +#, c-format +msgid "success sending to `%s' (status=%u)\n" +msgstr "teate saatmine serverile `%s' õnnestus (olek=%u)\n" + +#: g10/hkp.c:189 +#, c-format +msgid "failed sending to `%s': status=%u\n" +msgstr "teate saatmine serverile `%s' ebaõnnestus: olek=%u\n" + +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "otsin \"%s\" HKP serverist %s\n" + +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "võtmeserverist ei saa otsida: %s\n" + +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "salajase võtme komponendid ei ole kättesaadavad\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "kaitse algoritm %d%s ei ole toetatud\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Vigane parool; palun proovige uuesti" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 +msgid "WARNING: Weak key detected - please change passphrase again.\n" +msgstr "HOIATUS: Tuvastasin nõrga võtme - palun muutke uuesti parooli.\n" + +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" +"loon salajase võtme kaitseks mittesoovitavat 16 bitist kontrollsummat\n" + +#: g10/sig-check.c:205 +msgid "" +"this is a PGP generated ElGamal key which is NOT secure for signatures!\n" +msgstr "" +"see on PGP genereeritud ElGamal võti ja EI OLE allkirjastamiseks turvaline!\n" + +#: g10/sig-check.c:213 +#, c-format +msgid "public key is %lu second newer than the signature\n" +msgstr "avalik võti on %lu sekund uuem, kui allkiri\n" + +#: g10/sig-check.c:214 +#, c-format +msgid "public key is %lu seconds newer than the signature\n" +msgstr "avalik võti on %lu sekundit uuem, kui allkiri\n" + +#: g10/sig-check.c:237 +#, c-format +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "MÄRKUS: allkirja võti %08lX aegus %s\n" + +#: g10/sig-check.c:318 +msgid "assuming bad signature due to an unknown critical bit\n" +msgstr "eeldan tundmatu kriitilise biti tõttu vigast allkirja\n" + +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"HOIATUS: poliisi urli %%-asendus ebaõnnestus (liiga suur). Kasutan " +"kompaktset.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "Loodud allkirja ei õnnestu kontrollida: %s\n" + +#: g10/sign.c:283 +#, c-format +msgid "%s signature from: %s\n" +msgstr "%s allkiri kasutajalt: %s\n" + +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "HOIATUS: `%s' on tühi fail\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "PGP 2.x stiilis võtmetega saab allkirjastada ainult --pgp2 moodis\n" + +#: g10/sign.c:643 g10/sign.c:812 +#, c-format +msgid "can't create %s: %s\n" +msgstr "%s ei õnnestu luua: %s\n" + +#: g10/sign.c:704 +msgid "signing:" +msgstr "allkirjastan:" + +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"PGP 2.x stiilis võtmetega saab avateksti allkirjastada ainult --pgp2 moodis\n" + +#: g10/sign.c:953 +#, c-format +msgid "%s encryption will be used\n" +msgstr "kasutatakse %s krüpteerimist\n" + +#: g10/textfilter.c:134 +#, c-format +msgid "can't handle text lines longer than %d characters\n" +msgstr "ei suuda käsitleda tekstiridu mis on pikemad, kui %d sümbolit\n" + +#: g10/textfilter.c:231 +#, c-format +msgid "input line longer than %d characters\n" +msgstr "sisendrida on pikem, kui %d sümbolit\n" + +#: g10/tdbio.c:121 g10/tdbio.c:1382 +#, c-format +msgid "trustdb rec %lu: lseek failed: %s\n" +msgstr "trustdb kirje %lu: lseek ebaõnnestus: %s\n" + +#: g10/tdbio.c:127 g10/tdbio.c:1389 +#, c-format +msgid "trustdb rec %lu: write failed (n=%d): %s\n" +msgstr "trustdb rec %lu: write failed (n=%d): %s\n" + +#: g10/tdbio.c:237 +msgid "trustdb transaction too large\n" +msgstr "trustdb transaktsioon on liiga suur\n" + +#: g10/tdbio.c:454 +#, c-format +msgid "%s: can't access: %s\n" +msgstr "%s: ei õnnestu kasutada: %s\n" + +#: g10/tdbio.c:468 +#, c-format +msgid "%s: directory does not exist!\n" +msgstr "%s: kataloogi ei ole!\n" + +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 +#, c-format +msgid "%s: can't create lock\n" +msgstr "%s: ei õnnestu luua lukku\n" + +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: ei õnnestu seada lukku\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: ei õnnestu luua: %s\n" + +#: g10/tdbio.c:503 +#, c-format +msgid "%s: failed to create version record: %s" +msgstr "%s: versioonikirje loomine ei õnnestu: %s" + +#: g10/tdbio.c:507 +#, c-format +msgid "%s: invalid trustdb created\n" +msgstr "%s: loodi vigane usalduse andmebaas\n" + +#: g10/tdbio.c:510 +#, c-format +msgid "%s: trustdb created\n" +msgstr "%s: trustdb on loodud\n" + +#: g10/tdbio.c:565 +#, c-format +msgid "%s: invalid trustdb\n" +msgstr "%s: vigane trustdb\n" + +#: g10/tdbio.c:597 +#, c-format +msgid "%s: failed to create hashtable: %s\n" +msgstr "%s: paisktabeli loomine ebaõnnestus: %s\n" + +#: g10/tdbio.c:605 +#, c-format +msgid "%s: error updating version record: %s\n" +msgstr "%s: viga versioonikirje uuendamisel: %s\n" + +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 +#, c-format +msgid "%s: error reading version record: %s\n" +msgstr "%s: viga versioonikirje lugemisel: %s\n" + +#: g10/tdbio.c:634 g10/tdbio.c:680 +#, c-format +msgid "%s: error writing version record: %s\n" +msgstr "%s: viga versioonikirje kirjutamisel: %s\n" + +#: g10/tdbio.c:1119 +#, c-format +msgid "trustdb: lseek failed: %s\n" +msgstr "trustdb: lseek ebaõnnestus: %s\n" + +#: g10/tdbio.c:1127 +#, c-format +msgid "trustdb: read failed (n=%d): %s\n" +msgstr "trustdb: lugemine ebaõnnestus (n=%d): %s\n" + +#: g10/tdbio.c:1148 +#, c-format +msgid "%s: not a trustdb file\n" +msgstr "%s: ei ole trustdb fail\n" + +#: g10/tdbio.c:1165 +#, c-format +msgid "%s: version record with recnum %lu\n" +msgstr "%s: versioonikirje kirje numbriga %lu\n" + +#: g10/tdbio.c:1170 +#, c-format +msgid "%s: invalid file version %d\n" +msgstr "%s: vigane faili versioon %d\n" + +#: g10/tdbio.c:1348 +#, c-format +msgid "%s: error reading free record: %s\n" +msgstr "%s: viga vaba kirje lugemisel: %s\n" + +#: g10/tdbio.c:1356 +#, c-format +msgid "%s: error writing dir record: %s\n" +msgstr "%s: viga kataloogikirje kirjutamisel: %s\n" + +#: g10/tdbio.c:1366 +#, c-format +msgid "%s: failed to zero a record: %s\n" +msgstr "%s: kirje nullimine ebaõnnestus: %s\n" + +#: g10/tdbio.c:1396 +#, c-format +msgid "%s: failed to append a record: %s\n" +msgstr "%s: kirje lisamine ebaõnnestus: %s\n" + +#: g10/tdbio.c:1441 +msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" +msgstr "trustdb on vigane; palun käivitage \"gpg --fix-trustdb\".\n" + +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' ei ole kehtiv pikk võtmeID\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "võti %08lX: aktsepteerin usaldusväärse võtmena\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "võti %08lX esineb trustdb failis enam kui korra\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "võti %08lX: usaldataval võtmel pole avalikku võtit - jätsin vahele\n" + +#: g10/trustdb.c:332 +#, c-format +msgid "trust record %lu, req type %d: read failed: %s\n" +msgstr "usalduse kirje %lu, päringu tüüp %d: lugemine ebaõnnestus: %s\n" + +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "usalduse kirje %lu ei oma soovitud tüüpi %d\n" + +#: g10/trustdb.c:353 +#, c-format +msgid "trust record %lu, type %d: write failed: %s\n" +msgstr "usalduse kirje %lu, tüüp %d: kirjutamine ebaõnnestus: %s\n" + +#: g10/trustdb.c:368 +#, c-format +msgid "trustdb: sync failed: %s\n" +msgstr "trustdb: sync ebaõnnestus: %s\n" + +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "trustdb kontrolliks puudub vajadus\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 +#, c-format +msgid "next trustdb check due at %s\n" +msgstr "trustdb järgmine kontroll %s\n" + +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "kontrollin trustdb faili\n" + +#: g10/trustdb.c:933 +#, c-format +msgid "public key %08lX not found: %s\n" +msgstr "ei leia avalikku võtit %08lX: %s\n" + +#: g10/trustdb.c:1515 +#, c-format +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "puudub absoluutselt usaldatava võtme %08lX avalik võti\n" + +#: g10/trustdb.c:1593 +#, c-format +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "" +"kontrollin sügavusel %d allkirjastatud=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" + +#: g10/verify.c:108 +msgid "" +"the signature could not be verified.\n" +"Please remember that the signature file (.sig or .asc)\n" +"should be the first file given on the command line.\n" +msgstr "" +"allkirja ei õnnestu kontrollida.\n" +"Palun pidage meeles, et allkirja fail (.sig või .asc)\n" +"peab olema käsureal esimene fail.\n" + +#: g10/verify.c:173 +#, c-format +msgid "input line %u too long or missing LF\n" +msgstr "sisendrida %u on liiga pikk või seavahetus puudub\n" + +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"võti ei ole märgitud ebaturvaliseks - sellega ei saa võlts RNGd kasutada!\n" + +#: g10/skclist.c:138 +#, c-format +msgid "skipped `%s': duplicated\n" +msgstr "`%s' jätsin vahele: duplikaat\n" + +#: g10/skclist.c:145 g10/skclist.c:153 +#, c-format +msgid "skipped `%s': %s\n" +msgstr "`%s' jätsin vahele: %s\n" + +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "jätsin vahele: avalik võti on juba olemas\n" + +#: g10/skclist.c:160 +#, c-format +msgid "" +"skipped `%s': this is a PGP generated ElGamal key which is not secure for " +"signatures!\n" +msgstr "" +"jätsin `%s' vahele: see on PGP genereeritud ElGamal võti,\n" +"mis ei ole allkirjades kasutamiseks turvaline!\n" + +#. do not overwrite +#: g10/openfile.c:84 +#, c-format +msgid "File `%s' exists. " +msgstr "Fail `%s' on olemas. " + +#: g10/openfile.c:86 +msgid "Overwrite (y/N)? " +msgstr "Kirjutan üle (j/E)? " + +#: g10/openfile.c:119 +#, c-format +msgid "%s: unknown suffix\n" +msgstr "%s: tundmatu suffiks\n" + +#: g10/openfile.c:141 +msgid "Enter new filename" +msgstr "Sisestage uus failinimi" + +#: g10/openfile.c:184 +msgid "writing to stdout\n" +msgstr "kirjutan standardväljundisse\n" + +#: g10/openfile.c:273 +#, c-format +msgid "assuming signed data in `%s'\n" +msgstr "eeldan allkirjastatud andmeid failis `%s'\n" + +#: g10/openfile.c:323 +#, c-format +msgid "%s: new options file created\n" +msgstr "%s: uus omaduste fail on loodud\n" + +#: g10/openfile.c:350 +#, c-format +msgid "%s: can't create directory: %s\n" +msgstr "%s: kataloogi ei õnnestu luua: %s\n" + +#: g10/openfile.c:353 +#, c-format +msgid "%s: directory created\n" +msgstr "%s: kataloog on loodud\n" + +#: g10/openfile.c:355 +msgid "you have to start GnuPG again, so it can read the new options file\n" +msgstr "te peate GnuPG uuesti käivitama, siis võetakse uued võtmed arvesse\n" + +#: g10/encr-data.c:91 +msgid "" +"WARNING: message was encrypted with a weak key in the symmetric cipher.\n" +msgstr "HOIATUS: teade on krüptitud sümmeetrilise ¨ifri nõrga võtmega.\n" + +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "probleem krüptitud paketi käsitlemisel\n" + +#: g10/seskey.c:52 +msgid "weak key created - retrying\n" +msgstr "loodi nõrk võti - proovin uuesti\n" + +#: g10/seskey.c:57 +#, c-format +msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" +msgstr "" +"sümmeetrilises ¨ifris ei õnnestu vältida nõrga võtme kasutamist; proovisin %" +"d korda!\n" + +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "DSA nõuab 160 bitist räsialgoritmi kasutamist\n" + +#: g10/delkey.c:116 +msgid "can't do that in batchmode without \"--yes\"\n" +msgstr "pakettmoodis ei õnnestu seda võtmeta teha \"--yes\"\n" + +#: g10/delkey.c:138 +msgid "Delete this key from the keyring? " +msgstr "Kustutan selle võtme võtmehoidlast? " + +#: g10/delkey.c:146 +msgid "This is a secret key! - really delete? " +msgstr "See on salajane võti! - kas kustutan tõesti? " + +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "võtmebloki kustutamine ebaõnnestus: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "omaniku usalduse info puhastatud\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "avaliku võtme \"%s\" jaoks on salajane võti!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "selle kustutamiseks kasutage võtit \"--delete-secret-keys\".\n" + +#: g10/helptext.c:47 +msgid "" +"It's up to you to assign a value here; this value will never be exported\n" +"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" +"to do with the (implicitly created) web-of-certificates." +msgstr "" +"Teie ülesanne on sisestada nüüd väärtus; seda väärtust ei avalikustata\n" +"kolmandatele pooltele. Seda väärtust on vaja et realiseerida usaldusvõrk." + +#: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Usalduse võrgu loomiseks peab GnuPG teadma, millised võtmed on\n" +"absoluutselt usaldatavad. Need on tavaliselt võtmed, mille puhul\n" +"on teil juurdepääs ka nende salajastele võtmetele. Kui soovite\n" +"määrata seda võtit absoluutselt usaldatavaks, vastake \"jah\"\n" + +#: g10/helptext.c:60 +msgid "If you want to use this revoked key anyway, answer \"yes\"." +msgstr "Kui te ikkagi soovite kasutada seda kehtetut võtit, vastake \"jah\"." + +#: g10/helptext.c:64 +msgid "If you want to use this untrusted key anyway, answer \"yes\"." +msgstr "" +"Kui te ikkagi soovite kasutada seda mitteusaldatavat võtit, vastake \"jah\"." + +#: g10/helptext.c:68 +msgid "" +"Enter the user ID of the addressee to whom you want to send the message." +msgstr "Sisestage kasutaja ID aadressile, kellele te soovite teadet saata." + +#: g10/helptext.c:72 +msgid "" +"Select the algorithm to use.\n" +"\n" +"DSA (aka DSS) is the digital signature algorithm which can only be used\n" +"for signatures. This is the suggested algorithm because verification of\n" +"DSA signatures are much faster than those of ElGamal.\n" +"\n" +"ElGamal is an algorithm which can be used for signatures and encryption.\n" +"OpenPGP distinguishs between two flavors of this algorithms: an encrypt " +"only\n" +"and a sign+encrypt; actually it is the same, but some parameters must be\n" +"selected in a special way to create a safe key for signatures: this program\n" +"does this but other OpenPGP implementations are not required to understand\n" +"the signature+encryption flavor.\n" +"\n" +"The first (primary) key must always be a key which is capable of signing;\n" +"this is the reason why the encryption only ElGamal key is not available in\n" +"this menu." +msgstr "" +"Valige kasutatav algoritm.\n" +"\n" +"DSA (ka DSS) on digitaalallkirja algoritm, mida saab kasutada ainult\n" +"allkirjades. See on soovitatav algoritm, kuna DSA allkirjade kontroll\n" +"on oluliselt kiirem ElGamal allkirjade kontrollimisest.\n" +"\n" +"ElGamal on algoritm, mida saab kasutada nii allkirjastamisel, kui ka\n" +"krüptimisel. OpenPGP eristab selle algoritmi kahte varianti: ainult\n" +"krüptivat ja krüptivat ning allkirjastavat. Algoritm on sama, aga\n" +"turvaliseks allkirjastamiseks on vaja valida sobivad parameetrid. See\n" +"programm toetab mõlemat varianti, aga teised OpenPGP realisatsioonid\n" +"ei pruugi krüptivat ning allkirjastavat võimalust tunda.\n" +"\n" +"Esimene (primaarne) võti peab alati olema selline, mida saab kasutada\n" +"allkirjastamisel; see on ka põhjus, miks selles menüüs ei lubata valida\n" +"ainult krüptivat ElGamal võtit." + +#: g10/helptext.c:92 +msgid "" +"Although these keys are defined in RFC2440 they are not suggested\n" +"because they are not supported by all programs and signatures created\n" +"with them are quite large and very slow to verify." +msgstr "" +"Kuigi need võtmed on kirjeldatud dokumendis RFC2440, ei ole nende\n" +"kasutamine soovitatav, kuna mitte kõik programmid ei toeta neid\n" +"ja nendega loodud allkirjad on suured ning kontrollimine aeglane." + +#: g10/helptext.c:99 +msgid "Enter the size of the key" +msgstr "Sisestage võtmepikkus" + +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 +msgid "Answer \"yes\" or \"no\"" +msgstr "Vastake \"jah\" või \"ei\"" + +#: g10/helptext.c:113 +msgid "" +"Enter the required value as shown in the prompt.\n" +"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" +"get a good error response - instead the system tries to interpret\n" +"the given value as an interval." +msgstr "" +"Sisestage nõutav väärtus, nagu viibal näidati.\n" +"Võimalik on ka sisestada ISO kuupäev (AAAA-KK-PP), aga te ei\n" +"saa korrektset veateadet, kuna süsteem üritab antud väärtust\n" +"tõlgendada vahemikuna." + +#: g10/helptext.c:125 +msgid "Enter the name of the key holder" +msgstr "Sisestage võtmehoidja nimi" + +#: g10/helptext.c:130 +msgid "please enter an optional but highly suggested email address" +msgstr "palun e-posti aadress, aadress ei ole kohustuslik, aga väga soovitav" + +#: g10/helptext.c:134 +msgid "Please enter an optional comment" +msgstr "Te võite nüüd sisestada kommentaari" + +#: g10/helptext.c:139 +msgid "" +"N to change the name.\n" +"C to change the comment.\n" +"E to change the email address.\n" +"O to continue with key generation.\n" +"Q to to quit the key generation." +msgstr "" +"N et muuta nime.\n" +"K et muuta kommentaari.\n" +"E et muuta e-posti aadressi.\n" +"O et jätkata võtme loomist.\n" +"V et lõpetada võtme loomine." + +#: g10/helptext.c:148 +msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." +msgstr "Vastake \"jah\" (või \"j\"), kui võib alustada alamvõtme loomisega." + +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Kui te allkirjastate võtme kasutaja ID, kontrollige kõigepealt, kas võti\n" +"ikka kuulub antud ID-ga näidatud isikule. Teistel inimestel on hea teada,\n" +"kui hoolikalt te seda kontrolli olete teostanud.\n" +"\n" +"\"0\" tähendab, et te ei väida oma kontrollimise kohta midagi.\n" +"\n" +"\"1\" tähendab, et te usute, et võtit omab isik, kes seda väidab omavat, " +"kuid\n" +" te ei saanud või ei soovinud seda väidet täiendavalt kontrollida. See\n" +" on kasulik \"persooni\" kontrolliks, kui te allkirjastate isiku pseudo-\n" +" nüümi võtit.\n" +"\n" +"\"2\" tähendab, et te teostasite võtme pealiskaudset kontrolli. See võib\n" +" näiteks tähendada, et te kontrollisite võtme sõrmejälge ja " +"kontrollisite\n" +" võtme kasutaja ID foto ID vastu.\n" +"\n" +"\"3\" tähendab, et te teostasite võtme põhjalikku kontrolli. See võib " +"näiteks\n" +" tähendada, et võrdlesite võtme sõrmejälge võrme omanikuga otse suheldes\n" +" ja et te kontrollisite raskesti võltsitavast allikast (nt. pass) et\n" +" võtme omaniku nimi vastab võtmel näidatud kasutaja IDle ja te kontrol-\n" +" lisite, et võtmel näidatud e-posti aadress kuulub võtme omanikule.\n" +"\n" +"pange tähele, et näited tasemete 2 ja 3 juures on *ainult* näited. Sõltub\n" +"ainult teist, milline on \"pealiskaudse\" ja \"põhjaliku\" kontrolli " +"tähendus,\n" +"kui te allkirjastate teisi võtmeid.\n" +"\n" +"Kui te ei tea õiget vastust, vastake \"0\"." + +#: g10/helptext.c:194 +msgid "Answer \"yes\" is you want to sign ALL the user IDs" +msgstr "Kui te soovite allkirjastada KÕIK kasutaja IDd, vastake \"jah\"" + +#: g10/helptext.c:198 +msgid "" +"Answer \"yes\" if you really want to delete this user ID.\n" +"All certificates are then also lost!" +msgstr "" +"Kui te tõesti soovite seda kasutaja IDd kustutada, vastake \"jah\".\n" +"Sertifikaadid kustutatakse samuti!" + +#: g10/helptext.c:203 +msgid "Answer \"yes\" if it is okay to delete the subkey" +msgstr "Kui selle alamvõtme võib kustutada, vastake \"jah\"" + +#: g10/helptext.c:208 +msgid "" +"This is a valid signature on the key; you normally don't want\n" +"to delete this signature because it may be important to establish a\n" +"trust connection to the key or another key certified by this key." +msgstr "" +"See on võtme kehtiv allkiri; tavaliselt seda ei soovita kustutada,\n" +"kuna see allkiri võib olla vajalik, et kirjeldada antud võtme või\n" +"antud võtmega sertifitseeritud teise võtme usaldatavust." + +#: g10/helptext.c:213 +msgid "" +"This signature can't be checked because you don't have the\n" +"corresponding key. You should postpone its deletion until you\n" +"know which key was used because this signing key might establish\n" +"a trust connection through another already certified key." +msgstr "" +"Seda allkirja ei saa kontrollida, kuna puudub allkirjale vastav võti.\n" +"Te peaksite peatama kustutamise, kuni on teada, millist võtit see\n" +"kasutab, sest see võti võib moodustada usaldussuhte läbi mõne juba\n" +"sertifitseeritud võtme." + +#: g10/helptext.c:219 +msgid "" +"The signature is not valid. It does make sense to remove it from\n" +"your keyring." +msgstr "Allkiri ei ole kehtiv. Oleks mõistlik see võtmehoidlast kustutada." + +#: g10/helptext.c:223 +msgid "" +"This is a signature which binds the user ID to the key. It is\n" +"usually not a good idea to remove such a signature. Actually\n" +"GnuPG might not be able to use this key anymore. So do this\n" +"only if this self-signature is for some reason not valid and\n" +"a second one is available." +msgstr "" +"See allkiri seob kasutaja ID võtmega. Sellist allkirja ei ole\n" +"üldiselt soovitatav eemaldada. Peale selle kustutamist ei pruugi\n" +"GnuPG enam olla võimeline seda võtit leidma. Kustutada võiks\n" +"vaid siis, kui see allkiri ei ole miskipärast kehtiv ja on\n" +"olemas ka teine allkiri, mis kasutajat võtmega seob." + +#: g10/helptext.c:231 +msgid "" +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" +"Muuda kõikide kasutaja ID-de seaded (või ainult valitud)\n" +"vastavaks hetkel määratud seadetele. Kõikide asjasse puutuvate\n" +"ise loodud allkirjade ajatempleid suurendatakse ühe sekundi võrra.\n" + +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Palun sisestage parool; see on salajane tekst \n" + +#: g10/helptext.c:244 +msgid "Please repeat the last passphrase, so you are sure what you typed in." +msgstr "Palun korrake parooli, siis saate oma kirjutatus kindel olla." + +#: g10/helptext.c:248 +msgid "Give the name of the file to which the signature applies" +msgstr "Sisestage palun failinimi, mida allkirjastada" + +#: g10/helptext.c:253 +msgid "Answer \"yes\" if it is okay to overwrite the file" +msgstr "Vastake \"jah\", kui faili võib üle kirjutada" + +#: g10/helptext.c:258 +msgid "" +"Please enter a new filename. If you just hit RETURN the default\n" +"file (which is shown in brackets) will be used." +msgstr "" +"Palun sisestage uus failinimi. Kui te vajutate lihtsalt reavahetust,\n" +"kasutatakse vaikimisi faili (nimi on nurksulgudes)." + +#: g10/helptext.c:264 +msgid "" +"You should specify a reason for the certification. Depending on the\n" +"context you have the ability to choose from this list:\n" +" \"Key has been compromised\"\n" +" Use this if you have a reason to believe that unauthorized persons\n" +" got access to your secret key.\n" +" \"Key is superseded\"\n" +" Use this if you have replaced this key with a newer one.\n" +" \"Key is no longer used\"\n" +" Use this if you have retired this key.\n" +" \"User ID is no longer valid\"\n" +" Use this to state that the user ID should not longer be used;\n" +" this is normally used to mark an email address invalid.\n" +msgstr "" +"Te peate määrama sertifitseerimise põhjuse. Sõltuvalt kontekstist on\n" +"teil võimalus valida üks järgnevaist:\n" +" \"Võti on kompromiteeritud\"\n" +" Kasutage seda, kui teil on põhjust uskuda, et autoriseerimata\n" +" isikud on saanud juurdepääsu teie salajasele võtmele.\n" +" \"Võti on asendatud\"\n" +" Kasutage seda, kui te olete selle võtme asendanud uuemaga.\n" +" \"Võti ei ole enam kasutusel\"\n" +" Kasutage seda, kui te ei kasuta enam seda võtit.\n" +" \"Kasutaja ID ei ole enam kehtiv\"\n" +" Kasutage seda märkimaks, et konkreetset kasutaja ID ei peaks enam\n" +" kasutama; seda kasutatakse tavaliselt märkimaks vigast e-posti " +"aadressi.\n" + +#: g10/helptext.c:280 +msgid "" +"If you like, you can enter a text describing why you issue this\n" +"revocation certificate. Please keep this text concise.\n" +"An empty line ends the text.\n" +msgstr "" +"Kui te soovite, võite nüüd sisestada põhjenduse, miks te\n" +"soovite seda tühistamise sertifikaati esitada. Palun kirjutage\n" +"lühidalt. Tühi rida lõpetab teksti.\n" + +#: g10/helptext.c:295 +msgid "No help available" +msgstr "Abiinfo puudub" + +#: g10/helptext.c:303 +#, c-format +msgid "No help available for `%s'" +msgstr "`%s' kohta abiinfo puudub" + +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "viga võtmehoidla `%s' loomisel: %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "`%s' õiguste muutmine ebaõnnestus: %s\n" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "võtmehoidla `%s' on loodud\n" + +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "võtmehoidla vahemälu uuesti loomine ebaõnnestus: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "HOIATUS: on olemas 2 faili konfidentsiaalse infoga.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s ei ole muudetud\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s on uus\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Palun parandage see võimalik turvaprobleem\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "kontrollin võtmehoidlat `%s'\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "seni on kontrollitud %lu võtit (%lu allkirja)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "kontrollitud %lu võtit (%lu allkirja)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: võtmehoidla on loodud\n" diff --git a/po/fr.po b/po/fr.po index 07e86f5a9..cd8d89c75 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,6 +1,6 @@ # GnuPG French translation -# Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. -# Gaël Quéri , 1998. +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Gaël Quéri , 1998. # # Thanks to Rémi Guyomarch and # for pointing me out some errors. @@ -9,303 +9,331 @@ # msgid "" msgstr "" -"Project-Id-Version: gnupg 1.0.1h\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 2000-06-28 18:41+02:00\n" -"Last-Translator: Gaël Quéri \n" +"Project-Id-Version: gnupg 1.0.6d\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-03-28 23:43+01:00\n" +"Last-Translator: Gaël Quéri \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8-bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Avertissement: l'utilisation de la mémoire n'est pas sûre !\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "voir http://www.gnupg.org/fr/faq.html pour plus d'informations\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "" +"l'opération n'est pas possible tant que la mémoire sûre n'est pas\n" +"initialisée\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(vous avez peut-être utilisé un programme non adapté à cette fin)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "oui" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "oO" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "non" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "quitter" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "qQ" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "erreur générale" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "type de paquet inconnu" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "version inconnue" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "algorithme à clé publique inconnu" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "algorithme de hachage inconnu" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "mauvaise clé publique" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "mauvaise clé secrète" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "mauvaise signature" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "somme de contrôle erronée" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "mauvais mot de passe" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "clé publique non trouvée" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "algorithme de chiffrement inconnu" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "impossible d'ouvrir le porte-clés" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "paquet invalide" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "armure invalide" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "pas d'utilisateur de ce nom" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "la clé secrète n'est pas disponible" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "mauvaise clé secrète utilisée" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "non supporté" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "mauvaise clé" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "erreur de lecture" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "erreur d'écriture" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "algorithme de compression inconnu" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "erreur d'ouverture de fichier" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "erreur de création de fichier" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "mot de passe invalide" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algorithme à clé publique non implanté" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algorithme de chiffrement non implanté" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "classe de signature inconnue" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "erreur dans la base de confiance" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "mauvais entier en précision multiple (MPI)" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "limite de ressources atteinte" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "porte-clés invalide" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "mauvais certificat" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "nom d'utilisateur malformé" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "erreur de fermeture de fichier" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "erreur pendant le changement de nom du fichier" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "erreur pendant la suppression du fichier" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "données inattendues" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "conflit de dates" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "algorithme de clés publiques inutilisable" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "le fichier existe" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "clé faible" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "argument invalide" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "mauvaise adresse (URI)" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "URI non supportée" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "erreur de réseau" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "non chiffré" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "non traité" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "clé publique inutilisable" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "clé secrète inutilisable" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "erreur du serveur de clés" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... c'est un bug (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "vous avez trouvé un bug... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "impossible d'ouvrir `%s': %s\n" -#: cipher/random.c:325 +#: cipher/random.c:324 #, c-format msgid "can't stat `%s': %s\n" msgstr "impossible d'accéder à `%s': %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' n'est pas un fichier régulier - ignoré\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" msgstr "note: le fichier `random_seed' est vide\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" "avertissement: la taille du fichier `random_seed' est invalide.\n" "Celui-ci ne sera pas utilisé.\n" -#: cipher/random.c:349 +#: cipher/random.c:348 #, c-format msgid "can't read `%s': %s\n" msgstr "impossible de lire `%s': %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" msgstr "note: le fichier `random_seed' n'a pas été mis à jour\n" -#: cipher/random.c:407 +#: cipher/random.c:406 #, c-format msgid "can't create `%s': %s\n" msgstr "impossible de créer `%s': %s\n" -#: cipher/random.c:414 +#: cipher/random.c:413 #, c-format msgid "can't write `%s': %s\n" msgstr "impossible d'écrire `%s': %s\n" -#: cipher/random.c:417 +#: cipher/random.c:416 #, c-format msgid "can't close `%s': %s\n" msgstr "impossible de fermer `%s': %s\n" -#: cipher/random.c:428 -#, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" -"une quantité de données aléatoires trop importante a été demandée.\n" -"La limite est %d bits.\n" - -#: cipher/random.c:659 +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "ATTENTION: utilisation d'un générateur de nombres aléatoires peu sûr !!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -319,7 +347,7 @@ msgstr "" "N'UTILISEZ PAS LES DONNÉES GÉNÉRÉES PAR CE PROGRAMME !!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -330,21 +358,7 @@ msgstr "" "Il n'y a pas assez d'octets aléatoires disponibles. Faites autre chose\n" "pour que l'OS puisse amasser plus d'entropie ! (il faut %d octets de plus)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Avertissement: l'utilisation de la mémoire n'est pas sûre !\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "" -"l'opération n'est pas possible tant que la mémoire sûre n'est pas\n" -"initialisée\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(vous avez peut-être utilisé un programme non adapté à cette fin)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -352,139 +366,163 @@ msgstr "" "@Commandes:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[fichier]|faire une signature" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[fichier]|faire une signature en texte clair" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "faire une signature détachée" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "chiffrer les données" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "[fichier]|chiffrer les fichiers" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "chiffrement symétrique seulement" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "pas d'action" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "déchiffrer les données (défaut)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[fichiers]|déchiffrer les fichiers" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "vérifier une signature" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "lister les clés" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "lister les clés et les signatures" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "vérifier les signatures des clés" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "lister les clés et les empreintes" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "lister les clés secrètes" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "générer une nouvelle paire de clés" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" -msgstr "enlever la clé du porte-clés public" +#: g10/g10.c:307 +msgid "remove keys from the public keyring" +msgstr "enlever les clés du porte-clés public" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" -msgstr "enlever la clé du porte-clés secret" +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "enlever les clés du porte-clés secret" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "signer une clé" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "signer une clé localement" -#: g10/gpg.c:224 +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "signer une clé irrévocablement" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "signer une clé localement et irrévocablement" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "signer ou éditer une clé" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "générer un certificat de révocation" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "exporter les clés" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "exporter les clés vers un serveur de clés" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "importer les clés d'un serveur de clés" -#: g10/gpg.c:232 +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "chercher les clés avec un serveur de clés" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "mettre à jour les clés depuis un serveur" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "importer/fusionner les clés" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "ne lister que les paquets" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "exporter les indices de confiance" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importer les indices de confiance" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "mettre la base de confiance à jour" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NOMS]|vérifier la base de confiance" +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "mise à jour inattendue de la base de confiance" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "réparer une base de confiance corrompue" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "Enlever l'armure d'un fichier ou de stdin" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "Mettre une armure à un fichier ou à stdin" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|alg. [fich.]|indiquer les fonctions de hachage" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -494,156 +532,203 @@ msgstr "" "Options:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "créer une sortie ascii avec armure" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NOM|chiffrer pour NOM" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NOM|utiliser NOM comme récipient par défaut" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "utiliser la clé par déf. comme récipient" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "utiliser ce nom pour signer ou déchiffrer" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|niveau de compression N (0 désactive)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "utiliser le mode texte canonique" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "utiliser comme fichier de sortie" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "bavard" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "devenir beaucoup plus silencieux" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "ne pas utiliser du tout le terminal" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "forcer les signatures en v3" -#: g10/gpg.c:275 +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "ne pas forcer les signatures en v3" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "forcer les signatures en v4" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "ne pas forcer les signatures en v4" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "toujours utiliser un sceau pour le chiffrement" -#: g10/gpg.c:276 +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "" +"ne jamais utiliser de sceau pour le\n" +"chiffrement" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "ne rien changer" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "utiliser gpg-agent" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "mode automatique: ne jamais rien demander" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "répondre oui à la plupart des questions" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "répondre non à la plupart des questions" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "ajouter ce porte-clés à la liste" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "ajouter ce porte-clés secret à la liste" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "indiquer où est une clé listée" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NOM|utiliser NOM comme clé secrète par défaut" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HÔTE|utiliser ce serveur pour chercher des clés" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NOM|le terminal utilise la table de caractères NOM" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "lire les options du fichier" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "|FD|écrire l'état sur ce descripteur" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "" +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[fichier]|écrire les informations d'état vers ce fichier" -#: g10/gpg.c:297 +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|IDCLÉ|donner une confiance ultime à cette clé" + +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|FICH|charger le module d'extension FICH" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "imiter le mode décrit dans la RFC1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "utiliser le comportement défini par OpenPGP" -#: g10/gpg.c:300 +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"utiliser le comportement de PGP 2.x\n" +"pour toutes les options de paquets,\n" +"de hachage et de chiffrement" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|coder les mots de passe suivant le mode N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NOM|utiliser le hachage NOM pour les mots de passe" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NOM|utiliser le chiffre NOM pour les mots de passe" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOM|utiliser l'algorithme de chiffrement NOM" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOM|utiliser la fonction de hachage NOM" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|utiliser l'algorithme de compression N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "supprimer l'ident. des paquets chiffrés" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Montrer les photos d'identité" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Ne pas montrer les photos d'identité" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "" +"Choisir la ligne de commande servant à\n" +"afficher les photos d'identité" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NOM=VALEUR|utiliser ces données de notation" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" @@ -651,7 +736,7 @@ msgstr "" "@\n" "(Voir la page de manuel pour une liste complète des commandes et options)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -671,17 +756,17 @@ msgstr "" " --list-keys [utilisateur] montrer les clés\n" " --fingerprint [utilisateur] montrer les empreintes\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "" "Signaler toutes anomalies à (en anglais)\n" "et tout problème de traduction à .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Utilisation: gpg [options] [fichiers] (-h pour l'aide)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -691,7 +776,7 @@ msgstr "" "signer, vérifier, chiffrer ou déchiffrer\n" "l'opération par défaut dépend des données entrées\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -699,193 +784,255 @@ msgstr "" "\n" "Algorithmes supportés:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "utilisation: gpg [options] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "commandes en conflit\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTE: pas de fichier d'options par défaut `%s'\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "fichier d'options `%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "lire les options de `%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s n'est pas une table de caractères valide\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "impossible d'interpréter l'URI du serveur de clés\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "AVERTISSEMENT: `%s' est un fichier vide\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "ATTENTION: Le programme peut créer un fichier «core» !\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "ATTENTION: %s remplace %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTE: %s n'est pas pour une utilisation normale !\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s n'est pas permis avec %s !\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s n'a aucun sens avec %s !\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" +"il n'est possible de faire une signature détachée ou en texte clair\n" +"qu'en mode --pgp2\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "vous ne pouvez pas signer et chiffrer en même temps en mode --pgp2\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" +"vous devez utiliser des fichiers (et pas un tube) lorsque --pgp2\n" +"est activé.\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" +"chiffrer un message en mode --pgp2 nécessite l'algorithme de chiffrage IDEA\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "ce message ne sera pas forcément utilisable par PGP 2.x\n" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "l'algorithme de chiffrement sélectionné est invalide\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "la fonction de hachage sélectionnée est invalide\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "l'URL de politique donnée est invalide\n" +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "l'URL de politique de signature donnée est invalide\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "l'URL de politique de certification donnée est invalide\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "l'algorithme de compression doit faire partie de l'intervalle %d..%d\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "«completes-needed» doit être supérieur à 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "«marginals-needed» doit être supérieur à 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "«max-cert-depth» doit être compris entre 1 et 255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTE: le mode S2K simple (0) est fortement déconseillé\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "mode S2K invalide; ce doit être 0, 1 ou 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "default-check-level invalide; ce doit être 0, 1, 2 ou 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "préférences invalides\n" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "impossible d'initialiser la base de confiance: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [nom du fichier]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [nom du fichier]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [nom du fichier]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [nom du fichier]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nom du fichier]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [nom du fichier]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [nom du fichier]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [nom du fichier]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key utilisateur" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key utilisateur" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key utilisateur" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key utilisateur" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key utilisateur [commandes]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key utilisateur" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key utilisateur" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "impossible d'ouvrir %s: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [utilisateur] [porte-clés]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "la suppression d'une armure a échoué: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "la construction d'une armure a échoué: %s \n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algorithme de hachage `%s' invalide\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[nom du fichier]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" -msgstr "Continuez et tapez votre message...\n" +msgstr "Vous pouvez taper votre message...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "impossible d'ouvrir `%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "le premier caractère du nom d'une notation doit être un lettre ou un trait\n" "de soulignement\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -894,251 +1041,228 @@ msgstr "" "des points ou des traits de soulignement et doit se terminer par un signe " "égal\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" "les points dans le nom d'une notation doivent être entourés d'autes " "caractères\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "une valeur de notation ne doit utiliser aucun caractère de contrôle\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "armure: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "en-tête d'armure invalide: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "en-tête d'armure: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "en-tête de signature claire invalide\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "signatures en texte clair imbriquées\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "ligne échappée par `-' invalide: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "armure inattendue:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "caractère %02x invalide en base 64 ignoré\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "fin de fichier prématurée (pas de CRC)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "fin de fichier prématurée (dans le CRC)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "CRC déformé\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "Erreur de CRC; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "fin de fichier prématurée (dans la remorque)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "erreur dans la ligne de remorque\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "Pour information voir http://www.gnupg.org" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "aucune donnée OpenPGP valide n'a été trouvée.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armure invalide: ligne plus longue que %d caractères\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caractère cité-imprimable (quoted-printable) dans l'armure provenant\n" "certainement d'un agent de transfert de messages bogué\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Empreinte:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Empreinte:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" msgstr "Aucune raison spécifiée" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" +#: g10/pkclist.c:63 +msgid "Key is superseded" msgstr "La clé a été remplacée" -#: g10/pkclist.c:121 +#: g10/pkclist.c:65 msgid "Key has been compromised" msgstr "La clé a été compromise" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" msgstr "La clé n'est plus utilisée" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" msgstr "Le nom d'utilisateur n'est plus valide" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " msgstr "Cause de révocation: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " msgstr "Commentaire de révocation: " #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMqQsS" -#: g10/pkclist.c:308 +#: g10/pkclist.c:258 #, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" -"Pas de confiance définie pour %lu:\n" +"Pas de confiance définie pour :\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" -"À quel point avez-vous confiance en cet utilisateur pour vérifier " -"correctement\n" -"les clés des autres utilisateurs (vous pouvez vérifier son passeport, " -"vérifier\n" -"les empreintes de diverses sources...) ?\n" -"\n" -" 1 = je ne sais pas\n" -" 2 = je ne lui fais pas confiance\n" -" 3 = je le crois marginalement\n" -" 4 = je le crois totalement\n" -" s = montrez-moi plus d'informations\n" +"À quel point avez-vous confiance en cet utilisateur pour la vérification\n" +"des clés des autres utilisateurs (vous pouvez vérifier son passeport,\n" +"vérifier les empreintes de diverses sources...) ?\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = ne sait pas\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = je ne fais PAS confiance\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = je crois marginalement\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = je fais entièrement confiance\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = je donne une confiance ultime\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = donnez-moi plus d'informations\n" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = retour au menu principal\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = sauter cette clé\n" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = quitter\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Votre décision ? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Voulez-vous vraiment donner une confiance ultime à cette clé ?" + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificats conduisant vers une clé à confiance ultime:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Impossible de trouver un chemin de confiance valide jusqu'à la clé. Voyons\n" -"si nous ne pouvons pas assigner quelques indices de confiance manquants.\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"Aucun chemin menant vers une de nos clés n'a été trouvé.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Aucun certificat à confiance indéfinie n'a été trouvé.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Pas d'indice de confiance changé.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "clé %08lX: la clé a été révoquée !\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Utiliser cette clé quand même ? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "clé %08lX: la sous-clé a été révoquée !\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: la clé a expiré\n" -#: g10/pkclist.c:519 +#: g10/pkclist.c:442 #, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: pas d'information pour calculer une probabilité de confiance\n" +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "%08lX: Rien ne dit que la clé appartient vraiment au propriétaire.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: Nous ne faisons PAS confiance à cette clé\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1147,15 +1271,15 @@ msgstr "" "%08lX: Il n'est pas sûr que cette clé appartient vraiment à son\n" "propriétaire mais elle est quand même acceptée\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Cette clé appartient probablement à son propriétaire\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Cette clé nous appartient\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1167,176 +1291,205 @@ msgstr "" "oui à la prochaine question\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "ATTENTION: Utilisation d'une clé sans confiance !\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATTENTION: Cette clé à été révoquée par son propriétaire !\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Cela pourrait signifier que la signature est fausse.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ATTENTION: Cette sous-clé à été révoquée par son propriétaire !\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Note: cette clé a été désactivée.\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Note: Cette clé a expiré !\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "ATTENTION: Cette clé n'est pas certifiée avec une signature de confiance !\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Rien ne dit que la signature appartient à son propriétaire.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATTENTION: Nous ne faisons PAS confiance à cette clé !\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " La signature est certainement FAUSSE.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ATTENTION: Les signatures de cette clé n'ont pas une confiance suffisante !\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Il n'est pas sûr que la signature appartient à son " "propriétaire.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignoré: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ignoré: clé publique déjà présente\n" -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" -"Vous n'avez pas spécifié de nom d'utilisateur. (vous pouvez utiliser «-r»)\n" +"Vous n'avez pas spécifié de nom d'utilisateur. (vous pouvez\n" +"utiliser «-r»)\n" "\n" -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Entrez le nom d'utilisateur: " +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" +"\n" +"Entrez le nom d'utilisateur, en terminant par une ligne vide: " -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Pas d'utilisateur de ce nom.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "ignoré: la clé publique est déjà le récipient par défaut\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "La clé publique est désactivée.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "ignoré: clé publique configurée par --encrypt-to\n" +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "ignoré: clé publique déjà activée\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "récipient par défaut `%s' inconnu\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: erreur pendant la vérification de la clé: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: ignoré: la clé publique est désactivée\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "pas de destinataire valide\n" +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "la préférence %c%lu n'est pas valide\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "préférence %c%lu dupliquée\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "trop de préférences `%c'\n" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "Caractère invalide dans la chaîne\n" + # g10/keygen.c:123 ??? -#: g10/keygen.c:179 +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "écriture de l'auto-signature\n" # g10/keygen.c:161 ??? -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "écriture de la signature de liaison\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "Taille invalide; utilisation de %u bits\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "taille arrondie à %u bits\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Sélectionnez le type de clé désiré:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA et ElGamal (par défaut)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (signature seule)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (chiffrement seul)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (signature et chiffrement)\n" -#: g10/keygen.c:643 +#: g10/keygen.c:784 #, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) RSA (signature et chiffrement)\n" +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (signature seule)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (chiffrement seul)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Votre choix ? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Voulez-vous vraiment créer une clé de signature et de chiffrement ? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "" +"L'utilisation de cet algorithme est déconseillé - faut-il quand-même\n" +"créer la clé ?" -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Choix invalide.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1349,22 +1502,22 @@ msgstr "" " la taille par défaut est 1024 bits\n" " la taille maximale conseillée est 2048 bits\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Quelle taille de clé désirez-vous ? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permet seulement des tailles comprises entre 512 et 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "taille trop petite; 768 est la plus petite valeur permise.\n" - -#: g10/keygen.c:708 +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" msgstr "taille trop petite; 1024 est la plus petite valeur permise pour RSA.\n" +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "taille trop petite; 768 est la plus petite valeur permise.\n" + #. It is ridiculous and an annoyance to use larger key sizes! #. * GnuPG can handle much larger sizes; but it takes an eternity #. * to create such a key (but less than the time the Sirius @@ -1373,12 +1526,12 @@ msgstr "taille trop petite; 1024 est la plus petite valeur permise pour RSA.\n" #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "taille trop importante; %d est la plus grande valeur permise.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1386,11 +1539,11 @@ msgstr "" "Les tailles supérieures à 2048 ne sont pas conseillées car\n" "les calculs prennent VRAIMENT beaucoup de temps !\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Etes-vous sûr de vouloir cette taille ? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1398,21 +1551,17 @@ msgstr "" "D'accord, mais n'oubliez pas que les radiations de votre écran et de votre\n" "clavier sont aussi très vulnérables aux attaques !\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Avez-vous réellement besoin d'une taille aussi grande ? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "La taille demandée est %u bits\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "arrondie à %u bits\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1426,27 +1575,48 @@ msgstr "" " = la clé expire dans n jours\n" " w = la clé expire dans n semaines\n" " m = la clé expire dans n mois\n" -" y = la clé expire dans n ans\n" +" y = la clé expire dans n années\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Spécifiez combien de temps la signature devrait être valide.\n" +" 0 = la signature n'expire pas\n" +" = la signature expire dans n jours\n" +" w = la signature expire dans n semaines\n" +" m = la signature expire dans n mois\n" +" y = la signature expire dans n années\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "La clé est valide pour ? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "La signature est valide pour ? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "valeur invalide\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "La clé n'expire pas du tout\n" +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s n'expire pas du tout\n" #. print the date when the key expires -#: g10/keygen.c:828 +#: g10/keygen.c:992 #, c-format -msgid "Key expires at %s\n" -msgstr "La clé expire le %s\n" +msgid "%s expires at %s\n" +msgstr "%s expire le %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1454,11 +1624,11 @@ msgstr "" "Votre système ne sait pas afficher les dates au-delà de 2038.\n" "Cependant la gestion des dates sera correcte jusqu'à 2106.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Est-ce correct (o/n) ? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1474,44 +1644,44 @@ msgstr "" " « Heinrich Heine (Der Dichter) »\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Nom réel: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Caractère invalide dans le nom\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Le nom ne doit pas commencer par un chiffre\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Le nom doit faire au moins 5 caractères de long\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Adresse e-mail: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Ce n'est pas une adresse e-mail valide\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Commentaire: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Caractère invalide dans le commentaire\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Vous utilisez le jeu de caractères '%s'.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1522,28 +1692,28 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Ne mettez pas d'adresse e-mail dans le nom réel ou dans le commentaire\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" -#: g10/keygen.c:986 +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Changer le (N)om, le (C)ommentaire, l'(E)-mail ou (Q)uitter ? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Changer le (N)om, le (C)ommentaire, l'(E)-mail ou (O)K/(Q)uitter ? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" msgstr "Corrigez l'erreur d'abord\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1551,11 +1721,16 @@ msgstr "" "Vous avez besoin d'un mot de passe pour protéger votre clé secrète.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "le mot de passe n'a pas été répété à l'identique; recommencez.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "le mot de passe n'a pas été correctement répété ; recommencez." -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1567,7 +1742,7 @@ msgstr "" "le désirez, en utilisant ce programme avec l'option « --edit-key ».\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1579,29 +1754,55 @@ msgstr "" "pendant la génération de nombres premiers; cela donne au générateur de\n" "nombres aléatoires une meilleure chance d'avoir assez d'entropie.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "La paire de clés DSA fera 1024 bits.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "La génération de clé a été annulée.\n" -#: g10/keygen.c:1668 +#: g10/keygen.c:1883 g10/keygen.c:1963 #, c-format msgid "writing public key to `%s'\n" msgstr "écriture de la clé publique vers `%s'\n" -#: g10/keygen.c:1669 +#: g10/keygen.c:1884 g10/keygen.c:1965 #, c-format msgid "writing secret key to `%s'\n" msgstr "écriture de la clé secrète vers `%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "" +"aucun portes-clés public n'a été trouvé avec des droits d'écriture : %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "" +"aucun portes-clés secret n'a été trouvé avec des droits d'écriture : %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "erreur durant l'écriture du porte-clés public `%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "erreur durant l'écriture du porte-clés secret `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "les clés publique et secrète ont été créées et signées.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "clé marquée comme ayant une confiance ultime.\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" @@ -1610,13 +1811,13 @@ msgstr "" "utiliser la commande «--edit-key» pour générer une clé secondaire à\n" "cette fin.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "La génération de clé a échoué: %s\n" # on s'amuse comme on peut... -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1624,7 +1825,7 @@ msgstr "" "la clé a été créée %lu seconde dans le futur (rupture spatio-temporelle ou\n" "problème d'horloge)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1632,307 +1833,367 @@ msgstr "" "la clé a été créée %lu secondes dans le futur (rupture spatio-temporelle ou\n" "problème d'horloge\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "" +"NOTE: créer des sous-clés pour des clés v3 n'est pas conforme à OpenPGP\n" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Créer vraiment ? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output n'est pas compatible avec cette commande\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' déjà compressé\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: impossible d'ouvrir: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "erreur pendant la création du mot de passe: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: ATTENTION: fichier vide\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"le chiffrement RSA ne se fait qu'avec des clés de moins de 2048 bits\n" +"en mode --pgp2\n" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "lecture de `%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" +"impossible d'utiliser le chiffre IDEA pour toutes les clés vers\n" +"lesquelles vous chiffrez.\n" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s chiffré pour: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 +#: g10/delkey.c:69 g10/export.c:141 #, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: utilisateur non trouvé: %s\n" +msgid "key `%s' not found: %s\n" +msgstr "clé '%s' introuvable: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "erreur pendant la lecture du bloc de clé : %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "clé %08lX: ce n'est pas une clé rfc2440 - ignorée\n" -#: g10/export.c:175 +#: g10/export.c:180 #, c-format msgid "key %08lX: not protected - skipped\n" msgstr "clé %08lX: non protégée - ignorée\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "clé %08lX: clé de style PGP 2.x - ignorée\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "ATTENTION: rien n'a été exporté\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "trop d'entrées dans le cache pk - désactivé\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "trop d'entrées dans le cache unk - désactivé\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[Nom utilisateur introuvable]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, fuzzy, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "La clé invalide %08lX a été rendu valide par --always-trust\n" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "" "utilisation de la clé secondaire %08lX à la place de la clé\n" "principale %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "clé %08lX: clé secrète sans clé publique - non prise en compte\n" -#: g10/getkey.c:2513 -msgid "[User id not found]" -msgstr "[Nom utilisateur introuvable]" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "un bloc de type %d a été ignoré\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu clés traitées jusqu'ici\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "erreur pendant la lecture de `%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr " Quantité totale traitée: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " nouvelles sous-clés: %lu\n" +msgstr " nouvelles clés ignorées: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sans nom d'utilisateur: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " importée: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " inchangée: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " nouveaux noms d'utilisateurs: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " nouvelles sous-clés: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " nouvelles signatures: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr " nouvelles révocations de clés: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " clés secrètes lues: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr " clés secrètes importées: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " clés secrètes inchangées: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "clé %08lX: pas de nom d'utilisateur\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "clé %08lX: utilisateur non signé par lui-même accepté: '" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "clé %08lX: pas de nom d'utilisateur valide\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "cela peut provenir d'une auto-signature manquante\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "clé %08lX: clé publique pas trouvée: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "clé %08lX: ce n'est pas une clé rfc2440 - ignorée\n" +msgstr "clé %08lX: nouvelle clé - ignorée\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "aucun porte-clé n'a été trouvé avec des droits d'écriture : %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "écriture de `%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "erreur durant l'écriture du porte-clés `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "clé %08lX: clé publique importée\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "clé %08lX: ne ressemble pas à notre copie\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "clé %08lX: impossible de trouver le bloc de clés original: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "clé %08lX: impossible de lire le bloc de clés original: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "clé %08lX: un nouvel utilisateur\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "clé %08lX: %d nouveaux utilisateurs\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "clé %08lX: une nouvelle signature\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "clé %08lX: %d nouvelles signatures\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "clé %08lX: une nouvelle sous-clé\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "clé %08lX: %d nouvelles sous-clés\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "clé %08lX: n'a pas changé\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "pas de porte-clés par défaut: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "clé %08lX: clé secrète importée\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "clé %08lX: déjà dans le porte-clés secret\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "clé %08lX: clé secrète pas trouvée: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "clé %08lX: pas de clé publique - le certificat de révocation ne peut\n" "être appliqué\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "clé %08lX: certificat de révocation invalide: %s - rejeté\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "clé %08lX: certificat de révocation importé\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "clé %08lX: pas d'utilisateur pour la signature\n" -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" msgstr "clé %08lX: algorithme de clé publique non supporté\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" msgstr "clé %08lX: auto-signature invalide\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "clé %08lX: pas de sous-clé pour relier la clé\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "clé %08lX: algorithme de clé publique non supporté\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "clé %08lX: liaison avec la sous-clé invalide\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "clé %08lX: utilisateur non signé par lui-même accepté: '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "clé %08lX: utilisateur non pris en compte: '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "clé %08lX: sous-clé non prise en compte\n" @@ -1941,93 +2202,200 @@ msgstr "cl #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "clé %08lX: signature non exportable (classe %02x) - ignorée\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "clé %08lX: certificat de révocation au mauvais endroit - ignorée\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "clé %08lX: certificat de révocation invalide: %s - ignorée\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "clé %08lX: nom d'utilisateur en double fusionné\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "clé %08lX: certificat de révocation ajouté\n" -#: g10/import.c:1130 g10/import.c:1183 +#: g10/import.c:1231 #, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "clé %08lX: notre copie n'a pas d'auto-signature\n" +msgid "key %08lX: direct key signature added\n" +msgstr "clé %08lX: ajout de la signature de clé directe\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[révocation]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[auto-signature]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "une mauvaise signature\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d mauvaises signatures\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "une signature non vérifiée à cause d'une clé manquante\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signatures non vérifiées à cause de clés manquantes\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "une signature non vérifiée à cause d'une erreur\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signatures non vérifiées à cause d'erreurs\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "un nom d'utilisateur sans auto-signature valide détecté\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d nom d'utilisateurs sans auto-signature valide détecté\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 -#, c-format -msgid "Already signed by key %08lX\n" -msgstr "Déjà signé par la clé %08lX\n" +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Le nom d'utilisateur \"%s\" est révoqué.\n" -#: g10/keyedit.c:319 +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +#, fuzzy +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Channel #bsdfr is +k, but has no key. This server is broken" + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr "" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, fuzzy, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Votre signature actuelle sur \"%s\"\n" +"est locale.\n" +"\n" +"Voulez vous la rendre complètement exportable ?\n" + +#: g10/keyedit.c:368 +#, fuzzy +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" +"Votre signature actuelle sur \"%s\"\n" +"est locale.\n" +"\n" +"Voulez vous la rendre complètement exportable ?\n" + +#: g10/keyedit.c:388 +#, fuzzy, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" a déjà été %ssigné par la clé %08lX\n" + +#: g10/keyedit.c:393 +#, fuzzy, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" a déjà été %ssigné par la clé %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Rien à signer avec la clé %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Cette clé a expiré !" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Cette clé va expirer le %s.\n" + +#: g10/keyedit.c:444 +#, fuzzy +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Voulez-vous que votre signature expire en même temps ? (o/n) " + +#: g10/keyedit.c:477 +#, fuzzy +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" +"il n'est possible de signer avec des clés de style PGP 2.x uniquement\n" +"en mode --pgp2\n" + +#: g10/keyedit.c:479 +#, fuzzy +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "ce message ne sera pas forcément utilisable par PGP 2.x\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Avec quel soin avez-vous vérifié que la clé que vous allez signer\n" +"appartient réellement à la personne sus-nommée ? Si vous ne savez\n" +"quoi répondre, entrez \"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Je ne répondrai pas.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Je n'ai pas vérifié du tout.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) J'ai un peu vérifié.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) J'ai vérifié très soigneusement.%s\n" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2035,47 +2403,79 @@ msgstr "" "Etes-vous vraiment sûr(e) que vous voulez signer cette clé\n" "avec la vôtre: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 msgid "" +"\n" "The signature will be marked as non-exportable.\n" -"\n" msgstr "" -"La signature sera marquée comme non-exportable.\n" "\n" +"La signature sera marquée comme non-exportable.\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"La signature sera marquée comme non-révocable.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Je n'ai pas du tout vérifié cette clé.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"J'ai un peu vérifié cette clé.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"J'ai vérifié cette clé avec grand soin.\n" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Signer réellement ? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "la signature a échoué: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Cette clé n'est pas protégée.\n" -#: g10/keyedit.c:426 +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" msgstr "Les parties secrètes de la clé principale ne sont pas disponibles.\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "La clé est protégée.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossible d'éditer cette clé: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "Entrez le nouveau mot de passe pour cette clé secrète.\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2084,422 +2484,558 @@ msgstr "" "*mauvaise* idée\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Voulez-vous vraiment faire cela ? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "replacer la signature d'une clé à l'endroit correct\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "quitter ce menu" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "enregistrer" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "enregistrer et quitter" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "help" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "afficher cette aide" # g10/keyedit.c:556 ??? -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "afficher l'empreinte" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "lister" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "lister la clé et les noms d'utilisateurs" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "sélectionner le nom d'utilisateur N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "clé" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "sélectionner la clé secondaire N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "vérifier" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "lister les signatures" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "signer" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "signer la clé" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsigner" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "signer la clé localement" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsigner" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "signer la clé de façon non-révocable" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsigner" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "signer la clé de façon locale et non-révocable" + +#: g10/keyedit.c:832 msgid "debug" msgstr "déboguer" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "aj.ut" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "ajouter un utilisateur" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "aj.photo" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "ajouter une photo d'identité" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "suppr.ut" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "enlever un utilisateur" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "suppr.photo" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "aj.clé" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "ajouter une clé secondaire" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "suppr.clé" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "enlever une clé secondaire" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "suppr.sign" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "supprimer les signatures" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "changer la date d'expiration" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "principale" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "marquer le nom d'utilisateur comme principal" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "changer" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "passer de la liste des clés secrètes aux clés privées et inversement" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "préf" -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "lister les préférences" +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "lister les préférences (expert)" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "montr.préf" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "lister les préférences (bavard)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "mettre.préf" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "donner la liste de préférences" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "préf.màj" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "préférences mises à jour" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "mot.pas" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "changer le mot de passe" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "confi." -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "changer la confiance" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "révoquer les signatures" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "revclé" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "révoquer une clé secondaire" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "désactiver" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "désactiver une clé" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "activer" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "activer une clé" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "montr.photo" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "montrer la photo d'identité" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "impossible de faire cela en mode automatique\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "erreur pendant la lecture du bloc de clé secrète `%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "La clé secrète est disponible.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Commande> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "Il faut la clé secrète pour faire cela.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" msgstr "Utilisez la commande «toggle» d'abord.\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "La clé est révoquée.\n" + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Signer vraiment tous les utilisateurs ? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Aide: Sélectionner les utilisateurs à signer\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "la mise à jour de la base de confiance a échoué: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "Cette commande n'est pas admise en mode %s.\n" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Vous devez sélectionner au moins un utilisateur.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Vous ne pouvez pas supprimer le dernier utilisateur !\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Enlever réellement tous les utilisateurs sélectionnés ? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Enlever réellement cet utilisateur ? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Vous devez sélectionner au moins une clé.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Voulez-vous vraiment supprimer les clés sélectionnées ? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Voulez-vous vraiment supprimer cette clé ? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Voulez-vous vraiment révoquer les clés sélectionnées ? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Voulez-vous vraiment révoquer cette clé ? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "Enlever réellement les préférences des utilisateurs sélectionnés ? " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Faut-il vraiment mettre à jour les préférences ? " + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Enregistrer les changements? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Quitter sans enregistrer? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "la mise à jour a échoué: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "la mise à jour de la clé secrète a échoué: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "La clé n'a pas changé donc la mise à jour est inutile.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Commande invalide (essayez «help»)\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Cette clé peut être révoquée par la clé %s %s%s\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (sensible)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX créée: %s expire: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " confiance: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Cette clé a été désactivée" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "clé %08lX: la sous-clé a été révoquée !\n" +msgstr "rev! la sous-clé a été révoquée: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr " nouvelles révocations de clés: %lu\n" +msgstr "rev- une révocation truquée a été trouvée\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" +msgstr "rev? problème de vérification de la révocation: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" msgstr "" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"ATTENTION: Cette clé possède déjà une photo d'identité.\n" +" Ajouter une autre photo d'identité peut poser des\n" +" problèmes avec certaines versions de PGP.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Channel #bsdfr is +k, but has no key. This server is broken" + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Vous ne pouvez avoir qu'une seule photo d'identité par clé.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"ATTENTION: C'est une clé du style PGP2. Ajouter une photo\n" +"d'identité peut empêcher certaines versions de PGP d'accepter\n" +"cette clé\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" +"Vous ne pouvez pas ajouter de photo d'identité à une clé du style PGP2.\n" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Supprimer cette bonne signature ? (o/N/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Supprimer cette signature invalide ? (o/N/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Supprimer cette signature inconnue ? (o/N/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Faut-il vraiment supprimer cette auto-signature ? (o/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "%d signature supprimée.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d signatures supprimées\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Rien n'a été supprimé.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Enlevez les sélections des clés secrètes.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Vous devez sélectionner au plus une clé secondaire.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Changer la date d'expiration d'une clé secondaire.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Changer la date d'expiration de la clé principale.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Vous ne pouvez pas changer la date d'expiration d'une clé v3\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Pas de signature correspondante dans le porte-clés secret\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Vous devez sélectionner exactement un utilisateur.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Pas d'utilisateur avec l'index %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Pas de clé secondaire avec l'index %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "nom d'utilisateur: «" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2508,245 +3044,380 @@ msgstr "" "»\n" "signé avec votre clé %08lX à %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, fuzzy, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"»\n" +"signé avec votre clé %08lX à %s\n" + +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "Cette clé va expirer le %s.\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Channel #bsdfr is +k, but has no key. This server is broken" + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Générer un certificat de révocation pour cette signature ? (o/N)" #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Vous avez signé ces noms d'utilisateurs:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 -#, c-format -msgid " signed by %08lX at %s\n" -msgstr " signé par %08lX à %s\n" +#: g10/keyedit.c:2504 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr " signé par %08lX à %s%s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " révoqué par %08lX à %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Vous êtes sur le point de révoquer ces signatures:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " signé par %08lX à %s%s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " msgstr "Faut-il vraiment générer les certificats de révocation ? (o/N)" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "pas de clé secrète\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "armure invalide" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "revclé" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Politique de signature: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "ATTENTION: des données de notation invalides ont été détectées\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Notation de signature: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "illisible par un humain" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Porte-clés" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 +#: g10/keylist.c:423 g10/mainproc.c:856 #, c-format msgid " [expires: %s]" msgstr " [expire: %s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Empreinte:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Empreinte :" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Empreinte de la clé =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "données chiffrées avec %s\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "chiffré avec l'algorithme inconnu %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "la clé publique est %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "données chiffrées par clé publique: bonne clé de chiffrement (DEK)\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "chiffré avec une clé de %u bits %s, ID %08lX, créée le %s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "chiffré avec une clé %s, %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "aucune clé secrète n'est disponible pour le déchiffrement\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "le déchiffrement par clé publique a échoué: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "on suppose des données chiffrées avec %s\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" +"L'algorithme IDEA n'est pas disponible, avec un peu de chance %s marchera\n" +"peut-être\n" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "le déchiffrement a réussi\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATTENTION: le message chiffré a été manipulé !\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "le déchiffrement a échoué: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTE: l'expéditeur a demandé «pour vos yeux seulement»\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "nom de fichier original: '%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "révocation autonome - utilisez «gpg --import» pour l'appliquer\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "ATTENTION: des données de notation invalides ont été détectées\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Notation: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Politique: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "vérification de signature supprimée\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "le traitement de ces signatures multiples est impossible\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Signature faite %.*s avec une clé %s ID %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "MAUVAISE signature de \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Signature expirée de \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Bonne signature de \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[incertain]" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossible de vérifier la signature: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "la signature n'est pas détachée\n" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "signature autonome de classe 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "signature d'un ancien style (PGP 2.x)\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "paquet racine invalide détecté dans proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossible d'empêcher la génération de fichiers «core»: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Les algorithmes expérimentaux ne devraient pas être utilisés !\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "" "Cet algorithme de chiffrement est déconseillé; utilisez-en un\n" "plus standard !\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Attention: propriétaire de %s \"%s\" peu sûr\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Attention: permissions de %s \"%s\" peu sûres\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "le module de chiffrement IDEA n'est pas présent\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" +"voir http://www.gnupg.org/fr/why-not-idea.html pour plus d'informations\n" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossible de gérer l'algorithme à clé publique %d\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "un sous-paquet de type %d possède un bit critique\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" -msgstr "" +msgstr "gpg-agent n'est pas disponible dans cette session\n" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "impossible d'obtenir le pid du client pour l'agent\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "" +"impossible d'obtenir le descripteur de lecture du serveur\n" +"pour l'agent\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "" +"impossible d'obtenir le descripteur d'écriture du serveur pour l'agent\n" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "la variable d'environnement GPG_AGENT_INFO est mal définie\n" -#: g10/hkp.c:158 g10/passphrase.c:223 +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "le protocole gpg-agent version %d n'est pas supporté\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 #, c-format msgid "can't connect to `%s': %s\n" msgstr "impossible de se connecter à `%s': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "problème de communication avec ssh-agent\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "problème avec l'agent - arrêt d'utilisation de l'agent\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (ID clé principale %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" "Vous avez besoin d'un mot de passe pour déverrouiller la clé secrète pour\n" -"l'utilisateur: \"" +"l'utilisateur:\n" +"\"%.*s\"\n" +"clé %u bits %s, ID %08lX, créée %s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Entrez le mot de passe: " +msgstr "Entrez le mot de passe\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Répétez le mot de passe: " +msgstr "Répétez le mot de passe\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "" +msgstr "mot de passe trop long\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "réponse de l'agent invalide\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "annulé par l'utilisateur\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "problème avec l'agent : l'agent renvoie 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2756,20 +3427,20 @@ msgstr "" "Vous avez besoin d'un mot de passe pour déverrouiller la clé secrète pour\n" "l'utilisateur: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "clé de %u bits %s, ID %08lX, créée le %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "impossible de demander un mot de passe en mode automatique\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Entrez le mot de passe: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Répétez le mot de passe: " @@ -2779,150 +3450,200 @@ msgstr "" "les données ne sont pas enregistrées; utilisez l'option «--output» pour\n" "les enregistrer\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "erreur pendant la création de `%s': %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" msgstr "Signature détachée.\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Entrez le nom du fichier de données: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "lecture de l'entrée standard...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "pas de données signées\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossible d'ouvir les données signées `%s'\n" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "destinataire anonyme; essai de la clé secrète %08lX...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "d'accord, nous sommes le récipient anonyme.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "l'ancien codage de la clé de chiffrement (DEK) n'est pas supporté\n" -#: g10/pubkey-enc.c:216 +#: g10/pubkey-enc.c:177 #, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "l'algorithme de chiffrement %d est inconnu ou désactivé\n" +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "l'algorithme de chiffrement %d%s est inconnu ou désactivé\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "" "NOTE: l'algorithme de chiffrement %d n'a pas été trouvé dans les " "préférences\n" -#: g10/pubkey-enc.c:261 +#: g10/pubkey-enc.c:242 #, c-format msgid "NOTE: secret key %08lX expired at %s\n" msgstr "NOTE: la clé secrète %08lX a expiré le %s\n" -#: g10/hkp.c:62 +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "requête de la clé %08lX de %s...\n" +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "requête de la clé %08lX du serveur de clés HKP %s\n" -#: g10/hkp.c:75 +#: g10/hkp.c:94 #, c-format msgid "can't get key from keyserver: %s\n" msgstr "impossible d'obtenir les clés du serveur: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "aucun serveur de clés n'est connu (utilisez l'option «--keyserver»)\n" - -#: g10/hkp.c:106 -#, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s: l'identification de la clé est invalide\n" - -#: g10/hkp.c:182 +#: g10/hkp.c:171 #, c-format msgid "error sending to `%s': %s\n" msgstr "erreur pendant l'envoi de `%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" msgstr "l'envoi à `%s' s'est déroulé avec succès (résultat=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" msgstr "l'envoi à `%s' a échoué: le résultat est %u\n" -#: g10/seckey-cert.c:89 +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "recherche de \"%s\" du serveur HKP %s\n" + +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "impossible de chercher une clé dans le serveur : %s\n" + +#: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "les parties secrètes ne sont pas disponibles\n" -#: g10/seckey-cert.c:95 +#: g10/seckey-cert.c:59 #, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "l'algorithme de protection %d n'est pas supporté\n" +msgid "protection algorithm %d%s is not supported\n" +msgstr "l'algorithme de protection %d%s n'est pas supporté\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "Mot de passe invalide; réessayez...\n" +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Mot de passe invalide ; réessayez" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "ATTENTION: Clé faible détectée - changez encore le mot de passe.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Ceci est une clé ElGamal générée par PGP qui n'est PAS sûre pour les\n" "signatures !\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "la clé publique est plus récente de %lu seconde que la signature\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "la clé publique est plus récente de %lu secondes que la signature\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "NOTE: la clé de signature a expiré le %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "NOTE: la clé de signature %08lX a expiré le %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "la signature est supposée être fausse car un bit critique est\n" "inconnu\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"AVERTISSEMENT: impossible de faire une expansion à base de %% de l'url\n" +"de politique (trop grande). Utilisation de la version non expansée.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "Impossible de vérifier la signature créée: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "Signature %s de: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "AVERTISSEMENT: `%s' est un fichier vide\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"il n'est possible de signer avec des clés de style PGP 2.x uniquement\n" +"en mode --pgp2\n" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "impossible de créer %s: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "signature:" -#: g10/sign.c:583 +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"il n'est possible de faire une signature en texte clair avec des clés\n" +"de style PGP 2.x qu'en mode --pgp2\n" + +#: g10/sign.c:953 #, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "ATTENTION: `%s' est un fichier vide\n" +msgid "%s encryption will be used\n" +msgstr "le chiffrement %s sera utilisé\n" #: g10/textfilter.c:134 #, c-format @@ -2934,435 +3655,210 @@ msgstr "impossible de traiter les lignes plus longues que %d caract msgid "input line longer than %d characters\n" msgstr "la ligne d'entrée est plus longue que %d caractères\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "enregistrement de base de confiance %lu: lseek a échoué: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "enregistrement de la base de confiance %lu: l'écriture a échoué (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "transaction de base de confiance trop volumineuse\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: impossible d'accéder: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: le répertoire n'existe pas !\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: impossible de créer: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: impossible de créer le verrouillage\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: impossible de créer le verrou\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: impossible de créer: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: impossible de créer un enregistrement de version: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: base de confiance invalide créée\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: base de confiance créée\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: base de confiance invalide\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: la création de la table de hachage a échoué: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: erreur pendant la mise à jour de l'enregistrement de version: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: erreur pendant la lecture de l'enregistrement de version: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: erreur pendant l'écriture de l'enregistrement de version: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de confiance: «lseek()» a échoué: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de confiance: la lecture a échoué (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: ce n'est pas un fichier de base de confiance\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: enregistrement de version avec un numéro %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: version %d du fichier invalide\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: erreur pendant la lecture de l'enregistrement libre: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "" "%s: erreur pendant l'écriture de l'enregistrement de\n" "répertoire: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: n'a pu mettre un enregistrement à zéro: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: impossible d'ajouter un enregistrement: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "la base de confiance est corrompue; exécutez «gpg --fix-trustdb».\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' n'est pas une identification de clé longue valide\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "clé %08lX: acceptée comme clé de confiance.\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "la clé %08lX apparaît plusieurs fois dans la base de confiance\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "clé %08lX: pas de clé publique pour la clé de confiance - ignorée\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" -"enregistrement de confiance %lu, type de requête %d: la lecture a échoué: " -"%s\n" +"enregistrement de confiance %lu, type de requête %d: la lecture a échoué: %" +"s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "l'enregistrement de confiance %lu: n'est pas du type demandé %d\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "enregistrement de confiance %lu, type %d: l'écriture a échoué: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "enregistrement de confiance %lu: la suppression a échoué: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de confiance: la synchronisation a échoué: %s\n" -#: g10/trustdb.c:377 +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "vérification de la base de confiance inutile\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, c-format -msgid "error reading dir record for LID %lu: %s\n" +msgid "next trustdb check due at %s\n" +msgstr "la prochaine vérification de la base de confiance aura lieu le %s\n" + +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "vérifier la base de confiance\n" + +#: g10/trustdb.c:933 +#, c-format +msgid "public key %08lX not found: %s\n" +msgstr "clé publique %08lX non trouvée : %s\n" + +#: g10/trustdb.c:1515 +#, c-format +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "la clé publique de la clé de confiace ultime %08lX est introuvable\n" + +#: g10/trustdb.c:1593 +#, c-format +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -"erreur pendant la lecture de l'enregistrement de répertoire pour\n" -"le LID %lu: %s\n" +"vérification à la profondeur %d signé=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" -#: g10/trustdb.c:384 -#, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: enregistrement de répertoire attendu, a reçu le type %d\n" - -#: g10/trustdb.c:389 -#, c-format -msgid "no primary key for LID %lu\n" -msgstr "pas de clé principale pour le LID %lu\n" - -#: g10/trustdb.c:394 -#, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "erreur pendant la lecture de la clé principale pour le LID %lu: %s\n" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record a échoué: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "%s: l'identification de la clé est invalide\n" - -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "clé %08lX: impossible de la mettre dans la base de confiance\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "clé %08lX: l'enregistrement de requête a échoué\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "clé %08lX: déjà dans la table des clés certifiées\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "clé %08lX: acceptée comme clé certifiée.\n" - -#: g10/trustdb.c:547 -#, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "clé %08lX: non protégée - ignorée\n" - -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "NOTE: la clé secrète %08lX n'est PAS protégée.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "clé %08lX: les clés secrète et publique ne correspondent pas\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "l'énumération des clés secrètes a échoué: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "clé %08lX.%lu: bonne liaison avec la sous-clé\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "clé %08lX.%lu: liaison avec la sous-clé invalide: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "clé %08lX.%lu: révocation de clé valide\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "clé %08lX.%lu: révocation de sous-clé invalide: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "clé %08lX.%lu: révocation de sous-clé valide\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Bonne auto-signature" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Auto-signature invalide" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "" -"La révocation valide de nom d'utilisateur a été ignorée car l'auto-\n" -"signature est plus récente" - -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Révocation de nom d'utilisateur valide" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Révocation de nom d'utilisateur invalide" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Certificat de révocation valide" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Bon certificat" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Révocation de certificat invalide" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Certificat invalide" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "" -"l'enregistrement de signature %lu[%d] pointe vers un mauvais\n" -"enregistrement de répertoire\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "certificat dupliqué - supprimé" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir a échoué: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: l'insertion a échoué: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: l'insertion a échoué: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: inséré\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "erreur pendant la lecture de l'enregistrement de répertoire: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu clés traitées\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu clés avec erreurs\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu clés insérées\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "l'énumération des blocs de clés a échoué: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: enregistrement de répertoire sans clé - ignoré\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu à cause de nouvelles clés publiques\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu clés ignorées\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu clés mises à jour\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Ooops, pas de clé\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Ooops, pas de nom d'utilisateur\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "" -"check_trust: la recherche d'enregistrement de répertoire a échoué: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "clé %08lX: l'insertion d'enregistrement de confiance a échoué: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "clé %08lX.%lu: insérée dans la base de confiance\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" -msgstr "" -"clé %08lX.%lu: créée dans le futur (voyage temporel ou\n" -"problème d'horloge)\n" - -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "clé %08lX.%lu: a expiré le %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "clé %08lX.%lu: la vérification de confiance a échoué: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "l'utilisateur '%s' n'a pas été trouvé: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "problème de recherche de '%s' dans la base de confiance: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "l'utilisateur '%s' n'est pas dans la base de confiance - insertion\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "impossible d'insérer '%s' dans la base de confiance: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "" -"ATTENTION: les enregistrements de préférences longs ne sont pas encore\n" -"supportés\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3372,48 +3868,34 @@ msgstr "" "Rappelez-vous bien que le fichier de signature (.sig ou .asc)\n" "doit être le premier fichier indiqué sur la ligne de commande.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "" "la ligne d'entrée %u est trop longue ou il manque un caractère de saut\n" "de ligne\n" -#: g10/ringedit.c:296 -#, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: impossible de créer le porte-clés: %s\n" - -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: porte-clés créé\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" -"ATTENTION: 2 fichiers avec des informations confidentielles existent.\n" +"la clé n'est pas marquée comme non-sûre; on ne peut pas l'utiliser avec le\n" +"pseudo-générateur de nombres aléatiores !\n" -#: g10/ringedit.c:1026 g10/ringedit.c:1344 +#: g10/skclist.c:138 #, c-format -msgid "%s is the unchanged one\n" -msgstr "%s est le fichier original\n" +msgid "skipped `%s': duplicated\n" +msgstr "`%s' a été ignoré: dupliqué\n" -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s est le nouveau\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Réparez ce problème de sécurité possible\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "`%s' a été ignoré: %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "ignoré: clé secrète déjà présente\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3432,93 +3914,101 @@ msgstr "Le fichier `%s' existe. " msgid "Overwrite (y/N)? " msgstr "Réécrire (o/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: suffixe inconnu\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Entrez le nouveau nom de fichier" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "écriture vers la sortie standard\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "les données signées sont supposées être dans `%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: nouveau fichier d'options créé\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: impossible de créer le répertoire: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: répertoire créé\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "" "vous devez redémarrer GnuPG pour qu'il puisse lire le nouveau\n" "fichier «options»\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "chiffré avec l'algorithme inconnu %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "données chiffrées avec %s\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATTENTION: Le message a été chiffré avec une clé faible pendant le\n" "chiffrement symétrique.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problème de gestion des paquets chiffrés\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "clé faible générée - nouvel essai\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "impossible d'éviter une clé faible pour le chiffrement symétrique:\n" "%d essais ont eu lieu !\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "il y a une clé secrète pour cette clé publique !\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "utiliser l'option «--delete-secret-key» pour l'effacer d'abord.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "impossible de faire cela en mode automatique sans «--yes»\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Enlever cette clé du porte-clés ? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "C'est une clé secrète - faut-il vraiment l'effacer ? " +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "la suppression du bloc de clés a échoué : %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "il y a une clé secrète pour la clé publique \"%s\" !\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "utiliser l'option «--delete-secret-keys» pour l'effacer d'abord.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3531,21 +4021,33 @@ msgstr "" "certificats (créé implicitement)" #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Pour mettre en place le Réseau de confiance (Web of Trust), GnuPG a\n" +"besoin de savoir en quelles clés votre confiance est ultime - ce sont\n" +"en général les clés dont vous avez accès à la clé secrète. Répondez\n" +"\"oui\" pour indiquer que votre confiance en cette clé est ultime\n" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "Si vous voulez utiliser cette clé révoquée quand-même, répondez «oui»." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Si vous voulez utiliser cette clé peu sûre quand-même, répondez «oui»." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Entrez le nom d'utilisateur de la personne à qui vous voulez envoyer\n" "le message." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3583,7 +4085,7 @@ msgstr "" "La première clé (clé principale) doit toujours être capable de signer ;\n" "c'est pourquoi la clé ElGamal de chiffrement seul est alors désactivée." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3593,16 +4095,16 @@ msgstr "" "conseillées car tous les programmes ne les supportent pas et les\n" "signatures créées avec elles sont plutôt longues et très lentes à vérifier." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Entrez la taille de la clé" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Répondez «oui» ou «non»" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3614,19 +4116,19 @@ msgstr "" "mauvais - le système essaierait d'interpréter la valeur donnée comme un\n" "intervalle." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Entrez le nom du propriétaire de la clé" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "entrez une adresse e-mail optionnelle mais hautement recommandée" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Entrez un commentaire optionnel" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3640,15 +4142,82 @@ msgstr "" "O pour continuer à générer la clé.\n" "Q pour arrêter de générer de clé." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Répondez «oui» (ou simplement «o») pour générer la sous-clé" -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Quand vous signez un nom d'utilisateur d'une clé, vous devriez d'abord\n" +"vérifier que la clé appartient à la personne nommée. Il est utile que\n" +"les autres personnes sachent avec quel soin vous l'avez vérifié.\n" +"\n" +"\"0\" signifie que vous n'avez pas d'opinon.\n" +"\n" +"\"1\" signifie que vous croyez que la clé appartient à la personne qui\n" +"dit la posséder mais vous n'avez pas pu vérifier du tout la clé.\n" +"C'est utile lorsque vous signez la clé d'un pseudonyme.\n" +"\n" +"\"2\" signifie que vous avez un peu vérifié la clé. Par exemple, cela\n" +"pourrait être un vérification de l'empreinte et du nom de\n" +"l'utilisateur avec la photo.\n" +"\n" +"\"3\" signifie que vous avez complètement vérifié la clé. Par exemple,\n" +"cela pourrait être une vérification de l'empreinte, du nom de\n" +"l'utilisateur avec un document difficile à contrefaire (comme un\n" +"passeport) et de son adresse e-mail (vérifié par un échange de\n" +"courrier électronique).\n" +"\n" +"Notez bien que les exemples donnés ci-dessus pour les niveaux 2 et\n" +"3 ne sont *que* des exemples.\n" +"C'est à vous de décider quelle valeur mettre quand vous signez\n" +"les clés des autres personnes.\n" +"\n" +"Si vous ne savez pas quelle réponse est la bonne, répondez \"0\"." + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Répondez «oui» si vous voulez signer TOUS les noms d'utilisateurs" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3656,11 +4225,11 @@ msgstr "" "Répondez «oui» si vous voulez vraiment supprimer ce nom\n" "d'utilisateur. Tous les certificats seront alors perdus en même temps !" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Répondez «oui» s'il faut vraiment supprimer la sous-clé" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3671,7 +4240,7 @@ msgstr "" "établir une connection de confiance vers la clé ou une autre clé certifiée\n" "par celle-là." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3683,7 +4252,7 @@ msgstr "" "vous soyez sûr de quelle clé a été utilisée car cette clé de signature\n" "peut établir une connection de confiance vers une autre clé déjà certifiée." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." @@ -3691,7 +4260,7 @@ msgstr "" "Cette signature n'est pas valide. Vous devriez la supprimer de votre\n" "porte-clés." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3705,28 +4274,35 @@ msgstr "" "cette auto-signature est invalide pour une certaine raison et si une autre\n" "est disponible." -#: g10/helptext.c:202 +#: g10/helptext.c:231 +#, fuzzy msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" msgstr "" -"Entrez le mot de passe; c'est une phrase secrète \n" -" Blurb, blurb,.... " +"Changer les préférences de tous les noms d'utilisateurs (ou juste\n" +"ceux qui sont sélectionnés) vers la liste actuelle. La date de toutes\n" +"les auto-signatures seront avancées d'une seconde.\n" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Entrez le mot de passe ; c'est une phrase secrète \n" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Répétez le dernier mot de passe pour être sûr de ce que vous avez tapé." -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "Donnez le nom du fichier auquel la signature se rapporte" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Répondez «oui» s'il faut vraiment réécrire le fichier" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3734,15 +4310,14 @@ msgstr "" "Entrez le nouveau nom de fichier. Si vous tapez simplement ENTRÉE le\n" "fichier par défaut (indiqué entre crochets) sera utilisé." -#: g10/helptext.c:229 -#, fuzzy +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3764,7 +4339,7 @@ msgstr "" " utilisé. Cela sert généralement à indiquer qu'une adresse e-mail\n" " est invalide.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" @@ -3774,54 +4349,111 @@ msgstr "" "avez émis ce certificat de révocation. Essayez de garder ce texte concis.\n" "Une ligne vide délimite la fin du texte.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Pas d'aide disponible" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Pas d'aide disponible pour `%s'" -#~ msgid "certificate read problem: %s\n" -#~ msgstr "problème lors de lecture du certificat: %s\n" +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "erreur durant la création du porte-clés `%s' : %s\n" -#~ msgid "RSA key cannot be used in this version\n" -#~ msgstr "les clés RSA ne peuvent être utilisées dans cette version\n" +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "le changement de permission de `%s' a échoué: %s\n" -#~ msgid "No key for user ID\n" -#~ msgstr "Pas de clé pour l'utilisateur\n" +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "le porte-clés `%s` a été créé\n" -#~ msgid "No user ID for key\n" -#~ msgstr "Pas d'utilisateur pour la clé\n" +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "la reconstruction du cache de porte-clés a échoué : %s\n" -#~ msgid "no default public keyring\n" -#~ msgstr "pas de porte-clés public par défaut\n" +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "" +"ATTENTION: 2 fichiers avec des informations confidentielles existent.\n" -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "impossible de verrouiller le porte-clés `%s': %s\n" +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s est le fichier original\n" -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "clé %08lX: impossible de lire le bloc de clés original: %s\n" +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s est le nouveau\n" -#~ msgid "%s: user not found\n" -#~ msgstr "%s: utilisateur non trouvé\n" +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Réparez ce problème de sécurité possible\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "vérification du porte-clés `%s'\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu clés traitées jusqu'ici (%lu signatures)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu clés vérifiées (%lu signatures)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: porte-clés créé\n" + +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Êtes-vous sûr de vouloir le signer ?\n" + +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr " Êtes-vous sûr de vouloir la signer ?\n" + +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "Signer réellement ? " + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Avez-vous réellement besoin d'une taille aussi grande ? " + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "clé %08lX: notre copie n'a pas d'auto-signature\n" + +#~ msgid " signed by %08lX at %s\n" +#~ msgstr " signé par %08lX à %s\n" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key utilisateur" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key utilisateur" + +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key utilisateur" + +#~ msgid "Enter the user ID: " +#~ msgstr "Entrez le nom d'utilisateur: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "ignoré: clé publique configurée par --encrypt-to\n" #~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" +#~ "\n" +#~ "WARNING: This is a PGP2-style key\n" #~ msgstr "" -#~ "Les clés RSA sont déconseillées: considérez créer une nouvelle clé\n" -#~ "et l'utiliser dans l'avenir\n" - -#~ msgid "not processed" -#~ msgstr "non traité" - -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "" -#~ "le sceau (MDC) est supposé être faux car un bit critique est inconnu\n" - -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "la clé n'est pas marquée comme non-sûre; on ne peut pas l'utiliser avec le\n" -#~ "pseudo-générateur de nombres aléatiores !\n" +#~ "\n" +#~ "ATTENTION: c'est une clé de style PGP2\n" diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 000000000..dfa05c70e --- /dev/null +++ b/po/gl.po @@ -0,0 +1,4681 @@ +# Galician translation of GNUpg +# Copyright (C) 2001 Free Software Foundation, Inc. +# Jacobo Tarrio , 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: gnupg 1.0.6\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2001-07-11 18:17+0200\n" +"Last-Translator: Jacobo Tarrio \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Aviso: ¡úsase unha zona insegura de memoria!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "a operación non é posible sen memoria inicializada como segura\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(pode que usara o programa equivocado para esta tarefa)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 +msgid "yes" +msgstr "si" + +#: util/miscutil.c:297 util/miscutil.c:334 +msgid "yY" +msgstr "sS" + +#: util/miscutil.c:298 util/miscutil.c:332 +msgid "no" +msgstr "non" + +#: util/miscutil.c:299 util/miscutil.c:335 +msgid "nN" +msgstr "nN" + +#: g10/keyedit.c:815 util/miscutil.c:333 +msgid "quit" +msgstr "abandonar" + +#: util/miscutil.c:336 +msgid "qQ" +msgstr "aA" + +#: util/errors.c:54 +msgid "general error" +msgstr "erro xeral" + +#: util/errors.c:55 +msgid "unknown packet type" +msgstr "tipo de paquete descoñecido" + +#: util/errors.c:56 +msgid "unknown version" +msgstr "versión descoñecida" + +#: util/errors.c:57 +msgid "unknown pubkey algorithm" +msgstr "algoritmo de chave pública descoñecido" + +#: util/errors.c:58 +msgid "unknown digest algorithm" +msgstr "algoritmo de resumo descoñecido" + +#: util/errors.c:59 +msgid "bad public key" +msgstr "chave pública errónea" + +#: util/errors.c:60 +msgid "bad secret key" +msgstr "chave secreta errónea" + +#: util/errors.c:61 +msgid "bad signature" +msgstr "sinatura errónea" + +#: util/errors.c:62 +msgid "checksum error" +msgstr "error de checksum" + +#: util/errors.c:63 +msgid "bad passphrase" +msgstr "contrasinal erróneo" + +#: util/errors.c:64 +msgid "public key not found" +msgstr "non se atopou a chave pública" + +#: util/errors.c:65 +msgid "unknown cipher algorithm" +msgstr "algoritmo de cifrado descoñecido" + +#: util/errors.c:66 +msgid "can't open the keyring" +msgstr "non foi posible abri-lo chaveiro" + +#: util/errors.c:67 +msgid "invalid packet" +msgstr "paquete non válido" + +#: util/errors.c:68 +msgid "invalid armor" +msgstr "armadura non válida" + +#: util/errors.c:69 +msgid "no such user id" +msgstr "non hai tal id de usuario" + +#: util/errors.c:70 +msgid "secret key not available" +msgstr "a chave secreta non está dispoñible" + +#: util/errors.c:71 +msgid "wrong secret key used" +msgstr "empregouse unha chave secreta errónea" + +#: util/errors.c:72 +msgid "not supported" +msgstr "non está soportado" + +#: util/errors.c:73 +msgid "bad key" +msgstr "chave incorrecta" + +#: util/errors.c:74 +msgid "file read error" +msgstr "erro de lectura de ficheiro" + +#: util/errors.c:75 +msgid "file write error" +msgstr "erro de escritura de ficheiro" + +#: util/errors.c:76 +msgid "unknown compress algorithm" +msgstr "algoritmo de compresión descoñecido" + +#: util/errors.c:77 +msgid "file open error" +msgstr "erro de apertura de ficheiro" + +#: util/errors.c:78 +msgid "file create error" +msgstr "erro de creación de ficheiro" + +#: util/errors.c:79 +msgid "invalid passphrase" +msgstr "contrasinal incorrecto" + +#: util/errors.c:80 +msgid "unimplemented pubkey algorithm" +msgstr "algoritmo de chave pública non implementado" + +#: util/errors.c:81 +msgid "unimplemented cipher algorithm" +msgstr "algoritmo de cifrado non implementado" + +#: util/errors.c:82 +msgid "unknown signature class" +msgstr "clase de sinatura descoñecida" + +#: util/errors.c:83 +msgid "trust database error" +msgstr "erro da base de datos de confianza" + +#: util/errors.c:84 +msgid "bad MPI" +msgstr "MPI erróneo" + +#: util/errors.c:85 +msgid "resource limit" +msgstr "límite de recursos" + +#: util/errors.c:86 +msgid "invalid keyring" +msgstr "chaveiro incorrecto" + +#: util/errors.c:87 +msgid "bad certificate" +msgstr "certificado erróneo" + +#: util/errors.c:88 +msgid "malformed user id" +msgstr "id de usuario mal formado" + +#: util/errors.c:89 +msgid "file close error" +msgstr "erro de peche de ficheiro" + +#: util/errors.c:90 +msgid "file rename error" +msgstr "erro de cambio de nome de ficheiro" + +#: util/errors.c:91 +msgid "file delete error" +msgstr "erro de borrado de ficheiro" + +#: util/errors.c:92 +msgid "unexpected data" +msgstr "datos inesperados" + +#: util/errors.c:93 +msgid "timestamp conflict" +msgstr "conflicto de selo de data" + +#: util/errors.c:94 +msgid "unusable pubkey algorithm" +msgstr "algoritmo de chave pública imposible de usar" + +#: util/errors.c:95 +msgid "file exists" +msgstr "o ficheiro xa existe" + +#: util/errors.c:96 +msgid "weak key" +msgstr "chave feble" + +#: util/errors.c:97 +msgid "invalid argument" +msgstr "argumento non válido" + +#: util/errors.c:98 +msgid "bad URI" +msgstr "URI incorrecto" + +#: util/errors.c:99 +msgid "unsupported URI" +msgstr "URI non soportado" + +#: util/errors.c:100 +msgid "network error" +msgstr "erro de rede" + +#: util/errors.c:102 +msgid "not encrypted" +msgstr "non cifrado" + +#: util/errors.c:103 +msgid "not processed" +msgstr "non procesado" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "chave pública non utilizable" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "chave secreta non utilizable" + +#: util/errors.c:107 +#, fuzzy +msgid "keyserver error" +msgstr "erro xeral" + +#: util/logger.c:249 +#, c-format +msgid "... this is a bug (%s:%d:%s)\n" +msgstr "... isto é un erro (%s:%d:%s)\n" + +#: util/logger.c:255 +#, c-format +msgid "you found a bug ... (%s:%d)\n" +msgstr "atopou un erro ... (%s:%d)\n" + +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 +#, c-format +msgid "can't open `%s': %s\n" +msgstr "non se puido abrir `%s': %s\n" + +#: cipher/random.c:324 +#, c-format +msgid "can't stat `%s': %s\n" +msgstr "non se puido facer stat sobre `%s': %s\n" + +#: cipher/random.c:329 +#, c-format +msgid "`%s' is not a regular file - ignored\n" +msgstr "`%s' non é un ficheiro normal - ignórase\n" + +#: cipher/random.c:334 +msgid "note: random_seed file is empty\n" +msgstr "nota: o ficheiro random_seed está baleiro\n" + +#: cipher/random.c:340 +msgid "warning: invalid size of random_seed file - not used\n" +msgstr "aviso: tamaño de random_seed non válido - non se emprega\n" + +#: cipher/random.c:348 +#, c-format +msgid "can't read `%s': %s\n" +msgstr "non se pode ler de `%s': %s\n" + +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "nota: o ficheiro random_seed non se actualiza\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "non se pode crear `%s': %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "non se pode escribir en `%s': %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "non se pode pechar `%s': %s\n" + +#: cipher/random.c:662 +msgid "WARNING: using insecure random number generator!!\n" +msgstr "AVISO: ¡¡emprégase un xerador de números aleatorios inseguro!!\n" + +#: cipher/random.c:663 +msgid "" +"The random number generator is only a kludge to let\n" +"it run - it is in no way a strong RNG!\n" +"\n" +"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" +"\n" +msgstr "" +"O xerador de números aleatorios só é un truco para poder\n" +"executalo - ¡non é de ningún xeito un xerador de números\n" +"aleatorios seguro!\n" +"\n" +"¡NON USE NINGUN DATO XERADO POR ESTE PROGRAMA!\n" +"\n" + +#: cipher/rndlinux.c:142 +#, c-format +msgid "" +"\n" +"Not enough random bytes available. Please do some other work to give\n" +"the OS a chance to collect more entropy! (Need %d more bytes)\n" +msgstr "" +"\n" +"Non hai suficientes bytes aleatorios dispoñibles. Por favor, faga outro\n" +"traballo para lle dar ao sistema operativo unha oportunidade de acumular\n" +"máis entropía (Precísanse %d bytes máis)\n" + +#: g10/g10.c:287 +msgid "" +"@Commands:\n" +" " +msgstr "" +"@Comandos:\n" +" " + +#: g10/g10.c:289 +msgid "|[file]|make a signature" +msgstr "|[ficheiro]|facer unha sinatura" + +#: g10/g10.c:290 +msgid "|[file]|make a clear text signature" +msgstr "|[ficheiro]|facer unha sinatura en texto claro" + +#: g10/g10.c:291 +msgid "make a detached signature" +msgstr "facer unha sinatura separada" + +#: g10/g10.c:292 +msgid "encrypt data" +msgstr "cifrar datos" + +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "" + +#: g10/g10.c:294 +msgid "encryption only with symmetric cipher" +msgstr "cifrar só con cifrado simétrico" + +#: g10/g10.c:295 +msgid "store only" +msgstr "só armacenar" + +#: g10/g10.c:296 +msgid "decrypt data (default)" +msgstr "descifrar datos (por defecto)" + +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "" + +#: g10/g10.c:298 +msgid "verify a signature" +msgstr "verificar unha sinatura" + +#: g10/g10.c:300 +msgid "list keys" +msgstr "ve-la lista de chaves" + +#: g10/g10.c:302 +msgid "list keys and signatures" +msgstr "ve-la lista de chaves e sinaturas" + +#: g10/g10.c:303 +msgid "check key signatures" +msgstr "verifica-las sinaturas das chaves" + +#: g10/g10.c:304 +msgid "list keys and fingerprints" +msgstr "ve-la lista de chaves e pegadas dactilares" + +#: g10/g10.c:305 +msgid "list secret keys" +msgstr "ve-la lista de chaves secretas" + +#: g10/g10.c:306 +msgid "generate a new key pair" +msgstr "xerar un novo par de chaves" + +#: g10/g10.c:307 +#, fuzzy +msgid "remove keys from the public keyring" +msgstr "borrar unha chave do chaveiro público" + +#: g10/g10.c:309 +#, fuzzy +msgid "remove keys from the secret keyring" +msgstr "borrar unha chave do chaveiro secreto" + +#: g10/g10.c:310 +msgid "sign a key" +msgstr "asinar unha chave" + +#: g10/g10.c:311 +msgid "sign a key locally" +msgstr "asinar unha chave localmente" + +#: g10/g10.c:312 +#, fuzzy +msgid "sign a key non-revocably" +msgstr "asinar unha chave localmente" + +#: g10/g10.c:313 +#, fuzzy +msgid "sign a key locally and non-revocably" +msgstr "asinar unha chave localmente" + +#: g10/g10.c:314 +msgid "sign or edit a key" +msgstr "asinar ou editar unha chave" + +#: g10/g10.c:315 +msgid "generate a revocation certificate" +msgstr "xerar un certificado de revocación" + +#: g10/g10.c:316 +msgid "export keys" +msgstr "exportar chaves" + +#: g10/g10.c:317 +msgid "export keys to a key server" +msgstr "exportar chaves a un servidor de chaves" + +#: g10/g10.c:318 +msgid "import keys from a key server" +msgstr "importar chaves dun servidor de chaves" + +#: g10/g10.c:320 +#, fuzzy +msgid "search for keys on a key server" +msgstr "exportar chaves a un servidor de chaves" + +#: g10/g10.c:322 +#, fuzzy +msgid "update all keys from a keyserver" +msgstr "importar chaves dun servidor de chaves" + +#: g10/g10.c:326 +msgid "import/merge keys" +msgstr "importar/mesturar chaves" + +#: g10/g10.c:328 +msgid "list only the sequence of packets" +msgstr "listar só a secuencia de paquetes" + +#: g10/g10.c:330 +msgid "export the ownertrust values" +msgstr "exporta-los valores de confianza no propietario" + +#: g10/g10.c:332 +msgid "import ownertrust values" +msgstr "importa-los valores de confianza no propietario" + +#: g10/g10.c:334 +msgid "update the trust database" +msgstr "actualiza-la base de datos de confianza" + +#: g10/g10.c:336 +#, fuzzy +msgid "unattended trust database update" +msgstr "actualiza-la base de datos de confianza" + +#: g10/g10.c:337 +msgid "fix a corrupted trust database" +msgstr "amañar unha base de datos de confianza corrompida" + +#: g10/g10.c:338 +msgid "De-Armor a file or stdin" +msgstr "Quita-la armadura a un ficheiro ou á entrada estándar" + +#: g10/g10.c:340 +msgid "En-Armor a file or stdin" +msgstr "Pór armadura a un ficheiro ou á entrada estándar" + +#: g10/g10.c:342 +msgid "|algo [files]|print message digests" +msgstr "|algo [ficheiros]|visualizar resumos de mensaxes" + +#: g10/g10.c:346 +msgid "" +"@\n" +"Options:\n" +" " +msgstr "" +"@\n" +"Opcións:\n" +" " + +#: g10/g10.c:348 +msgid "create ascii armored output" +msgstr "crear saída con armadura en ascii" + +#: g10/g10.c:350 +msgid "|NAME|encrypt for NAME" +msgstr "|NOME|cifrar para NOME" + +#: g10/g10.c:353 +msgid "|NAME|use NAME as default recipient" +msgstr "|NOME|empregar NOME como valor por defecto do destinatario" + +#: g10/g10.c:355 +msgid "use the default key as default recipient" +msgstr "usa-la chave por defecto coma o destinatario por defecto" + +#: g10/g10.c:361 +msgid "use this user-id to sign or decrypt" +msgstr "empregar este id de usuario para asinar ou descifrar" + +#: g10/g10.c:362 +msgid "|N|set compress level N (0 disables)" +msgstr "|N|axusta-lo nivel de compresión a N (0 desactiva)" + +#: g10/g10.c:364 +msgid "use canonical text mode" +msgstr "usar modo de texto canónico" + +#: g10/g10.c:371 +msgid "use as output file" +msgstr "usar coma ficheiro de saída" + +#: g10/g10.c:372 +msgid "verbose" +msgstr "lareto" + +#: g10/g10.c:373 +msgid "be somewhat more quiet" +msgstr "ser un pouquiño máis calado" + +#: g10/g10.c:374 +msgid "don't use the terminal at all" +msgstr "non usa-la terminal en absoluto" + +#: g10/g10.c:375 +msgid "force v3 signatures" +msgstr "forzar sinaturas v3" + +#: g10/g10.c:376 +#, fuzzy +msgid "do not force v3 signatures" +msgstr "forzar sinaturas v3" + +#: g10/g10.c:377 +#, fuzzy +msgid "force v4 key signatures" +msgstr "forzar sinaturas v3" + +#: g10/g10.c:378 +#, fuzzy +msgid "do not force v4 key signatures" +msgstr "forzar sinaturas v3" + +#: g10/g10.c:379 +msgid "always use a MDC for encryption" +msgstr "sempre usar un MDC para cifrar" + +#: g10/g10.c:381 +#, fuzzy +msgid "never use a MDC for encryption" +msgstr "sempre usar un MDC para cifrar" + +#: g10/g10.c:383 +msgid "do not make any changes" +msgstr "non facer ningún cambio" + +#. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, +#: g10/g10.c:385 +msgid "use the gpg-agent" +msgstr "emprega-lo gpg-agent" + +#: g10/g10.c:388 +msgid "batch mode: never ask" +msgstr "modo por lotes: non preguntar nunca" + +#: g10/g10.c:389 +msgid "assume yes on most questions" +msgstr "asumir `si' na maioría das preguntas" + +#: g10/g10.c:390 +msgid "assume no on most questions" +msgstr "asumir `non' na maioría das preguntas" + +#: g10/g10.c:391 +msgid "add this keyring to the list of keyrings" +msgstr "engadir este chaveiro á lista de chaveiros" + +#: g10/g10.c:392 +msgid "add this secret keyring to the list" +msgstr "engadir este chaveiro secreto á lista" + +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "" + +#: g10/g10.c:394 +msgid "|NAME|use NAME as default secret key" +msgstr "|NOME|empregar NOME coma chave secreta por defecto" + +#: g10/g10.c:395 +msgid "|HOST|use this keyserver to lookup keys" +msgstr "|HOST|empregar este servidor de chaves para buscar chaves" + +#: g10/g10.c:397 +msgid "|NAME|set terminal charset to NAME" +msgstr "|NAME|axusta-lo xogo de caracteres do terminal a NOME" + +#: g10/g10.c:398 +msgid "read options from file" +msgstr "le-las opcións dun ficheiro" + +#: g10/g10.c:402 +msgid "|FD|write status info to this FD" +msgstr "|DF|escribi-la información de estado a este DF" + +#: g10/g10.c:404 +#, fuzzy +msgid "|[file]|write status info to file" +msgstr "|DF|escribi-la información de estado a este DF" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|IDCHAVE|confiar absolutamente nesta chave" + +#: g10/g10.c:411 +msgid "|FILE|load extension module FILE" +msgstr "|FICHEIRO|carga-lo módulo de extensión FICHEIRO" + +#: g10/g10.c:412 +msgid "emulate the mode described in RFC1991" +msgstr "emula-lo modo descrito no RFC1991" + +#: g10/g10.c:413 +msgid "set all packet, cipher and digest options to OpenPGP behavior" +msgstr "" +"axustar tódalas opcións de paquetes, cifrado e resumo ao comportamento " +"OpenPGP" + +#: g10/g10.c:414 +#, fuzzy +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"axustar tódalas opcións de paquetes, cifrado e resumo ao comportamento " +"OpenPGP" + +#: g10/g10.c:418 +msgid "|N|use passphrase mode N" +msgstr "|N|emprega-lo modo de contrasinal N" + +#: g10/g10.c:420 +msgid "|NAME|use message digest algorithm NAME for passphrases" +msgstr "|NOME|emprega-lo algoritmo para resumos NOME para os contrasinais" + +#: g10/g10.c:422 +msgid "|NAME|use cipher algorithm NAME for passphrases" +msgstr "|NOME|emprega-lo algoritmo de cifrado NOME para os contrasinais" + +#: g10/g10.c:424 +msgid "|NAME|use cipher algorithm NAME" +msgstr "|NOME|emprega-lo algoritmo de cifrado NOME" + +#: g10/g10.c:425 +msgid "|NAME|use message digest algorithm NAME" +msgstr "|NOME|emprega-lo algoritmo de resumos de mensaxes NOME" + +#: g10/g10.c:426 +msgid "|N|use compress algorithm N" +msgstr "|N|emprega-lo algoritmo de compresión N" + +#: g10/g10.c:427 +msgid "throw keyid field of encrypted packets" +msgstr "descarta-lo campo de id de chave dos paquetes cifrados" + +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "" + +#: g10/g10.c:431 +msgid "|NAME=VALUE|use this notation data" +msgstr "|NOME=VALOR|usar estes datos de notación" + +#: g10/g10.c:434 +msgid "" +"@\n" +"(See the man page for a complete listing of all commands and options)\n" +msgstr "" +"@\n" +"(Vexa a páxina man para un listado completo de comandos e opcións)\n" + +#: g10/g10.c:437 +msgid "" +"@\n" +"Examples:\n" +"\n" +" -se -r Bob [file] sign and encrypt for user Bob\n" +" --clearsign [file] make a clear text signature\n" +" --detach-sign [file] make a detached signature\n" +" --list-keys [names] show keys\n" +" --fingerprint [names] show fingerprints\n" +msgstr "" +"@\n" +"Exemplos:\n" +"\n" +" -se -r Bob [ficheiro] asinar e cifrar para o usuario Bob\n" +" --clearsgn [ficheiro] facer unha sinatura en texto claro\n" +" --detach-sign [ficheiro] facer unha sinatura separada\n" +" --list-keys [nomes] amosa-las chaves\n" +" --fingerprint [nomes] amosa-las pegadas dactilares\n" + +#: g10/g10.c:579 +msgid "Please report bugs to .\n" +msgstr "" +"Por favor, informe dos erros no programa a ,\n" +"e dos erros na traducción a .\n" + +#: g10/g10.c:583 +msgid "Usage: gpg [options] [files] (-h for help)" +msgstr "Uso: gpg [opcións] [ficheiros] (-h para ve-la axuda)" + +#: g10/g10.c:586 +msgid "" +"Syntax: gpg [options] [files]\n" +"sign, check, encrypt or decrypt\n" +"default operation depends on the input data\n" +msgstr "" +"Sintaxe: gpg [opcións] [ficheiros]\n" +"asinar, verificar, cifrar ou descifrar\n" +"a operación por defecto depende dos datos de entrada\n" + +#: g10/g10.c:597 +msgid "" +"\n" +"Supported algorithms:\n" +msgstr "" +"\n" +"Algoritmos soportados:\n" + +#: g10/g10.c:671 +msgid "usage: gpg [options] " +msgstr "uso: gpg [opcións] " + +#: g10/g10.c:728 +msgid "conflicting commands\n" +msgstr "comandos conflictivos\n" + +#: g10/g10.c:903 +#, c-format +msgid "NOTE: no default option file `%s'\n" +msgstr "NOTA: non existe o ficheiro de opcións por defecto `%s'\n" + +#: g10/g10.c:907 +#, c-format +msgid "option file `%s': %s\n" +msgstr "ficheiro de opcións `%s': %s\n" + +#: g10/g10.c:914 +#, c-format +msgid "reading options from `%s'\n" +msgstr "lendo as opcións de `%s'\n" + +#: g10/g10.c:1197 +#, c-format +msgid "%s is not a valid character set\n" +msgstr "%s non é un xogo de caracteres válido\n" + +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "AVISO: `%s' é un ficheiro baleiro\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 +msgid "WARNING: program may create a core file!\n" +msgstr "AVISO: ¡o programa pode crear un ficheiro 'core'!\n" + +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "" + +#: g10/g10.c:1358 g10/g10.c:1369 +#, c-format +msgid "NOTE: %s is not for normal use!\n" +msgstr "NOTA: ¡%s non é para uso normal!\n" + +#: g10/g10.c:1360 g10/g10.c:1380 +#, c-format +msgid "%s not allowed with %s!\n" +msgstr "¡%s non se admite con %s!\n" + +#: g10/g10.c:1363 +#, c-format +msgid "%s makes no sense with %s!\n" +msgstr "¡%s non ten sentido empregándoo con %s!\n" + +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "" + +#: g10/g10.c:1470 g10/g10.c:1482 +msgid "selected cipher algorithm is invalid\n" +msgstr "o algoritmo de cifrado seleccionado non é válido\n" + +#: g10/g10.c:1476 g10/g10.c:1488 +msgid "selected digest algorithm is invalid\n" +msgstr "o algoritmo de resumo seleccionado non é válido\n" + +#: g10/g10.c:1492 +#, fuzzy +msgid "the given signature policy URL is invalid\n" +msgstr "o URL de normativa dado non é válido\n" + +#: g10/g10.c:1496 +#, fuzzy +msgid "the given certification policy URL is invalid\n" +msgstr "o URL de normativa dado non é válido\n" + +#: g10/g10.c:1499 +#, c-format +msgid "compress algorithm must be in range %d..%d\n" +msgstr "o algoritmo de compresión debe estar entre %d e %d\n" + +#: g10/g10.c:1501 +msgid "completes-needed must be greater than 0\n" +msgstr "completes-needed debe ser superior a 0\n" + +#: g10/g10.c:1503 +msgid "marginals-needed must be greater than 1\n" +msgstr "marginals-needed debe ser superior a 1\n" + +#: g10/g10.c:1505 +msgid "max-cert-depth must be in range 1 to 255\n" +msgstr "max-cert-depth debe valer entre 1 e 255\n" + +#: g10/g10.c:1508 +msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" +msgstr "NOTA: desaconséllase encarecidamente o modo S2K simple (0)\n" + +#: g10/g10.c:1512 +msgid "invalid S2K mode; must be 0, 1 or 3\n" +msgstr "modo S2K non válido; debe ser 0, 1 ou 3\n" + +#: g10/g10.c:1516 +#, fuzzy +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "modo S2K non válido; debe ser 0, 1 ou 3\n" + +#: g10/g10.c:1519 +#, fuzzy +msgid "invalid preferences\n" +msgstr "amosar preferencias" + +#: g10/g10.c:1613 +#, c-format +msgid "failed to initialize the TrustDB: %s\n" +msgstr "non se puido inicializa-la base de datos de confianzas: %s\n" + +#: g10/g10.c:1633 +msgid "--store [filename]" +msgstr "--store [ficheiro]" + +#: g10/g10.c:1640 +msgid "--symmetric [filename]" +msgstr "--symmetric [ficheiro]" + +#: g10/g10.c:1648 +msgid "--encrypt [filename]" +msgstr "--encrypt [ficheiro]" + +#: g10/g10.c:1665 +msgid "--sign [filename]" +msgstr "--sign [ficheiro]" + +#: g10/g10.c:1678 +msgid "--sign --encrypt [filename]" +msgstr "--sign --encrypt [ficheiro]" + +#: g10/g10.c:1692 +#, fuzzy +msgid "--sign --symmetric [filename]" +msgstr "--symmetric [ficheiro]" + +#: g10/g10.c:1701 +msgid "--clearsign [filename]" +msgstr "--clearsign [ficheiro]" + +#: g10/g10.c:1719 +msgid "--decrypt [filename]" +msgstr "--decrypt [ficheiro]" + +#: g10/g10.c:1730 +msgid "--sign-key user-id" +msgstr "--sign-key id-de-usuario" + +#: g10/g10.c:1738 +msgid "--lsign-key user-id" +msgstr "--lsign-key id-de-usuario" + +#: g10/g10.c:1746 +#, fuzzy +msgid "--nrsign-key user-id" +msgstr "--sign-key id-de-usuario" + +#: g10/g10.c:1754 +#, fuzzy +msgid "--nrlsign-key user-id" +msgstr "--lsign-key id-de-usuario" + +#: g10/g10.c:1762 +msgid "--edit-key user-id [commands]" +msgstr "--edit-key id-de-usuario [comandos]" + +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 +#, c-format +msgid "can't open %s: %s\n" +msgstr "non se puido abrir %s: %s\n" + +#: g10/g10.c:1833 +msgid "-k[v][v][v][c] [user-id] [keyring]" +msgstr "-k[v][v][v][c] [id-de-usuario] [chaveiro]" + +#: g10/g10.c:1916 +#, c-format +msgid "dearmoring failed: %s\n" +msgstr "non se puido quita-la armadura: %s\n" + +#: g10/g10.c:1924 +#, c-format +msgid "enarmoring failed: %s\n" +msgstr "non se puido poñe-la armadura: %s\n" + +#: g10/g10.c:2011 +#, c-format +msgid "invalid hash algorithm `%s'\n" +msgstr "algoritmo de hash non válido `%s'\n" + +#: g10/g10.c:2097 +msgid "[filename]" +msgstr "[ficheiro]" + +#: g10/g10.c:2101 +msgid "Go ahead and type your message ...\n" +msgstr "Escriba a súa mensaxe ...\n" + +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 +#, c-format +msgid "can't open `%s'\n" +msgstr "non se puido abrir `%s'\n" + +#: g10/g10.c:2313 +msgid "" +"the first character of a notation name must be a letter or an underscore\n" +msgstr "" +"o primeiro carácter dun nome de notación debe ser unha letra ou guión baixo\n" + +#: g10/g10.c:2319 +msgid "" +"a notation name must have only letters, digits, dots or underscores and end " +"with an '='\n" +msgstr "" +"un nome de notación só debe ter letras, díxitos, puntos ou guións baixos e " +"rematar con '='\n" + +#: g10/g10.c:2325 +msgid "dots in a notation name must be surrounded by other characters\n" +msgstr "" +"os puntos dun nome de notación deben estar rodeados por outros caracteres\n" + +#: g10/g10.c:2333 +msgid "a notation value must not use any control characters\n" +msgstr "un valor de notación non pode empregar ningún carácter de control\n" + +#: g10/armor.c:314 +#, c-format +msgid "armor: %s\n" +msgstr "armadura: %s\n" + +#: g10/armor.c:343 +msgid "invalid armor header: " +msgstr "cabeceira de armadura non válida: " + +#: g10/armor.c:350 +msgid "armor header: " +msgstr "cabeceira de armadura: " + +#: g10/armor.c:361 +msgid "invalid clearsig header\n" +msgstr "cabeceira de sinatura en claro non válida\n" + +#: g10/armor.c:413 +msgid "nested clear text signatures\n" +msgstr "sinaturas en texto claro aniñadas\n" + +#: g10/armor.c:537 +msgid "invalid dash escaped line: " +msgstr "liña escapada cunha barra non válida: " + +#: g10/armor.c:549 +msgid "unexpected armor:" +msgstr "armadura inesperada:" + +#: g10/armor.c:675 g10/armor.c:1242 +#, c-format +msgid "invalid radix64 character %02x skipped\n" +msgstr "carácter radix64 non válido %02x omitido\n" + +#: g10/armor.c:718 +msgid "premature eof (no CRC)\n" +msgstr "fin de ficheiro prematura (non hai CRC)\n" + +#: g10/armor.c:752 +msgid "premature eof (in CRC)\n" +msgstr "fin de ficheiro prematura (no CRC)\n" + +#: g10/armor.c:756 +msgid "malformed CRC\n" +msgstr "CRC mal formado\n" + +#: g10/armor.c:760 g10/armor.c:1279 +#, c-format +msgid "CRC error; %06lx - %06lx\n" +msgstr "Erro de CRC; %06lx - %06lx\n" + +#: g10/armor.c:780 +msgid "premature eof (in Trailer)\n" +msgstr "fin de ficheiro prematura (nas liñas adicionais)\n" + +#: g10/armor.c:784 +msgid "error in trailer line\n" +msgstr "error nunha liña adicional\n" + +#: g10/armor.c:1057 +msgid "no valid OpenPGP data found.\n" +msgstr "non se atoparon datos OpenPGP válidos.\n" + +#: g10/armor.c:1062 +#, c-format +msgid "invalid armor: line longer than %d characters\n" +msgstr "armadura incorrecta: liña máis longa ca %d caracteres\n" + +#: g10/armor.c:1066 +msgid "" +"quoted printable character in armor - probably a buggy MTA has been used\n" +msgstr "" +"carácter quoted-printable na armadura - seguramente empregouse un MTA con " +"erros\n" + +#: g10/pkclist.c:61 +msgid "No reason specified" +msgstr "Non se especificou un motivo" + +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "A chave é obsoleta" + +#: g10/pkclist.c:65 +msgid "Key has been compromised" +msgstr "Esta chave quedou descoberta" + +#: g10/pkclist.c:67 +msgid "Key is no longer used" +msgstr "Xa non se emprega esta chave" + +#: g10/pkclist.c:69 +msgid "User ID is no longer valid" +msgstr "O ID de usuario xa non é válido" + +#: g10/pkclist.c:73 +msgid "Reason for revocation: " +msgstr "Motivo para a revocación: " + +#: g10/pkclist.c:90 +msgid "Revocation comment: " +msgstr "Comentario de revocación: " + +#. a string with valid answers +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "" + +#: g10/pkclist.c:258 +#, fuzzy, c-format +msgid "" +"No trust value assigned to:\n" +"%4u%c/%08lX %s \"" +msgstr "" +"Non se asignou un valor de confianza a %lu:\n" +"%4u%c/%08lX %s \"" + +#: g10/pkclist.c:270 +#, fuzzy +msgid "" +"Please decide how far you trust this user to correctly\n" +"verify other users' keys (by looking at passports,\n" +"checking fingerprints from different sources...)?\n" +"\n" +msgstr "" +"Por favor, decida canto confía neste usuario para verificar\n" +"correctamente as chaves de outros usuarios (mirando nos pasaportes,\n" +"comprobando pegadas dactilares de varias fontes...).\n" +"\n" +" 1 = Non sei\n" +" 2 = NON confío\n" +" 3 = Confío un pouco\n" +" 4 = Confío plenamente\n" +" i = Por favor, amóseme máis información\n" + +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr "" + +#: g10/pkclist.c:274 +#, fuzzy, c-format +msgid " %d = I do NOT trust\n" +msgstr "%08lX: Esta chave NON é de confianza\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr "" + +#: g10/pkclist.c:276 +#, fuzzy, c-format +msgid " %d = I trust fully\n" +msgstr "%s: non é un ficheiro de base de datos de confianza\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr "" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr "" + +#: g10/pkclist.c:281 +msgid " m = back to the main menu\n" +msgstr " m = voltar ao menú principal\n" + +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr "" + +#: g10/pkclist.c:285 +msgid " q = quit\n" +msgstr " s = saír\n" + +#: g10/pkclist.c:292 +msgid "Your decision? " +msgstr "¿A súa decisión? " + +#: g10/pkclist.c:313 +#, fuzzy +msgid "Do you really want to set this key to ultimate trust? " +msgstr "¿Seguro de que quere borrar esta chave? " + +#: g10/pkclist.c:325 +msgid "Certificates leading to an ultimately trusted key:\n" +msgstr "Certificados que conducen a unha chave de confianza absoluta:\n" + +#: g10/pkclist.c:399 +#, c-format +msgid "key %08lX: key has been revoked!\n" +msgstr "chave %08lX: ¡esta chave está revocada!\n" + +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 +msgid "Use this key anyway? " +msgstr "¿Empregar esta chave de tódolos xeitos?" + +#: g10/pkclist.c:411 +#, c-format +msgid "key %08lX: subkey has been revoked!\n" +msgstr "chave %08lX: ¡unha subchave está revocada!\n" + +#: g10/pkclist.c:432 +#, c-format +msgid "%08lX: key has expired\n" +msgstr "%08lX: a chave caducou\n" + +#: g10/pkclist.c:442 +#, fuzzy, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +" Non hai indicacións de que a sinatura pertenza ao seu propietario.\n" + +#: g10/pkclist.c:448 +#, c-format +msgid "%08lX: We do NOT trust this key\n" +msgstr "%08lX: Esta chave NON é de confianza\n" + +#: g10/pkclist.c:454 +#, c-format +msgid "" +"%08lX: It is not sure that this key really belongs to the owner\n" +"but it is accepted anyway\n" +msgstr "" +"%08lX: Non é seguro que esta chave pertenza de verdade ao seu propietario\n" +"pero acéptase de tódolos xeitos\n" + +#: g10/pkclist.c:460 +msgid "This key probably belongs to the owner\n" +msgstr "Esta chave probablemente pertenza ao propietario\n" + +#: g10/pkclist.c:465 +msgid "This key belongs to us\n" +msgstr "Esta chave perténcenos a nós\n" + +#: g10/pkclist.c:507 +msgid "" +"It is NOT certain that the key belongs to its owner.\n" +"If you *really* know what you are doing, you may answer\n" +"the next question with yes\n" +"\n" +msgstr "" +"NON é seguro que a chave pertenza ao seu propietario.\n" +"Se *de verdade* sabe o que está a facer, pode respostar á\n" +"seguinte pregunta cun \"si\"\n" +"\n" + +#: g10/pkclist.c:521 g10/pkclist.c:543 +msgid "WARNING: Using untrusted key!\n" +msgstr "AVISO: ¡Emprégase unha chave que non é de confianza!\n" + +#: g10/pkclist.c:562 +msgid "WARNING: This key has been revoked by its owner!\n" +msgstr "AVISO: ¡Esta chave está revocada polo propietario!\n" + +#: g10/pkclist.c:563 +msgid " This could mean that the signature is forgery.\n" +msgstr " Isto pode significar que a sinatura está falsificada.\n" + +#: g10/pkclist.c:569 +msgid "WARNING: This subkey has been revoked by its owner!\n" +msgstr "AVISO: ¡Esta subchave está revocada polo propietario!\n" + +#: g10/pkclist.c:574 +#, fuzzy +msgid "Note: This key has been disabled.\n" +msgstr "Esta chave está desactivada" + +#: g10/pkclist.c:579 +msgid "Note: This key has expired!\n" +msgstr "Nota: ¡Esta chave xa caducou!\n" + +#: g10/pkclist.c:590 +msgid "WARNING: This key is not certified with a trusted signature!\n" +msgstr "AVISO: ¡Esta chave non está certificada cunha sinatura de confianza!\n" + +#: g10/pkclist.c:592 +msgid "" +" There is no indication that the signature belongs to the owner.\n" +msgstr "" +" Non hai indicacións de que a sinatura pertenza ao seu propietario.\n" + +#: g10/pkclist.c:600 +msgid "WARNING: We do NOT trust this key!\n" +msgstr "AVISO: ¡Esta chave NON é de confianza!\n" + +#: g10/pkclist.c:601 +msgid " The signature is probably a FORGERY.\n" +msgstr " Probablemente, a sinatura estea FALSIFICADA.\n" + +#: g10/pkclist.c:609 +msgid "" +"WARNING: This key is not certified with sufficiently trusted signatures!\n" +msgstr "" +"AVISO: ¡Esta chave non está certificada con sinaturas de suficiente " +"confianza!\n" + +#: g10/pkclist.c:611 +msgid " It is not certain that the signature belongs to the owner.\n" +msgstr " Non é seguro que a sinatura pertenza ao seu propietario.\n" + +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 +#, c-format +msgid "%s: skipped: %s\n" +msgstr "%s: omitido: %s\n" + +#: g10/pkclist.c:723 g10/pkclist.c:911 +#, c-format +msgid "%s: skipped: public key already present\n" +msgstr "%s: omitido: a chave pública xa está presente\n" + +#: g10/pkclist.c:752 +#, fuzzy +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "" +"Non especificou un ID de usuario. (pode empregar \"-r\")\n" +"\n" + +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" + +#: g10/pkclist.c:776 +msgid "No such user ID.\n" +msgstr "Non hai tal ID de usuario.\n" + +#: g10/pkclist.c:781 g10/pkclist.c:857 +msgid "skipped: public key already set as default recipient\n" +msgstr "" +"omitido: a chave pública xa está estabrecida coma destinatario por defecto\n" + +#: g10/pkclist.c:799 +msgid "Public key is disabled.\n" +msgstr "A chave pública está desactivada.\n" + +#: g10/pkclist.c:806 +#, fuzzy +msgid "skipped: public key already set\n" +msgstr "%s: omitido: a chave pública xa está presente\n" + +#: g10/pkclist.c:849 +#, c-format +msgid "unknown default recipient `%s'\n" +msgstr "destinatario por defecto `%s' descoñecido\n" + +#: g10/pkclist.c:893 +#, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: omitido: a chave pública está desactivada\n" + +#: g10/pkclist.c:943 +msgid "no valid addressees\n" +msgstr "non hai enderezos válidos\n" + +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "" + +#: g10/keygen.c:187 +#, fuzzy, c-format +msgid "preference %c%lu duplicated\n" +msgstr "omítese `%s': duplicada\n" + +#: g10/keygen.c:192 +#, fuzzy, c-format +msgid "too many `%c' preferences\n" +msgstr "amosar preferencias" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "Caracter non válido no nome\n" + +#: g10/keygen.c:399 +msgid "writing self signature\n" +msgstr "escribindo a propia sinatura\n" + +#: g10/keygen.c:443 +msgid "writing key binding signature\n" +msgstr "escribindo unha sinatura que liga a chave\n" + +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format +msgid "keysize invalid; using %u bits\n" +msgstr "tamaño de chave non válido; empregando %u bits\n" + +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format +msgid "keysize rounded up to %u bits\n" +msgstr "tamaño de chave redondeado a %u bits\n" + +#: g10/keygen.c:777 +msgid "Please select what kind of key you want:\n" +msgstr "Por favor, seleccione o tipo de chave que quere:\n" + +#: g10/keygen.c:779 +#, c-format +msgid " (%d) DSA and ElGamal (default)\n" +msgstr " (%d) DSA e ElGamal (por defecto)\n" + +#: g10/keygen.c:780 +#, c-format +msgid " (%d) DSA (sign only)\n" +msgstr " (%d) DSA (só asinar)\n" + +#: g10/keygen.c:782 +#, c-format +msgid " (%d) ElGamal (encrypt only)\n" +msgstr " (%d) ElGamal (só cifrar)\n" + +#: g10/keygen.c:783 +#, c-format +msgid " (%d) ElGamal (sign and encrypt)\n" +msgstr " (%d) ElGamal (asinar e cifrar)\n" + +#: g10/keygen.c:784 +#, fuzzy, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) DSA (só asinar)\n" + +#: g10/keygen.c:786 +#, fuzzy, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) ElGamal (só cifrar)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 +msgid "Your selection? " +msgstr "¿A súa selección? " + +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "Este algoritmo está obsoleto - ¿crear de tódolos xeitos? " + +#: g10/keyedit.c:529 g10/keygen.c:823 +msgid "Invalid selection.\n" +msgstr "Selección non válida.\n" + +#: g10/keygen.c:836 +#, c-format +msgid "" +"About to generate a new %s keypair.\n" +" minimum keysize is 768 bits\n" +" default keysize is 1024 bits\n" +" highest suggested keysize is 2048 bits\n" +msgstr "" +"Hase crear unh novo par de chaves %s.\n" +" tamaño de chave mínimo: 768 bits\n" +" tamaño de chave por defecto: 1024 bits\n" +" tamaño de chave máximo recomendado: 2048 bits\n" + +#: g10/keygen.c:845 +msgid "What keysize do you want? (1024) " +msgstr "¿Qué tamaño de chave quere? (1024) " + +#: g10/keygen.c:850 +msgid "DSA only allows keysizes from 512 to 1024\n" +msgstr "DSA só admite tamaños entre 512 e 1024\n" + +#: g10/keygen.c:852 +msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "chave pequena de máis; 1024 é o menor valor admitido para RSA.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "chave pequena de máis; 768 é o menor valor admitido\n" + +#. It is ridiculous and an annoyance to use larger key sizes! +#. * GnuPG can handle much larger sizes; but it takes an eternity +#. * to create such a key (but less than the time the Sirius +#. * Computer Corporation needs to process one of the usual +#. * complaints) and {de,en}cryption although needs some time. +#. * So, before you complain about this limitation, I suggest that +#. * you start a discussion with Marvin about this theme and then +#. * do whatever you want. +#: g10/keygen.c:866 +#, c-format +msgid "keysize too large; %d is largest value allowed.\n" +msgstr "chave grande de máis; %d é o maior tamaño admitido.\n" + +#: g10/keygen.c:871 +msgid "" +"Keysizes larger than 2048 are not suggested because\n" +"computations take REALLY long!\n" +msgstr "" +"¡As chaves maiores de 2048 bits non se aconsellan porque\n" +"os cálculos levan MOITO tempo!\n" + +#: g10/keygen.c:874 +msgid "Are you sure that you want this keysize? " +msgstr "¿Está seguro de que quere este tamaño de chave? " + +#: g10/keygen.c:875 +msgid "" +"Okay, but keep in mind that your monitor and keyboard radiation is also very " +"vulnerable to attacks!\n" +msgstr "" +"De acordo, ¡pero teña en conta que a radiación do monitor e o teclado tamén " +"son vulnerables a ataques!\n" + +#: g10/keygen.c:884 +#, c-format +msgid "Requested keysize is %u bits\n" +msgstr "O tamaño de chave requerido son %u bits\n" + +#: g10/keygen.c:887 g10/keygen.c:891 +#, c-format +msgid "rounded up to %u bits\n" +msgstr "redondeado a %u bits\n" + +#: g10/keygen.c:942 +msgid "" +"Please specify how long the key should be valid.\n" +" 0 = key does not expire\n" +" = key expires in n days\n" +" w = key expires in n weeks\n" +" m = key expires in n months\n" +" y = key expires in n years\n" +msgstr "" +"Por favor, indique canto tempo debería ser válida a chave.\n" +" 0 = a chave non caduca\n" +" = a chave caduca en n días\n" +" w = a chave caduca en n semanas\n" +" m = a chave caduca en n meses\n" +" y = a chave caduca en n anos\n" + +#: g10/keygen.c:951 +#, fuzzy +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Por favor, indique canto tempo debería ser válida a chave.\n" +" 0 = a chave non caduca\n" +" = a chave caduca en n días\n" +" w = a chave caduca en n semanas\n" +" m = a chave caduca en n meses\n" +" y = a chave caduca en n anos\n" + +#: g10/keygen.c:973 +msgid "Key is valid for? (0) " +msgstr "¿Por canto tempo é válida a chave? (0) " + +#: g10/keygen.c:975 +#, fuzzy +msgid "Signature is valid for? (0) " +msgstr "¿Por canto tempo é válida a chave? (0) " + +#: g10/keygen.c:980 +msgid "invalid value\n" +msgstr "valor non válido\n" + +#: g10/keygen.c:985 +#, fuzzy, c-format +msgid "%s does not expire at all\n" +msgstr "A chave non caduca nunca\n" + +#. print the date when the key expires +#: g10/keygen.c:992 +#, fuzzy, c-format +msgid "%s expires at %s\n" +msgstr "A chave caduca o %s\n" + +#: g10/keygen.c:998 +msgid "" +"Your system can't display dates beyond 2038.\n" +"However, it will be correctly handled up to 2106.\n" +msgstr "" +"O seu sistema non pode amosar datas máis aló do 2038.\n" +"Aínda así, hase tratar correctamente ata o 2106.\n" + +#: g10/keygen.c:1003 +msgid "Is this correct (y/n)? " +msgstr "¿Isto é correcto? (s/n) " + +#: g10/keygen.c:1046 +msgid "" +"\n" +"You need a User-ID to identify your key; the software constructs the user " +"id\n" +"from Real Name, Comment and Email Address in this form:\n" +" \"Heinrich Heine (Der Dichter) \"\n" +"\n" +msgstr "" +"\n" +"Precisa un ID de usuario para identifica-la súa chave; o software constrúe " +"o\n" +"id de usuario co Nome, un Comentario e un Enderezo de E-mail deste xeito:\n" +" \"Heinrich Heime (Der Dichter) \"\n" +"\n" + +#: g10/keygen.c:1058 +msgid "Real name: " +msgstr "Nome: " + +#: g10/keygen.c:1066 +msgid "Invalid character in name\n" +msgstr "Caracter non válido no nome\n" + +#: g10/keygen.c:1068 +msgid "Name may not start with a digit\n" +msgstr "O nome non pode comezar cun díxito\n" + +#: g10/keygen.c:1070 +msgid "Name must be at least 5 characters long\n" +msgstr "O nome debe ter alomenos 5 caracteres\n" + +#: g10/keygen.c:1078 +msgid "Email address: " +msgstr "Enderezo de E-mail: " + +#: g10/keygen.c:1089 +msgid "Not a valid email address\n" +msgstr "Non é un enderezo de e-mail válido\n" + +#: g10/keygen.c:1097 +msgid "Comment: " +msgstr "Comentario: " + +#: g10/keygen.c:1103 +msgid "Invalid character in comment\n" +msgstr "Carácter non válido no comentario\n" + +#: g10/keygen.c:1126 +#, c-format +msgid "You are using the `%s' character set.\n" +msgstr "Está a usa-lo xogo de caracteres `%s'.\n" + +#: g10/keygen.c:1132 +#, c-format +msgid "" +"You selected this USER-ID:\n" +" \"%s\"\n" +"\n" +msgstr "" +"Escolleu este ID de usuario:\n" +" \"%s\"\n" +"\n" + +#: g10/keygen.c:1136 +msgid "Please don't put the email address into the real name or the comment\n" +msgstr "" +"Por favor, non poña o enderezo de correo no nome real ou no comentario\n" + +#: g10/keygen.c:1141 +msgid "NnCcEeOoQq" +msgstr "NnCcEeAaSs" + +#: g10/keygen.c:1151 +msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " +msgstr "¿Cambia-lo (N)ome, (C)omentario, (E)-mail ou (S)aír? " + +#: g10/keygen.c:1152 +msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " +msgstr "¿Cambiar (N)ome, (C)omentario, (E)-mail ou (A)ceptar/(S)aír? " + +#: g10/keygen.c:1171 +msgid "Please correct the error first\n" +msgstr "Por favor, corrixa antes o erro\n" + +#: g10/keygen.c:1210 +msgid "" +"You need a Passphrase to protect your secret key.\n" +"\n" +msgstr "" +"Necesita un contrasinal para protexe-la súa chave secreta.\n" +"\n" + +#: g10/keyedit.c:701 g10/keygen.c:1218 +#, fuzzy +msgid "passphrase not correctly repeated; try again" +msgstr "o contrasinal non se repetiu correctamente; ténteo de novo.\n" + +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "" + +#: g10/keygen.c:1225 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"I will do it anyway. You can change your passphrase at any time,\n" +"using this program with the option \"--edit-key\".\n" +"\n" +msgstr "" +"Non quere empregar un contrasinal - ¡é unha idea *moi* mala!\n" +"Hase facer así de tódolos xeitos; pode cambia-lo contrasinal en calquera\n" +"momento, empregando este programa coa opción \"--edit-key\".\n" +"\n" + +#: g10/keygen.c:1246 +msgid "" +"We need to generate a lot of random bytes. It is a good idea to perform\n" +"some other action (type on the keyboard, move the mouse, utilize the\n" +"disks) during the prime generation; this gives the random number\n" +"generator a better chance to gain enough entropy.\n" +msgstr "" +"Cómpre xerar unha morea de bytes aleatorios. E unha boa idea facer outras\n" +"cousas (premer teclas no teclado, move-lo rato, usa-los discos duros)\n" +"mentres se xeran os números primos; isto proporciónalle ao xerador de\n" +"números aleatorios unha opoertunidade de acumular entropía de abondo.\n" + +#: g10/keygen.c:1741 +msgid "DSA keypair will have 1024 bits.\n" +msgstr "O par de chaves DSA ha ter 1024 bits.\n" + +#: g10/keygen.c:1795 +msgid "Key generation canceled.\n" +msgstr "Cancelouse a xeración de chaves.\n" + +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format +msgid "writing public key to `%s'\n" +msgstr "gravando a chave pública en `%s'\n" + +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format +msgid "writing secret key to `%s'\n" +msgstr "gravando a chave secreta en `%s'\n" + +#: g10/keygen.c:1952 +#, fuzzy, c-format +msgid "no writable public keyring found: %s\n" +msgstr "chave %08lX: chave pública non atopada: %s\n" + +#: g10/keygen.c:1958 +#, fuzzy, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "chave %08lX: chave secreta non atopada: %s\n" + +#: g10/keygen.c:1972 +#, fuzzy, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "erro escribindo no chaveiro `%s': %s\n" + +#: g10/keygen.c:1979 +#, fuzzy, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "erro escribindo no chaveiro `%s': %s\n" + +#: g10/keygen.c:1999 +msgid "public and secret key created and signed.\n" +msgstr "creáronse e asináronse as chaves pública e secreta.\n" + +#: g10/keygen.c:2000 +#, fuzzy +msgid "key marked as ultimately trusted.\n" +msgstr "Certificados que conducen a unha chave de confianza absoluta:\n" + +#: g10/keygen.c:2011 +msgid "" +"Note that this key cannot be used for encryption. You may want to use\n" +"the command \"--edit-key\" to generate a secondary key for this purpose.\n" +msgstr "" +"Teña en conta que non se pode empregar esta chave para cifrar. Pode que\n" +"queira emprega-lo comando \"--edit-key\" para xerar unha chave secundaria\n" +"con esa finalidade.\n" + +#: g10/keygen.c:2023 g10/keygen.c:2131 +#, c-format +msgid "Key generation failed: %s\n" +msgstr "A xeración da chave fallou: %s\n" + +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 +#, c-format +msgid "" +"key has been created %lu second in future (time warp or clock problem)\n" +msgstr "" +"creouse a chave %lu segundo no futuro (salto no tempo ou problemas co " +"reloxo)\n" + +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 +#, c-format +msgid "" +"key has been created %lu seconds in future (time warp or clock problem)\n" +msgstr "" +"creouse a chave %lu segundos no futuro (salto no tempo ou problemas co " +"reloxo)\n" + +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "NOTA: a creación de subchaves para chaves v3 non cumpre OpenPGP\n" + +#: g10/keygen.c:2107 +msgid "Really create? " +msgstr "¿Crear realmente? " + +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "" + +#: g10/encode.c:92 g10/encode.c:296 +#, fuzzy, c-format +msgid "`%s' already compressed\n" +msgstr "%lu chaves procesadas\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 +#, c-format +msgid "%s: can't open: %s\n" +msgstr "%s: non se pode abrir: %s\n" + +#: g10/encode.c:122 g10/sign.c:959 +#, c-format +msgid "error creating passphrase: %s\n" +msgstr "erro ao crea-lo contrasinal: %s\n" + +#: g10/encode.c:185 g10/encode.c:383 +#, c-format +msgid "%s: WARNING: empty file\n" +msgstr "%s: AVISO: ficheiro baleiro\n" + +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" + +#: g10/encode.c:313 +#, c-format +msgid "reading from `%s'\n" +msgstr "lendo de `%s'\n" + +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" + +#: g10/encode.c:563 +#, c-format +msgid "%s/%s encrypted for: %s\n" +msgstr "%s/%s cifrado para: %s\n" + +#: g10/delkey.c:69 g10/export.c:141 +#, fuzzy, c-format +msgid "key `%s' not found: %s\n" +msgstr "non se atopou o usuario '%s': %s\n" + +#: g10/delkey.c:77 g10/export.c:161 +#, fuzzy, c-format +msgid "error reading keyblock: %s\n" +msgstr "erro lendo `%s': %s\n" + +#: g10/export.c:169 +#, c-format +msgid "key %08lX: not a rfc2440 key - skipped\n" +msgstr "chave %08lX: non é unha chave rfc2440 - omitida\n" + +#: g10/export.c:180 +#, c-format +msgid "key %08lX: not protected - skipped\n" +msgstr "chave %08lX: non está protexida - omitida\n" + +#: g10/export.c:188 +#, fuzzy, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "chave %08lX: nova chave - omitida\n" + +#: g10/export.c:255 +msgid "WARNING: nothing exported\n" +msgstr "AVISO: non se exportou nada\n" + +#: g10/getkey.c:151 +msgid "too many entries in pk cache - disabled\n" +msgstr "demasiadas entradas na caché de chaves públicas - desactivada\n" + +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[Non se atopou o id de usuario]" + +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" + +#: g10/getkey.c:1989 +#, c-format +msgid "using secondary key %08lX instead of primary key %08lX\n" +msgstr "emprégase a chave secundaria %08lX no canto da primaria %08lX\n" + +#: g10/getkey.c:2036 +#, c-format +msgid "key %08lX: secret key without public key - skipped\n" +msgstr "chave %08lX: chave secreta sen chave pública - ignorada\n" + +#: g10/import.c:206 +#, c-format +msgid "skipping block of type %d\n" +msgstr "pasando por alto un bloque de tipo %d\n" + +#: g10/import.c:213 +#, c-format +msgid "%lu keys so far processed\n" +msgstr "%lu chaves procesadas hasta polo momento\n" + +#: g10/import.c:218 +#, c-format +msgid "error reading `%s': %s\n" +msgstr "erro lendo `%s': %s\n" + +#: g10/import.c:230 +#, c-format +msgid "Total number processed: %lu\n" +msgstr "Número total procesado: %lu\n" + +#: g10/import.c:232 +#, c-format +msgid " skipped new keys: %lu\n" +msgstr "novas chaves omitidas: %lu\n" + +#: g10/import.c:235 +#, c-format +msgid " w/o user IDs: %lu\n" +msgstr " sin IDs de usuario: %lu\n" + +#: g10/import.c:237 +#, c-format +msgid " imported: %lu" +msgstr " importadas: %lu" + +#: g10/import.c:243 +#, c-format +msgid " unchanged: %lu\n" +msgstr " sin cambios: %lu\n" + +#: g10/import.c:245 +#, c-format +msgid " new user IDs: %lu\n" +msgstr " novos IDs de usuario: %lu\n" + +#: g10/import.c:247 +#, c-format +msgid " new subkeys: %lu\n" +msgstr " novas sub-chaves: %lu\n" + +#: g10/import.c:249 +#, c-format +msgid " new signatures: %lu\n" +msgstr " novas sinaturas: %lu\n" + +#: g10/import.c:251 +#, c-format +msgid " new key revocations: %lu\n" +msgstr " novas revocacións de chaves: %lu\n" + +#: g10/import.c:253 +#, c-format +msgid " secret keys read: %lu\n" +msgstr "chaves secretas lidas: %lu\n" + +#: g10/import.c:255 +#, c-format +msgid " secret keys imported: %lu\n" +msgstr "chaves secretas importadas: %lu\n" + +#: g10/import.c:257 +#, c-format +msgid " secret keys unchanged: %lu\n" +msgstr "chaves secretas sin cambios: %lu\n" + +#: g10/import.c:438 g10/import.c:657 +#, c-format +msgid "key %08lX: no user ID\n" +msgstr "chave %08lX: non hai ID de usuario\n" + +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "chave %08lX: aceptouse o ID de usuario sin sinatura propia '" + +#: g10/import.c:462 +#, c-format +msgid "key %08lX: no valid user IDs\n" +msgstr "chave %08lX: non hai IDs de usuario válidos\n" + +#: g10/import.c:464 +msgid "this may be caused by a missing self-signature\n" +msgstr "isto pode ser causado por unha sinatura propia que falta\n" + +#: g10/import.c:474 g10/import.c:726 +#, c-format +msgid "key %08lX: public key not found: %s\n" +msgstr "chave %08lX: chave pública non atopada: %s\n" + +#: g10/import.c:479 +#, c-format +msgid "key %08lX: new key - skipped\n" +msgstr "chave %08lX: nova chave - omitida\n" + +#: g10/import.c:489 +#, fuzzy, c-format +msgid "no writable keyring found: %s\n" +msgstr "erro escribindo no chaveiro `%s': %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 +#, c-format +msgid "writing to `%s'\n" +msgstr "escribindo a `%s'\n" + +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "erro escribindo no chaveiro `%s': %s\n" + +#: g10/import.c:505 +#, c-format +msgid "key %08lX: public key imported\n" +msgstr "chave %08lX: chave pública importada\n" + +#: g10/import.c:524 +#, c-format +msgid "key %08lX: doesn't match our copy\n" +msgstr "chave %08lX: non coincide coa nosa copia\n" + +#: g10/import.c:542 g10/import.c:743 +#, c-format +msgid "key %08lX: can't locate original keyblock: %s\n" +msgstr "" +"chave %08lX: non foi posible localiza-lo bloque de chaves original:\n" +"%s\n" + +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "" +"chave %08lX: non foi posible le-lo bloque de chaves original:\n" +"%s\n" + +#: g10/import.c:579 +#, c-format +msgid "key %08lX: 1 new user ID\n" +msgstr "chave %08lX: 1 novo ID de usuario\n" + +#: g10/import.c:582 +#, c-format +msgid "key %08lX: %d new user IDs\n" +msgstr "chave %08lX: %d novos IDs de usuario\n" + +#: g10/import.c:585 +#, c-format +msgid "key %08lX: 1 new signature\n" +msgstr "chave %08lX: 1 nova sinatura\n" + +#: g10/import.c:588 +#, c-format +msgid "key %08lX: %d new signatures\n" +msgstr "chave %08lX: %d novas sinaturas\n" + +#: g10/import.c:591 +#, c-format +msgid "key %08lX: 1 new subkey\n" +msgstr "chave %08lX: 1 nova sub-chave\n" + +#: g10/import.c:594 +#, c-format +msgid "key %08lX: %d new subkeys\n" +msgstr "chave %08lX: %d novas sub-chaves\n" + +#: g10/import.c:604 +#, c-format +msgid "key %08lX: not changed\n" +msgstr "chave %08lX: sin cambios\n" + +#: g10/import.c:671 +#, fuzzy, c-format +msgid "no default secret keyring: %s\n" +msgstr "non hai un chaveiro público por defecto\n" + +#: g10/import.c:682 +#, c-format +msgid "key %08lX: secret key imported\n" +msgstr "chave %08lX: chave secreta importada\n" + +#. we can't merge secret keys +#: g10/import.c:686 +#, c-format +msgid "key %08lX: already in secret keyring\n" +msgstr "chave %08lX: xa estaba no chaveiro secreto\n" + +#: g10/import.c:691 +#, c-format +msgid "key %08lX: secret key not found: %s\n" +msgstr "chave %08lX: chave secreta non atopada: %s\n" + +#: g10/import.c:720 +#, c-format +msgid "key %08lX: no public key - can't apply revocation certificate\n" +msgstr "" +"chave %08lX: non hai chave pública - non se pode aplica-lo\n" +"certificado de revocación\n" + +#: g10/import.c:760 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - rejected\n" +msgstr "" +"chave %08lX: certificado de revocación incorrecto:\n" +"%s - rechazado\n" + +#: g10/import.c:791 +#, c-format +msgid "key %08lX: revocation certificate imported\n" +msgstr "chave %08lX: certificado de revocación importado\n" + +#: g10/import.c:826 +#, c-format +msgid "key %08lX: no user ID for signature\n" +msgstr "chave %08lX: non hai ID de usuario para a sinatura\n" + +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "chave %08lX: algoritmo de chave pública non soportado\n" + +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "chave %08lX: sinatura propia incorrecta\n" + +#: g10/import.c:858 +#, c-format +msgid "key %08lX: no subkey for key binding\n" +msgstr "chave %08lX: non hai sub-chave para o enlace da chave\n" + +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "chave %08lX: algoritmo de chave pública non soportado\n" + +#: g10/import.c:869 +#, c-format +msgid "key %08lX: invalid subkey binding\n" +msgstr "chave %08lX: enlace de sub-chave incorrecto\n" + +#: g10/import.c:899 +#, c-format +msgid "key %08lX: skipped user ID '" +msgstr "chave %08lX: pasado por alto o ID de usuario '" + +#: g10/import.c:922 +#, c-format +msgid "key %08lX: skipped subkey\n" +msgstr "chave %08lX: pasada por alto a sub-chave\n" + +#. here we violate the rfc a bit by still allowing +#. * to import non-exportable signature when we have the +#. * the secret key used to create this signature - it +#. * seems that this makes sense +#: g10/import.c:945 +#, c-format +msgid "key %08lX: non exportable signature (class %02x) - skipped\n" +msgstr "chave %08lX: sinatura non exportable (clase %02x) - pasada por alto\n" + +#: g10/import.c:954 +#, c-format +msgid "key %08lX: revocation certificate at wrong place - skipped\n" +msgstr "" +"chave %08lX: certificado de revocación no lugar erróneo - pasada\n" +"por alto\n" + +#: g10/import.c:971 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - skipped\n" +msgstr "" +"chave %08lX: certificado de revocación incorrecto:\n" +"%s - pasado por alto\n" + +#: g10/import.c:1072 +#, c-format +msgid "key %08lX: duplicated user ID detected - merged\n" +msgstr "chave %08lX: ID de usuario duplicado detectado - mezclado\n" + +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 +#, c-format +msgid "key %08lX: revocation certificate added\n" +msgstr "chave %08lX: certificado de revocación engadido\n" + +#: g10/import.c:1231 +#, fuzzy, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "chave %08lX: %d novas sinaturas\n" + +#: g10/keyedit.c:142 +msgid "[revocation]" +msgstr "[revocación]" + +#: g10/keyedit.c:143 +msgid "[self-signature]" +msgstr "[sinatura propia]" + +#: g10/keyedit.c:214 g10/keylist.c:139 +msgid "1 bad signature\n" +msgstr "1 sinatura errónea\n" + +#: g10/keyedit.c:216 g10/keylist.c:141 +#, c-format +msgid "%d bad signatures\n" +msgstr "%d sinaturas erróneas\n" + +#: g10/keyedit.c:218 g10/keylist.c:143 +msgid "1 signature not checked due to a missing key\n" +msgstr "1 sinatura non verificada debido a unha chave que falta\n" + +#: g10/keyedit.c:220 g10/keylist.c:145 +#, c-format +msgid "%d signatures not checked due to missing keys\n" +msgstr "%d sinaturas non verificadas debido a chaves que faltan\n" + +#: g10/keyedit.c:222 g10/keylist.c:147 +msgid "1 signature not checked due to an error\n" +msgstr "1 sinatura non verificada debido a un erro\n" + +#: g10/keyedit.c:224 g10/keylist.c:149 +#, c-format +msgid "%d signatures not checked due to errors\n" +msgstr "%d sinaturas non verificadas debido a erros\n" + +#: g10/keyedit.c:226 +msgid "1 user ID without valid self-signature detected\n" +msgstr "detectado 1 ID de usuario sin sinatura propia válida\n" + +#: g10/keyedit.c:228 +#, c-format +msgid "%d user IDs without valid self-signatures detected\n" +msgstr "detectados %d IDs de usuario sin sinatura propia válida\n" + +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "A chave está protexida.\n" + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +#, fuzzy +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "¿Está seguro de que quere este tamaño de chave? " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr "" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" + +#: g10/keyedit.c:388 +#, fuzzy, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "Xa foi asinado pola chave %08lX\n" + +#: g10/keyedit.c:393 +#, fuzzy, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "Xa foi asinado pola chave %08lX\n" + +#: g10/keyedit.c:405 +#, c-format +msgid "Nothing to sign with key %08lX\n" +msgstr "Nada que asinar coa chave %08lX\n" + +#: g10/keyedit.c:420 +#, fuzzy +msgid "This key has expired!" +msgstr "Nota: ¡Esta chave xa caducou!\n" + +#: g10/keyedit.c:440 +#, fuzzy, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Esta chave non está protexida.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "" + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr "" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr "" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr "" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr "" + +#: g10/keyedit.c:535 +msgid "" +"Are you really sure that you want to sign this key\n" +"with your key: \"" +msgstr "" +"¿Esta seguro de que quere asinar esta chave\n" +"coa súa chave: \"" + +#: g10/keyedit.c:544 +#, fuzzy +msgid "" +"\n" +"The signature will be marked as non-exportable.\n" +msgstr "" +"A sinatura será marcada como non exportable.\n" +"\n" + +#: g10/keyedit.c:548 +#, fuzzy +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"A sinatura será marcada como non exportable.\n" +"\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" + +#: g10/keyedit.c:569 +msgid "Really sign? " +msgstr "¿Asinar de verdade? " + +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 +#, c-format +msgid "signing failed: %s\n" +msgstr "fallou a sinatura: %s\n" + +#: g10/keyedit.c:658 +msgid "This key is not protected.\n" +msgstr "Esta chave non está protexida.\n" + +#: g10/keyedit.c:662 +msgid "Secret parts of primary key are not available.\n" +msgstr "as partes secretas da chave primaria non están dispoñibles.\n" + +#: g10/keyedit.c:666 +msgid "Key is protected.\n" +msgstr "A chave está protexida.\n" + +#: g10/keyedit.c:686 +#, c-format +msgid "Can't edit this key: %s\n" +msgstr "Non se pode editar esta chave: %s\n" + +#: g10/keyedit.c:692 +msgid "" +"Enter the new passphrase for this secret key.\n" +"\n" +msgstr "" +"Introduza o novo contrasinal para esta chave secreta.\n" +"\n" + +#: g10/keyedit.c:706 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"\n" +msgstr "" +"Non desexa un contrainal - ¡o que é unha *mala* idea!\n" +"\n" + +#: g10/keyedit.c:709 +msgid "Do you really want to do this? " +msgstr "¿Seguro que quere facer esto? " + +#: g10/keyedit.c:773 +msgid "moving a key signature to the correct place\n" +msgstr "movendo a sinatura dunha chave ó seu sitio\n" + +#: g10/keyedit.c:815 +msgid "quit this menu" +msgstr "saír deste menú" + +#: g10/keyedit.c:816 +msgid "q" +msgstr "s" + +#: g10/keyedit.c:817 +msgid "save" +msgstr "gardar" + +#: g10/keyedit.c:817 +msgid "save and quit" +msgstr "gardar e saír" + +#: g10/keyedit.c:818 +msgid "help" +msgstr "axuda" + +#: g10/keyedit.c:818 +msgid "show this help" +msgstr "amosar esta axuda" + +#: g10/keyedit.c:820 +msgid "fpr" +msgstr "fpr" + +#: g10/keyedit.c:820 +msgid "show fingerprint" +msgstr "amosar fingerprint" + +#: g10/keyedit.c:821 +msgid "list" +msgstr "listar" + +#: g10/keyedit.c:821 +msgid "list key and user IDs" +msgstr "listar chave e IDs de usuario" + +#: g10/keyedit.c:822 +msgid "l" +msgstr "l" + +#: g10/keyedit.c:823 +msgid "uid" +msgstr "uid" + +#: g10/keyedit.c:823 +msgid "select user ID N" +msgstr "selecciona-lo ID de usuario N" + +#: g10/keyedit.c:824 +msgid "key" +msgstr "chave" + +#: g10/keyedit.c:824 +msgid "select secondary key N" +msgstr "selecciona-la chave secundaria N" + +#: g10/keyedit.c:825 +msgid "check" +msgstr "verificar" + +#: g10/keyedit.c:825 +msgid "list signatures" +msgstr "listar sinaturas" + +#: g10/keyedit.c:826 +msgid "c" +msgstr "v" + +#: g10/keyedit.c:827 +msgid "sign" +msgstr "asinar" + +#: g10/keyedit.c:827 +msgid "sign the key" +msgstr "sinatura-la chave" + +#: g10/keyedit.c:828 +msgid "s" +msgstr "f" + +#: g10/keyedit.c:829 +msgid "lsign" +msgstr "lsign" + +#: g10/keyedit.c:829 +msgid "sign the key locally" +msgstr "sinatura-la chave localmente" + +#: g10/keyedit.c:830 +#, fuzzy +msgid "nrsign" +msgstr "asinar" + +#: g10/keyedit.c:830 +#, fuzzy +msgid "sign the key non-revocably" +msgstr "sinatura-la chave localmente" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "nrlsign" +msgstr "lsign" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "sign the key locally and non-revocably" +msgstr "sinatura-la chave localmente" + +#: g10/keyedit.c:832 +msgid "debug" +msgstr "depurar" + +#: g10/keyedit.c:833 +msgid "adduid" +msgstr "adduid" + +#: g10/keyedit.c:833 +msgid "add a user ID" +msgstr "engadir un ID de usuario" + +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "" + +#: g10/keyedit.c:834 +#, fuzzy +msgid "add a photo ID" +msgstr "engadir un ID de usuario" + +#: g10/keyedit.c:835 +msgid "deluid" +msgstr "deluid" + +#: g10/keyedit.c:835 +msgid "delete user ID" +msgstr "borrar un ID de usuario" + +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "" + +#: g10/keyedit.c:838 +msgid "addkey" +msgstr "addkey" + +#: g10/keyedit.c:838 +msgid "add a secondary key" +msgstr "engadir unha chave secundaria" + +#: g10/keyedit.c:839 +msgid "delkey" +msgstr "delkey" + +#: g10/keyedit.c:839 +msgid "delete a secondary key" +msgstr "borrar unha chave secundaria" + +#: g10/keyedit.c:840 +msgid "delsig" +msgstr "delsig" + +#: g10/keyedit.c:840 +msgid "delete signatures" +msgstr "borrar sinaturas" + +#: g10/keyedit.c:841 +msgid "expire" +msgstr "expire" + +#: g10/keyedit.c:841 +msgid "change the expire date" +msgstr "cambia-la fecha de expiración" + +#: g10/keyedit.c:842 +msgid "primary" +msgstr "" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "" + +#: g10/keyedit.c:843 +msgid "toggle" +msgstr "toggle" + +#: g10/keyedit.c:843 +msgid "toggle between secret and public key listing" +msgstr "cambiar entre o listado de chaves públicas e secretas" + +#: g10/keyedit.c:845 +msgid "t" +msgstr "c" + +#: g10/keyedit.c:846 +msgid "pref" +msgstr "pref" + +#: g10/keyedit.c:846 +#, fuzzy +msgid "list preferences (expert)" +msgstr "amosar preferencias" + +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +#, fuzzy +msgid "list preferences (verbose)" +msgstr "amosar preferencias" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "setpref" +msgstr "pref" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "set preference list" +msgstr "amosar preferencias" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updpref" +msgstr "pref" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updated preferences" +msgstr "amosar preferencias" + +#: g10/keyedit.c:850 +msgid "passwd" +msgstr "passwd" + +#: g10/keyedit.c:850 +msgid "change the passphrase" +msgstr "cambia-lo contrasinal" + +#: g10/keyedit.c:851 +msgid "trust" +msgstr "trust" + +#: g10/keyedit.c:851 +msgid "change the ownertrust" +msgstr "cambia-la confianza sobre o dono" + +#: g10/keyedit.c:852 +msgid "revsig" +msgstr "revsig" + +#: g10/keyedit.c:852 +msgid "revoke signatures" +msgstr "revocar sinaturas" + +#: g10/keyedit.c:853 +msgid "revkey" +msgstr "revkey" + +#: g10/keyedit.c:853 +msgid "revoke a secondary key" +msgstr "revocar unha chave secundaria" + +#: g10/keyedit.c:854 +msgid "disable" +msgstr "disable" + +#: g10/keyedit.c:854 +msgid "disable a key" +msgstr "deshabilitar unha chave" + +#: g10/keyedit.c:855 +msgid "enable" +msgstr "enable" + +#: g10/keyedit.c:855 +msgid "enable a key" +msgstr "habilitar unha chave" + +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "" + +#: g10/delkey.c:112 g10/keyedit.c:876 +msgid "can't do that in batchmode\n" +msgstr "non se pode facer iso no modo por lotes\n" + +#: g10/keyedit.c:913 +#, fuzzy, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "erro lendo `%s': %s\n" + +#: g10/keyedit.c:931 +msgid "Secret key is available.\n" +msgstr "A chave secreta está disponible.\n" + +#: g10/keyedit.c:962 +msgid "Command> " +msgstr "Comando> " + +#: g10/keyedit.c:994 +msgid "Need the secret key to do this.\n" +msgstr "Cómpre a chave secreta para facer isto.\n" + +#: g10/keyedit.c:998 +msgid "Please use the command \"toggle\" first.\n" +msgstr "Por favor, empregue o comando \"toggle\" antes.\n" + +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "A chave está protexida.\n" + +#: g10/keyedit.c:1066 +msgid "Really sign all user IDs? " +msgstr "¿Seguro de que quere asinar tódolos IDs de usuario? " + +#: g10/keyedit.c:1067 +msgid "Hint: Select the user IDs to sign\n" +msgstr "Pista: seleccione os IDs de usuario que desexa asinar\n" + +#: g10/keyedit.c:1092 +#, c-format +msgid "This command is not allowed while in %s mode.\n" +msgstr "" + +#: g10/keyedit.c:1112 g10/keyedit.c:1133 +msgid "You must select at least one user ID.\n" +msgstr "Debe seleccionar alomenos un ID de usuario.\n" + +#: g10/keyedit.c:1114 +msgid "You can't delete the last user ID!\n" +msgstr "¡Non pode borra-lo último ID de usuario!\n" + +#: g10/keyedit.c:1117 +msgid "Really remove all selected user IDs? " +msgstr "¿Seguro de que quere borrar tódolos IDs de usuario seleccionados? " + +#: g10/keyedit.c:1118 +msgid "Really remove this user ID? " +msgstr "¿Seguro de que quere borrar este ID de usuario? " + +#: g10/keyedit.c:1156 g10/keyedit.c:1178 +msgid "You must select at least one key.\n" +msgstr "Debe seleccionar alomenos unha chave.\n" + +#: g10/keyedit.c:1160 +msgid "Do you really want to delete the selected keys? " +msgstr "¿Seguro de que quere borra-las chaves seleccionadas? " + +#: g10/keyedit.c:1161 +msgid "Do you really want to delete this key? " +msgstr "¿Seguro de que quere borrar esta chave? " + +#: g10/keyedit.c:1182 +msgid "Do you really want to revoke the selected keys? " +msgstr "¿Realmente quere revoca-las chaves seleccionadas? " + +#: g10/keyedit.c:1183 +msgid "Do you really want to revoke this key? " +msgstr "¿Realmente quere revocar esta chave? " + +#: g10/keyedit.c:1252 +#, fuzzy +msgid "Really update the preferences for the selected user IDs? " +msgstr "¿Seguro de que quere borrar tódolos IDs de usuario seleccionados? " + +#: g10/keyedit.c:1254 +#, fuzzy +msgid "Really update the preferences? " +msgstr "¿Realmente desexa crea-los certificados de revocación? (y/N)" + +#: g10/keyedit.c:1292 +msgid "Save changes? " +msgstr "¿Garda-los cambios? " + +#: g10/keyedit.c:1295 +msgid "Quit without saving? " +msgstr "¿Saír sin gardar? " + +#: g10/keyedit.c:1306 +#, c-format +msgid "update failed: %s\n" +msgstr "a actualización fallou: %s\n" + +#: g10/keyedit.c:1313 +#, c-format +msgid "update secret failed: %s\n" +msgstr "o segredo da actualización fallou: %s\n" + +#: g10/keyedit.c:1320 +msgid "Key not changed so no update needed.\n" +msgstr "A chave non cambiou, polo que non fai falla actualizar.\n" + +#: g10/keyedit.c:1332 +msgid "Invalid command (try \"help\")\n" +msgstr "Comando incorrecto (tente \"help\")\n" + +#: g10/keyedit.c:1489 +#, fuzzy, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "AVISO: ¡Esta chave está revocada polo propietario!\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr "" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 +#, c-format +msgid "%s%c %4u%c/%08lX created: %s expires: %s" +msgstr "Creouse %s%c %4u%c/%08lX : %s caduca: %s" + +#: g10/keyedit.c:1506 +#, c-format +msgid " trust: %c/%c" +msgstr " confianza: %c/%c" + +#: g10/keyedit.c:1510 +msgid "This key has been disabled" +msgstr "Esta chave está desactivada" + +#: g10/keyedit.c:1539 +#, c-format +msgid "rev! subkey has been revoked: %s\n" +msgstr "rev! revocouse a subchave: %s\n" + +#: g10/keyedit.c:1542 +msgid "rev- faked revocation found\n" +msgstr "rev- atopouse unha revocación falsa\n" + +#: g10/keyedit.c:1544 +#, c-format +msgid "rev? problem checking revocation: %s\n" +msgstr "rev? problema ao comproba-la revocación: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "¿Está seguro de que quere este tamaño de chave? " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" + +#: g10/keyedit.c:1832 +msgid "Delete this good signature? (y/N/q)" +msgstr "¿Borrar esta sinatura correcta? (y/N/q)" + +#: g10/keyedit.c:1842 +msgid "Delete this invalid signature? (y/N/q)" +msgstr "¿Borrar esta sinatura incorrecta? (y/N/q)" + +#: g10/keyedit.c:1846 +msgid "Delete this unknown signature? (y/N/q)" +msgstr "¿Borrar esta sinatura descoñecida? (y/N/q)" + +#: g10/keyedit.c:1852 +msgid "Really delete this self-signature? (y/N)" +msgstr "¿Realmente quere borrar esta sinatura propia? (y/N)" + +#: g10/keyedit.c:1866 +#, c-format +msgid "Deleted %d signature.\n" +msgstr "Borrada %d sinatura.\n" + +#: g10/keyedit.c:1867 +#, c-format +msgid "Deleted %d signatures.\n" +msgstr "Borradas %d sinaturas.\n" + +#: g10/keyedit.c:1870 +msgid "Nothing deleted.\n" +msgstr "Non se borrou nada.\n" + +#: g10/keyedit.c:1943 +msgid "Please remove selections from the secret keys.\n" +msgstr "Por favor, quite as seleccións das chaves secretas.\n" + +#: g10/keyedit.c:1949 +msgid "Please select at most one secondary key.\n" +msgstr "Por favor, seleccione como máximo unha chave secundaria.\n" + +#: g10/keyedit.c:1953 +msgid "Changing expiration time for a secondary key.\n" +msgstr "Cambiando a data de expiración para a chave secundaria.\n" + +#: g10/keyedit.c:1955 +msgid "Changing expiration time for the primary key.\n" +msgstr "Cambiando a data de expiración da chave primaria.\n" + +#: g10/keyedit.c:1997 +msgid "You can't change the expiration date of a v3 key\n" +msgstr "Non pode cambia-la data de expiración dunha chave v3\n" + +#: g10/keyedit.c:2013 +msgid "No corresponding signature in secret ring\n" +msgstr "Non hai unha sinatura correspondiente no chaveiro secreto\n" + +#: g10/keyedit.c:2096 +#, fuzzy +msgid "Please select exactly one user ID.\n" +msgstr "Debe seleccionar alomenos un ID de usuario.\n" + +#: g10/keyedit.c:2284 +#, c-format +msgid "No user ID with index %d\n" +msgstr "Non hai ID de usuario con índice %d\n" + +#: g10/keyedit.c:2330 +#, c-format +msgid "No secondary key with index %d\n" +msgstr "Non hai chave secundaria con índice %d\n" + +#: g10/keyedit.c:2444 +msgid "user ID: \"" +msgstr "ID de usuario: \"" + +#: g10/keyedit.c:2449 +#, c-format +msgid "" +"\"\n" +"signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"asinado coa súa chave %08lX no %s\n" + +#: g10/keyedit.c:2452 +#, fuzzy, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"asinado coa súa chave %08lX no %s\n" + +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "Sinatura %s de: %s\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "¿Realmente quere revocar esta chave? " + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "¿Crear un certificado de revocación para esta sinatura? (y/N)" + +#. FIXME: detect duplicates here +#: g10/keyedit.c:2490 +msgid "You have signed these user IDs:\n" +msgstr "Firmou estes IDs de usuario: \n" + +#: g10/keyedit.c:2504 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr "asinado por %08lX no %s\n" + +#: g10/keyedit.c:2512 +#, c-format +msgid " revoked by %08lX at %s\n" +msgstr "revocada por %08lX no %s\n" + +#: g10/keyedit.c:2532 +msgid "You are about to revoke these signatures:\n" +msgstr "Está a punto de revocar estas sinaturas:\n" + +#: g10/keyedit.c:2542 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s\n" +msgstr "asinado por %08lX no %s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " +msgstr "¿Realmente desexa crea-los certificados de revocación? (y/N)" + +#: g10/keyedit.c:2581 +msgid "no secret key\n" +msgstr "non hai chave secreta\n" + +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" + +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +#, fuzzy +msgid "Signature policy: " +msgstr "Sinatura %s de: %s\n" + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "AVISO: atopáronse datos de notación non válidos\n" + +#. This is UTF8 +#: g10/keylist.c:120 +#, fuzzy +msgid "Signature notation: " +msgstr "Notación: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "" + +#. of subkey +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format +msgid " [expires: %s]" +msgstr " [caduca: %s]" + +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Pegada dactilar:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Pegada dactilar:" + +#: g10/keylist.c:899 +#, fuzzy +msgid " Key fingerprint =" +msgstr " Pegada dactilar:" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "datos cifrados con %s\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "cifrado cun algoritmo descoñecido %d\n" + +#: g10/mainproc.c:280 +#, c-format +msgid "public key is %08lX\n" +msgstr "a chave pública é %08lX\n" + +#: g10/mainproc.c:326 +msgid "public key encrypted data: good DEK\n" +msgstr "datos cifrados coa chave pública: DEK correcto\n" + +#: g10/mainproc.c:378 +#, c-format +msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" +msgstr "cifrado cunha chave de %u bits, %s, ID %08lX, creado o %s\n" + +#: g10/mainproc.c:388 +#, c-format +msgid "encrypted with %s key, ID %08lX\n" +msgstr "cifrado cunha chave %s, ID %08lX\n" + +#: g10/mainproc.c:402 +#, c-format +msgid "public key decryption failed: %s\n" +msgstr "fallou o descifrado de chave pública: %s\n" + +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, fuzzy, c-format +msgid "assuming %s encrypted data\n" +msgstr "datos cifrados con %s\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" + +#: g10/mainproc.c:466 +msgid "decryption okay\n" +msgstr "descifrado correcto\n" + +#: g10/mainproc.c:471 +msgid "WARNING: encrypted message has been manipulated!\n" +msgstr "AVISO: ¡a mensaxe cifrada foi manipulada!\n" + +#: g10/mainproc.c:476 +#, c-format +msgid "decryption failed: %s\n" +msgstr "o descifrado fallou: %s\n" + +#: g10/mainproc.c:495 +msgid "NOTE: sender requested \"for-your-eyes-only\"\n" +msgstr "NOTA: o remitente pediu \"confidencial\"\n" + +#: g10/mainproc.c:497 +#, c-format +msgid "original file name='%.*s'\n" +msgstr "nome do ficheiro orixinal='%.*s'\n" + +#: g10/mainproc.c:672 +msgid "standalone revocation - use \"gpg --import\" to apply\n" +msgstr "revocación independente - empregue \"gpg --import\" para aplicar\n" + +#: g10/mainproc.c:733 +msgid "Notation: " +msgstr "Notación: " + +#: g10/mainproc.c:745 +msgid "Policy: " +msgstr "Normativa: " + +#: g10/mainproc.c:1198 +msgid "signature verification suppressed\n" +msgstr "verificación de sinatura suprimida\n" + +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "non se poden manexar estas sinaturas múltiples\n" + +#: g10/mainproc.c:1261 +#, c-format +msgid "Signature made %.*s using %s key ID %08lX\n" +msgstr "Sinatura feita por %.*s usando %s de ID de chave %08lX\n" + +#: g10/mainproc.c:1305 g10/mainproc.c:1327 +msgid "BAD signature from \"" +msgstr "Sinatura INCORRECTA de\"" + +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +#, fuzzy +msgid "Expired signature from \"" +msgstr "Sinatura correcta de \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 +msgid "Good signature from \"" +msgstr "Sinatura correcta de \"" + +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "" + +#: g10/mainproc.c:1351 +msgid " aka \"" +msgstr " aka \"" + +#: g10/mainproc.c:1412 +#, c-format +msgid "Can't check signature: %s\n" +msgstr "Non foi posible verifica-la sinatura: %s\n" + +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "non é unha sinatura separada\n" + +#: g10/mainproc.c:1508 +#, c-format +msgid "standalone signature of class 0x%02x\n" +msgstr "sinatura independiente de clase 0x%02x\n" + +#: g10/mainproc.c:1565 +msgid "old style (PGP 2.x) signature\n" +msgstr "Sinatura ó vello estilo (PGP 2.x)\n" + +#: g10/mainproc.c:1572 +msgid "invalid root packet detected in proc_tree()\n" +msgstr "paquete raíz incorrecto detectado en proc_tree()\n" + +#: g10/misc.c:101 +#, c-format +msgid "can't disable core dumps: %s\n" +msgstr "non é posible deshabilita-los volcados de 'core': %s\n" + +#: g10/misc.c:211 +msgid "Experimental algorithms should not be used!\n" +msgstr "¡Os algoritmos experimentais non deberían ser usados!\n" + +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" +msgstr "" +"este algoritmo de cifrado está obsoleto; por favor, empregue un máis " +"estándar!\n" + +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" + +#: g10/parse-packet.c:119 +#, c-format +msgid "can't handle public key algorithm %d\n" +msgstr "non é posible manexa-lo algoritmo de chave pública %d\n" + +#: g10/parse-packet.c:1053 +#, c-format +msgid "subpacket of type %d has critical bit set\n" +msgstr "un subpaquete de tipo %d ten o bit crítico posto\n" + +#: g10/passphrase.c:442 g10/passphrase.c:489 +msgid "gpg-agent is not available in this session\n" +msgstr "gpg-agent non está dispoñible nesta sesión\n" + +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:498 +msgid "malformed GPG_AGENT_INFO environment variable\n" +msgstr "variable de ambiente GPG_AGENT_INFO mal formada\n" + +#: g10/passphrase.c:511 +#, fuzzy, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "o algoritmo de protección %d non está soportado\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format +msgid "can't connect to `%s': %s\n" +msgstr "non se puido conectar a `%s': %s\n" + +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +#, fuzzy +msgid "problem with the agent - disabling agent use\n" +msgstr "problema co axente: o axente voltou coa resposta 0x%lx\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 +#, c-format +msgid " (main key ID %08lX)" +msgstr " (ID principal da chave %08lX)" + +#: g10/passphrase.c:641 +#, c-format +msgid "" +"You need a passphrase to unlock the secret key for user:\n" +"\"%.*s\"\n" +"%u-bit %s key, ID %08lX, created %s%s\n" +msgstr "" +"Precisa un contrasinal para desbloquea-la chave secreta do usuario:\n" +"\"%.*s\"\n" +"Chave de %u bits, %s, ID %08lX, creada o %s%s\n" + +#: g10/passphrase.c:662 +msgid "Enter passphrase\n" +msgstr "Introduza o contrasinal\n" + +#: g10/passphrase.c:664 +msgid "Repeat passphrase\n" +msgstr "Repita o contrasinal\n" + +#: g10/passphrase.c:705 +msgid "passphrase too long\n" +msgstr "contrasinal demasiado longo\n" + +#: g10/passphrase.c:718 +msgid "invalid response from agent\n" +msgstr "resposta do axente non válida\n" + +#: g10/passphrase.c:727 g10/passphrase.c:808 +msgid "cancelled by user\n" +msgstr "cancelado polo usuario\n" + +#: g10/passphrase.c:729 g10/passphrase.c:890 +#, c-format +msgid "problem with the agent: agent returns 0x%lx\n" +msgstr "problema co axente: o axente voltou coa resposta 0x%lx\n" + +#: g10/passphrase.c:1003 +msgid "" +"\n" +"You need a passphrase to unlock the secret key for\n" +"user: \"" +msgstr "" +"\n" +"Necesita un contrasinal para desbloquea-la chave secreta para\n" +"o usuario \"" + +#: g10/passphrase.c:1012 +#, c-format +msgid "%u-bit %s key, ID %08lX, created %s" +msgstr "%u-bits, chave %s, ID %08lX, creada %s" + +#: g10/passphrase.c:1063 +msgid "can't query password in batchmode\n" +msgstr "non se pode consulta-lo contrasinal en modo de proceso por lotes\n" + +#: g10/passphrase.c:1067 +msgid "Enter passphrase: " +msgstr "Introduza o contrasinal: " + +#: g10/passphrase.c:1071 +msgid "Repeat passphrase: " +msgstr "Repita o contrasinal: " + +#: g10/plaintext.c:67 +msgid "data not saved; use option \"--output\" to save it\n" +msgstr "os datos non foron gardados; use a opción \"--output\" para gardalos\n" + +#: g10/plaintext.c:108 +#, fuzzy, c-format +msgid "error creating `%s': %s\n" +msgstr "erro lendo `%s': %s\n" + +#: g10/plaintext.c:337 +msgid "Detached signature.\n" +msgstr "Sinatura non adxunta.\n" + +#: g10/plaintext.c:341 +msgid "Please enter name of data file: " +msgstr "Por favor, introduza o nome do ficheiro de datos: " + +#: g10/plaintext.c:362 +msgid "reading stdin ...\n" +msgstr "lendo de stdin ...\n" + +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "non hai datos asinados\n" + +#: g10/plaintext.c:404 +#, c-format +msgid "can't open signed data `%s'\n" +msgstr "non foi posible abri-los datos asinados `%s'\n" + +#: g10/pubkey-enc.c:100 +#, fuzzy, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "receptor anónimo; tentando a chave secreta %08lX ...\n" + +#: g10/pubkey-enc.c:106 +msgid "okay, we are the anonymous recipient.\n" +msgstr "Ok, nós somo-lo receptor anónimo.\n" + +#: g10/pubkey-enc.c:158 +msgid "old encoding of the DEK is not supported\n" +msgstr "a codificación vella do DEK non está soportada\n" + +#: g10/pubkey-enc.c:177 +#, fuzzy, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "o algoritmo de cifrado %d é descoñecido ou está desactivado\n" + +#: g10/pubkey-enc.c:220 +#, c-format +msgid "NOTE: cipher algorithm %d not found in preferences\n" +msgstr "NOTA: o algoritmo de cifrado %d non foi atopado nas preferencias\n" + +#: g10/pubkey-enc.c:242 +#, c-format +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "NOTA: a chave secreta %08lX caducou o %s\n" + +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, fuzzy, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "solicitando a chave %08lX de %s ...\n" + +#: g10/hkp.c:94 +#, c-format +msgid "can't get key from keyserver: %s\n" +msgstr "non se pode obte-la chave do servidor de chaves: %s\n" + +#: g10/hkp.c:171 +#, c-format +msgid "error sending to `%s': %s\n" +msgstr "erro ao enviar a `%s': %s\n" + +#: g10/hkp.c:186 +#, c-format +msgid "success sending to `%s' (status=%u)\n" +msgstr "éxito ao enviar a `%s' (estado=%u)\n" + +#: g10/hkp.c:189 +#, c-format +msgid "failed sending to `%s': status=%u\n" +msgstr "fallo ao enviar a `%s': estado=%u\n" + +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "" + +#: g10/hkp.c:521 +#, fuzzy, c-format +msgid "can't search keyserver: %s\n" +msgstr "non se pode obte-la chave do servidor de chaves: %s\n" + +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "hai partes da chave secreta non dispoñibles\n" + +#: g10/seckey-cert.c:59 +#, fuzzy, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "o algoritmo de protección %d non está soportado\n" + +#: g10/seckey-cert.c:215 +#, fuzzy +msgid "Invalid passphrase; please try again" +msgstr "Contrasinal non válido; por favor, ténteo de novo ...\n" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "" + +#: g10/seckey-cert.c:273 +msgid "WARNING: Weak key detected - please change passphrase again.\n" +msgstr "" +"AVISO: Detectouse unha chave feble - por favor, cambie o contrasinal outra " +"vez.\n" + +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 +msgid "" +"this is a PGP generated ElGamal key which is NOT secure for signatures!\n" +msgstr "" +"¡esta é unha chave ElGamal xerada por PGP que non é segura para sinaturas!\n" + +#: g10/sig-check.c:213 +#, c-format +msgid "public key is %lu second newer than the signature\n" +msgstr "a chave pública é %lu segundo máis nova cá sinatura\n" + +#: g10/sig-check.c:214 +#, c-format +msgid "public key is %lu seconds newer than the signature\n" +msgstr "a chave pública é %lu segundos máis nova cá sinatura\n" + +#: g10/sig-check.c:237 +#, c-format +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "NOTA: a chave de sinatura %08lX caducou o %s\n" + +#: g10/sig-check.c:318 +msgid "assuming bad signature due to an unknown critical bit\n" +msgstr "" +"asumindo unha sinatura incorrecta debido a un bit crítico descoñecido\n" + +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "fallou a comprobación da sinatura creada: %s\n" + +#: g10/sign.c:283 +#, c-format +msgid "%s signature from: %s\n" +msgstr "Sinatura %s de: %s\n" + +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "AVISO: `%s' é un ficheiro baleiro\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:643 g10/sign.c:812 +#, c-format +msgid "can't create %s: %s\n" +msgstr "non foi posible crear %s: %s\n" + +#: g10/sign.c:704 +msgid "signing:" +msgstr "asinando:" + +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:953 +#, fuzzy, c-format +msgid "%s encryption will be used\n" +msgstr "o descifrado fallou: %s\n" + +#: g10/textfilter.c:134 +#, c-format +msgid "can't handle text lines longer than %d characters\n" +msgstr "non é posible manexar liñas de texto maiores que %d caracteres\n" + +#: g10/textfilter.c:231 +#, c-format +msgid "input line longer than %d characters\n" +msgstr "a liña de entrada contén máis de %d caracteres\n" + +#: g10/tdbio.c:121 g10/tdbio.c:1382 +#, c-format +msgid "trustdb rec %lu: lseek failed: %s\n" +msgstr "rexistro da base de datos de confianza %lu: lseek fallou: %s\n" + +#: g10/tdbio.c:127 g10/tdbio.c:1389 +#, c-format +msgid "trustdb rec %lu: write failed (n=%d): %s\n" +msgstr "" +"rexistro da base de datos de confianza %lu: fallou a escritura (n=%d): %s\n" + +#: g10/tdbio.c:237 +msgid "trustdb transaction too large\n" +msgstr "transacción da base de datos de confianza demasiado grande\n" + +#: g10/tdbio.c:454 +#, c-format +msgid "%s: can't access: %s\n" +msgstr "%s: non é posible acceder: %s\n" + +#: g10/tdbio.c:468 +#, c-format +msgid "%s: directory does not exist!\n" +msgstr "%s: ¡o directorio non existe!\n" + +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 +#, c-format +msgid "%s: can't create lock\n" +msgstr "%s: non se pode crea-lo bloqueo\n" + +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, fuzzy, c-format +msgid "%s: can't make lock\n" +msgstr "%s: non se pode crea-lo bloqueo\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: non se pode crear: %s\n" + +#: g10/tdbio.c:503 +#, c-format +msgid "%s: failed to create version record: %s" +msgstr "%s: non se puido crea-lo rexistro de versión: %s" + +#: g10/tdbio.c:507 +#, c-format +msgid "%s: invalid trustdb created\n" +msgstr "%s: creouse unha base de datos de confianza incorrecta\n" + +#: g10/tdbio.c:510 +#, c-format +msgid "%s: trustdb created\n" +msgstr "%s: creouse a base de datos de confianza\n" + +#: g10/tdbio.c:565 +#, c-format +msgid "%s: invalid trustdb\n" +msgstr "%s: base de datos de confianza non válida\n" + +#: g10/tdbio.c:597 +#, c-format +msgid "%s: failed to create hashtable: %s\n" +msgstr "%s: fallo ao crear unha táboa hash: %s\n" + +#: g10/tdbio.c:605 +#, c-format +msgid "%s: error updating version record: %s\n" +msgstr "%s: erro ao actualiza-lo rexistro de versión: %s\n" + +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 +#, c-format +msgid "%s: error reading version record: %s\n" +msgstr "%s: erro ao le-lo rexistro de versión: %s\n" + +#: g10/tdbio.c:634 g10/tdbio.c:680 +#, c-format +msgid "%s: error writing version record: %s\n" +msgstr "%s: erro ao escribi-lo rexistro de versión: %s\n" + +#: g10/tdbio.c:1119 +#, c-format +msgid "trustdb: lseek failed: %s\n" +msgstr "base de datos de confianza: lseek fallou: %s\n" + +#: g10/tdbio.c:1127 +#, c-format +msgid "trustdb: read failed (n=%d): %s\n" +msgstr "base de datos de confianza: fallou a lectura (n=%d): %s\n" + +#: g10/tdbio.c:1148 +#, c-format +msgid "%s: not a trustdb file\n" +msgstr "%s: non é un ficheiro de base de datos de confianza\n" + +#: g10/tdbio.c:1165 +#, c-format +msgid "%s: version record with recnum %lu\n" +msgstr "%s: rexistro de versión con número de rexistro %lu\n" + +#: g10/tdbio.c:1170 +#, c-format +msgid "%s: invalid file version %d\n" +msgstr "%s: versión do ficheiro incorrecta %d\n" + +#: g10/tdbio.c:1348 +#, c-format +msgid "%s: error reading free record: %s\n" +msgstr "%s: erro ao ler un rexistro libre: %s\n" + +#: g10/tdbio.c:1356 +#, c-format +msgid "%s: error writing dir record: %s\n" +msgstr "%s: erro ao escribi-lo rexistro de directorios: %s\n" + +#: g10/tdbio.c:1366 +#, c-format +msgid "%s: failed to zero a record: %s\n" +msgstr "%s: non se puido pór a cero un rexistro: %s\n" + +#: g10/tdbio.c:1396 +#, c-format +msgid "%s: failed to append a record: %s\n" +msgstr "%s: non se puido engadir un rexistro: %s\n" + +#: g10/tdbio.c:1441 +msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" +msgstr "" +"a base de datos de confianza está corrompida; execute \"gpg --fix-trustdb" +"\".\n" + +#: g10/trustdb.c:200 +#, fuzzy, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "'%s' non é un ID longo de chave válido\n" + +#: g10/trustdb.c:235 +#, fuzzy, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "chave %08lX: aceptada como chave de confianza.\n" + +#: g10/trustdb.c:274 +#, fuzzy, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "chave %08lX: non se pode pór na base de datos de confianza\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "" +"chave %08lX: non hai unha chave pública para a chave de confianza - omitida\n" + +#: g10/trustdb.c:332 +#, c-format +msgid "trust record %lu, req type %d: read failed: %s\n" +msgstr "rexistro de confianza %lu, tipo da petición %d: fallou a lectura: %s\n" + +#: g10/trustdb.c:338 +#, fuzzy, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "rexistro de confianza %lu: fallou o borrado: %s\n" + +#: g10/trustdb.c:353 +#, c-format +msgid "trust record %lu, type %d: write failed: %s\n" +msgstr "rexistro de confianza %lu, tipo %d: fallou a escritura: %s\n" + +#: g10/trustdb.c:368 +#, c-format +msgid "trustdb: sync failed: %s\n" +msgstr "base de datos de confianza: fallou a sincronización: %s\n" + +#: g10/trustdb.c:468 +#, fuzzy +msgid "no need for a trustdb check\n" +msgstr "%s: non é un ficheiro de base de datos de confianza\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 +#, fuzzy, c-format +msgid "next trustdb check due at %s\n" +msgstr "rexistro da base de datos de confianza %lu: lseek fallou: %s\n" + +#: g10/trustdb.c:779 +#, fuzzy +msgid "checking the trustdb\n" +msgstr "cambia-la confianza sobre o dono" + +#: g10/trustdb.c:933 +#, fuzzy, c-format +msgid "public key %08lX not found: %s\n" +msgstr "non se atopou a chave pública" + +#: g10/trustdb.c:1515 +#, c-format +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "" + +#: g10/trustdb.c:1593 +#, c-format +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "" + +#: g10/verify.c:108 +msgid "" +"the signature could not be verified.\n" +"Please remember that the signature file (.sig or .asc)\n" +"should be the first file given on the command line.\n" +msgstr "" +"non se puido verifica-la sinatura.\n" +"Por favor, lembre que o ficheiro de sinatura (.sig ou .asc) debería\n" +"se-lo primeiro ficheiro que se indique na liña de comandos.\n" + +#: g10/verify.c:173 +#, c-format +msgid "input line %u too long or missing LF\n" +msgstr "" +"a liña de entrada %u é longa de máis ou fáltalle a marca de fin de liña\n" + +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"a chave non está marcada coma insegura - non se pode empregar co xerador de " +"números aleatorios falso\n" + +#: g10/skclist.c:138 +#, c-format +msgid "skipped `%s': duplicated\n" +msgstr "omítese `%s': duplicada\n" + +#: g10/skclist.c:145 g10/skclist.c:153 +#, c-format +msgid "skipped `%s': %s\n" +msgstr "omítese `%s': %s\n" + +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "omítese: a chave secreta xa está presente\n" + +#: g10/skclist.c:160 +#, c-format +msgid "" +"skipped `%s': this is a PGP generated ElGamal key which is not secure for " +"signatures!\n" +msgstr "" +"ignorouse `%s': ¡esta é unha chave ElGamal xerada por PGP que non é segura " +"para sinaturas!\n" + +#. do not overwrite +#: g10/openfile.c:84 +#, c-format +msgid "File `%s' exists. " +msgstr "O ficheiro `%s' xa existe. " + +#: g10/openfile.c:86 +msgid "Overwrite (y/N)? " +msgstr "¿Sobrescribir? (s/N) " + +#: g10/openfile.c:119 +#, c-format +msgid "%s: unknown suffix\n" +msgstr "%s: sufixo descoñecido\n" + +#: g10/openfile.c:141 +msgid "Enter new filename" +msgstr "Introduza o novo nome de ficheiro" + +#: g10/openfile.c:184 +msgid "writing to stdout\n" +msgstr "escribindo na saída estándar\n" + +#: g10/openfile.c:273 +#, c-format +msgid "assuming signed data in `%s'\n" +msgstr "suponse que hai datos asinados en `%s'\n" + +#: g10/openfile.c:323 +#, c-format +msgid "%s: new options file created\n" +msgstr "%s: creouse un novo ficheiro de opcións\n" + +#: g10/openfile.c:350 +#, c-format +msgid "%s: can't create directory: %s\n" +msgstr "%s: non foi posible crear un directorio: %s\n" + +#: g10/openfile.c:353 +#, c-format +msgid "%s: directory created\n" +msgstr "%s: directorio creado\n" + +#: g10/openfile.c:355 +msgid "you have to start GnuPG again, so it can read the new options file\n" +msgstr "" +"ten que iniciar GnuPG outra vez para que lea o novo ficheiro de opcións\n" + +#: g10/encr-data.c:91 +msgid "" +"WARNING: message was encrypted with a weak key in the symmetric cipher.\n" +msgstr "AVISO: cifrouse a mensaxe cunha chave feble no cifrado simétrico.\n" + +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problema ao manexa-lo paquete cifrado\n" + +#: g10/seskey.c:52 +msgid "weak key created - retrying\n" +msgstr "creouse unha chave feble - volvendo a tentalo\n" + +#: g10/seskey.c:57 +#, c-format +msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" +msgstr "" +"non se pode evitar unha chave feble para o cifrado simétrico; tentouse %d " +"veces\n" + +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "" + +#: g10/delkey.c:116 +msgid "can't do that in batchmode without \"--yes\"\n" +msgstr "" +"iso non se pode facer no modo de procesamento por lotes sen \"--yes\"\n" + +#: g10/delkey.c:138 +msgid "Delete this key from the keyring? " +msgstr "¿Borrar esta chave do chaveiro? " + +#: g10/delkey.c:146 +msgid "This is a secret key! - really delete? " +msgstr "¡Esta é unha chave secreta! - ¿está seguro de que quere borrala? " + +#: g10/delkey.c:156 +#, fuzzy, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "erro ó enumera-los bloques de chaves: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, fuzzy, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "¡hai unha chave secreta para esta chave pública!\n" + +#: g10/delkey.c:196 +#, fuzzy +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "empregue a opción \"--delete-secret-key\" para borrala primeiro.\n" + +#: g10/helptext.c:47 +msgid "" +"It's up to you to assign a value here; this value will never be exported\n" +"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" +"to do with the (implicitly created) web-of-certificates." +msgstr "" +"A asignación dun valor aquí é cousa súa; este valor nunca se ha exportar\n" +"a ningún terceiro. Precísase para implementa-la rede de confianza; non ten\n" +"nada que ver coa rede de certificados." + +#: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" + +#: g10/helptext.c:60 +msgid "If you want to use this revoked key anyway, answer \"yes\"." +msgstr "Se desexa empregar esta chave revocada, conteste \"si\"." + +#: g10/helptext.c:64 +msgid "If you want to use this untrusted key anyway, answer \"yes\"." +msgstr "Se desexa empregar esta clave na que non se confía, conteste \"si\"." + +#: g10/helptext.c:68 +msgid "" +"Enter the user ID of the addressee to whom you want to send the message." +msgstr "Introduza o ID de usuario da persoa á que lle quere manda-la mensaxe." + +#: g10/helptext.c:72 +msgid "" +"Select the algorithm to use.\n" +"\n" +"DSA (aka DSS) is the digital signature algorithm which can only be used\n" +"for signatures. This is the suggested algorithm because verification of\n" +"DSA signatures are much faster than those of ElGamal.\n" +"\n" +"ElGamal is an algorithm which can be used for signatures and encryption.\n" +"OpenPGP distinguishs between two flavors of this algorithms: an encrypt " +"only\n" +"and a sign+encrypt; actually it is the same, but some parameters must be\n" +"selected in a special way to create a safe key for signatures: this program\n" +"does this but other OpenPGP implementations are not required to understand\n" +"the signature+encryption flavor.\n" +"\n" +"The first (primary) key must always be a key which is capable of signing;\n" +"this is the reason why the encryption only ElGamal key is not available in\n" +"this menu." +msgstr "" +"Seleccione o algoritmo a usar.\n" +"\n" +"DSA (tamén chamado DSS) é un algoritmo de sinatura dixital, que só se pode\n" +"empregar para asinar. É o algoritmo aconsellado porque é moito máis rápido\n" +"verificar unha sinatura DSA que unha sinatura ElGamal.\n" +"\n" +"ElGamal é un algoritmo que se pode empregar para asinar e cifrar. OpenPGP\n" +"distingue entre dúas variantes do algoritmo: un que só cifra e outro que\n" +"asina e cifra; realmente é o mesmo, pero hai que escoller algúns parámetros\n" +"dun xeito especial para crear unha clave que sexa segura para asinar: este\n" +"programa faino, pero outras implementacións de OpenPGP non teñen por que\n" +"entende-la variante de asinado+cifrado.\n" +"\n" +"A primeira clave (a primaria) debe ser sempre unha clave capaz de asinar;\n" +"este é o motivo polo que a clave ElGamal que só cifra non está dispoñible\n" +"neste menú." + +#: g10/helptext.c:92 +msgid "" +"Although these keys are defined in RFC2440 they are not suggested\n" +"because they are not supported by all programs and signatures created\n" +"with them are quite large and very slow to verify." +msgstr "" +"Aínda que estas chaves están definidas no RFC2440, non se aconsellan\n" +"porque non están soportadas por tódolos programas, e as sinaturas\n" +"creadas con elas son moi grandes e lentas de comprobar." + +#: g10/helptext.c:99 +msgid "Enter the size of the key" +msgstr "Introduza o tamaño da chave" + +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 +msgid "Answer \"yes\" or \"no\"" +msgstr "Conteste \"si\" ou \"non\"" + +#: g10/helptext.c:113 +msgid "" +"Enter the required value as shown in the prompt.\n" +"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" +"get a good error response - instead the system tries to interpret\n" +"the given value as an interval." +msgstr "" +"Introduza o valor requerido tal como se amosa no indicativo.\n" +"É posible introducir unha data ISO (AAA-MM-DD) pero non ha obter unha\n" +"boa resposta de erro - no canto diso, o sistema ha tratar de interpreta-lo\n" +"valor proporcionado coma se fora un intervalo." + +#: g10/helptext.c:125 +msgid "Enter the name of the key holder" +msgstr "Introduza o nome do propietario da chave" + +#: g10/helptext.c:130 +msgid "please enter an optional but highly suggested email address" +msgstr "por favor, introduza un enderezo de e-mail (opcional pero recomendado)" + +#: g10/helptext.c:134 +msgid "Please enter an optional comment" +msgstr "Por favor, introduza un comentario (opcional)" + +#: g10/helptext.c:139 +msgid "" +"N to change the name.\n" +"C to change the comment.\n" +"E to change the email address.\n" +"O to continue with key generation.\n" +"Q to to quit the key generation." +msgstr "" +"N para cambia-lo nome.\n" +"C para cambia-lo comentario.\n" +"E para cambia-lo enderezo de e-mail.\n" +"O para continuar coa xeración da chave.\n" +"S para saír da xeración da chave." + +#: g10/helptext.c:148 +msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." +msgstr "Conteste \"si\" (ou só \"s\") se é correcto xerar esta subchave." + +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" + +#: g10/helptext.c:194 +msgid "Answer \"yes\" is you want to sign ALL the user IDs" +msgstr "Conteste \"si\" se quere asinar TÓDOLOS IDs de usuario" + +#: g10/helptext.c:198 +msgid "" +"Answer \"yes\" if you really want to delete this user ID.\n" +"All certificates are then also lost!" +msgstr "" +"Conteste \"si\" se realmente desexa borrar este ID de usuario.\n" +"¡Tamén se han perder tódolos certificados!" + +#: g10/helptext.c:203 +msgid "Answer \"yes\" if it is okay to delete the subkey" +msgstr "Conteste \"si\" se é correcto borrar esta subchave" + +#: g10/helptext.c:208 +msgid "" +"This is a valid signature on the key; you normally don't want\n" +"to delete this signature because it may be important to establish a\n" +"trust connection to the key or another key certified by this key." +msgstr "" +"Esta é unha sinatura válida na chave; normalmente non ha borrar esta\n" +"sinatura porque pode ser importante para estabrecer unha conexión de\n" +"confianza na chave ou noutra chave certificada por esta chave." + +#: g10/helptext.c:213 +msgid "" +"This signature can't be checked because you don't have the\n" +"corresponding key. You should postpone its deletion until you\n" +"know which key was used because this signing key might establish\n" +"a trust connection through another already certified key." +msgstr "" +"Non se pode verificar esta sinatura porque non posúe a chave\n" +"correspondente. Debería retrasa-lo borrado ata que saiba que chave\n" +"se empregou porque esta chave de sinatura podería estabrecer unha\n" +"conexión de confianza mediante outra chave xa certificada." + +#: g10/helptext.c:219 +msgid "" +"The signature is not valid. It does make sense to remove it from\n" +"your keyring." +msgstr "A sinatura non é correcta. Ten sentido borrala do chaveiro." + +#: g10/helptext.c:223 +msgid "" +"This is a signature which binds the user ID to the key. It is\n" +"usually not a good idea to remove such a signature. Actually\n" +"GnuPG might not be able to use this key anymore. So do this\n" +"only if this self-signature is for some reason not valid and\n" +"a second one is available." +msgstr "" +"Esta é unha sinatura que liga o ID de usuario á chave. Normalmente\n" +"non é unha boa idea borrar unha sinatura como esta. De feito,\n" +"GnuPG pode non ser capaz de usar máis esta chave. Así que faga isto\n" +"só se esta auto-sinatura non é correcta por algun motivo e hai\n" +"unha segunda á súa disposición." + +#: g10/helptext.c:231 +msgid "" +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" + +#: g10/helptext.c:238 +#, fuzzy +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "" +"Por favor, introduza o contrasinal; esta é unha frase secreta \n" +" Blurb, blurb ..." + +#: g10/helptext.c:244 +msgid "Please repeat the last passphrase, so you are sure what you typed in." +msgstr "" +"Por favor, repita o último contrasinal, para estar seguro do que tecleou." + +#: g10/helptext.c:248 +msgid "Give the name of the file to which the signature applies" +msgstr "Introduza o nome do ficheiro ao que corresponde a sinatura" + +#: g10/helptext.c:253 +msgid "Answer \"yes\" if it is okay to overwrite the file" +msgstr "Conteste \"si\" se é correcto sobrescribi-lo ficheiro" + +#: g10/helptext.c:258 +msgid "" +"Please enter a new filename. If you just hit RETURN the default\n" +"file (which is shown in brackets) will be used." +msgstr "" +"Por favor, introduza un novo nome de ficheiro. Se só preme ENTER, hase\n" +"emprega-lo ficheiro por defecto (que se amosa entre corchetes)." + +#: g10/helptext.c:264 +msgid "" +"You should specify a reason for the certification. Depending on the\n" +"context you have the ability to choose from this list:\n" +" \"Key has been compromised\"\n" +" Use this if you have a reason to believe that unauthorized persons\n" +" got access to your secret key.\n" +" \"Key is superseded\"\n" +" Use this if you have replaced this key with a newer one.\n" +" \"Key is no longer used\"\n" +" Use this if you have retired this key.\n" +" \"User ID is no longer valid\"\n" +" Use this to state that the user ID should not longer be used;\n" +" this is normally used to mark an email address invalid.\n" +msgstr "" +"Debería especificar un motivo para o certificado. Dependendo do contexto\n" +"pode escoller desta lista:\n" +" \"Descobreuse a chave\"\n" +" Emprégueo se ten motivos para crer que algunha persoa non autorizada\n" +" obtivo acceso á súa chave secreta.\n" +" \"A chave é obsoleta\"\n" +" Emprégueo se cambiou esta chave cunha máis recente.\n" +" \"Xa non se emprega a chave\"\n" +" Emprégueo se retirou esta chave.\n" +" \"O ID de usuario xa non é válido\"\n" +" Emprégueo para indicar que o ID de usuario xa non se debería empregar;\n" +" adoita empregarse para marcar un enderezo de correo non válido.\n" + +#: g10/helptext.c:280 +msgid "" +"If you like, you can enter a text describing why you issue this\n" +"revocation certificate. Please keep this text concise.\n" +"An empty line ends the text.\n" +msgstr "" +"Se quere, pode introducir un texto que describa por que emite este\n" +"certificado de revocación. Por favor, manteña este texto breve.\n" +"Unha liña en branco remata o texto.\n" + +#: g10/helptext.c:295 +msgid "No help available" +msgstr "Non hai axuda dispoñible" + +#: g10/helptext.c:303 +#, c-format +msgid "No help available for `%s'" +msgstr "Non hai axuda dispoñible para `%s'" + +#: g10/keydb.c:177 +#, fuzzy, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "erro escribindo no chaveiro `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "" + +#: g10/keydb.c:197 +#, fuzzy, c-format +msgid "keyring `%s' created\n" +msgstr "%s: chaveiro creado\n" + +#: g10/keydb.c:587 +#, fuzzy, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "%s: fallo ao crear unha táboa hash: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "AVISO: existen dous ficheiros con información confidencial.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s é o que non cambiou\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s é o novo\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Por favor, amañe este posible fallo de seguridade\n" + +#: g10/keyring.c:1337 +#, fuzzy, c-format +msgid "checking keyring `%s'\n" +msgstr "non foi posible bloquea-lo chaveiro `%s': %s\n" + +#: g10/keyring.c:1368 +#, fuzzy, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu chaves procesadas hasta polo momento\n" + +#: g10/keyring.c:1379 +#, fuzzy, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "ve-la lista de chaves e sinaturas" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: chaveiro creado\n" + +#, fuzzy +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "¿Está seguro de que quere este tamaño de chave? " + +#, fuzzy +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr "¿Está seguro de que quere este tamaño de chave? " + +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "¿Asinar de verdade? " + +#~ msgid "too many random bits requested; the limit is %d\n" +#~ msgstr "pedíronse demasiados bits aleatorios; o límite é %d\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NOMES]|verifica-la base de datos de confianza" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key id-de-usuario" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key id de usuario" + +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-key-and-public-key id-de-usuario" + +#~ msgid "For info see http://www.gnupg.org" +#~ msgstr "Para obter máis información vexa http://www.gnupg.org" + +#~ msgid "sSmMqQ" +#~ msgstr "iImMsS" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Non se puido atopar unha ruta de confianza válida ata a chave. Hase ver " +#~ "se\n" +#~ "se pode asignar algún valor de confianza non asignado.\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "Non se atopou unha ruta que conduza a unha das nosas chaves.\n" +#~ "\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "Non se atoparon certificados con confianza non definida.\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Non se cambiou ningún valor de confianza.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "" +#~ "%08lX: non hai información para calcular unha probabilidade de confianza\n" + +#~ msgid "Enter the user ID: " +#~ msgstr "Introduza o ID de usuario: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "omitida: a chave pública xa está estabrecida con --encrypt-to\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: erro ao verifica-la chave: %s\n" + +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) RSA (asinar e cifrar)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "¿Seguro que quere crear unha chave para asinar e cifrar? " + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "¿Está seguro de precisar un tamaño de chave tan grande? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: non se atopou o usuario: %s\n" + +#~ msgid "certificate read problem: %s\n" +#~ msgstr "problema de lectura do certificado: %s\n" + +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "demasiadas entradas na caché de chaves descoñecidas - desactivada\n" + +#~ msgid "secret key %08lX not imported (use %s to allow for it)\n" +#~ msgstr "" +#~ "non se importou a chave secreta %08lX (empregue %s para permitilo)\n" + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "chave %08lX: a nosa copia non ten sinatura propia\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: usuario non atopado\n" + +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "" +#~ "a actualización da base de datos de confianza fallou:\n" +#~ "%s\n" + +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "" +#~ "non hai un servidor de chaves coñecido (empregue a opción --keyserver)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s: non é un ID de chave válido\n" + +#~ msgid "assuming bad MDC due to an unknown critical bit\n" +#~ msgstr "asumindo un MDC incorrecto debido a un bit crítico\n" + +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "erro ao le-lo rexistro de directorio para o LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "" +#~ "lid %lu: esperábase un rexistro de directorio, obtívose un tipo %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "non hai unha chave primaria para o LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "erro ao le-la chave primaria para o LID %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record fallou: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "chave %08lX: a consulta do rexistro fallou\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "chave %08lX: xa está na tabla de chaves de confianza\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "NOTA: a chave secreta %08lX NON está protexida.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "chave %08lX: as chaves secreta e pública non coinciden\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "erro ao enumera-las chaves secretas: %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "chave %08lX.%lu: Ligadura de subchave correcta\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "chave %08lX.%lu: Ligadura de subchave non válida: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "chave %08lX.%lu: Revocación de chave válida\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "chave %08lX.%lu: Revocación de chave non válida: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "chave %08lX.%lu: Revocación de subchave válida\n" + +#~ msgid "Good self-signature" +#~ msgstr "Auto-sinatura correcta" + +#~ msgid "Invalid self-signature" +#~ msgstr "Auto-sinatura non válida" + +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "" +#~ "Omítese unha revocación de ID de usuario válida debido a unha auto-" +#~ "sinatura máis recente" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Revocación de ID de usuario válida" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Revocación de ID de usuario non válida" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Revocación de certificado válida" + +#~ msgid "Good certificate" +#~ msgstr "Certificado correcto" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Revocación de certificado non válida" + +#~ msgid "Invalid certificate" +#~ msgstr "Certificado non válido" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "o rexistro de sinatura %lu[%d] apunta a un rexistro incorrecto.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "certificado duplicado - borrado" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir fallou: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: a inserción fallou: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: a inserción fallou: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: inserido\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "erro lendo o rexistro de directorio: %s\n" + +#~ msgid "\t%lu keys with errors\n" +#~ msgstr "\t%lu chaves con erros\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu chaves inseridas\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: rexistro de directorio sen chave - ignorado\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr "\t%lu debidos a novas chaves públicas\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu chaves omitidas\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu chaves actualizadas\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Ooops, non hai chaves\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Ooops, non hai IDs de usuario\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "" +#~ "check_trust:\n" +#~ "a búsqueda de rexistro de directorio fallou: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "" +#~ "chave %08lX:\n" +#~ "a inserción na base de datos de confianza fallou: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "chave %08lX.%lu: inserida na base de datos de confianza\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "chave %08lX.%lu: creada no futuro (salto no tempo ou problema de reloxo)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "chave %08lX.%lu: caducou o %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "chave %08lX.%lu: a verificación de confianza fallou: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "problema ao buscar '%s' na base de datos de confianza: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "o usuario '%s' non está na base de datos de confianza - inserindo\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "erro ao pór '%s' na base de datos de confianza: %s\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "" +#~ "AVISO: aínda non se poden manexar rexistros de preferencias longos\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: non se pode crea-lo chaveiro: %s\n" + +#~ msgid "set debugging flags" +#~ msgstr "axusta-los valores de depuración" + +#~ msgid "enable full debugging" +#~ msgstr "habilitar depuración total" + +#~ msgid "do not write comment packets" +#~ msgstr "non escribir paquetes de comentario" + +#~ msgid "(default is 1)" +#~ msgstr "(por defecto é 1)" + +#~ msgid "(default is 3)" +#~ msgstr "(por defecto é 3)" + +#~ msgid " (%d) ElGamal in a v3 packet\n" +#~ msgstr " (%d) ElGamal nun paquete v3\n" + +#~ msgid "Key generation can only be used in interactive mode\n" +#~ msgstr "A xeración de chaves somentes pode ser usada no modo interactivo\n" + +#~ msgid "RSA key cannot be used in this version\n" +#~ msgstr "A chave RSA non pode user usada nesta version\n" + +#~ msgid "No key for user ID\n" +#~ msgstr "Non hay unha chave para o ID de usuario\n" + +#~ msgid "No user ID for key\n" +#~ msgstr "Non hai un ID de usuario para a chave\n" + +#~ msgid "no secret key for decryption available\n" +#~ msgstr "non hai chave secreta disponible para desencriptar\n" + +#~ msgid "" +#~ "RSA keys are deprecated; please consider creating a new key and use this " +#~ "key in the future\n" +#~ msgstr "" +#~ "As chaves RSA están obsoletas; por favor, considere a opción de crear " +#~ "unha\n" +#~ "chave nova e usa-la no futuro.\n" diff --git a/po/id.po b/po/id.po index ab6194b20..7d789aa23 100644 --- a/po/id.po +++ b/po/id.po @@ -1,301 +1,331 @@ -# GNU Privacy Guard 1.0.1 (Indonesian) -# Copyright (C) 1999 Free Software Foundation, Inc. -# Tedi Heriyanto , 1999-2000. +# Gnu Privacy Guard 1.0.7 (Indonesian) +# Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc. +# Tedi Heriyanto , 2002. # msgid "" msgstr "" -"Project-Id-Version: GNU Privacy Guard 1.0.1\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 2000-02-06 18:04+07:00\n" -"Last-Translator: Tedi Heriyanto \n" -"Language-Team: Indonesia \n" +"Project-Id-Version: GNUPG 1.0.7\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-20 21:26GMT+0700\n" +"Last-Translator: Tedi Heriyanto \n" +"Language-Team: Indonesian \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Peringatan: menggunakan memori yang tidak aman!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "" +"silakan lihat http://www.gnupg.org/faq.html untuk informasi lebih lanjut\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "operasi tidak mungkin tanpa menginisialisasi memori yang aman\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(anda mungkin menggunakan program yang salah untuk tugas ini)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "ya" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "yY" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "tidak" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "tT" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "keluar" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "kK" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "Kesalahan umum" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "tipe paket tidak dikenal" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "versi tidak dikenal" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "algoritma pubkey tidak dikenal" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "algoritma digest tidak dikenal" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "kunci publik yang buruk" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "kunci rahasia yang buruk" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "signature yang buruk" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "kesalahan checksum" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "passphrase yang buruk" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "kunci publik tidak ditemukan" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "algoritma cipher tidak dikenal" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "tidak dapat membuka keyring" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "paket tidak valid" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "armor tidak valid" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "tidak ada user id tsb" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" -msgstr "kunci rahasia tidak ada" +msgstr "kunci rahasia tidak tersedia" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "digunakan kunci rahasia yang salah" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "tidak didukung" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "kunci yang buruk" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "kesalahan baca file" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "kesalahan tulis file" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "algoritma kompresi tidak dikenal" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "kesalahan buka file" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "kesalahan buat file" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "passphrase tidak valid" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algoritma pubkey belum diimplementasikan" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algoritma cipher belum diimplementasikan" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "kelas signature tidak dikenal" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "kesalahan database trust" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "MPI yang buruk" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "batasan sumber daya" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "keyring tidak valid" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "sertifikat yang buruk" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "user id yang tidak benar" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "kesalahan tutup file" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "kesalahan ganti nama file" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "kesalahan hapus file" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "data tidak terduga" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "konflik timestamp" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "algoritma pubkey tidak dapat digunakan" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "file ada" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "kunci lemah" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "argumen tidak valid" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "URI yang buruk" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "URI tidak didukung" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "kesalahan jaringan" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "tidak dienkripsi" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "tidak diproses" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "kunci publik tidak dapat dipakai" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "kunci rahasia tidak dapat dipakai" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "kesalahan keyserver" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... kesalahan (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "anda menemukan kesalahan ...(%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "tidak dapat membuka `%s': %s\n" -#: cipher/random.c:325 -#, fuzzy, c-format +#: cipher/random.c:324 +#, c-format msgid "can't stat `%s': %s\n" -msgstr "tidak dapat membuka `%s': %s\n" +msgstr "tidak dapat melakukan statistik `%s': %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" -msgstr "" +msgstr "'%s' bukan file reguler - diabaikan\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" -msgstr "" +msgstr "catatan: file random_seed kosong\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" -msgstr "" +msgstr "peringatan: ukuran file random_seed tidak valid - tidak dipakai\n" -#: cipher/random.c:349 -#, fuzzy, c-format +#: cipher/random.c:348 +#, c-format msgid "can't read `%s': %s\n" -msgstr "tidak dapat membuka `%s': %s\n" +msgstr "tidak dapat membaca `%s': %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" -msgstr "" +msgstr "catatan: file random_seed tidak diupdate\n" -#: cipher/random.c:407 -#, fuzzy, c-format +#: cipher/random.c:406 +#, c-format msgid "can't create `%s': %s\n" msgstr "tidak dapat membuat %s: %s\n" -#: cipher/random.c:414 -#, fuzzy, c-format -msgid "can't write `%s': %s\n" -msgstr "tidak dapat membuka `%s': %s\n" - -#: cipher/random.c:417 -#, fuzzy, c-format -msgid "can't close `%s': %s\n" -msgstr "tidak dapat membuka `%s': %s\n" - -#: cipher/random.c:428 +#: cipher/random.c:413 #, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" +msgid "can't write `%s': %s\n" +msgstr "tidak dapat menulis `%s': %s\n" -#: cipher/random.c:659 +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "tidak dapat menutup `%s': %s\n" + +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "PERINGATAN: menggunakan random number generator yang tidak aman!!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -309,7 +339,7 @@ msgstr "" "JANGAN MENGGUNAKAN DATA YANG DIHASILKAN PROGRAM INI!!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -320,160 +350,171 @@ msgstr "" "Tidak tersedia cukup byte random. Silakan melakukan aktivitas lain agar\n" "memungkinkan SO mengumpulkan lebih banyak entropi! (Perlu %d byte lagi)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Peringatan: menggunakan memori yang tidak aman!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "operasi tidak mungkin tanpa menginisialisasi memori yang aman\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(anda mungkin menggunakan program yang salah untuk tugas ini)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " msgstr "" "@Perintah:\n" -" " +" " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[file]|buat signature" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[file]|buat signature teks" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "buat detached signature" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "enkripsi data" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[files]|enkripsi file" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "enkripsi hanya dengan symmetric cipher" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "hanya disimpan" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "dekripsi data (default)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[files]|dekripsi file" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "verifikasi signature" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "tampilkan kunci" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "tampilkan kunci dan signature" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "periksa signature kunci" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "tampilkan kunci dan fingerprint" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "tampilkan kunci rahasia" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "buat sepasang kunci baru" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" +#: g10/g10.c:307 +msgid "remove keys from the public keyring" msgstr "hapus kunci dari keyring publik" -#: g10/gpg.c:221 -#, fuzzy -msgid "remove key from the secret keyring" -msgstr "hapus kunci dari keyring publik" +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "hapus kunci dari keyring pribadi" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "tandai kunci" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "tandai kunci secara lokal" -#: g10/gpg.c:224 +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "tandai kunci tidak dapat di-revoke" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "tandai kunci secara lokal dan tidak dapat di-revoke" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "tandai atau edit kunci" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "buat sertifikat revokasi" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "ekspor kunci" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "ekspor kunci ke key server" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "impor kunci dari key server" -#: g10/gpg.c:232 +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "cari kunci di key server" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "update semua kunci dari keyserver" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "impor/gabung kunci" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "tampilkan hanya urutan paket" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "ekspor nilai ownertrust" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "impor nilai ownertrust" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "perbarui database trust" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NAMA]|periksa database trust" +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "perbarui database trust secara otomatis" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "perbaiki database trust yang terkorupsi" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "De-Armor file atau stdin" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "En-Armor file atau stdin" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [file]|cetak digest pesan" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -483,162 +524,204 @@ msgstr "" "Pilihan:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "ciptakan output ascii" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NAMA|enkripsi untuk NAMA" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NAMA|gunakan NAMA sebagai penerima baku" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "gunakan kunci baku sebagai penerima baku" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "gunakan id-user ini untuk menandai/dekripsi" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|set tingkat kompresi N (0 tidak ada)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "gunakan mode teks kanonikal" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "gunakan sebagai file output" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "detil" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "lebih diam" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "jangan menggunakan terminal" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "paksa signature v3" -#: g10/gpg.c:275 +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "jangan paksa signature v3" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "paksa signature kunci v4" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "jangan paksa signature kunci v4" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "selalu gunakan MDC untuk enkripsi" -#: g10/gpg.c:276 +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "jangan gunakan MDC untuk enkripsi" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "jangan buat perubahan" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "gunakan gpg-agent" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "mode batch: tanpa tanya" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "asumsikan ya untuk seluruh pertanyaan" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "asumsikan tidak untuk seluruh pertanyaan" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "tambah keyring ini ke daftar keyring" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "tambah keyring rahasia ini ke daftar" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "tampilkan keyring tempat kunci yang dipilih berada" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NAMA|gunakan NAMA sebagai kunci rahasia baku" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|gunakan keyserver ini utk lihat kunci" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NAMA|set charset terminal ke NAMA" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "baca pilihan dari file" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "|FD|tulis info status ke FD ini" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "" +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[file]|tulis status info ke file" -#: g10/gpg.c:297 +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|KEYID|sangat percayai kunci ini" + +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|FILE|muat modul ekstensi FILE" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "emulasikan mode seperti dalam RFC1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" -msgstr "set pilihan paket, cipher, digest ke OpenPGP" +msgstr "set pilihan semua paket, cipher, digest ke perilaku OpenPGP" -#: g10/gpg.c:300 +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "set pilihan semua paket, cipher, digest ke perilaku PGP 2.x" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|gunakan passphrase mode N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NAMA|gunakan algoritma digest NAMA utk passphrase" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NAMA|gunakan algoritma cipher NAMA untuk passphrase" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAMA|gunakan algoritma cipher NAMA" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAMA|gunakan algoritma digest pesan NAMA" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|gunakan algoritma kompresi N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "buang field keyid paket terenkripsi" -#: g10/gpg.c:309 -msgid "|NAME=VALUE|use this notation data" -msgstr "|NAMA=NILAI|gunakan notasi data ini" +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Tampilkan Photo IDs" -#: g10/gpg.c:312 +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Jangan tampilkan Photo IDs" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "Set perintah baris untuk melihat Photo IDs" + +#: g10/g10.c:431 +msgid "|NAME=VALUE|use this notation data" +msgstr "|NAME=VALUE|gunakan notasi data ini" + +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" +"@\n" +"(Lihat man page untuk daftar lengkap semua perintah dan option)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -658,15 +741,15 @@ msgstr "" " --list-keys [nama] tampilkan kunci\n" " --fingerprint [nama] tampilkan fingerprint\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "Silakan laporkan kesalahan ke .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Pemakaian: gpg [pilihan] [file] (-h untuk bantuan)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -676,7 +759,7 @@ msgstr "" "tandai, cek, enkripsi atau dekripsi\n" "operasi baku tergantung pada data input\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -684,191 +767,254 @@ msgstr "" "\n" "Algoritma yang didukung:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "pemakaian: gpg [pilihan] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "perintah saling konflik\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "CATATAN: tidak ada file pilihan baku `%s'\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "file pilihan `%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "membaca pilihan dari `%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s bukanlah set karakter yang valid\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "tidak dapat memparsing URI keyserver\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "tidak dapat menset exec-path ke %s\n" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "PERINGATAN: `%s' adalah option terdepresiasi\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "silakan gunakan \"--keyserver-options %s\"\n" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "PERINGATAN: program mungkin membuat file core!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "PERINGATAN: %s menimpa %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "CATATAN: %s tidak untuk pemakaian normal!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s tidak dibolehkan dengan %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s tidak masuk akal dengan %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" +"anda hanya dapat membuat signature detached atau clear saat dalam mode --" +"pgp2\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" +"anda tidak dapat menandai dan mengenkripsi pada saat bersamaan dalam mode --" +"pgp2\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" +"anda harus menggunakan file (dan bukan pipe) saat bekerja dengan opsi --" +"pgpg2\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "mengenkripsi pesan dalam mode --pgp2 membutuhkan cipher IDEA\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "pesan ini mungkin tidak dapat digunakan oleh PGP 2.x\n" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "algoritma cipher yang dipilih tidak valid\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "algoritma digest yang dipilih tidak valid\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "kebijakan URL yang diberikan tidak valid\n" +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "URL signature kebijakan yang diberikan tidak valid\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "URL sertifikasi kebijakan yang diberikan tidak valid\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "algoritma kompresi harus di antara %d..%d\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed harus lebih dari 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed harus lebih dari 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth harus di antara 1 hingga 255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "CATATAN: mode S2K sederhana (0) tidak dianjurkan\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "mode S2K yang tidak valid; harus 0, 1 atau 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "default-check-level tidak valid; harus 0, 1, 2, atau 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "preferensi tidak valid\n" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "gagal inisialisasi TrustDB: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [namafile]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [namafile]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [namafile]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [namafile]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [namafile]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [namafile]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [namafile]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [namafile]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key id-user" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key id-user" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key user-id" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key user-id" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-user [perintah]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key id-user" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key id-user" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "tidak dapat membuka %s: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-user] [keyring]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "gagal dearmoring: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "gagal enarmoring: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritma hash tidak valid `%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[namafile]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Teruskan dan ketikkan pesan anda ....\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "tidak dapat membuka `%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "karakter pertama nama notasi harus huruf atau garis bawah\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -876,248 +1022,228 @@ msgstr "" "nama notasi hanya terdiri dari huruf, digit, titik atau garis bawah dan " "diakhiri dengan sebuah '='\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "titik dalam nama notasi harus diapit oleh karakter lain\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "nilai notasi tidak boleh menggunakan karakter kendali\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "armor: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "header armor tidak valid: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "header armor: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "header clearsig tidak valid\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "signature teks bersarang\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "dash escaped line tidak valid: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "armor tidak terduga:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "karakter radix64 tidak valid %02x dilewati\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "eof prematur (tanpa CRC)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "eof prematur (dalam CRC)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "CRC tidak tepat\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "kesalahan CRC; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "eof prematur (dalam Trailer)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "kesalahan dalam garis trailer\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "tidak ditemukan data OpenPGP yang valid.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armor tidak valid: baris melebihi %d karakter\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" -"karakter dapat dicetak dalam armor - mungkin kesalahan pada MTA telah " -"dipakai\n" +"karakter yang dapat dicetak dalam armor - mungkin telah digunakan MTA yang " +"mengandung bug\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Fingerprint:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Fingerprint:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" -msgstr "" +msgstr "Tidak ada alasan diberikan" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" -msgstr "Kunci diproteksi.\n" +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "Kunci dilampaui" -#: g10/pkclist.c:121 -#, fuzzy +#: g10/pkclist.c:65 msgid "Key has been compromised" -msgstr "Kunci ini telah ditiadakan" +msgstr "Kunci ini telah dikompromikan" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" -msgstr "" +msgstr "Kunci tidak lagi digunakan" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" -msgstr "" +msgstr "ID User tidak lagi valid" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " -msgstr "" +msgstr "Alasan pembatalan:" -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " -msgstr "" +msgstr "Komentar pembatalan:" #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMqQsS" -#: g10/pkclist.c:308 +#: g10/pkclist.c:258 #, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" -"Tidak ada nilai trust untuk %lu:\n" +"Tidak ada nilai trust untuk:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Silakan putuskan seberapa jauh anda percaya user ini untuk\n" "secara tepat memverifikasi kunci user lain (dengan melihat pada passpor,\n" "memeriksa fingerprint dari berbagai sumber...)?\n" -" 1 = Tidak tahu\n" -" 2 = Saya TIDAK percaya\n" -" 3 = Saya cukup percaya\n" -" 4 = Saya sangat percaya\n" -" s = tampilkan lebih banyak informasi\n" -" \n" +"\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = Tidak tahu\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d: Saya TIDAK percaya\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Saya cukup percaya\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Saya sangat percaya\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Saya sangat percaya sekali\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = beri saya informasi lebih banyak lagi\n" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = kembali ke menu utama\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = lewati kunci ini\n" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = berhenti\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Keputusan anda? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Anda ingin menset kunci ini menjadi sangat percaya sekali?" + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Sertifikat mengarahkan ke kunci terpercaya:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Tidak dapat menemukan jalur trust yang valid ke kunci. Mari kita coba\n" -"apakah dapat mengisi nilai trust pemilik yang hilang.\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"Tidak ditemukan jalur ke salah satu kunci.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Tidak ditemukan sertifikat dengan trust tak terdefinisi.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Tidak ada perubahan nilai trust.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "kunci %08lX: kunci telah dibatalkan!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Tetap gunakan kunci ini? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "kunci %08lX: subkey telah dibatalkan!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: kunci telah berakhir\n" -#: g10/pkclist.c:519 +#: g10/pkclist.c:442 #, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: tidak ada info untuk menghitung probabilitas trust\n" +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +"%08lX: Tidak ada indikasi bahwa kunci ini benar-benar milik pemiliknya\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" -msgstr "%08lX: Kita tidak percaya kunci ini\n" +msgstr "%08lX: Kita TIDAK percaya kunci ini\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1126,15 +1252,15 @@ msgstr "" "%08lX: Tidak pasti kunci ini milik pemiliknya\n" "tapi tetap diterima\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Kunci ini mungkin milik pemiliknya\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Kunci ini milik kita\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1142,172 +1268,198 @@ msgid "" "\n" msgstr "" "Tidak pasti bahwa kunci milik pemiliknya.\n" -"Jika anda yakin tahu apa yang sedang anda lakukan, anda boleh menjawab\n" +"Jika anda sangat tahu apa yang sedang anda lakukan, anda boleh menjawab\n" "pertanyaan berikut dengan ya\n" +"\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "PERINGATAN: Menggunakan kunci tidak dipercaya!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "PERINGATAN: Kunci ini telah dibatalkan oleh pemiliknya!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" -msgstr " Mungkin signature adalah palsu.\n" +msgstr " Hal ini dapat berarti bahwa signature adalah palsu.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "PERINGATAN: Subkey ini telah dibatalkan oleh pemiliknya!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Catatan: Kunci ini telah ditiadakan\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Catatan: Kunci ini telah berakhir!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "PERINGATAN: Kunci ini tidak disertifikasi dengan sig yang terpercaya!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Tidak ada indikasi signature milik pemilik.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "PERINGATAN: Kita tidak percaya kunci ini!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " Signature mungkin palsu.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "PERINGATAN: Kunci tdk disertifikasi dg signature terpercaya yg cukup!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Tidak pasti signature milik pemilik.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: dilewati: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: dilewati: kunci publik telah ada\n" -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Anda tidak menspesifikasikan ID user. (anda dapat gunakan \"-r\")\n" -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Masukkan ID user: " +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" +"\n" +"Masukkan user ID. Akhiri dengan baris kosong: " -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Tidak ada ID user tersebut.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "dilewati: kunci publik telah diset sebagai penerima baku\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "Kunci publik dimatikan.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "dilewati: kunci publik telah diset dengan --encrypt-to\n" +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "dilewati: kunci publik telah diset\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "penerima baku tidak dikenal `%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: kesalahan memeriksa kunci: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: dilewati: kunci publik dimatikan\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "tidak ada alamat yang valid\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "preferensi %c%lu tidak valid\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "preferensi %c%lu ganda \n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "terlalu banyak preferensi `%c'\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "Karakter tidak valid dalam string preferensi\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "menulis self signature\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "menulis key binding signature\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 -#, fuzzy, c-format +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format msgid "keysize invalid; using %u bits\n" -msgstr "Keysize yang diminta adalah %u bit\n" +msgstr "keysize tidak valid; menggunakan %u bit\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 -#, fuzzy, c-format +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format msgid "keysize rounded up to %u bits\n" -msgstr "dibulatkan hingga %u bit\n" +msgstr "keysize dibulatkan hingga %u bit\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Silakan pilih kunci yang anda inginkan:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA dan ElGamal (baku)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (hanya menandai)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (hanya enkripsi)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (tandai dan enkripsi)\n" -#: g10/keygen.c:643 -#, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (tandai dan enkripsi)\n" +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (hanya menandai)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (hanya enkripsi)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Pilihan anda? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Anda ingin membuat kunci sign dan enkripsi? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "Penggunaan algoritma ini didepresiasi - tetap ciptakan?" -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Pilihan tidak valid.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1320,21 +1472,21 @@ msgstr "" " keysize default adalah 1024 bit\n" " keysize tertinggi dianjurkan 2048 bit\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Keysize yang anda inginkan? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA hanya membolehkan keysize dari 512 hingga 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "keysize terlalu kecil; 768 adalah nilai terendah yang diijinkan.\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "" +"keysize terlalu kecil; 1024 adalah nilai terendah yang diijinkan untuk RSA.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "keysize terlalu kecil; 768 adalah nilai terendah yang diijinkan.\n" #. It is ridiculous and an annoyance to use larger key sizes! @@ -1345,12 +1497,12 @@ msgstr "keysize terlalu kecil; 768 adalah nilai terendah yang diijinkan.\n" #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "keysize terlalu besar; %d adalah nilai tertinggi yang diijinkan.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1358,11 +1510,11 @@ msgstr "" "Keysize lebih besar dari 2048 tidak dianjurkan karena\n" "komputasi akan sangat lama!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Apakah anda yakin memerlukan keysize ini? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1370,21 +1522,17 @@ msgstr "" "Oke, tetapi ingat bahwa radiasi monitor dan keyboard anda juga sangat mudah " "diserang!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Apakah anda perlu keysize berukuran besar tersebut? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Keysize yang diminta adalah %u bit\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "dibulatkan hingga %u bit\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1400,35 +1548,58 @@ msgstr "" " m = kunci berakhir dalam n bulan\n" " y = kunci berakhir dalam n tahun\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Silakan spesifikasikan lama signature tetap valid.\n" +" 0 = signature tidak pernah berakhir\n" +" = signature berakhir dalam n hari\n" +" w = signature berakhir dalam n minggu\n" +" m = signature berakhir dalam n bulan\n" +" y = signature berakhir dalam n tahun\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "Kunci valid untuk? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Signature valid untuk? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "nilai yang tidak valid\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "Kunci tidak pernah berakhir\n" +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s tidak pernah berakhir\n" #. print the date when the key expires -#: g10/keygen.c:828 +#: g10/keygen.c:992 #, c-format -msgid "Key expires at %s\n" -msgstr "Kunci berakhir pada %s\n" +msgid "%s expires at %s\n" +msgstr "%s berakhir pada %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" +"Sistem anda tidak dapat menampilkan tanggal melebihi 2038.\n" +"Namun, ia dapat menanganinya secara benar hingga 2106.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Benar (y/t)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1443,44 +1614,44 @@ msgstr "" "user-id dari Nama sebenarnya, Komentar dan Alamat email dalam bentuk:\n" " \"Heinrich Heine (Der Dichter) \"\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Nama sebenarnya: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Karakter tidak valid dalam nama\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Nama tidak boleh dimulai dengan digit\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Nama harus berukuran minimum 5 karakter\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Alamat email: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Bukan alamat email yang valid\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Komentar: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Karakter tidak valid dalam komentar\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Anda menggunakan set karakter `%s'.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1490,28 +1661,27 @@ msgstr "" "Anda memilih USER-ID ini:\n" " \"%s\"\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" -msgstr "" +msgstr "Jangan menaruh alamat email ke dalam nama sebenarnya atau komentar\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnKkEeOoQq" -#: g10/keygen.c:986 -#, fuzzy +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " -msgstr "Ganti (N)ama, (K)omentar, (E)mail atau (O)ke/(Q)uit? " +msgstr "Ganti (N)ama, (K)omentar, (E)mail atau (Q)uit? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Ganti (N)ama, (K)omentar, (E)mail atau (O)ke/(Q)uit? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" -msgstr "" +msgstr "Silakan perbaiki kesalahan ini dulu\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1519,23 +1689,29 @@ msgstr "" "Anda perlu sebuah passphrase untuk melindungi kunci rahasia anda.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "passphrase tidak diulang dengan benar; coba lagi.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "passphrase tidak diulang dengan benar; coba lagi" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" "using this program with the option \"--edit-key\".\n" "\n" msgstr "" -"Anda tidak ingin sebuah passphrase - ini mungkin ide yang buruk!\n" +"Anda tidak ingin sebuah passphrase - ini mungkin ide yang *buruk*!\n" "Namun saya akan tetap lakukan. Anda dapat merubah passphrase anda setiap " "saat,\n" "menggunakan program ini dengan pilihan \"--edit-key\".\n" +"\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1547,29 +1723,53 @@ msgstr "" "selama pembuatan prima; ini akan memberi random number generator kesempatan\n" "yang baik untuk memperoleh entropi.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "Keypair DSA akan memiliki 1024 bit.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Pembuatan kunci dibatalkan.\n" -#: g10/keygen.c:1668 -#, fuzzy, c-format +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format msgid "writing public key to `%s'\n" -msgstr "menulis sertifikat publik ke `%s'\n" +msgstr "menulis kunci publik ke `%s'\n" -#: g10/keygen.c:1669 -#, fuzzy, c-format +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format msgid "writing secret key to `%s'\n" -msgstr "menulis sertifikat rahasia ke `%s'\n" +msgstr "menulis kunci rahasia ke `%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "tidak ditemukan keyring publik yang dapat ditulisi: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "tidak ditemukan keyring rahasia yang dapat ditulisi: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "kesalahan menulis keyring publik `%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "kesalahan menulis keyring rahasia `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "kunci publik dan rahasia dibuat dan ditandai.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "kunci ditandai sebagai sangat dipercaya.\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" @@ -1578,325 +1778,382 @@ msgstr "" "mungkin ingin menggunakan perintah \"--edit-key\" untuk membuat kunci kedua " "untuk tujuan ini.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "Pembuatan kunci gagal: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "CATATAN: membuat subkey bagi kunci-kunci v3 tidak OpenPGP compliant\n" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Ingin diciptakan? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output tidak berfungsi untuk perintah ini\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' sudah dikompresi\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" -msgstr "%s: tidak dapat dibuka: %s\n" +msgstr "%s: tidak dapat membuka: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "kesalahan penciptaan passphrase: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: PERINGATAN: file kosong\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"anda hanya dapat mengenkripsi ke kunci RSA 2048 bit atau kurang dalam mode --" +"pgp2\n" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "Membaca dari `%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" +"tidak dapat menggunakan cipher IDEA untuk semua kunci yang anda enkripsi.\n" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s dienkripsi untuk: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 +#: g10/delkey.c:69 g10/export.c:141 #, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: user tidak ditemukan: %s\n" +msgid "key `%s' not found: %s\n" +msgstr "kunci '%s' tidak ditemukan: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "gagal membaca keyblock: %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "kunci %08lX: bukan kunci rfc2440 - dilewati\n" -#: g10/export.c:175 -#, fuzzy, c-format +#: g10/export.c:180 +#, c-format msgid "key %08lX: not protected - skipped\n" -msgstr "kunci %08lX: bukan kunci rfc2440 - dilewati\n" +msgstr "kunci %08lX: tidak diproteksi - dilewati\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "kunci %08lX: kunci gaya PGP 2.x - dilewati\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "PERINGATAN: tidak ada yang diekspor\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "terlalu banyak masukan dalam pk cache - ditiadakan\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "terlalu banyak masukan di unk cache - ditiadakan\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[User id tidak ditemukan]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "kunci tidak valid %08lX dibuat valid oleh --allow-non-selfsigned-uid\n" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" -msgstr "menggunakan kunci sekunder %08lX selain kunci primer %08lX\n" +msgstr "menggunakan kunci sekunder %08lX bukannya kunci primer %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "kunci %08lX: kunci rahasia tanpa kunci publik - dilewati\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: user tidak ditemukan\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "melewati blok tipe %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu kunci telah diproses\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "kesalahan membaca `%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr "Jumlah yang telah diproses: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " subkey baru: %lu\n" +msgstr " lewati kunci baru: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " tanpa ID user: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " diimpor: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " tidak berubah: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " ID user baru: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " subkey baru: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " signature baru: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr " pembatalan kunci baru: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " kunci rahasia dibaca: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr " kunci rahasia diimpor: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" -msgstr " kunci rahasia tetap: %lu\n" +msgstr " kunci rahasia tidak berubah: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "kunci %08lX: tidak ada ID user\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "kunci %08lX: menerima ID user '%s' yang tidak self-signed\n" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "kunci %08lX: tidak ada ID user yang valid\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "mungkin disebabkan oleh self-signature yang tidak ada\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "kunci %08lX: kunci publik tidak ditemukan: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "kunci %08lX: bukan kunci rfc2440 - dilewati\n" +msgstr "kunci %08lX: kunci baru - dilewati\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "tidak ditemukan keyring yang dapat ditulisi: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "menulis ke `%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "kesalahan menulis keyring `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "kunci %08lX: kunci publik diimpor\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "kunci %08lX: tidak cocok dengan duplikat kami\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" -msgstr "kunci %08lX: tidak dapat mengalokasi keyblock orisinal: %s\n" +msgstr "kunci %08lX: tidak dapat menemukan keyblock orisinal: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "kunci %08lX: tidak dapat membaca keyblok orisinal: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "kunci %08lX: 1 user ID baru\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "kunci %08lX: %d user ID baru\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "kunci %08lX: 1 signature baru\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "kunci %08lX: %d signature baru\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "kunci %08lX: 1 subkey baru\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "kunci %08lX: %d subkey baru\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "kunci %08lX: tidak berubah\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "tidak ada keyring rahasia baku: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "kunci %08lX: kunci rahasia diimpor\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "kunci %08lX: sudah ada di keyring rahasia\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "kunci %08lX: kunci rahasia tidak ditemukan: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "kunci %08lX: tdk ada kunci publik-tdk dpt mengaplikasikan sertifikat " "pembatalan\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "kunci %08lX: sertifikat pembatalan tidak valid: %s - ditolak\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "kunci %08lX: sertifikat pembatalan diimpor\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "kunci %08lX: tidak ada ID user untuk signature\n" -#: g10/import.c:719 g10/import.c:743 +#: g10/import.c:839 #, c-format -msgid "key %08lX: unsupported public key algorithm\n" -msgstr "kunci %08lX: algoritma publik key tidak didukung\n" +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "kunci %08lX: algoritma publik key tidak didukung pada user id \"%s\"\n" -#: g10/import.c:720 +#: g10/import.c:841 #, c-format -msgid "key %08lX: invalid self-signature\n" -msgstr "kunci %08lX: self-signature tidak valid\n" +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "kunci %08lX: self-signature tidak valid pada user id \"%s\"\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "kunci %08lX: tidak ada subkey untuk key binding\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "kunci %08lX: algoritma publik key tidak didukung\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "kunci %08lX: subkey binding tidak valid\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "kunci %08lX: menerima ID user yang tidak self-signed " - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "kunci %08lX: melewati ID user " -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "kunci %08lX: melewati subkey\n" @@ -1905,93 +2162,192 @@ msgstr "kunci %08lX: melewati subkey\n" #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "kunci %08lX: signature tidak dapat diekpor (kelas %02x) - dilewati\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "kunci %08lX: sertifikat pembatalan di tempat yang salah - dilewati\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "kunci %08lX: sertifikat pembatalan tidak valid: %s - dilewati\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "kunci %08lX: terdeteksi ID user duplikat - digabungkan\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"Peringatan: kunci %08lX mungkin dibatalkan: ambil kunci pembatalan %08lX\n" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" +"Peringatan: kunci %08lX mungkin dibatalkan: kunci pembatalan %08lX tidak " +"ada.\n" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "kunci %08lX: penambahan sertifikat pembatalan\n" -#: g10/import.c:1130 g10/import.c:1183 +#: g10/import.c:1231 #, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "kunci %08lX: salinan kita tidak memiliki self-signature\n" +msgid "key %08lX: direct key signature added\n" +msgstr "kunci %08lX: signature kunci langsung ditambahkan\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[pembatalan]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[self-signature]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 signature yang buruk\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d signature yang buruk\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 signature tidak diperiksa karena tidak ada kunci\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signature tidak diperiksa karena tidak ada kunci\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 signature tidak diperiksa karena kesalahan\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signature tidak diperiksa karena ada kesalahan\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "terdeteksi 1 ID user tanpa self-signature yang valid\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "terdeteksi ID %d user tanpa self-signature yang valid\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:335 #, c-format -msgid "Already signed by key %08lX\n" -msgstr "Sudah ditandai dengan kunci %08lX\n" +msgid "User ID \"%s\" is revoked." +msgstr "ID User \"%s\" dibatalkan." -#: g10/keyedit.c:319 +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Anda tetap ingin menandatanganinya? (y/n) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr " Tidak dapat menandatangani.\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Signature anda saat ini pada \"%s\"\n" +"adalah signature.lokal \n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "Apakah anda ingin menjadikannya signature yang full exportable? (y/N)" + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" sudah ditandai secara lokal dengan kunci %08lX\n" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" sudah ditandai dengan kunci %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Tidak ada yang ditandai dengan kunci %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Kunci ini telah berakhir!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Kunci ini akan kadaluarsa pada %s \n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Anda ingin signature anda kadaluarsa pada waktu yang sama? (Y/n) " + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" +"Anda tidak boleh membuat tanda tangan OpenPGP pada kunci bergaya PGP 2.x " +"saat dalam mode --pgp2\n" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "Hal ini akan membuat kunci tidak bermanfaat dalam PGP 2.x\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Sudah seberapa teliti anda memverifikasi kunci yang akan anda gunakan untuk " +"menandai benar benar milik\n" +"orang tersebut? Jika anda tidak tahu jawabannya. masukkan \"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Saya tidak akan menjawab.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Saya belum memeriksanya.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Saya telah melakukan pemeriksaan biasa.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Saya telah melakukan pemeriksaan hati-hati.%s\n" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -1999,42 +2355,73 @@ msgstr "" "Apakah anda yakin untuk menandai kunci ini \n" "dengan kunci anda: " -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 msgid "" +"\n" "The signature will be marked as non-exportable.\n" -"\n" msgstr "" -"Signature akan ditandai sebagai tidak dapat diekspor.\n" "\n" +"Signature akan ditandai sebagai tidak dapat diekspor.\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"Signature akan ditandai sebagai tidak dapat dibatalkan.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Saya belum memeriksa kunci ini sama sekali.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Saya telah memeriksa kunci ini.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Saya telah memeriksa kunci ini dengan sangat hati-hati.\n" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Ditandai? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "gagal menandai: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Kunci ini tidak diproteksi.\n" -#: g10/keyedit.c:426 -#, fuzzy +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" -msgstr "kunci rahasia tidak ada" +msgstr "Bagian rahasia kunci primer tidak tersedia.\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "Kunci diproteksi.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Tidak dapat mengedit kunci ini: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2042,7 +2429,7 @@ msgstr "" "Masukkan passphrase baru untuk kunci rahasia ini.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2050,665 +2437,928 @@ msgstr "" "Anda tidak ingin passphrase - bukan ide yang baik!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Apakah anda ingin melakukan hal ini? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "memindahkan signature kunci ke tempat yang tepat\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "berhenti dari menu ini" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "simpan" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "simpan dan berhenti" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "bantuan" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "tampilkan bantuan" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "tampilkan fingerprint" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "tampilkan" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "tampilkan kunci dan ID user" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "pilih ID user N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "kunci" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "pilih kunci sekunder N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "periksa" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "tampilkan signature" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "tandai" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "tandai kunci" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "tandai kunci secara lokal" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "tandai kunci sebagai tidak dapat dibatalkan" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "tandai kunci secara lokal dan tidak dapat dibatalkan" + +#: g10/keyedit.c:832 msgid "debug" msgstr "debug" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "tambah sebuah ID user" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "addphoto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "tambah sebuah photo ID" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "hapus ID user" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "tambah kunci sekunder" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "hapus kunci sekunder" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "delsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "hapus signature" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "ubah tanggal kadaluarsa" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "primer" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "tandai ID user sebagai primer" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "ubah tampilan kunci rahasia dan publik" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "tampilkan preferensi" +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "tampilkan preferensi (ahli)" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "tampilkan preferensi (verbose)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "set daftar preferensi" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "perbarui preferensi" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "ubah passphrase" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "trust" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "ubah ownertrust" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "batalkan signature" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "batalkan kunci sekunder" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "disable" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "tiadakan kunci" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "enable" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "aktifkan kunci" -#: g10/delkey.c:103 g10/keyedit.c:624 -msgid "can't do that in batchmode\n" -msgstr "tidak dapat dilakukan dalam mode batch\n" +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "showphoto" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "tampilkan photo ID" + +#: g10/delkey.c:112 g10/keyedit.c:876 +msgid "can't do that in batchmode\n" +msgstr "tidak dapat melakukan hal itu dalam mode batch\n" + +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "kesalahan membaca keyblock rahasia `%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Kunci rahasia tersedia.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Perintah> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" -msgstr "Perlu kunci rahasia.\n" +msgstr "Perlu kunci rahasia untuk melakukan hal ini.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" -msgstr "" +msgstr "Silakan gunakan dulu perintah \"toogle\".\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +msgid "Key is revoked." +msgstr "Kunci dibatalkan." + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Tandai ID seluruh user? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Petunjuk: Pilih ID user untuk ditandai\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "gagal perbarui trustdb: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "Perintah ini tidak dibolehkan saat dalam mode %s.\n" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Anda harus memilih minimum satu ID user.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Anda tidak dapat menghapus ID user terakhir!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Hapus seluruh ID user terpilih? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Hapus ID user ini? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Anda harus memilih minimum satu kunci.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Anda ingin menghapus kunci terpilih ini? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Anda ingin menghapus kunci ini? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Anda ingin membatalkan kunci terpilih ini? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Anda ingin membatalkan kunci ini? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "Perbarui preferensi untuk user ID terpilih?" + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Update preferensi?" + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Simpan perubahan? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Berhenti tanpa menyimpan? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "gagal memperbarui: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "gagal perbarui rahasia: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "Kunci tidak berubah sehingga tidak perlu pembaharuan.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Perintah tidak valid (coba \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Kunci ini mungkin dibatalkan oleh %s kunci %s%s\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (sensitive)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX diciptakan: %s berakhir: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " trust: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Kunci ini telah ditiadakan" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "kunci %08lX: subkey telah dibatalkan!\n" +msgstr "rev! subkey telah dibatalkan: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr " pembatalan kunci baru: %lu\n" +msgstr "rev - ditemukan pembatalan palsu\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" -msgstr "" +msgstr "rev? masalah memeriksa pembatalan: %s\n" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" +"Perhatikan bahwa validitas kunci yang ditunjukkan tidak perlu benar\n" +"kecuali anda memulai kembali program.\n" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"PERINGATAN: Kunci ini telah memiliki sebuah photo ID.\n" +" Menambahkan photo ID lain dapat membingungkan beberapa versi PGP.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Anda tetap ingin menambahkannya? (y/N) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Anda hanya boleh memiliki satu photo ID untuk satu kunci. \n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"PERINGATAN: Ini adalah kunci bergaya PGP2. Menambahkan sebuah photo ID " +"dapat menyebabkan beberapa versi\n" +" PGP menolak kunci ini.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "Anda tidak boleh menambahkan sebuah photo ID ke kunci bergaya PGP2 \n" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Hapus signature baik ini? (y/T/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Hapus signature tidak valid ini? (y/T/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Hapus signature tidak dikenal ini? (y/T/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Yakin ingin menghapus self-signature ini? (y/T)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "Menghapus %d signature.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "Menghapus %d signature.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Tidak ada yang dihapus.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Silakan hapus pilihan dari kunci rahasia.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Silakan pilih maksimum satu kunci sekunder.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Merubah batas waktu untuk kunci sekunder.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Merubah batas waktu untuk kunci primer.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Anda tidak dapat merubah batas waktu kunci v3\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Tidak ada signature koresponden di ring rahasia\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Anda harus memilih minimum satu ID user.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Tidak ada ID user dengan index %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Tidak ada kunci sekunder dengan index %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "ID user: " -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" -msgstr "ditandai dengan kunci anda %08lX pada %s\n" +msgstr "" +"\"\n" +"ditandai dengan kunci anda %08lX pada %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" -msgstr "Membuat sertifikat pembatalan untuk signature ini? (y/N)" +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"ditandai secara lokal dengan kunci anda %08lX pada %s\n" + +#: g10/keyedit.c:2457 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "Kunci ini kadaluarsa pada %s \n" + +#: g10/keyedit.c:2461 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Anda tetap ingin membatalkannya? (y/N) " + +#: g10/keyedit.c:2465 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "Buat sertifikat pembatalan untuk signature ini? (y/N) " #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Anda telah menandai ID user ini:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 +#: g10/keyedit.c:2504 #, c-format -msgid " signed by %08lX at %s\n" -msgstr " ditandai oleh %08lX pada %s\n" +msgid " signed by %08lX at %s%s%s\n" +msgstr " ditandai oleh %08lX pada %s%s%s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " dibatalkan oleh %08lX pada %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Anda akan membatalkan signature ini:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" -msgstr "Ingin membuat sertifikat pembatalan? (y/T)" +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " ditandai oleh %08lX pada %s%s\n" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr " (non-exportable)" + +#: g10/keyedit.c:2551 +msgid "Really create the revocation certificates? (y/N) " +msgstr "Ingin membuat sertifikat pembatalan? (y/N)" + +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "tidak ada kunci rahasia\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "armor tidak valid" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "Menampilkan ID foto %s ukuran %ld untuk kunci 0x%08lX (uid %d)\n" -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "revkey" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Kebijakan signature: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "PERINGATAN: ditemukan notasi data tidak valid\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Notasi signature: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "tidak dapat dibaca manusia" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Keyring" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 -#, fuzzy, c-format +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format msgid " [expires: %s]" -msgstr "Kunci berakhir pada %s\n" +msgstr " [berakhir: %s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Fingerprint:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Fingerprint:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Fingerprint kunci =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s data terenkripsi\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "dienkripsi dengan algoritma tidak dikenal %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "kunci publik adalah %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "data terenkripsi dengan kunci publik: DEK baik\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "dienkripsi dengan %u-bit kunci %s, ID %08lX, tercipta %s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "dienkripsi dengan kunci %s, ID %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "tidak tersedia kunci rahasia untuk dekripsi\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "gagal dekripsi kunci publik: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "asumsikan %s data terenkripsi\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "Cipher IDEA tidak tersedia, secara optimis berusaha menggunakan %s\n" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "dekripsi lancar\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "PERINGATAN: pesan terenkripsi telah dimanipulasi!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" -msgstr "gagal dekripsi: %s\n" +msgstr "dekripsi gagal: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "CATATAN: pengirim meminta \"for-your-eyes-only\"\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" -msgstr "nama file asli='%.*s'\n" +msgstr "original file name='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" -msgstr "" +msgstr "pembatalan mandiri - gunakan \"gpg --import\" untuk mengaplikasikan\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "PERINGATAN: ditemukan notasi data tidak valid\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Notasi: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Kebijakan: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" -msgstr "verifikasi signature tidak optimal\n" +msgstr "verifikasi signature tidak diabaikan\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "tidak dapat menangani banyak signature ini\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Signature dibuat %.*s menggunakan kunci %s ID %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "signature BURUK dari \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Signature kadaluarsa dari \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Signature baik dari \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[uncertain]" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Tidak dapat memeriksa signature: %s\n" -#: g10/mainproc.c:1230 -#, fuzzy, c-format -msgid "standalone signature of class 0x%02x\n" -msgstr "kelas signature tidak dikenal" +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "bukan detached signature\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1508 +#, c-format +msgid "standalone signature of class 0x%02x\n" +msgstr "kelas signature mandiri 0x%02x\n" + +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "signature model lama (PGP 2.X)\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "terdeteksi root paket tidak valid dalam proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "tidak dapat meniadakan core dump: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Algoritma eksperimental sebaiknya tidak dipakai!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "" "algoritma cipher ini didepresiasi; silakan gunakan yang lebih standar!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Peringatan: kepemilikan tidak aman pada %s \"%s\"\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Peringatan: permisi tidak aman pada %s \"%s\"\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "plugin cipher IDEA tidak tersedia\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" +"silakan lihat http://www.gnupg.org/why-not-idea.html untuk informasi lebih " +"lanjut\n" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "tidak dapat menangani algoritma kunci publik %d\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpaket tipe %d memiliki bit kritis terset\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" -msgstr "" +msgstr "gpg-agent tidak tersedia untuk sesi ini\n" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "tidak dapat menset pid client untuk agen\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "tidak dapat membuat server membaca FD untuk agen\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "tidak dapat membuat server menulis FD untuk agen\n" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "variabel lingkungan GPG_AGENT_INFO salah bentuk\n" -#: g10/hkp.c:158 g10/passphrase.c:223 -#, fuzzy, c-format +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "protokol gpg-agent versi %d tidak didukung\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format msgid "can't connect to `%s': %s\n" -msgstr "tidak dapat membuka `%s': %s\n" +msgstr "tidak dapat terkoneksi ke `%s': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "masalah komunikasi dengan gpg-agent\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "masalah dengan agen - tiadakan penggunaan agen\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (ID kunci utama %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" -"Anda perlu passphrase untuk membuka kunci rahasia untuk\n" -"pemakai: \"" +"Anda perlu passphrase untuk membuka kunci rahasia untuk user:\n" +"\"%.*s\"\n" +"%u-bit %s key, ID %08lX, tercipta %s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Masukkan passphrase: " +msgstr "Masukkan passphrase\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Ulangi passphrase: " +msgstr "Ulangi passphrase\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "" +msgstr "passphrase terlalu panjang\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "respon tidak valid dari agen\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "dibatalkan oleh user\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "masalah dengan agen: agen mengembalikan 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2718,20 +3368,20 @@ msgstr "" "Anda perlu passphrase untuk membuka kunci rahasia untuk\n" "pemakai: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "%u-bit kunci %s, ID %08lX, tercipta %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "tidak dapat meminta password dalam mode batch\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Masukkan passphrase: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Ulangi passphrase: " @@ -2739,147 +3389,194 @@ msgstr "Ulangi passphrase: " msgid "data not saved; use option \"--output\" to save it\n" msgstr "data tidak disimpan; gunakan pilihan \"--output\" untuk menyimpannya\n" -#: g10/plaintext.c:324 -#, fuzzy -msgid "Detached signature.\n" -msgstr "Menghapus %d signature.\n" +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "kesalahan penciptaan : `%s': %s\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:337 +msgid "Detached signature.\n" +msgstr "Menghapus signature.\n" + +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Silakan masukkan nama file data: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "membaca stdin ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "tidak ada data tertandai\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "tidak dapat membuka data tertandai `%s'\n" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "penerima anonim; mencoba kunci rahasia %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "baik, kita adalah penerima anonim.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "encoding lama DEK tidak didukung\n" -#: g10/pubkey-enc.c:216 -#, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "algoritma proteksi %d tidak didukung\n" +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "algoritma cipher %d%s tidak dikenal atau ditiadakan\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "CATATAN: algoritma cipher %d tidak ditemukan dalam preferensi\n" -#: g10/pubkey-enc.c:261 -#, fuzzy, c-format -msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "CATATAN: kunci signature berakhir %s\n" - -#: g10/hkp.c:62 +#: g10/pubkey-enc.c:242 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "CATATAN: kunci pribadi %08lX berakhir pada %s\n" -#: g10/hkp.c:75 -#, fuzzy, c-format +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "meminta kunci %08lX dari keyserver HKP %s ...\n" + +#: g10/hkp.c:94 +#, c-format msgid "can't get key from keyserver: %s\n" -msgstr "impor kunci dari key server" +msgstr "tidak dapat memperoleh kunci keyserver: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s bukanlah set karakter yang valid\n" - -#: g10/hkp.c:182 -#, fuzzy, c-format +#: g10/hkp.c:171 +#, c-format msgid "error sending to `%s': %s\n" -msgstr "kesalahan membaca `%s': %s\n" +msgstr "kesalahan mengirim ke `%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" -msgstr "" +msgstr "success sending to `%s' (status=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" -msgstr "" +msgstr "failed sending to `%s': status=%u\n" -#: g10/seckey-cert.c:89 -#, fuzzy -msgid "secret key parts are not available\n" -msgstr "kunci rahasia tidak ada" - -#: g10/seckey-cert.c:95 +#: g10/hkp.c:471 #, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "algoritma proteksi %d tidak didukung\n" +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "mencari \"%s\" dari server HKP %s\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "Passphrase tidak valid; silakan coba lagi ...\n" +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "tidak dapat mencari keyserver: %s\n" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "bagian kunci rahasia tidak tersedia\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "algoritma proteksi %d%s tidak didukung\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Passphrase tidak valid; silakan coba lagi" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" -msgstr "PERINGATAN: terdeteksi kunci lemah - silakan rubah passphrase lagi.\n" +msgstr "PERINGATAN: terdeteksi kunci lemah - silakan ubah passphrase lagi.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "membuat checksum 16-bit untuk perlindungan kunci pribadi\n" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "ini adalah kunci ElGamal ciptaan PGP yang tidak aman untuk signature!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "kunci publik adalah %lu detik lebih baru daripada signature\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "kunci publik adalah %lu detik lebih baru daripada signature\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "CATATAN: kunci signature berakhir %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "CATATAN: kunci signature %08lX berakhir %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "mengasumsikan signature buruk karena ada bit kritik tidak dikenal\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"PERINGATAN: tidak dapat melakukan %%-expand policy url (terlalu besar). " +"Menggunakan yang tidak expand.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "Gagal memeriksa signature yang dibuat: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "%s signature dari: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "PERINGATAN: `%s' adalah file kosong\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"anda hanya dapat menandai kunci bergaya PGP 2.x saat dalam mode --pgp2\n" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "tidak dapat membuat %s: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "menandai:" -#: g10/sign.c:583 +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"anda hanya dapat clearsign dengan kunci bergaya PGP 2.x saat dalam mode --" +"pgp2\n" + +#: g10/sign.c:953 #, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "PERINGATAN: `%s' adalah file kosong\n" +msgid "%s encryption will be used\n" +msgstr "%s enkripsi akan digunakan\n" #: g10/textfilter.c:134 #, c-format @@ -2891,465 +3588,239 @@ msgstr "tidak dapat menangani baris teks lebih dari %d karakter\n" msgid "input line longer than %d characters\n" msgstr "baris input lebih dari %d karakter\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek gagal: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" -msgstr "trustdb rec %lu: gagal menulis (n=%d): %s\n" +msgstr "trustdb rec %lu: write failed (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "transaksi trustdb terlalu besar\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" -msgstr "%s: tidak dapat akses: %s\n" +msgstr "%s: tidak dapat mengakses: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: direktori tidak ada!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: tidak dapat membuat: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: tidak dapat membuat lock\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: tidak dapat membuat lock\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: tidak dapat membuat: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: gagal membuat catatan versi: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: tercipta trustdb tidak valid\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: tercipta trustdb\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: trustdb tidak valid\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: gagal membuat hashtable: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: kesalahan memperbaharui catatan versi: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: kesalahan membaca catatan versi: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: kesalahan menulis catatan versi: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek gagal: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" -msgstr "trustdb: gagal membaca (n=%d): %s\n" +msgstr "trustdb: read failed (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: bukan file trustdb\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: catatan versi dengan recnum %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versi file %d tidak valid\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: kesalahan membaca record bebas: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: kesalahan menulis dir record: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: gagal mengosongkan record: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: gagal menambahkan record: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "trustdb terkorupsi; silakan jalankan \"gpg --fix-trustdb\".\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "'%s' bukanlah keyID panjang yang valid\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "kunci %08lX: diterima sebagai kunci terpercaya.\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "kunci %08lX muncul lebih dari satu kali dalam trustdb\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "kunci %08lX: tidak ada kunci publik untuk trusted key- dilewati\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "trust record %lu, req tipe %d: gagal baca: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "trust record %lu tidak dalam jenis yang diminta %d\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "trust record %lu, tipe %d: gagal menulis: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "trust record %lu: gagal menghapus: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: gagal sync: %s\n" -#: g10/trustdb.c:377 +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "tidak perlu memeriksa trustdb\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "gagal membaca dir record untuk LID %lu: %s\n" +msgid "next trustdb check due at %s\n" +msgstr "pemeriksaan trustdb berikutnya pada %s\n" -#: g10/trustdb.c:384 +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "memeriksa trustdb\n" + +#: g10/trustdb.c:933 #, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: diharapkan dir record, didapat tipe %d\n" +msgid "public key %08lX not found: %s\n" +msgstr "kunci publik %08lX tidak ditemukan: %s\n" -#: g10/trustdb.c:389 +#: g10/trustdb.c:1515 #, c-format -msgid "no primary key for LID %lu\n" -msgstr "bukan kunci primer untuk LID %lu\n" +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "kunci publik yang sangat terpercaya %08lX tidak ditemukan\n" -#: g10/trustdb.c:394 +#: g10/trustdb.c:1593 #, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "gagal membaca kunci primer untuk LID %lu: %s\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: gagal search_record: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "%s bukanlah set karakter yang valid\n" - -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "kunci %08lX: tidak dapat meletakkan ke trustdb\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "kunci %08lX: gagal query record\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "kunci %08lX: sudah ada dalam tabel kunci trustdb\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "kunci %08lX: diterima sebagai kunci terpercaya.\n" - -#: g10/trustdb.c:547 -#, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "kunci %08lX: bukan kunci rfc2440 - dilewati\n" - -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "CATATAN: kunci rahasia %08lX tidak diproteksi.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "kunci %08lX: kunci publik dan rahasia tidak cocok\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "gagal enumerasi kunci rahasia: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "kunci %08lX.%lu: binding subkey baik\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "kunci %08lX.%lu: binding subkey tidak valid: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "kunci %08lX.%lu: pembatalan kunci valid\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "kunci %08lX.%lu: pembatalan kunci tidak valid: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "kunci %08lX.%lu: pembatalan subkey valid\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Self-signature yang baik" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Self-signature tidak valid" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "" -"Pembatalan ID user valid dilewati karena ada self signature yang lebih baru" - -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Pembatalan ID user valid" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Pembatalan ID user tidak valid" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Pembatalan sertifikat valid" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Sertifikat yang baik" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Pembatalan sertifikat tidak valid" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Sertifikat tidak valid" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "sig record %lu[%d] menunjuk ke record yang salah.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "sertifikat ganda - dihapus" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir gagal: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: gagal menyisipkan: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: gagal menyisipkan: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: menyisipkan\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "kesalahan membaca dir record: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu kunci diproses\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu kunci dengan kesalahan\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "%lu kunci disisipkan\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "gagal enumerasi keyblok: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: dir record tanpa kunci - dilewati\n" - -#: g10/trustdb.c:1884 -#, fuzzy, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "kunci %08lX: %d subkey baru\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "%lu kunci dilewati\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "%lu kunci diperbaharui\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Ooops, tanpa kunci\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Ooops, tanpa ID user\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: gagal mencari di record: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "kunci %08lX: gagal menyisipkan record trust: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "kunci %08lX.%lu: menyisipkan ke trustdb\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" -msgstr "kunci %08lX.%lu: tercipta di masa datang (masalah waktu atau jam)\n" - -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "kunci %08lX.%lu: berakhir pada %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "kunci %08lX.%lu: gagal periksa trust: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "user '%s' tidak ditemukan: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "masalah menemukan '%s' dalam trustdb: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "pemakai '%s' tidak ada di trustdb - menyisipkan\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "gagal menaruh '%s' ke dalam trustdb: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "PERINGATAN: belum dapat menangani record pref panjang\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" +"signature tidak dapat diverifikasi.\n" +"Tolong ingat bahwa file signature (.sig atau .asc)\n" +"haruslah file pertama yang diberikan pada perintah baris.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" +msgstr "baris input %u terlalu panjang atau hilang LF\n" + +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" +"kunci tidak dianggap sebagai tidak aman - tidak dapat digunakan dengan RNG " +"palsu!\n" -#: g10/ringedit.c:296 +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: tidak dapat membuat keyring: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "lewati `%s': terduplikasi\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: keyring tercipta\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "PERINGATAN: terdapat 2 file dengan informasi penting.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s adalah yang tidak berubah\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s adalah yang baru\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Silakan perbaikan kemungkinan lubang keamanan\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "melewati `%s': %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "dilewati: kunci pribadi telah ada\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3368,89 +3839,98 @@ msgstr "File `%s' ada. " msgid "Overwrite (y/N)? " msgstr "Ditimpa (y/T)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: suffix tidak dikenal\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Masukkan nama file baru" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "menulis ke stdout\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "mengasumsikan data bertanda dalam `%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: file pilihan baru tercipta\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: tidak dapat membuat direktori: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: direktori tercipta\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "" +"anda harus memulai GnuPG lagi, sehingga ia dapat membaca file option baru\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "dienkripsi dengan algoritma tidak dikenal %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "%s data terenkripsi\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "PERINGATAN: pesan dienkripsi dengan kunci lemah dalam cipher simetrik.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "masalah menangani paket terenkripsi\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "kunci lemah tercipta - mengulang\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "tidak dapat menghindari kunci lemah untuk cipher simetrik; mencoba %d kali!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "terdapat kunci rahasia untuk kunci publik ini!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "DSA membutuhkan penggunaan algoritma hash 160-bit\n" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "gunakan pilihan \"--delete-secret-key\" untuk menghapusnya.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "tidak dapat dilakukan dalam mode batch tanpa \"--yes\"\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Menghapus kunci ini dari keyring? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "Ini adalah kunci rahasia! - Yakin dihapus? " +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "gagal menghapus keyblok: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "informasi ownertrust dihapus\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "terdapat kunci rahasia untuk kunci publik \"%s\"!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "gunakan pilihan \"--delete-secret-key\" untuk menghapusnya.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3464,19 +3944,31 @@ msgstr "" "kaitan dengan (membuat secara implisit) web-of-certificates." #: g10/helptext.c:53 -msgid "If you want to use this revoked key anyway, answer \"yes\"." -msgstr "Jika anda tetap ingin menggunakan kunci yang dibatalkan, jawab \"ya\"." +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Untuk membuat Web-of-Trust, GnuPG perlu tahu kunci mana yang\n" +"sangat dipercaya - mereka biasanya adalah kunci yang anda punya\n" +"akses ke kunci rahasia. Jawab \"yes\" untuk menset kunci ini ke\n" +"sangat dipercaya\n" -#: g10/helptext.c:57 +#: g10/helptext.c:60 +msgid "If you want to use this revoked key anyway, answer \"yes\"." +msgstr "Jika anda ingin menggunakan kunci yang dibatalkan, jawab \"ya\"." + +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Jika anda ingin menggunakan kunci tidak terpercaya ini, jawab \"ya\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Masukkan ID user penerima pesan." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3513,7 +4005,7 @@ msgstr "" "hal ini merupakan alasan mengapa kunci ElGamal hanya-enkripsi tidak ada\n" "di menu ini." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3521,18 +4013,18 @@ msgid "" msgstr "" "Meskipun kunci ini didefinisikan dalam RFC2440 mereka tidak disarankan\n" "karena belum didukung oleh seluruh program dan signature yang dibuat\n" -"dengan mereka cukup besar dan sangat lambat untuk diverifikasi." +"oleh mereka cukup besar dan sangat lambat untuk diverifikasi." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Masukkan ukuran kunci" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Jawab \"ya\" atau \"tidak\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3544,19 +4036,19 @@ msgstr "" "tidak akan mendapat respon kesalahan yang baik - sebaiknya sistem akan\n" "berusaha menginterprestasi nilai yang diberikan sebagai sebuah interval." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Masukkan nama pemegang kunci" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "silakan masukkan alamat email (pilihan namun sangat dianjurkan)" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" -msgstr "Silakan masukkan komentar pilihan" +msgstr "Silakan masukkan komentar tambahan" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3570,27 +4062,105 @@ msgstr "" "O untuk melanjutkan dengan pembuatan kunci.\n" "K untuk menghentikan pembuatan kunci." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Jawab \"ya\" (atau \"y\") jika telah siap membuat subkey." -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Ketika anda menandai user ID pada kunci, anda perlu memverifikasi bahwa " +"kunci\n" +"milik orang yang disebut dalam user ID. Ini penting bagi orang lain untuk " +"tahu\n" +"seberapa cermat anda memverifikasi ini.\n" +"\n" +"\"0\" berarti anda tidak melakukan klaim tentang betapa cermat anda " +"memverifikasi kunci.\n" +"\n" +"\"1\" berarti anda percaya bahwa kunci dimiliki oleh orang yang mengklaim " +"memilikinya\n" +" namun anda tidak dapat, atau tidak memverifikasi kunci sama sekali. Hal " +"ini bergunabagi\n" +" verifikasi \"persona\", yaitu anda menandai kunci user pseudonymous\n" +"\n" +"\"2\" berarti anda melakukan verifikasi kasual atas kunci. Sebagai contoh, " +"halini dapat\n" +" berarti bahwa anda memverifikasi fingerprint kunci dan memeriksa user ID " +"pada kunci\n" +" dengan photo ID.\n" +"\n" +"\"3\" berarti anda melakukan verifikasi ekstensif atas kunci. Sebagai " +"contoh, hal ini\n" +" dapat berarti anda memverifikasi fingerprint kunci dengan pemilik kunci\n" +" secara personal, dan anda memeriksa, dengan menggunakan dokumen yang " +"sulit dipalsukan yang memiliki\n" +" photo ID (seperti paspor) bahwa nama pemilik kunci cocok dengan\n" +" nama user ID kunci, dan bahwa anda telah memverifikasi (dengan " +"pertukaran\n" +" email) bahwa alamat email pada kunci milik pemilik kunci.\n" +"\n" +"Contoh-contoh pada level 2 dan 3 hanyalah contoh.\n" +"Pada akhirnya, terserah anda untuk memutuskan apa arti \"kasual\" dan " +"\"ekstensif\"\n" +"bagi anda ketika menandai kunci lain.\n" +"\n" +"Jika anda tidak tahu jawaban yang tepat, jawab \"0\"." + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Jawab \"ya\" jika anda ingin menandai seluruh ID user" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Jawab \"ya\" jika anda benar-benar ingin menghapus ID user ini.\n" -"Seluruh sertifikat lalu akan hilang!" +"Seluruh sertifikat juga akan hilang!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Jawab \"ya\" jika ingin menghapus subkey" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3600,7 +4170,7 @@ msgstr "" "signature ini karena mungkin penting membangun koneksi trust ke kunci atau\n" "ke kunci tersertifikasi lain dengan kunci ini." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3612,14 +4182,15 @@ msgstr "" "kunci yang digunakan karena kunci penanda ini mungkin membangun suatu\n" "koneksi trust melalui kunci yang telah tersertifikasi lain." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" -"Signature tidak valid. Masuk akal untuk menghapusnya dari keyring anda." +"Signature tidak valid. Adalah hal yang masuk akal untuk menghapusnya dari\n" +"keyring anda" -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3633,29 +4204,34 @@ msgstr "" "ini bila self-signature untuk beberapa alasan tidak valid dan\n" "tersedia yang kedua." -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" msgstr "" -"Silakan masukkan passphrase; ini kalimat rahasia\n" -" Blurb, blurb,...." +"Rubah preferensi seluruh user ID (atau hanya yang terpilih)\n" +"ke daftar preferensi saat ini. Timestamp seluruh self-signature\n" +"yang terpengaruh akan bertambah satu detik.\n" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Silakan masukkan passphrase; ini kalimat rahasia\n" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Silakan ulangi passphrase terakhir, sehingga anda yakin yang anda ketikkan." -#: g10/helptext.c:213 -#, fuzzy +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" -msgstr "Beri nama file untuk mengaplikasikan signature" +msgstr "Beri nama file tempat berlakunya signature" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" -msgstr "Jawab \"ya\" jika ingin menimpa file" +msgstr "Jawab \"ya\" jika tidak apa-apa menimpa file" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3663,14 +4239,14 @@ msgstr "" "Silakan masukan nama file baru. Jika anda hanya menekan RETURN nama\n" "file baku (yang diapit tanda kurung) akan dipakai." -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3678,83 +4254,94 @@ msgid "" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" +"Anda harus menspesifikasikan alasan pembatalan. Semua ini tergantung\n" +"konteks, anda dapat memilih dari daftar berikut:\n" +" \"Key has been compromised\"\n" +" Gunakan ini jika anda punya alasan untuk percaya bahwa orang yang " +"tidak berhak\n" +" memiliki akses ke kunci pribadi anda.\n" +" \"Key is superseded\"\n" +" Gunakan ini bila anda mengganti kunci anda dengan yang baru.\n" +" \"Key is no longer used\"\n" +" Gunakan ini bila anda telah mempensiunkan kunci ini.\n" +" \"User ID is no longer valid\"\n" +" Gunakan ini untuk menyatakan user ID tidak boleh digunakan lagi;\n" +" normalnya digunakan untuk menandai bahwa alamat email tidak valid " +"lagi.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" +"Jika anda suka, anda dapat memasukkan teks menjelaskan mengapa anda\n" +"mengeluarkan sertifikat pembatalan ini. Buatlah ringkas.\n" +"Baris kosong mengakhiri teks.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Tidak tersedia bantuan" -#: g10/helptext.c:268 -#, fuzzy, c-format +#: g10/helptext.c:303 +#, c-format msgid "No help available for `%s'" msgstr "Tidak tersedia bantuan untuk `%s'" -#~ msgid "certificate read problem: %s\n" -#~ msgstr "masalah pembacaan sertifikat: %s\n" +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "kesalahan menulis keyring `%s': %s\n" -#~ msgid "RSA key cannot be used in this version\n" -#~ msgstr "Kunci RSA tidak dapat digunakan pada versi ini\n" +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "merubah permisi `%s' gagal: %s\n" -#~ msgid "No key for user ID\n" -#~ msgstr "Tidak ada kunci untuk ID user\n" +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "%s: keyring tercipta\n" -#~ msgid "No user ID for key\n" -#~ msgstr "Tidak ada ID user untuk kunci\n" +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "gagal membuat kembali cache keyring: %s\n" -#~ msgid "no default public keyring\n" -#~ msgstr "tidak ada keyring publik baku\n" +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "PERINGATAN: terdapat 2 file dengan informasi penting.\n" -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "tidak dapat mengunci keyring `%s': %s\n" +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s adalah yang tidak berubah\n" -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "kunci %08lX: tidak dapat membaca keyblok orisinal: %s\n" +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s adalah yang baru\n" -#~ msgid "%s: user not found\n" -#~ msgstr "%s: user tidak ditemukan\n" +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Silakan perbaiki kemungkinan lubang keamanan ini\n" -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "Kunci RSA didepresiasi; silakan membuat kunci baru dan menggunakannya di " -#~ "masa depan\n" +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "memeriksa keyring `%s'\n" -#, fuzzy -#~ msgid "not processed" -#~ msgstr "%lu kunci diproses\n" +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu kunci telah diperiksa (%lu signature)\n" -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "mengasumsikan MDC buruk karena ada bit kritis tidak dikenal\n" +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu kunci telah diperiksa (%lu signature)\n" -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "kunci tidak dianggap sebagai tidak aman - tidak dapat digunakan dengan RNG " -#~ "palsu!\n" - -#~ msgid "set debugging flags" -#~ msgstr "set flag debugging" - -#~ msgid "enable full debugging" -#~ msgstr "aktifkan full debugging" - -#~ msgid "do not write comment packets" -#~ msgstr "jangan menulis komentar paket" - -#~ msgid "(default is 1)" -#~ msgstr "(baku adalah 1)" - -#~ msgid "(default is 3)" -#~ msgstr "(baku adalah 3)" - -#~ msgid " (%d) ElGamal in a v3 packet\n" -#~ msgstr " (%d) ElGamal dalam paket v3\n" - -#~ msgid "Key generation can only be used in interactive mode\n" -#~ msgstr "Pembuatan kunci hanya dapat digunakan dalam mode interaktif\n" +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: keyring tercipta\n" diff --git a/po/it.po b/po/it.po index ecc28271d..60264b7d7 100644 --- a/po/it.po +++ b/po/it.po @@ -1,302 +1,332 @@ # GnuPG italian translation -# Copyright (C) 1998, 1999 Free Software Foundation, Inc. -# Marco d'Itri , 1998, 1999. +# Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc. +# Marco d'Itri , 1998, 1999, 2001, 2002. # msgid "" msgstr "" -"Project-Id-Version: gnupg-1.0.0h\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 1999-12-08 15:51+02:00\n" +"Project-Id-Version: gnupg-1.0.7\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-21 21:54+0200\n" "Last-Translator: Marco d'Itri \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Attenzione: si sta usando memoria insicura!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "visitare http://www.gnupg.org/faq.html per ulteriori informazioni\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "l'operazione non è possibile senza memoria sicura inizializzata\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(potresti avere usato il programma sbagliato per questa funzione)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "sì" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "sS" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "no" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "quit" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "qQ" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "errore generale" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "pacchetto di tipo sconosciuto" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "versione sconosciuta" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "algoritmo della chiave pubblica sconosciuto" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "algoritmo del digest sconosciuto" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "chiave pubblica errata" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "chiave segreta errata" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "firma errata" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "codice di controllo errato" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "passphrase errata" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "chiave pubblica non trovata" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "algoritmo di cifratura sconosciuto" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "impossibile aprire il portachiavi" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "pacchetto non valido" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "armatura non valida" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "l'user id non esiste" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "la chiave segreta non è disponibile" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "è stata usata la chiave segreta sbagliata" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "non gestito" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "chiave sbagliata" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "errore durante la lettura del file" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "errore durante la scrittura del file" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "algoritmo di compressione sconosciuto" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "errore durante l'apertura del file" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "errore durante la creazione del file" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "passphrase non valida" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algoritmo della chiave pubblica non implementato" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algoritmo di cifratura non implementato" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "classe della firma sconosciuta" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "errore nel database della fiducia" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "MPI danneggiato" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "limite della risorsa" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "portachiavi non valido" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "certificato danneggiato" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "user id malformato" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "errore durante la chiusura del file" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "errore durante la rinominazione del file" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "errore durante la cancellazione del file" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "dati inattesi" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "date in conflitto" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "algoritmo della chiave pubblica non utilizzabile" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "il file esiste" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "chiave debole" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "argomento non valido" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "URI non valida" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "URI non gestito" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "errore di rete" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "non cifrato" -#: util/logger.c:227 +# ??? (Md) +#: util/errors.c:103 +msgid "not processed" +msgstr "non esaminato" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "chiave pubblica inutilizzabile" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "chiave segreta inutilizzabile" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "errore del keyserver" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... questo è un bug (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Hai trovato un bug... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "impossibile aprire `%s': %s\n" -#: cipher/random.c:325 -#, fuzzy, c-format +#: cipher/random.c:324 +#, c-format msgid "can't stat `%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" +msgstr "impossibile eseguire stat su `%s': %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" -msgstr "" +msgstr "`%s' non è un file regolare - ignorato\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" -msgstr "" +msgstr "nota: il file random_seed è vuoto\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" +"attenzione: le dimensioni del file random_seed non sono valide - non usato\n" -#: cipher/random.c:349 -#, fuzzy, c-format -msgid "can't read `%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" - -#: cipher/random.c:387 -msgid "note: random_seed file not updated\n" -msgstr "" - -#: cipher/random.c:407 -#, fuzzy, c-format -msgid "can't create `%s': %s\n" -msgstr "impossibile creare %s: %s\n" - -#: cipher/random.c:414 -#, fuzzy, c-format -msgid "can't write `%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" - -#: cipher/random.c:417 -#, fuzzy, c-format -msgid "can't close `%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" - -#: cipher/random.c:428 +#: cipher/random.c:348 #, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" +msgid "can't read `%s': %s\n" +msgstr "impossibile leggere `%s': %s\n" -#: cipher/random.c:659 +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "nota: il file random_seed non è stato aggiornato\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "impossibile creare `%s': %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "impossibile scrivere su `%s': %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "impossibile chiudere `%s': %s\n" + +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "ATTENZIONE: si sta usando un generatore di numeri casuali non sicuro!!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -310,7 +340,7 @@ msgstr "" "NON USARE ALCUN DATO GENERATO DA QUESTO PROGRAMMA!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -322,19 +352,7 @@ msgstr "" "altra cosa per dare all'OS la possibilità di raccogliere altra entropia!\n" "(Servono altri %d byte)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Attenzione: si sta usando memoria insicura!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "l'operazione non è possibile senza memoria sicura inizializzata\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(potresti avere usato il programma sbagliato per questa funzione)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -342,139 +360,163 @@ msgstr "" "@Comandi:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[file]|fai una firma" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[file]|fai una firma mantenendo il testo in chiaro" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "fai una firma separata" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "cifra dati" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[file]|cifra i file" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "cifra solo con un cifrario simmetrico" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "immagazzina soltanto" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "decifra dati (predefinito)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[file]|decifra i file" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "verifica una firma" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "elenca le chiavi" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "elenca le chiavi e le firme" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "controlla le firme delle chiavi" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "elenca le chiavi e le impronte digitali" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "elenca le chiavi segrete" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "genera una nuova coppia di chiavi" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" -msgstr "rimuove una chiave dal portachiavi pubblico" +#: g10/g10.c:307 +msgid "remove keys from the public keyring" +msgstr "rimuove le chiavi dal portachiavi pubblico" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" -msgstr "rimuove una chiave dal portachiavi privato" +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "rimuove le chiavi dal portachiavi privato" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "firma una chiave" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" -msgstr "firma localmente una chiave" +msgstr "firma una chiave localmente" -#: g10/gpg.c:224 +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "firma una chiave irrevocabilmente" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "firma una chiave localmente e irrevocabilmente" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "firma o modifica una chiave" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "genera un certificato di revoca" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "esporta delle chiavi" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "esporta le chiavi a un key server" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "importa le chiavi da un key server" -#: g10/gpg.c:232 +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "cerca delle chiavi su un key server" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "aggiorna tutte le chiavi da un key server" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "importa/aggiungi delle chiavi" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "elenca solo la sequenza dei pacchetti" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "esporta i valori di fiducia" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importa i valori di fiducia" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "aggiorna il database della fiducia" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NOMI]|controlla il database della fiducia" +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "aggiornamento non presidiato del database delle fiducia" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "ripara un database della fiducia rovinato" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "rimuovi l'armatura a un file o a stdin" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "crea l'armatura a un file o a stdin" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [files]|stampa tutti i message digests" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -484,164 +526,206 @@ msgstr "" "Opzioni:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "crea un output ascii con armatura" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NOME|cifra per NOME" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NOME|usa NOME come destinatario predefinito" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "usa la chiave predefinita come destinatario predefinito" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "usa questo user-id per firmare o decifrare" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|imposta il livello di compressione (0 disab.)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "usa il modo testo canonico" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "usa come file di output" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "prolisso" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "meno prolisso" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "non usa per niente il terminale" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "forza l'uso di firme v3" -#: g10/gpg.c:275 +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "non forza l'uso di firme v3" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "forza l'uso di firme v4" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "non forza l'uso di firme v4" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "usa sempre un MDC per cifrare" -#: g10/gpg.c:276 +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "non usa mai un MDC per cifrare" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "non fa cambiamenti" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "usa gpg-agent" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "modo batch: non fa domande" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "assumi \"sì\" per quasi tutte le domande" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "assumi \"no\" per quasi tutte le domande" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "aggiungi questo portachiavi alla lista" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "aggiungi questo portachiavi segreto alla lista" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "mostra in quali portachiavi sono contenute le chiavi elencate" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NOME|usa NOME come chiave segreta predefinita" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|cerca le chiavi in questo keyserver" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" -msgstr "|NOME|imposta il set di caratteri del terminale NOME" +msgstr "|NOME|imposta NOME come set di caratteri del terminale" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "leggi le opzioni dal file" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" -msgstr "|FD|scrivi le informazioni di stato su questo FD" +msgstr "|FD|scrivi le informazioni di stato sul FD" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "" +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[file]|scrivi le informazioni di stato nel file" -#: g10/gpg.c:297 +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|KEYID|assegna fiducia definitiva a questa chiave" + +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|FILE|carica il modulo di estensione FILE" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "emula il modo descritto in RFC 1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" "imposta tutte le opzioni di pacchetto,\n" "cifrario e digest per OpenPGP" -#: g10/gpg.c:300 +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "imposta tutte le opzioni di pacchetto, cifrario e digest per PGP 2.x" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|usa il modo N per la passphrase" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NOME|usa l'algoritmo di message digest NOME per le passphrase" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NOME|usa l'alg. di cifratura NOME per le passphrase" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOME|usa l'algoritmo di cifratura NOME" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOME|usa l'algoritmo di message digest NOME" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|usa l'algoritmo di compressione N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "elimina il campo keyid dei pacchetti cifrati" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Mostra le fotografie" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Non mostra le fotografie" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "Imposta la riga di comando per vedere le fotografie" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NOME=VALORE|usa questi dati per una nota" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" +"@\n" +"(Vedi la man page per una lista completa di tutti i comandi e opzioni)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -661,15 +745,15 @@ msgstr "" " --list-keys [nomi] mostra le chiavi\n" " --fingerprint [nomi] mostra le impronte digitali\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "Per favore segnala i bug a .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -679,7 +763,7 @@ msgstr "" "firma, controlla, cifra o decifra\n" "l'operazione predefinita dipende dai dati di input\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -687,193 +771,252 @@ msgstr "" "\n" "Algoritmi gestiti:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "uso: gpg [opzioni] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "comandi in conflitto\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: manca il file `%s' con le opzioni predefinite\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "file con le opzioni `%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "lettura delle opzioni da `%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s non è un set di caratteri valido\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "impossibile fare il parsing dell'URI del keyserver\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "impossibile impostare exec-path a %s\n" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "ATTENZIONE: %s è una opzione deprecata.\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "usa al suo posto \"--keyserver-options %s\"\n" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "ATTENZIONE: il programma potrebbe creare un file core!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "ATTENZIONE: %s ha la precedenza su %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: %s normalmente non deve essere usato!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "Non è permesso usare %s con %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "Non ha senso usare %s con %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "nella modalità --pgp2 puoi fare solo firme in chiaro o separate\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "nella modalità --pgp2 non puoi firmare e cifrare contemporaneamente\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" +"devi usare dei file (e non una pipe) quando lavori con --pgp2 attivo.\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" +"nella modalità --pgp2 è richiesto il cifrario IDEA per cifrare un messaggio\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "questo messaggio può non essere utilizzabile da PGP 2.x\n" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "l'algoritmo di cifratura selezionato non è valido\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "l'algoritmo di digest selezionato non è valido\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "L'URL della policy indicato non è valido\n" +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "l'URL della politica di firma indicato non è valido\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "l'URL della politica di certificazione indicato non è valido\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "l'algoritmo di compressione deve essere tra %d e %d\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve essere maggiore di 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve essere maggiore di 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth deve essere tra 1 e 255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: l'uso del modo S2K semplice (0) è fortemente scoraggiato\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K non valido; deve essere 0, 1 o 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "default-check-level non valido; deve essere 0, 1 o 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "preferenze non valide\n" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "inizializzazione del trustdb fallita: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [nomefile]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [nomefile]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [nomefile]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [nomefile]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nomefile]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [nomefile]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [nomefile]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [nomefile]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key user-id" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key user-id" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key user-id" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key user-id" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key user-id [comandi]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key user-id" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key user-id" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "impossibile aprire `%s': %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [user-id] [portachiavi]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "rimozione dell'armatura fallita: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "creazione dell'armatura fallita: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo di hash non valido `%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[nomefile]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Vai avanti e scrivi il messaggio...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "impossibile aprire `%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "il primo carattere del nome di una nota deve essere una lettera o un\n" "underscore\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -881,248 +1024,228 @@ msgstr "" "il nome di una nota deve essere formato solo da lettere, numeri, punti o\n" "underscore e deve finire con `='\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "nel nome di una nota i punti devono avere altri caratteri intorno\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "il valore di una nota non deve usare caratteri di controllo\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "armatura: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "header dell'armatura non valido: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "header dell'armatura: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "header della firma in chiaro non valido\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "firme in chiaro annidate\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "riga protetta con il trattino non valida: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "armatura inaspettata:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "Carattere radix64 non valido %02x saltato\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "eof prematura (nessun CRC)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "eof prematura (nel CRC)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "CRC malformato\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "errore nel CRC; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "eof prematura (nella coda)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "errore nella riga della coda\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "Non sono stati trovati dati OpenPGP validi.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armatura non valida: linea più lunga di %d caratteri\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "carattere quoted printable nell'armatura - probabilmente è stato usato\n" "un MTA buggato\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Impronta digitale:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Impronta digitale:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" -msgstr "" +msgstr "Nessuna ragione specificata" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" -msgstr "La chiave è protetta.\n" +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "Questa chiave è stata sostituita" -#: g10/pkclist.c:121 -#, fuzzy +#: g10/pkclist.c:65 msgid "Key has been compromised" -msgstr "Questa chiave è stata disabilitata" +msgstr "Questa chiave è stata compromessa" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" -msgstr "" +msgstr "La chiave non è più usata" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" -msgstr "" +msgstr "L'user ID non è più valido" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " -msgstr "" +msgstr "Ragione della revoca: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " -msgstr "" +msgstr "Commento alla revoca: " -# valid user replies (not including 1..4) -# [Marco, you can change 'm' and 's' to whatever letters you like] #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMqQsS" -#: g10/pkclist.c:308 +#: g10/pkclist.c:258 #, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" -"Nessun valore di fiducia assegnato a %lu:\n" +"Nessun valore di fiducia assegnato a:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" -"Per favore decidi quanto hai fiducia di questo utente perchè firmi\n" -"correttamente le chiavi di altri utenti (guardando il loro passaporto,\n" -"controllando le impronte digitali da diverse fonti ...)?\n" +"Per favore decidi quanto hai fiducia che questo utente firmi correttamente\n" +"le chiavi di altri utenti (guardando il loro passaporto, controllando le\n" +"impronte digitali da diverse fonti...)?\n" "\n" -" 1 = Non lo so\n" -" 2 = NON mi fido\n" -" 3 = Mi fido marginalmente\n" -" 4 = Mi fido completamente\n" -" s = mostrami ulteriori informazioni\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = Non lo so\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = NON mi fido\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Mi fido marginalmente\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Mi fido completamente\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Mi fido definitivamente\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = mostrami ulteriori informazioni\n" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = torna al menù principale\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = salta questa chiave\n" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = abbandona\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Cosa hai deciso? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Vuoi davvero assegnare fiducia definitiva a questa chiave? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificati che portano a chiavi definitivamente affidabili:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Impossibile trovare un percorso di fiducia valido fino alla chiave. Vediamo\n" -"se possiamo assegnare qualche valore di fiducia del proprietario mancante.\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"Non è stato trovato alcun percorso che porti a una delle nostre chiavi.\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "Non è stato trovato alcun certificato con fiducia non definita.\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Nessun valore di fiducia modificato.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "chiave %08lX: la chiave è stata revocata!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Uso lo stesso questa chiave? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "chiave %08lX: la subchiave è stata revocata!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: la chiave è scaduta\n" -#: g10/pkclist.c:519 +#: g10/pkclist.c:442 #, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: mancano informazioni per calcolare una probabilità di fiducia\n" +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +"%08lX: Non ci sono indicazioni che la chiave appartenga al proprietario\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: NON ci fidiamo di questa chiave!\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1131,15 +1254,15 @@ msgstr "" "%08lX: Non è sicuro che questa chiave appartenga veramente al proprietario\n" "ma è accettata comunque\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Questa chiave probabilmente appartiene al proprietario\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Questa chiave ci appartiene\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1151,171 +1274,194 @@ msgstr "" "prossima domanda.\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "ATTENZIONE: uso di una chiave non fidata!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATTENZIONE: questa chiave è stata revocata dal suo proprietario!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Questo può significare che la firma è stata falsificata.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ATTENZIONE: questa subchiave è stata revocata dal proprietario!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Nota: questa chiave è stata disabilitata.\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Nota: questa chiave è scaduta!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "ATTENZIONE: questa chiave non è certificata con una firma fidata!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Non ci sono indicazioni che la firma appartenga al proprietario.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATTENZIONE: NON ci fidiamo di questa chiave!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " La firma è probabilmente un FALSO.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ATTENZIONE: questa chiave non è certificata con firme abbastanza fidate!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Non è sicuro che la firma appartenga al proprietario.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: saltata: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: saltato: chiave pubblica già presente\n" -#: g10/pkclist.c:855 +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "Non hai specificato un user ID. (puoi usare \"-r\")\n" + +#: g10/pkclist.c:762 msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" "\n" +"Enter the user ID. End with an empty line: " msgstr "" -"Non hai specificato un user ID. (puoi usare \"-r\")\n" "\n" +"Inserisci l'user ID. Termina con una riga vuota: " -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Inserisci l'user ID: " - -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "User ID inesistente.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "saltato: chiave pubblica già impostata come destinatario predefinito\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "La chiave pubblica è disabilitata.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "saltato: chiave pubblica già impostata con --encrypt-to\n" +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "saltato: chiave pubblica già impostata\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "destinatario predefinito `%s' sconosciuto\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: errore nel controllare la chiave: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: saltato: chiave pubblica disabilitata\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "nessun indirizzo valido\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "la preferenza %c%lu non è valida\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "la preferenza %c%lu è doppia\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "ci sono troppe preferenze `%c'\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "carattere non valido nella stringa delle preferenze\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "scrittura della autofirma\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "scrittura della firma di collegamento alla chiave\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 -#, fuzzy, c-format +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format msgid "keysize invalid; using %u bits\n" -msgstr "La dimensione richiesta della chiave è %u bit\n" +msgstr "dimensione della chiave non valida; uso %u bit\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 -#, fuzzy, c-format +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format msgid "keysize rounded up to %u bits\n" -msgstr "arrotondate a %u bit\n" +msgstr "dimensioni della chiave arrotondate a %u bit\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Per favore scegli che tipo di chiave vuoi:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA e ElGamal (default)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (firma solo)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (cifra solo)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (firma e cifra)\n" -#: g10/keygen.c:643 -#, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (firma e cifra)\n" +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (firma solo)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (cifra solo)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Cosa scegli? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Vuoi davvero creare una chiave di firma e cifratura? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "L'uso di questo algoritmo è deprecato - la creo comunque? " -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Scelta non valida.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1328,21 +1474,20 @@ msgstr "" " la dimensione predefinita è 1024 bit\n" " la dimensione massima consigliata è 2048 bit\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Di che dimensioni vuoi la chiave? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permette solo chiavi di dimensioni tra 512 e 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "la chiave è troppo corta; 768 è il minimo valore permesso.\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "la chiave è troppo corta; 1024 è il minimo valore permesso per RSA.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "la chiave è troppo corta; 768 è il minimo valore permesso.\n" #. It is ridiculous and an annoyance to use larger key sizes! @@ -1353,12 +1498,12 @@ msgstr "la chiave #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "la chiave è troppo lunga; %d è il massimo valore permesso.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1366,11 +1511,11 @@ msgstr "" "Chiavi più lunghe di 2048 non sono consigliate perchè i calcoli sono\n" "VERAMENTE lunghi!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Sei sicuro di volere una chiave di queste dimensioni? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1378,21 +1523,17 @@ msgstr "" "Va bene, ma ricordati che anche le radiazioni emesse dal tuo monitor e dalla " "tua tastiera sono molto vulnerabili ad attacchi!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Ti serve davvero una chiave così lunga? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "La dimensione richiesta della chiave è %u bit\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "arrotondate a %u bit\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1401,32 +1542,53 @@ msgid "" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" -"Per favore specifica per quanto la chiave sarà valida.\n" +"Per favore specifica per quanto tempo la chiave sarà valida.\n" " 0 = la chiave non scadrà\n" " = la chiave scadrà dopo n giorni\n" " w = la chiave scadrà dopo n settimane\n" " m = la chiave scadrà dopo n mesi\n" " y = la chiave scadrà dopo n anni\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Per favore specifica per quanto tempo la firma sarà valida.\n" +" 0 = la chiave non scadrà\n" +" = la chiave scadrà dopo n giorni\n" +" w = la chiave scadrà dopo n settimane\n" +" m = la chiave scadrà dopo n mesi\n" +" y = la chiave scadrà dopo n anni\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "Chiave valida per? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Firma valida per? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "valore non valido\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "La chiave non scade\n" +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s non ha scadenza\n" #. print the date when the key expires -#: g10/keygen.c:828 +#: g10/keygen.c:992 #, c-format -msgid "Key expires at %s\n" -msgstr "La chiave scadrà il %s\n" +msgid "%s expires at %s\n" +msgstr "%s scadrà il %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1434,11 +1596,11 @@ msgstr "" "Il tuo sistema non può mostrare date oltre il 2038.\n" "Comunque, sarà gestita correttamente fino al 2106.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "È giusto (s/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1454,44 +1616,44 @@ msgstr "" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Nome e Cognome: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Carattere non valido nel nome\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Il nome non può iniziare con una cifra\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Il nome deve essere lungo almeno 5 caratteri\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Indirizzo di Email: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "L'indirizzo di email non è valido\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Commento: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Carattere non valido nel commento\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Stai usando il set di caratteri `%s'.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1502,28 +1664,27 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" -msgstr "" +msgstr "Per favore non mettere l'indirizzo di email nel nome o nel commento\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" -#: g10/keygen.c:986 -#, fuzzy +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " -msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? " +msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (Q)uit? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" -msgstr "" +msgstr "Per favore correggi prima l'errore\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1531,11 +1692,16 @@ msgstr "" "Ti serve una passphrase per proteggere la tua chiave segreta.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "passphrase non ripetuta correttamente; riprova.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "passphrase non ripetuta correttamente; prova ancora" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1547,7 +1713,7 @@ msgstr "" "programma con l'opzione \"--edit-key\".\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1559,29 +1725,53 @@ msgstr "" "dischi) durante la generazione dei numeri primi; questo da al generatore di\n" "numeri casuali migliori possibilità di raccogliere abbastanza entropia.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "La coppia DSA avrà 1024 bit.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Generazione della chiave annullata.\n" -#: g10/keygen.c:1668 -#, fuzzy, c-format +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format msgid "writing public key to `%s'\n" -msgstr "scrittura del certificato pubblico in `%s'\n" +msgstr "scrittura della chiave pubblica in `%s'\n" -#: g10/keygen.c:1669 -#, fuzzy, c-format +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format msgid "writing secret key to `%s'\n" -msgstr "scrittura del certificato segreto in `%s'\n" +msgstr "scrittura della chiave segreta in `%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "non è stato trovato un portachiavi pubblico scrivibile: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "non è stato trovato un portachiavi segreto scrivibile: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "errore scrivendo il portachiavi pubblico `%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "chiavi pubbliche e segrete create e firmate.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "chiavi marcate definitivamente affidabili.\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" @@ -1590,12 +1780,12 @@ msgstr "" "il comando \"--edit-key\" per generare una chiave secondaria per questo " "scopo.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "Generazione della chiave fallita: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1603,7 +1793,7 @@ msgstr "" "la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n" "con l'orologio)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1611,306 +1801,365 @@ msgstr "" "la chiave è stata creata %lu secondi nel futuro (salto nel tempo o problema\n" "con l'orologio)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "NB: la creazione di sottochiavi per chiavi v3 non rispetta OpenPGP.\n" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Crea davvero? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output non funziona con questo comando\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' è già compresso\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: impossibile aprire: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "errore nella creazione della passhprase: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: ATTENZIONE: file vuoto\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"in modalità --pgp2 puoi cifrare solo per chiavi RSA non più lunghe di 2048 " +"bit\n" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "lettura da `%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" +"impossibile usare il cifrario IDEA con tutti i tipi di chiavi per cui\n" +"stai cifrando.\n" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s cifrato per: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 +#: g10/delkey.c:69 g10/export.c:141 #, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: utente non trovato: %s\n" +msgid "key `%s' not found: %s\n" +msgstr "chiave `%s' non trovata: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "errore leggendo il keyblock: %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "chiave %08lX: chiave non rfc2440 - saltata\n" -#: g10/export.c:175 -#, fuzzy, c-format +#: g10/export.c:180 +#, c-format msgid "key %08lX: not protected - skipped\n" -msgstr "chiave %08lX: chiave non rfc2440 - saltata\n" +msgstr "chiave %08lX: non protetta - saltata\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "chiave %08lX: chiave in stile PGP 2.x - saltata\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "ATTENZIONE: non è stato esportato nulla\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "troppe voci nella pk cache - disabilitata\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "troppe voci nella unk cache - disabilitata\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[User ID non trovato]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "Chiave %08lX non valida resa valida da --allow-non-selfsigned-uid\n" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "uso la chiave secondaria %08lX invece della chiave primaria %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "chiave %08lX: chiave segreta senza chiave pubblica - saltata\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: utente non trovato\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "salto un blocco di tipo %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "Per ora sono state esaminate %lu chiavi\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "errore leggendo `%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr "Numero totale esaminato: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " nuove subchiavi: %lu\n" +msgstr " nuove chiavi saltate: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " senza user ID: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " importate: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " non modificate: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " nuovi user ID: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " nuove subchiavi: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " nuove firme: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr "nuove revoche di chiavi: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " chiavi segrete lette: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr "chiavi segrete importate: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "chiavi segrete non cambiate: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "chiave %08lX: nessun user ID\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "chiave %08lX: accettato l'user ID non autofirmato '%s'\n" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "chiave %08lX: nessun user ID valido\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "questo può essere causato da una autofirma mancante\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "chiave %08lX: chiave pubblica non trovata: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "chiave %08lX: chiave non rfc2440 - saltata\n" +msgstr "chiave %08lX: nuova chiave - saltata\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "non è stato trovato un portachiavi scrivibile: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "scrittura in `%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "errore scrivendo il portachiavi `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "chiave %08lX: chiave pubblica importata\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "chiave %08lX: non corrisponde alla nostra copia\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "chiave %08lX: 1 nuovo user ID\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "chiave %08lX: %d nuovi user ID\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "chiave %08lX: una nuova firma\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "chiave %08lX: %d nuove firme\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "chiave %08lX: una nuova subchiave\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "chiave %08lX: %d nuove subchiavi\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "chiave %08lX: non cambiata\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "nessun portachiavi segreto predefinito: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "chiave %08lX: chiave segreta importata\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "chiave %08lX: già nel portachiavi segreto\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "chiave %08lX: chiave segreta non trovata: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "chiave %08lX: manca la chiave pubblica - impossibile applicare il\n" "certificato di revoca\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "chiave %08lX: certificato di revoca non valido: %s - rifiutato\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "chiave %08lX: certificato di revoca importato\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "chiave %08lX: nessun user ID per la firma\n" -#: g10/import.c:719 g10/import.c:743 +#: g10/import.c:839 #, c-format -msgid "key %08lX: unsupported public key algorithm\n" -msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n" +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "" +"chiave %08lX: algoritmo a chiave pubblica non gestito sull'user ID \"%s\"\n" -#: g10/import.c:720 +#: g10/import.c:841 #, c-format -msgid "key %08lX: invalid self-signature\n" -msgstr "chiave %08lX: autofirma non valida\n" +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "chiave %08lX: autofirma non valida sull'user ID \"%s\"\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "chiave %08lX: non ci sono subchiavi per il legame con la chiave\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "chiave %08lX: legame con la subchiave non valido:\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "chiave %08lX: accettato l'user ID non autofirmato '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "chiave %08lX: saltato l'user ID '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "chiave %08lX: saltata la subchiave\n" @@ -1919,93 +2168,193 @@ msgstr "chiave %08lX: saltata la subchiave\n" #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "chiave %08lX: firma non esportabile (classe %02x) - saltata\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "chiave %08lX: certificato di revoca nel posto sbagliato - saltato\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "chiave %08lX: certificato di revoca non valido: %s - saltato\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "chiave %08lX: trovato un user ID duplicato - unito\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"Attenzione: la chiave %08lX può essere stata revocata: scarico la chiave\n" +"di revoca %08lX.\n" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" +"Attenzione: la chiave %08lX può essere stata revocata: la chiave di revoca\n" +"%08lX non è presente.\n" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "chiave %08lX: certificato di revoca aggiunto\n" -#: g10/import.c:1130 g10/import.c:1183 +#: g10/import.c:1231 #, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "chiave %08lX: la nostra copia non ha autofirma\n" +msgid "key %08lX: direct key signature added\n" +msgstr "chiave %08lX: aggiunta una firma alla chiave diretta\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[revoca]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[autofirma]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "una firma non corretta\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d firme non corrette\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "una firma non controllata per mancanza della chiave\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d firme non controllate per mancanza delle chiavi\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "una firma non controllata a causa di un errore\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d firme non controllate a causa di errori\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "Trovato un user ID senza autofirma valida\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "Trovati %d user ID senza autofirme valide\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:335 #, c-format -msgid "Already signed by key %08lX\n" -msgstr "Già firmato dalla chiave %08lX\n" +msgid "User ID \"%s\" is revoked." +msgstr "L'user ID \"%s\" è stato revocato." -#: g10/keyedit.c:319 +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Sei ancora sicuro di volerla firmare? (s/N) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr " Impossibile firmarla.\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"La tua firma attuale su \"%s\"\n" +"è una firma locale.\n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "Vuoi trasformarla in una firma completa esportabile? (s/N) " + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" era già stato firmato localmente dalla chiave %08lX\n" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" era già stato firmato dalla chiave %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Niente da firmare con la chiave %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Questa chiave è scaduta!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Questa chiave scadrà il %s.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Vuoi che la tua firma scada nello stesso momento? (S/n) " + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" +"In modalità -pgp2 non è possibile fare firme OpenPGP su chiavi in stile PGP " +"2.x.\n" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "Questo renderebbe la chiave non utilizzabile da PGP 2.x.\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Con quanta attenzione hai verificato che la chiave che stai per firmare\n" +"appartiene veramente alla persona indicata sopra?\n" +"Se non sai cosa rispondere digita \"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Preferisco non rispondere.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Non l'ho controllata per niente.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) L'ho controllata superficialmente.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) L'ho controllata molto attentamente.%s\n" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2013,42 +2362,73 @@ msgstr "" "Sei davvero sicuro di volere firmare questa chiave\n" "con la tua chiave: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 msgid "" +"\n" "The signature will be marked as non-exportable.\n" -"\n" msgstr "" -"La firma sarà segnata come non esportabile.\n" "\n" +"La firma sarà marcata come non esportabile.\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"La firma sarà marcata come irrevocabile.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Non ho controllato per niente questa chiave.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Ho controllato questa chiave superficialmente.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Ho controllato questa chiave molto superficialmente.\n" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Firmo davvero? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "firma fallita: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Questa chiave non è protetta.\n" -#: g10/keyedit.c:426 -#, fuzzy +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" -msgstr "la chiave segreta non è disponibile" +msgstr "Parti della chiave segreta non sono disponibili.\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "La chiave è protetta.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossibile modificare questa chiave: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2056,7 +2436,7 @@ msgstr "" "Inserisci la nuova passphrase per questa chiave segreta.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2064,667 +2444,931 @@ msgstr "" "Non vuoi una passphrase - questa è probabilmente una *cattiva* idea!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Vuoi veramente farlo?" -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "spostamento della firma di una chiave nel posto corretto\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "abbandona questo menù" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "save" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "salva ed esci" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "help" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "mostra questo aiuto" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "mostra le impronte digitali" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "list" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "elenca le chiavi e gli user ID" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "scegli l'user ID N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "key" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "scegli la chiave secondaria N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "check" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "elenca le firme" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "sign" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "firma la chiave" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "firma la chiave localmente" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "firma la chiave irrevocabilmente" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "firma la chiave localmente e irrevocabilmente" + +#: g10/keyedit.c:832 msgid "debug" msgstr "debug" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "aggiungi un user ID" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "addphoto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "aggiungi un ID fotografico" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "cancella un user ID" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "aggiungi una chiave secondaria" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "cancella una chiave secondaria" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "delsign" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "cancella le firme" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "cambia la data di scadenza" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "primary" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "imposta l'user ID come primario" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "cambia tra visualizzare la chiave segreta e la chiave pubblica" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "elenca le impostazioni" +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "elenca le preferenze (per esperti)" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "elenca le preferenze (prolisso)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "imposta la lista di preferenze" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "preferenze aggiornate" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "cambia la passphrase" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "trust" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "cambia il valore di fiducia" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "revoca firme" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "revoca una chiave secondaria" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "disable" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "disabilita una chiave" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "abilita" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "abilita una chiave" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "showphoto" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "mostra l'ID fotografico" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "impossibile fare questo in modo batch\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "errore leggendo il keyblock segreto `%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "È disponibile una chiave segreta.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Comando> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "Per fare questo serve la chiave segreta.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" -msgstr "" +msgstr "Per favore usa prima il comando \"toggle\".\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +msgid "Key is revoked." +msgstr "La chiave è stata revocata." + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Firmo davvero tutti gli user ID? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Suggerimento: seleziona gli user ID da firmare\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "aggiornamento del trustdb fallito: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "Questo comando non è permesso in modalità %s.\n" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Devi selezionare almeno un user ID.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Non puoi cancellare l'ultimo user ID!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Tolgo davvero tutti gli user ID selezionati? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Tolgo davvero questo user ID? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Devi selezionare almeno una chiave.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Vuoi davvero cancellare le chiavi selezionate? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Vuoi davvero cancellare questa chiave? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Vuoi davvero revocare le chiavi selezionate? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Vuoi davvero revocare questa chiave? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Aggiorno davvero le preferenze? " + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Salvo i cambiamenti? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Esco senza salvare? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "aggiornamento fallito: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "aggiornamento della chiave segreta fallito: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "La chiave non è cambiata quindi non sono necessari aggiornamenti.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Comando non valido (prova \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Questa chiave può essere revocata dalla chiave %s %s%s\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (sensibile)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX creata: %s scade: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " fiducia: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Questa chiave è stata disabilitata" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "chiave %08lX: la subchiave è stata revocata!\n" +msgstr "rev! la subchiave è stata revocata: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr "nuove revoche di chiavi: %lu\n" +msgstr "rev- trovata una revoca falsificata\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" -msgstr "" +msgstr "rev? problema controllando la revoca: %s\n" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" +"Nota che la validità della firma indicata non sarà necessariamente corretta\n" +"finchè non eseguirai di nuovo il programma.\n" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"ATTENZIONE: Questa chiave ha già un ID fotografico.\n" +" Aggiungerne un altro può confondere alcune versioni di PGP.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Sei ancora sicuro di volerlo aggiungere? (s/N) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "È possibile avere un solo ID fotografico su ogni chiave.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"ATTENZIONE: Questa è una chiave in stile PGP2. Aggiungere un ID fotografico\n" +" può causare il rifiuto della chiave da parte di alcune versioni\n" +" di PGP.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" +"Non è possibile aggiungere un ID fotografico a una chiave in stile PGP2.\n" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Cancellare questa firma corretta? (s/N/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Cancellare questa firma non valida? (s/N/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Cancellare questa firma sconosciuta? (s/N/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Cancellare davvero questa autofirma? (s/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "Cancellata %d firma.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "Cancellate %d firme.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Non è stato cancellato nulla.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Togli le selezioni dalle chiavi segrete.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Seleziona al massimo una chiave secondaria.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Cambio la data di scadenza per una chiave secondaria.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Cambio la data di scadenza per la chiave primaria.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Non è possibile cambiare la data di scadenza di una chiave v3\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Manca la firma corrispondente nel portachiavi segreto\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Devi selezionare esattamente un user ID.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Nessun user ID con l'indice %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Nessuna chiave secondaria con l'indice %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "user ID: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" "\"\n" -"firmata con la tua chiave %08lX a %s\n" +"firmata con la tua chiave %08lX il %s\n" "\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" -msgstr "Creare un certificato di revoca per questa firma? (s/N)" +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"firmata localmente con la tua chiave %08lX il %s\n" +"\n" + +#: g10/keyedit.c:2457 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "Questa chiave è scaduta il %s.\n" + +#: g10/keyedit.c:2461 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Sei ancora sicuro di volerlo aggiungere? (s/N) " + +#: g10/keyedit.c:2465 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "Creare un certificato di revoca per questa firma? (s/N) " #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Non puoi cancellare l'ultimo user ID!\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 +#: g10/keyedit.c:2504 #, c-format -msgid " signed by %08lX at %s\n" -msgstr " firmata da %08lX il %s\n" +msgid " signed by %08lX at %s%s%s\n" +msgstr " firmata da %08lX il %s%s%s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " revocata da %08lX il %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Stai per revocare queste firme:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" -msgstr "Creare davvero i certificati di revoca? (s/N)" +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " firmata da %08lX il %s%s\n" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr " (non esportabile)" + +#: g10/keyedit.c:2551 +msgid "Really create the revocation certificates? (y/N) " +msgstr "Creare davvero i certificati di revoca? (s/N) " + +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "manca la chiave segreta\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "armatura non valida" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" +"Mostro %s ID fotografici di dimensioni %ld per la chaive 0x%08lX (uid %d)\n" -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "revkey" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Politica di firma: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "ATTENZIONE: trovati dati di una nota non validi\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Annotazione della firma: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "non leggibile" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Portachiavi" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 -#, fuzzy, c-format +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format msgid " [expires: %s]" -msgstr "La chiave scadrà il %s\n" +msgstr "[scadenza: %s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Impronta digitale:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Impronta digitale:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Impronta digitale =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "dati cifrati con %s\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "cifrato con l'algoritmo sconosciuto %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "la chiave pubblica è %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "dati cifrati con la chiave pubblica: DEK corretto\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "cifrato con la chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "Cifrato con la chiave %s con ID %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "nessuna chiave disponibile per decifrare\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "decifratura della chiave pubblica fallita: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "suppongo che i dati siano cifrati con %s\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "Cifrario IDEA non disponibile, ottimisticamente cerco di usare %s\n" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "decifratura corretta\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATTENZIONE: il messaggio cifrato è stato manipolato!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "decifratura fallita: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: il mittente ha richiesto \"solo-per-i-tuoi-occhi\"\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "nome del file originale='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revoca solitaria - usa \"gpg --import\" per applicarla\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "ATTENZIONE: trovati dati di una nota non validi\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Nota: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Policy: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "verifica della firma soppressa\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "impossibile gestire queste firme multiple\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Firma fatta %.*s usando la chiave %s con ID %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "Firma NON corretta da \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Firma scaduta da \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Firma valida da \"" -#: g10/mainproc.c:1109 -msgid " aka \"" -msgstr " anche noto come \"" +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[incerta]" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1351 +msgid " aka \"" +msgstr " alias \"" + +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossibile controllare la firma: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "non è una firma separata\n" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "firma solitaria di classe 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "firma vecchio stile (PGP 2.x)\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "individuato un pacchetto radice non valido in proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossibile disabilitare i core dump: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Gli algoritmi sperimentali non dovrebbero essere usati!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "questo algoritmo di cifratura è deprecato; usane uno più standard!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Attenzione: proprietario \"%s\" di %s insicuro\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Attenzione: permessi \"%s\" di %s insicuri\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "il plugin per il cifrario IDEA non è presente\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" +"per ulteriori informazioni si veda http://www.gnupg.org/it/why-not-idea." +"html\n" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossibile gestire l'algoritmo a chiave pubblica %d\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "il sottopacchetto di tipo %d ha un bit critico impostato\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" -msgstr "" +msgstr "gpg-agent non è disponibile in questa sessione\n" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "impossibile impostare il pid del client dell'agent\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "impossibile ottenere il FD di lettura dell'agent\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "impossibile ottenere il FD di scrittura dell'agent\n" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "variabile di ambiente GPG_AGENT_INFO malformata\n" -#: g10/hkp.c:158 g10/passphrase.c:223 -#, fuzzy, c-format +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "la versione %d del protocollo di gpg-agent non è gestita\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format msgid "can't connect to `%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" +msgstr "impossibile connettersi a `%s': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "problema di comunicazione con gpg-agent\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "problema con l'agent - uso dell'agent disattivato\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (key ID principale %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" -"Ti serve una passphrase per sbloccare la chiave segreta\n" -"dell'utente: \"" +"Ti serve una passphrase per sbloccare la chiave segreta dell'utente:\n" +"\"%.*s\"\n" +"%u-bit %s key, ID %08lX, created %s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Inserisci la passphrase: " +msgstr "Inserisci la passphrase\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Ripeti la passphrase: " +msgstr "Ripeti la passphrase\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "" +msgstr "passphrase troppo lunga\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "risposta non valida dall'agent\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "interrotto dall'utente\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "problema con l'agent: ha restituito 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2734,20 +3378,20 @@ msgstr "" "Ti serve una passphrase per sbloccare la chiave segreta\n" "dell'utente: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "impossibile chiedere la password in modo batch\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Inserisci la passphrase: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Ripeti la passphrase: " @@ -2756,150 +3400,198 @@ msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "i dati non sono stati salvati; usa l'opzione \"--output\" per salvarli\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "errore creando `%s': %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" msgstr "Firma separata.\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Inserisci il nome del file di dati: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "viene letto stdin...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "non ci sono dati firmati\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossibile aprire i dati firmati `%s'\n" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "destinatario anonimo; provo la chiave segreta %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "bene, siamo il destinatario anonimo.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "la vecchia codifica del DEK non è gestita\n" -#: g10/pubkey-enc.c:216 -#, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "l'algoritmo di protezione %d non è gestito\n" +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "l'algoritmo di cifratura %d%s è sconosciuto o disattivato\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "" -"NOTA: l'algoritmo di cifratura %d non è stato trovato nelle impostazioni\n" +"NOTA: l'algoritmo di cifratura %d non è stato trovato tra le preferenze\n" -#: g10/pubkey-enc.c:261 -#, fuzzy, c-format -msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "NOTA: chiave per firmare scaduta il %s\n" - -#: g10/hkp.c:62 +#: g10/pubkey-enc.c:242 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "NOTA: chiave %08lX scaduta il %s\n" -#: g10/hkp.c:75 -#, fuzzy, c-format +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "richiedo la chiave %08lX dal keyserver HKP %s\n" + +#: g10/hkp.c:94 +#, c-format msgid "can't get key from keyserver: %s\n" -msgstr "importa le chiavi da un key server" +msgstr "impossibile scaricare la chiave dal keyserver: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s non è un set di caratteri valido\n" - -#: g10/hkp.c:182 -#, fuzzy, c-format +#: g10/hkp.c:171 +#, c-format msgid "error sending to `%s': %s\n" msgstr "errore leggendo `%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" -msgstr "" +msgstr "inviata con successo a `%s' (status=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" -msgstr "" +msgstr "invio a `%s' fallito: status=%u\n" -#: g10/seckey-cert.c:89 -#, fuzzy -msgid "secret key parts are not available\n" -msgstr "la chiave segreta non è disponibile" - -#: g10/seckey-cert.c:95 +#: g10/hkp.c:471 #, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "l'algoritmo di protezione %d non è gestito\n" +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "cerco \"%s\" sul server HKP %s\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "Passphrase non valida; riprova...\n" +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "impossibile cercare sul keyserver: %s\n" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "parti della chiave segreta non sono disponibili\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "l'algoritmo di protezione %d%s non è gestito\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Passphrase non valida; riprova" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "ATTENZIONE: Individuata una chiave debole - per favore cambia ancora la\n" "passphrase.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" +"genero il checksum a 16 bit deprecato per la protezione della chiave " +"segreta\n" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "questa è una chiave ElGamal generata da PGP e NON è sicura per le firme!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "la chiave pubblica è %lu secondo più recente della firma\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "la chiave pubblica è %lu secondi più recente della firma\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "NOTA: chiave per firmare scaduta il %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "NOTA: chiave per firmare %08lX scaduta il %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "si suppone una firma non valida a causa di un bit critico sconosciuto\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"ATTENZIONE: Impossibile espandere i %% nell'URL (troppo lunga). Usata " +"inespansa.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "controllo della firma creata fallito: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "Firma %s da: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "ATTENZIONE: `%s' è un file vuoto\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "In modalità -pgp2 puoi firmare solo con chiavi in stile PGP 2.x\n" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "impossibile creare %s: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "firma:" -#: g10/sign.c:583 +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"In modalità -pgp2 puoi firmare in chiaro solo con chiavi in stile PGP 2.x\n" + +#: g10/sign.c:953 #, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "ATTENZIONE: `%s' è un file vuoto\n" +msgid "%s encryption will be used\n" +msgstr "sarà usato il cifrario %s\n" #: g10/textfilter.c:134 #, c-format @@ -2911,424 +3603,205 @@ msgstr "impossibile gestire linee di testo pi msgid "input line longer than %d characters\n" msgstr "linea di input più lunga di %d caratteri\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek fallita: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: scrittura fallita (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "transazione del trustdb troppo grande\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: impossibile acedere a: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: la directory non esiste!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: impossibile creare: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: impossibile creare il lock\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: impossibile creare il lock\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: impossibile creare: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: creazione del record della versione fallita: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: è stato creato un trustdb non valido\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: creato il trustdb\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: trustdb non valido\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: creazione della tabella hash fallita: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: errore durante l'aggiornamento del record di versione: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: errore durante la lettura del record di versione: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: errore durante la scrittura del record di versione: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek fallita: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read fallita (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: non è un file di trustdb\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: record di versione con recnum %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versione %d del file non valida\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: errore durante la lettura del record libero: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: errore durante la scrittura del dir record: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: azzeramento di un record fallito: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: accodatura a un record fallita: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "Il trustdb è danneggiato; eseguire \"gpg --fix-trust-db\".\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' non è un key ID lungo valido\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "chiave %08lX: accettata come chiave affidabile\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "chiave %08lX: appare nel trustdb più di una volta\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "" +"chiave %08lX: manca la chiave pubblica della chiave fidata - ignorata\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "trust record %lu, tipo %d: read fallita: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "il trust record %lu non è del tipo richiesto %d\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "trust record %lu, req type %d: write fallita: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "trust record %lu: delete fallita: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sync fallita: %s\n" -#: g10/trustdb.c:377 +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "non è necessario un controllo del trustdb\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "errore durante la lettura del dir record per il LID %lu: %s\n" +msgid "next trustdb check due at %s\n" +msgstr "il prossimoi controllo del trustdb sarà fatto il %s\n" -#: g10/trustdb.c:384 +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "controllo il trustdb\n" + +#: g10/trustdb.c:933 #, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: atteso un dir record, trovato uno di tipo %d\n" +msgid "public key %08lX not found: %s\n" +msgstr "chiave pubblica %08lX non trovata: %s\n" -#: g10/trustdb.c:389 +#: g10/trustdb.c:1515 #, c-format -msgid "no primary key for LID %lu\n" -msgstr "manca una chiave primaria per il LID %lu\n" +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "chiave pubblica definitivamente affidabile %08lX non trovata\n" -#: g10/trustdb.c:394 +#: g10/trustdb.c:1593 #, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "" -"errore durante la lettura della chiave primaria per il\n" -"LID %lu: %s\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "controllo al livello %d firmato=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record fallito: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "%s non è un set di caratteri valido\n" - -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "chiave %08lX: impossibile metterla nel trustdb\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "chiave %08lX: richiesta del record fallita\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "chiave %08lX: già nella tabella delle chiavi affidabili\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "chiave %08lX: accettata come chiave affidabile\n" - -#: g10/trustdb.c:547 -#, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "chiave %08lX: chiave non rfc2440 - saltata\n" - -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "NOTA: la chiave segreta %08lX NON è protetta.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "chiave %08lX: le chiavi segreta e pubblica non corrispondono\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "enumerate secret keys fallito: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "chiave %08lX.%lu: Legame con la subchiave corretto\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "chiave %08lX.%lu: Legame con la subchiave non valido: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "chiave %08lX.%lu: Revoca della chiave valida\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "chiave %08lX.%lu: Revoca della chiave non valida: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "chiave %08lX.%lu: Revoca della subchiave valida\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Autofirma corretta" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Autofirma non valida" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "" -"Saltata una revoca dell'user ID valida a causa di una autofirma più recente" - -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Revoca dell'user ID valida" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Revoca dell'user ID non valida" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Revoca del certificato valida" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Certificato corretto" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Certificato di revoca non valido" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Certificato non valido" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "il sig recor di %lu[%d] punta al record sbagliato.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "certificato doppio - cancellato" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir fallita: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: inserimento fallito: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: inserimento fallito: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: inserito\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "errore durante la lettura del dir record: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu chiavi esaminate\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu chiavi con errori\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu chiavi inserite\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "enumerate keyblocks fallito: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: dir record senza chiave - saltato\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu a causa di nuove chiavi pubbliche\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu chiavi saltate\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu chiavi aggiornate\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Ooops, mancano le chiavi\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Ooops, mancano gli user ID\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: ricerca del dir record fallita: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "chiave %08lX: inserimento del record della fiducia fallito: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "chiave %08lX.%lu: inserita nel trustdb\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" -msgstr "" -"chiave %08lX.%lu: creata nel futuro (salto nel tempo o problema\n" -"con l'orologio)\n" - -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "chiave %08lX.%lu: scaduta il %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "chiave %08lX.%lu: controllo della fiducia fallito: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "utente `%s' non trovato: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "problema cercando `%s' nel trustdb: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "l'utente `%s' non è nel trustdb - viene inserito\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "impossibile mettere `%s' nel trustdb: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "ATTENZIONE: non è ancora possibile gestire record pref lunghi\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3338,45 +3811,32 @@ msgstr "" "Ricorda che il file con la firma (.sig or .asc) deve\n" "essere il primo file indicato sulla riga di comando.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "linea di input %u troppo lunga o LF mancante\n" -#: g10/ringedit.c:296 +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"la chiave non è indicata come insicura - impossibile usarla con il RNG " +"finto!\n" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: impossibile creare il portachiavi: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "saltata `%s': doppia\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: portachiavi creato\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "ATTENZIONE: esistono due file con informazioni confidenziali.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s è quello non modificato\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s è quello nuovo\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Per favore risolvete questo possibile problema di sicurezza\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "saltata `%s': %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "saltata: chiave pubblica già presente\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3395,92 +3855,100 @@ msgstr "Il file `%s' esiste. " msgid "Overwrite (y/N)? " msgstr "Sovrascrivo (s/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: suffisso sconosciuto\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Inserire il nuovo nome del file" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "scrivo su stdout\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "suppongo che i dati firmati siano in `%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: creato un nuovo file delle opzioni\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: impossibile creare la directory: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: directory creata\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "" "è necessario eseguire di nuovo GnuPG in modo che possa leggere il nuovo\n" "file delle opzioni\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "cifrato con l'algoritmo sconosciuto %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "dati cifrati con %s\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATTENZIONE: il messaggio era stato cifrato usando una chiave debole\n" "per il cifrario simmetrico\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problema nella gestione del pacchetto cifrato\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "creata una chiave debole - riprovo\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "Impossibile evitare una chiave debole per il cifrario simmetrico;\n" "ho provato %d volte!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "c'è una chiave segreta per questa chiave pubblica!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "DSA richiede l'uso di un algoritmo di hashing con almeno 160 bit\n" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "prima usa l'opzione \"--delete-secret-key\" per cancellarla.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "impossibile fare questo in modo batch senza \"--yes\"\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Vuoi cancellare questa chiave dal portachiavi? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " -msgstr "È una chaive segreta! - Vuoi cancellarla davvero? " +msgstr "È una chiave segreta! - Vuoi cancellarla davvero? " + +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "cancellazione del keyblock fallita: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "informazioni di fiducia del possessore cancellate\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "c'è una chiave segreta per la chiave pubblica \"%s\"!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "usa prima l'opzione \"--delete-secret-keys\" per cancellarla.\n" #: g10/helptext.c:47 msgid "" @@ -3493,19 +3961,32 @@ msgstr "" "con il web-of-certificates (creato implicitamente)." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Per costruire il Web-Of-Trust, GnuPG ha bisogno di sapere quali chiavi sono\n" +"definitivamente affidabili - di solito quelle per cui hai accesso alla " +"chiave\n" +"segreta.\n" +"Rispondi \"sì\" per impostare questa chiave come definitivamente affidabile\n" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "Se vuoi usare comunque questa chiave revocata, rispondi \"si\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Se vuoi usare comunque questa chiave non fidata, rispondi \"si\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Inserisci l'user ID del destinatario a cui vuoi mandare il messaggio." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3545,7 +4026,7 @@ msgstr "" "questo è il motivo per cui le chiavi ElGamal solo per cifrare non sono\n" "disponibili in questo menù." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3556,16 +4037,16 @@ msgstr "" "sono gestite da tutti i programmi e le firme create sono grandi e lunghe da\n" "verificare." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Inserisci le dimensioni della chiave" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Rispondi \"si\" o \"no\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3577,19 +4058,19 @@ msgstr "" "messaggio di errore corretto: il sistema cerca di interpretare il valore\n" "dato come un intervallo." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Inserisci il nome del proprietario della chiave" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "Inserisci un indirizzo di email opzionale (ma fortemente suggerito)" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Inserisci un commento opzionale" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3603,15 +4084,94 @@ msgstr "" "O per continuare con la generazione della chiave.\n" "Q per abbandonare il processo di generazione della chiave." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Rispondi \"si\" (o \"y\") se va bene generare la subchiave." -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Quando firmi l'user ID di una chiave dovresti prima verificare che questa\n" +"appartiene alla persona indicata nell'user ID. È utile agli altri sapere\n" +"con quanta attenzione lo hai verificato.\n" +"\n" +"\"0\" significa che non fai particolari affermazioni sull'attenzione con " +"cui\n" +" hai ferificato la chiave.\n" +"\n" +"\"1\" significa che credi che la chiave sia posseduta dalla persona che dice " +"di\n" +" possederla, ma non hai o non hai potuto verificare per niente la " +"chiave.\n" +"\n" +"\"2\" significa che hai fatto una verifica superficiale della chiave. Per " +"esempio\n" +" potrebbe significare che hai verificato l'impronta digitale e " +"confrontato\n" +" l'user ID della chiave con un documento di identità con fotografia.\n" +"\n" +"\"3\" significa che hai fatto una verifica approfondita della chiave. Per " +"esempio\n" +" potrebbe significare che hai verificato di persona l'impronta digitale " +"con\n" +" il possessore della chiave e hai controllato, per esempio per mezzo di\n" +" un documento di identità con fotografia difficile da falsificare (come\n" +" un passaporto), che il nome del proprietario della chiave corrisponde a\n" +" quello nell'user ID della chiave, e per finire che hai verificato\n" +" (scambiando dei messaggi) che l'indirizzo di email sulla chiave " +"appartiene\n" +" al proprietario.\n" +"\n" +"Nota che gli esempi indicati per i livelli 2 e 3 sono *solo* esempi. Alla " +"fine\n" +"sta a te decidere cosa significano \"superficiale\" e \"approfondita\" " +"quando\n" +"firmi chiavi di altri.\n" +"\n" +"Se non sai cosa rispondere, rispondi \"0\"." + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Rispondi \"si\" se vuoi firmare TUTTI gli user ID" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3619,11 +4179,11 @@ msgstr "" "Rispondi \"si\" se vuoi davvero cancellare questo user ID.\n" "Tutti i certificati saranno persi!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Rispondi \"si\" se va bene cancellare la subchiave" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3634,7 +4194,7 @@ msgstr "" "questa firma perchè può essere importante per stabilire una connessione di\n" "fiducia alla chiave o a un'altra chiave certificata da questa chiave." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3648,13 +4208,13 @@ msgstr "" "usata perchè questa chiave potrebbe stabilire una connessione di fiducia\n" "attraverso una chiave già certificata." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "La firma non è valida. Ha senso rimuoverla dal tuo portachiavi." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3669,27 +4229,34 @@ msgstr "" "non\n" "è valida per qualche ragione e ne è disponibile un'altra." -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" msgstr "" -"Inserisci la passphrase, cioè una frase segreta.\n" -" bla, bla, bla..." +"Cambia le preferenze di tutti gli user ID (o solo di quelli selezionati) " +"con\n" +"la lista di preferenze corrente. L'orario di tutte le autofirme coinvolte\n" +"sarà aumentato di un secondo.\n" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Inserisci la passphrase, cioè una frase segreta \n" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Ripeti l'ultima passphrase per essere sicuro di cosa hai scritto." -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "Inserisci il nome del file a cui si riferisce la firma." -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Rispondi \"si\" se va bene sovrascrivere il file." -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3697,14 +4264,14 @@ msgstr "" "Inserisci il nuovo nome del file. Se premi INVIO sarà usato il nome\n" "predefinito (quello indicato tra parentesi)." -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3712,85 +4279,364 @@ msgid "" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" +"Dovresti specificare un motivo per questa certificazione. A seconda del\n" +"contesto hai la possibilità di scegliere tra questa lista:\n" +" \"Key has been compromised\"\n" +" Usa questo se hai un motivo per credere che una persona non " +"autorizzata\n" +" abbia avuto accesso alla tua chiave segreta.\n" +" \"Key is superseded\"\n" +" Usa questo se hai sostituito questa chiave con una più recente.\n" +" \"Key is no longer used\"\n" +" Usa questo se hai mandato in pensione questa chiave.\n" +" \"User ID is no longer valid\"\n" +" Usa questo per affermare che l'user ID non dovrebbe più essere usato;\n" +" solitamente è usato per indicare un indirizzo di email non valido.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" +"Se vuoi, puoi digitare un testo che descrive perché hai emesso\n" +"questo certificato di revoca. Per favore sii conciso.\n" +"Una riga vuota termina il testo.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Non è disponibile un aiuto" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Non è disponibile un aiuto per `%s'" +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "errore creando il portachiavi `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "cabiamento dei permessi di `%s' fallito: %s\n" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "portachiavi `%s' creato\n" + +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "rebuild della cache del portachiavi fallito: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "ATTENZIONE: esistono due file con informazioni confidenziali.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s è quello non modificato\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s è quello nuovo\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Per favore risolvete questo possibile problema di sicurezza\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "controllo il portachiavi `%s'\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "Per ora sono state controllate %lu chiavi (%lu firme)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "Sono state controllate %lu chiavi (%lu firme)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: portachiavi creato\n" + +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Sei ancora sicuro di volerla firmare?\n" + +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr " Sei sicuro di volerla firmare comunque?\n" + +#~ msgid "Really sign? (y/N) " +#~ msgstr "Firmo davvero? (s/N) " + +#~ msgid "too many random bits requested; the limit is %d\n" +#~ msgstr "sono stati richiesti troppi bit casuali; il limite è %d\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NOMI]|controlla il database della fiducia" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key user-id" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key user-id" + +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key user-id" + +#~ msgid "For info see http://www.gnupg.org" +#~ msgstr "Per informazioni si veda http://www.gnupg.org" + +# valid user replies (not including 1..4) +# [Marco, you can change 'm' and 's' to whatever letters you like] +#~ msgid "sSmMqQ" +#~ msgstr "sSmMqQ" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Impossibile trovare un percorso di fiducia valido fino alla chiave. " +#~ "Vediamo\n" +#~ "se possiamo assegnare qualche valore di fiducia del proprietario " +#~ "mancante.\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "Non è stato trovato alcun percorso che porti a una delle nostre chiavi.\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "Non è stato trovato alcun certificato con fiducia non definita.\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Nessun valore di fiducia modificato.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "" +#~ "%08lX: mancano informazioni per calcolare una probabilità di fiducia\n" + +#~ msgid "Enter the user ID: " +#~ msgstr "Inserisci l'user ID: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "saltato: chiave pubblica già impostata con --encrypt-to\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: errore nel controllare la chiave: %s\n" + +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) RSA (firma e cifra)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "Vuoi davvero creare una chiave di firma e cifratura? " + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Ti serve davvero una chiave così lunga? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: utente non trovato: %s\n" + #~ msgid "certificate read problem: %s\n" #~ msgstr "problema di lettura del certificato: %s\n" -#~ msgid "RSA key cannot be used in this version\n" -#~ msgstr "In questa versione non possono essere usate chiavi RSA\n" +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "troppe voci nella unk cache - disabilitata\n" -#~ msgid "No key for user ID\n" -#~ msgstr "Non ci sono chiavi per questo user ID\n" +#~ msgid "secret key %08lX not imported (use %s to allow for it)\n" +#~ msgstr "" +#~ "la chiave segreta %08lX non è stata importata (usa %s per permetterlo)\n" -#~ msgid "No user ID for key\n" -#~ msgstr "Non ci sono user ID per questa chiave\n" - -#~ msgid "no default public keyring\n" -#~ msgstr "nessun portachiavi pubblico predefinito\n" - -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "impossibile fare il lock del portachiavi `%s': %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n" +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "chiave %08lX: la nostra copia non ha autofirma\n" #~ msgid "%s: user not found\n" #~ msgstr "%s: utente non trovato\n" -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "Le chiavi RSA sono deprecate; per favore considera di creare una nuova " -#~ "chiave\n" -#~ "e usarla in futuro\n" +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "aggiornamento del trustdb fallito: %s\n" -# ??? (Md) -#~ msgid "not processed" -#~ msgstr "non esaminato" +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "non conosco nessun keyserver (usa l'opzione --keyserver)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s: non è un key ID valido\n" #~ msgid "assuming bad MDC due to an unknown critical bit\n" #~ msgstr "" #~ "si suppone un MDC non valido a causa di un bit critico sconosciuto\n" -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "errore durante la lettura del dir record per il LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lid %lu: atteso un dir record, trovato uno di tipo %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "manca una chiave primaria per il LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" #~ msgstr "" -#~ "la chiave non è indicata come insicura - impossibile usarla con il RNG " -#~ "finto!\n" +#~ "errore durante la lettura della chiave primaria per il\n" +#~ "LID %lu: %s\n" -#~ msgid "set debugging flags" -#~ msgstr "imposta i flag di debugging" +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record fallito: %s\n" -#~ msgid "enable full debugging" -#~ msgstr "abilita il debugging completo" +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "chiave %08lX: richiesta del record fallita\n" -#~ msgid "do not write comment packets" -#~ msgstr "non scrivere pacchetti di commento" +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "chiave %08lX: già nella tabella delle chiavi affidabili\n" -#~ msgid "(default is 1)" -#~ msgstr "(predefinito è 1)" +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "NOTA: la chiave segreta %08lX NON è protetta.\n" -#~ msgid "(default is 3)" -#~ msgstr "(predefinito è 3)" +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "chiave %08lX: le chiavi segreta e pubblica non corrispondono\n" -#~ msgid " (%d) ElGamal in a v3 packet\n" -#~ msgstr " (%d) ElGamal in un pacchetto v3\n" +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "enumerate secret keys fallito: %s\n" -#~ msgid "Key generation can only be used in interactive mode\n" -#~ msgstr "Una chiave può essere generata solo in modo interattivo\n" +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "chiave %08lX.%lu: Legame con la subchiave corretto\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "chiave %08lX.%lu: Legame con la subchiave non valido: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "chiave %08lX.%lu: Revoca della chiave valida\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "chiave %08lX.%lu: Revoca della chiave non valida: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "chiave %08lX.%lu: Revoca della subchiave valida\n" + +#~ msgid "Good self-signature" +#~ msgstr "Autofirma corretta" + +#~ msgid "Invalid self-signature" +#~ msgstr "Autofirma non valida" + +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "" +#~ "Saltata una revoca dell'user ID valida a causa di una autofirma più " +#~ "recente" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Revoca dell'user ID valida" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Revoca dell'user ID non valida" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Revoca del certificato valida" + +#~ msgid "Good certificate" +#~ msgstr "Certificato corretto" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Certificato di revoca non valido" + +#~ msgid "Invalid certificate" +#~ msgstr "Certificato non valido" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "il sig recor di %lu[%d] punta al record sbagliato.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "certificato doppio - cancellato" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir fallita: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: inserimento fallito: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: inserimento fallito: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: inserito\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "errore durante la lettura del dir record: %s\n" + +#~ msgid "\t%lu keys with errors\n" +#~ msgstr "\t%lu chiavi con errori\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu chiavi inserite\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: dir record senza chiave - saltato\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr "\t%lu a causa di nuove chiavi pubbliche\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu chiavi saltate\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu chiavi aggiornate\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Ooops, mancano le chiavi\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Ooops, mancano gli user ID\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: ricerca del dir record fallita: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "chiave %08lX: inserimento del record della fiducia fallito: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "chiave %08lX.%lu: inserita nel trustdb\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "chiave %08lX.%lu: creata nel futuro (salto nel tempo o problema\n" +#~ "con l'orologio)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "chiave %08lX.%lu: scaduta il %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "chiave %08lX.%lu: controllo della fiducia fallito: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "problema cercando `%s' nel trustdb: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "l'utente `%s' non è nel trustdb - viene inserito\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "impossibile mettere `%s' nel trustdb: %s\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "ATTENZIONE: non è ancora possibile gestire record pref lunghi\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: impossibile creare il portachiavi: %s\n" diff --git a/po/ja.po b/po/ja.po index d4666da01..35bf6bdfc 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1,303 +1,332 @@ # Japanese messages for GnuPG -# Copyright (C) 1999 Free Software Foundation, Inc. -# IIDA Yosiaki , 1999-2000. +# Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc. +# IIDA Yosiaki , 1999, 2000, 2002. # Yoshihiro Kajiki , 1999. +# This file is distributed under the same license as the GnuPG package. # Special thanks to "Takashi P.KATOH". # msgid "" msgstr "" -"Project-Id-Version: gnupg 1.0.0h\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 2000-02-16 20:10+09:00\n" -"Last-Translator: IIDA Yosiaki \n" -"Language-Team: Japanese \n" +"Project-Id-Version: gnupg 1.0.6\n" +"POT-Creation-Date: 2002-04-19 11:22+0200\n" +"PO-Revision-Date: 2002-04-20 23:43+0900\n" +"Last-Translator: IIDA Yosiaki \n" +"Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=EUC-JP\n" "Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "·Ù¹ð: ¤ä¤Ð¤¤¥á¥â¥ê¡¼¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "¾ÜºÙ¤Ïhttp://www.gnupg.org/faq.html¤ò¤´Í÷¤¯¤À¤µ¤¤\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "½é´ü²½ºÑ¤ß¤Î°ÂÁ´¤Ê¥á¥â¥ê¡¼¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï¼Â¹Ô¤Ç¤­¤Þ¤»¤ó\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(¤³¤ÎÌÜŪ¤Ë¤Ï¸í¤Ã¤¿¥×¥í¥°¥é¥à¤òÍѤ¤¤¿¤Î¤Ç¤·¤ç¤¦)\n" + +#: util/miscutil.c:297 util/miscutil.c:327 msgid "yes" msgstr "yes" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:298 util/miscutil.c:330 msgid "yY" msgstr "yY" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:299 util/miscutil.c:328 msgid "no" msgstr "no" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:300 util/miscutil.c:331 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:810 util/miscutil.c:329 msgid "quit" msgstr "quit" -#: util/miscutil.c:312 +#: util/miscutil.c:332 msgid "qQ" msgstr "qQ" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "°ìÈÌŪ¤Ê¥¨¥é¡¼" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" -msgstr "¥Ñ¥±¥Ã¥È¥¿¥¤¥×¤¬ÉÔÌÀ¤Ç¤¹" +msgstr "̤ÃΤΥѥ±¥Ã¥È¡¦¥¿¥¤¥×¤Ç¤¹" + +#: util/errors.c:56 +msgid "unknown version" +msgstr "̤ÃΤΥС¼¥¸¥ç¥ó¤Ç¤¹" #: util/errors.c:57 -msgid "unknown version" -msgstr "¥Ð¡¼¥¸¥ç¥ó¤¬ÉÔÌÀ¤Ç¤¹" +msgid "unknown pubkey algorithm" +msgstr "̤ÃΤθø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹" #: util/errors.c:58 -msgid "unknown pubkey algorithm" -msgstr "¸ø³«¸°¤Î¥¢¥ë¥´¥ê¥º¥à¤¬ÉÔÌÀ¤Ç¤¹" +msgid "unknown digest algorithm" +msgstr "̤ÃΤÎÍ×Ì󥢥르¥ê¥º¥à¤Ç¤¹" #: util/errors.c:59 -msgid "unknown digest algorithm" -msgstr "Í×Ìó¤Î¥¢¥ë¥´¥ê¥º¥à¤¬ÉÔÌÀ¤Ç¤¹" - -#: util/errors.c:60 msgid "bad public key" msgstr "¸ø³«¸°¤¬ÉÔÀµ¤Ç¤¹" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "ÈëÌ©¸°¤¬ÉÔÀµ¤Ç¤¹" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "½ð̾¤¬ÉÔÀµ¤Ç¤¹" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" -msgstr "¥Á¥§¥Ã¥¯¥µ¥à¥¨¥é¡¼" +msgstr "¥Á¥§¥Ã¥¯¥µ¥à¡¦¥¨¥é¡¼" + +#: util/errors.c:63 +msgid "bad passphrase" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬ÉÔÀµ¤Ç¤¹" #: util/errors.c:64 -msgid "bad passphrase" -msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" +msgid "public key not found" +msgstr "¸ø³«¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" #: util/errors.c:65 -msgid "public key not found" -msgstr "¸ø³«¸°¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó" +msgid "unknown cipher algorithm" +msgstr "̤ÃΤΰŹ楢¥ë¥´¥ê¥º¥à¤Ç¤¹" #: util/errors.c:66 -msgid "unknown cipher algorithm" -msgstr "°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤¬ÉÔÌÀ¤Ç¤¹" +msgid "can't open the keyring" +msgstr "¸°Îؤ¬³«¤±¤Þ¤»¤ó" #: util/errors.c:67 -msgid "can't open the keyring" -msgstr "¸°¥ê¥ó¥°¤¬³«¤±¤Þ¤»¤ó" - -#: util/errors.c:68 msgid "invalid packet" msgstr "̵¸ú¤Ê¥Ñ¥±¥Ã¥È¤Ç¤¹" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" -msgstr "̵¸ú¤ÊÁõ¹Ã¤Ç¤¹" +msgstr "̵¸ú¤ÊÊñÁõ¤Ç¤¹" + +#: util/errors.c:69 +msgid "no such user id" +msgstr "¤½¤Î¥æ¡¼¥¶¡¼ID¤Ï¤¢¤ê¤Þ¤»¤ó" #: util/errors.c:70 -msgid "no such user id" -msgstr "¤½¤Î¥æ¡¼¥¶ ID ¤Ï¤¢¤ê¤Þ¤»¤ó" +msgid "secret key not available" +msgstr "ÈëÌ©¸°¤¬ÆÀ¤é¤ì¤Þ¤»¤ó" #: util/errors.c:71 -msgid "secret key not available" -msgstr "ÈëÌ©¸°¤¬¤¢¤ê¤Þ¤»¤ó" +msgid "wrong secret key used" +msgstr "¸í¤Ã¤¿ÈëÌ©¸°¤¬ÍѤ¤¤é¤ì¤Æ¤¤¤Þ¤¹" #: util/errors.c:72 -msgid "wrong secret key used" -msgstr "ÉÔÀµ¤ÊÈëÌ©¸°¤¬ÍѤ¤¤é¤ì¤Æ¤¤¤Þ¤¹" - -#: util/errors.c:73 msgid "not supported" msgstr "¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "¸°¤¬ÉÔÀµ¤Ç¤¹" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" -msgstr "¥Õ¥¡¥¤¥ë¤ÎÆɤ߽Ф·¥¨¥é¡¼" +msgstr "¥Õ¥¡¥¤¥ë¤ÎÆɽФ·¥¨¥é¡¼" + +#: util/errors.c:75 +msgid "file write error" +msgstr "¥Õ¥¡¥¤¥ë¤Î½ñ¹þ¤ß¥¨¥é¡¼" #: util/errors.c:76 -msgid "file write error" -msgstr "¥Õ¥¡¥¤¥ë¤Ø¤Î½ñ¤­¹þ¤ß¥¨¥é¡¼" +msgid "unknown compress algorithm" +msgstr "̤ÃΤΰµ½Ì¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹" #: util/errors.c:77 -msgid "unknown compress algorithm" -msgstr "°µ½Ì¥¢¥ë¥´¥ê¥º¥à¤¬ÉÔÌÀ¤Ç¤¹" - -#: util/errors.c:78 msgid "file open error" msgstr "¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" -msgstr "¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó" +msgstr "¥Õ¥¡¥¤¥ë¤ÎºîÀ®¥¨¥é¡¼" + +#: util/errors.c:79 +msgid "invalid passphrase" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬Ìµ¸ú¤Ç¤¹" #: util/errors.c:80 -msgid "invalid passphrase" -msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" +msgid "unimplemented pubkey algorithm" +msgstr "̤¼ÂÁõ¤Î¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹" #: util/errors.c:81 -msgid "unimplemented pubkey algorithm" -msgstr "¸ø³«¸°¤Î¥¢¥ë¥´¥ê¥º¥à¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" +msgid "unimplemented cipher algorithm" +msgstr "̤¼ÂÁõ¤Î°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹" #: util/errors.c:82 -msgid "unimplemented cipher algorithm" -msgstr "°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" +msgid "unknown signature class" +msgstr "̤ÃΤνð̾¥¯¥é¥¹¤Ç¤¹" #: util/errors.c:83 -msgid "unknown signature class" -msgstr "½ð̾¤Î¥¯¥é¥¹¤¬ÉÔÌÀ¤Ç¤¹" - -#: util/errors.c:84 msgid "trust database error" msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¥¨¥é¡¼¤Ç¤¹" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" -msgstr "MPI ¤¬ÉÔÀµ¤Ç¤¹" +msgstr "ÉÔÀµ¤ÊMPI¤Ç¤¹" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "¥ê¥½¡¼¥¹¤¬¸Â³¦¤Ç¤¹" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" -msgstr "¸°¥ê¥ó¥°¤¬Ìµ¸ú¤Ç¤¹" +msgstr "¸°Îؤ¬Ìµ¸ú¤Ç¤¹" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "¾ÚÌÀ½ñ¤¬ÉÔÀµ¤Ç¤¹" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" -msgstr "¥æ¡¼¥¶ ID ¤Î½ñ¼°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" +msgstr "¥æ¡¼¥¶¡¼ID¤Î½ñ¼°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "¥Õ¥¡¥¤¥ë¤¬ÊĤ¸¤é¤ì¤Þ¤»¤ó" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" -msgstr "¥Õ¥¡¥¤¥ë̾¤ÎÊѹ¹¤¬¤Ç¤­¤Þ¤»¤ó" +msgstr "¥Õ¥¡¥¤¥ë̾¤ÎÊѹ¹¥¨¥é¡¼" + +#: util/errors.c:91 +msgid "file delete error" +msgstr "¥Õ¥¡¥¤¥ë¤Îºï½ü¥¨¥é¡¼" #: util/errors.c:92 -msgid "file delete error" -msgstr "¥Õ¥¡¥¤¥ë¤Îºï½ü¤¬¤Ç¤­¤Þ¤»¤ó" +msgid "unexpected data" +msgstr "ͽ´ü¤»¤Ì¥Ç¡¼¥¿¤Ç¤¹" #: util/errors.c:93 -msgid "unexpected data" -msgstr "ͽ´ü¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ç¡¼¥¿¤Ç¤¹" - -#: util/errors.c:94 msgid "timestamp conflict" msgstr "ÆüÉÕ¤¬¾×Æͤ·¤Æ¤¤¤Þ¤¹" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "»ÈÍѤǤ­¤Ê¤¤¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "¥Õ¥¡¥¤¥ë¤¬´û¤Ë¸ºß¤·¤Æ¤¤¤Þ¤¹" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "¼å¤¤¸°¤Ç¤¹" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "̵¸ú¤Ê»ØÄê¤Ç¤¹" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" -msgstr "URI ¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" +msgstr "URI¤¬ÉÔÀµ¤Ç¤¹" + +#: util/errors.c:99 +msgid "unsupported URI" +msgstr "¤½¤ÎURI¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó" #: util/errors.c:100 -msgid "unsupported URI" -msgstr "¤½¤Î URI ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó" - -#: util/errors.c:101 msgid "network error" -msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¥¨¥é¡¼" +msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¡¦¥¨¥é¡¼" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "°Å¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "̤½èÍý" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "»ÈÍѤǤ­¤Ê¤¤¸ø³«¸°¤Ç¤¹" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "»ÈÍѤǤ­¤Ê¤¤ÈëÌ©¸°¤Ç¤¹" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "¸°¥µ¡¼¥Ð¡¼¤Î¥¨¥é¡¼" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... ¥Ð¥°¤Ç¤¹ (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "¥Ð¥°¤ò¸«¤Ä¤±¤¿¤è¤¦¤Ç¤¹ ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" -msgstr "`%s' ¤¬³«¤±¤Þ¤»¤ó: %s\n" +msgstr "`%s'¤¬³«¤±¤Þ¤»¤ó: %s\n" -#: cipher/random.c:325 -#, fuzzy, c-format +#: cipher/random.c:324 +#, c-format msgid "can't stat `%s': %s\n" -msgstr "`%s' ¤¬³«¤±¤Þ¤»¤ó: %s\n" +msgstr "`%s'¤òÄ´¤Ù¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" -msgstr "" +msgstr "`%s' ¤ÏÉáÄ̤Υե¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó - ̵»ë\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" -msgstr "" +msgstr "Ãí°Õ: random_seed ¥Õ¥¡¥¤¥ë¤Ï¶õ¤Ç¤¹\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" -msgstr "" +msgstr "·Ù¹ð: ̵¸ú¤Ê¥µ¥¤¥º¤Î random_seed ¥Õ¥¡¥¤¥ë - »È¤¤¤Þ¤»¤ó\n" -#: cipher/random.c:349 -#, fuzzy, c-format -msgid "can't read `%s': %s\n" -msgstr "`%s' ¤¬³«¤±¤Þ¤»¤ó: %s\n" - -#: cipher/random.c:387 -msgid "note: random_seed file not updated\n" -msgstr "" - -#: cipher/random.c:407 -#, fuzzy, c-format -msgid "can't create `%s': %s\n" -msgstr "%s ¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó: %s\n" - -#: cipher/random.c:414 -#, fuzzy, c-format -msgid "can't write `%s': %s\n" -msgstr "`%s' ¤¬³«¤±¤Þ¤»¤ó: %s\n" - -#: cipher/random.c:417 -#, fuzzy, c-format -msgid "can't close `%s': %s\n" -msgstr "`%s' ¤¬³«¤±¤Þ¤»¤ó: %s\n" - -#: cipher/random.c:428 +#: cipher/random.c:348 #, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" +msgid "can't read `%s': %s\n" +msgstr "`%s'¤òÆɤá¤Þ¤»¤ó: %s\n" -#: cipher/random.c:659 +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "Ãí°Õ: random_seed ¥Õ¥¡¥¤¥ë¤Î¹¹¿·¤ò¤·¤Þ¤»¤ó\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "`%s'¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "`%s'¤Ë½ñ¤±¤Þ¤»¤ó: %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "`%s'¤òÊĤ¸¤é¤ì¤Þ¤»¤ó: %s\n" + +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" -msgstr "·Ù¹ð: °ÂÁ´¤Ç¤Ê¤¤Íð¿ôÀ¸À®ÁõÃÖ¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤¹!!\n" +msgstr "·Ù¹ð: ¤ä¤Ð¤¤Íð¿ôÀ¸À®»Ò¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤¹!!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -305,13 +334,13 @@ msgid "" "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" "\n" msgstr "" -"¤³¤Î OS ¤ËÅëºÜ¤µ¤ì¤Æ¤¤¤ëµ¿»÷Íð¿ôÀ¸À®¥¢¥ë¥´¥ê¥º¥à¤Ï¡¢\n" -"°Å¹æÍѤȤ·¤Æ¤ÏÉÔŬÅö¤Ç¤¹¡£¶¯¸Ç¤ÊÍð¿ô¤òÀ¸À®¤Ç¤­¤Þ¤»¤ó¡£\n" +"ÅëºÜ¤µ¤ì¤Æ¤¤¤ëÍð¿ôÀ¸À®»Ò¤Ï¡¢°Å¹æÍѤȤ·¤Æ¤Ï¤ª¤½¤Þ¤Ä¤Ç¡¢\n" +"¶¯¤¤Íð¿ô¤¬¤Ç¤­¤Þ¤»¤ó!\n" "\n" -"¤³¤Î¥×¥í¥°¥é¥à¤Ë¤è¤êÀ¸À®¤µ¤ì¤¿¥Ç¡¼¥¿¤Ï°ìÀÚ»ÈÍѤ·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó!!\n" +"¤³¤Î¥×¥í¥°¥é¥à¤ÎÀ¸À®¤·¤¿¥Ç¡¼¥¿¤ò°ìÀÚ»ÈÍѤ·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó!!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -319,22 +348,10 @@ msgid "" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" -"½½Ê¬¤ÊŤµ¤ÎÍð¿ô¤¬ÆÀ¤é¤ì¤Þ¤»¤ó¡£¥¨¥ó¥È¥í¥Ô¡¼¤òÁý²Ã¤µ¤»¤ë¤è¤¦¤Ë\n" -"OS ¤ÎÀßÄê¤òÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£(%d bytes °Ê¾å¤Î¼þ´ü¤¬É¬ÍפǤ¹)\n" +"½½Ê¬¤ÊŤµ¤ÎÍð¿ô¤¬ÆÀ¤é¤ì¤Þ¤»¤ó¡£OS¤¬¤â¤Ã¤ÈÍ𻨤µ¤ò¼ý½¸\n" +"¤Ç¤­¤ë¤è¤¦¡¢²¿¤«¤·¤Æ¤¯¤À¤µ¤¤! (¤¢¤È%d¥Ð¥¤¥È¤¤¤ê¤Þ¤¹)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "·Ù¹ð: °ÂÁ´¤Ç¤Ê¤¤¥á¥â¥ê¡¼¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "½é´ü²½¤µ¤ì¤¿°ÂÁ´¤Ê¥á¥â¥ê¡¼¤¬Ìµ¤¤¾ì¹ç¤Ë¤Ï¼Â¹Ô¤Ç¤­¤Þ¤»¤ó\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(¤³¤ÎÌÜŪ¤Ë¤ÏÉÔŬÀÚ¤Ê¥×¥í¥°¥é¥à¤òÍѤ¤¤¿¤Î¤Ç¤·¤ç¤¦)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:281 msgid "" "@Commands:\n" " " @@ -342,139 +359,165 @@ msgstr "" "@¥³¥Þ¥ó¥É:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:283 msgid "|[file]|make a signature" -msgstr "|[file]|½ð̾¤òºîÀ®" +msgstr "|[¥Õ¥¡¥¤¥ë]|½ð̾¤òºîÀ®" -#: g10/gpg.c:204 +#: g10/g10.c:284 msgid "|[file]|make a clear text signature" -msgstr "|[file]|¥¯¥ê¥¢½ð̾¤òºîÀ®" +msgstr "|[¥Õ¥¡¥¤¥ë]|¥¯¥ê¥¢½ð̾¤òºîÀ®" -#: g10/gpg.c:205 +#: g10/g10.c:285 msgid "make a detached signature" msgstr "ʬΥ½ð̾¤òºîÀ®" -#: g10/gpg.c:206 +#: g10/g10.c:286 msgid "encrypt data" msgstr "¥Ç¡¼¥¿¤ò°Å¹æ²½" -#: g10/gpg.c:207 +#: g10/g10.c:287 +msgid "|[files]|encrypt files" +msgstr "|[¥Õ¥¡¥¤¥ë·²]|¥Õ¥¡¥¤¥ë·²¤ò°Å¹æ²½" + +#: g10/g10.c:288 msgid "encryption only with symmetric cipher" msgstr "°Å¹æ²½¤Ë¤ÏÂоΰŹæË¡¤Î¤ß¤ò»ÈÍÑ" -#: g10/gpg.c:208 +#: g10/g10.c:289 msgid "store only" msgstr "Êݸ¤Î¤ß" -#: g10/gpg.c:209 +#: g10/g10.c:290 msgid "decrypt data (default)" -msgstr "¥Ç¡¼¥¿¤òÉü¹æ (¥Ç¥Õ¥©¥ë¥È)" +msgstr "¥Ç¡¼¥¿¤òÉü¹æ (´ûÄê)" -#: g10/gpg.c:210 +#: g10/g10.c:291 +msgid "|[files]|decrypt files" +msgstr "|[¥Õ¥¡¥¤¥ë·²]|¥Õ¥¡¥¤¥ë·²¤òÉü¹æ" + +#: g10/g10.c:292 msgid "verify a signature" msgstr "½ð̾¤ò¸¡¾Ú" -#: g10/gpg.c:212 +#: g10/g10.c:294 msgid "list keys" msgstr "¸°¤Î°ìÍ÷" -#: g10/gpg.c:214 +#: g10/g10.c:296 msgid "list keys and signatures" msgstr "¸°¤È½ð̾¤Î°ìÍ÷" -#: g10/gpg.c:215 +#: g10/g10.c:297 msgid "check key signatures" msgstr "¸°¤Î½ð̾¤ò¸¡¾Ú" -#: g10/gpg.c:216 +#: g10/g10.c:298 msgid "list keys and fingerprints" msgstr "¸°¤È»ØÌæ¤Î°ìÍ÷" -#: g10/gpg.c:217 +#: g10/g10.c:299 msgid "list secret keys" msgstr "ÈëÌ©¸°¤Î°ìÍ÷" -#: g10/gpg.c:218 +#: g10/g10.c:300 msgid "generate a new key pair" -msgstr "¿·¤·¤¤¸°¥Ú¥¢¤òºîÀ®" +msgstr "¿·¤·¤¤¸°ÂФòÀ¸À®" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" -msgstr "¸ø³«¸°¥ê¥ó¥°¤«¤é¸°¤òºï½ü" +#: g10/g10.c:301 +msgid "remove keys from the public keyring" +msgstr "¸ø³«¸°Îؤ«¤é¸°·²¤òºï½ü" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" -msgstr "ÈëÌ©¸°¥ê¥ó¥°¤«¤é¸°¤òºï½ü" +#: g10/g10.c:303 +msgid "remove keys from the secret keyring" +msgstr "ÈëÌ©¸°Îؤ«¤é¸°·²¤òºï½ü" -#: g10/gpg.c:222 +#: g10/g10.c:304 msgid "sign a key" msgstr "¸°¤Ë½ð̾" -#: g10/gpg.c:223 +#: g10/g10.c:305 msgid "sign a key locally" -msgstr "¥í¡¼¥«¥ë¤Ë¤Æ¸°¤Ë½ð̾" +msgstr "¸°¤ØÆâÉôŪ¤Ë½ð̾" -#: g10/gpg.c:224 +#: g10/g10.c:306 +msgid "sign a key non-revocably" +msgstr "ÇË´þ¤Ç¤­¤Ê¤¤¤è¤¦¸°¤Ë½ð̾" + +#: g10/g10.c:307 +msgid "sign a key locally and non-revocably" +msgstr "ÇË´þ¤Ç¤­¤Ê¤¤¤è¤¦¸°¤ØÆâÉôŪ¤Ë½ð̾" + +#: g10/g10.c:308 msgid "sign or edit a key" -msgstr "¸°¤Ø¤Î½ð̾¤Þ¤¿¤ÏÊÔ½¸" +msgstr "¸°¤Ø¤Î½ð̾¤äÊÔ½¸" -#: g10/gpg.c:225 +#: g10/g10.c:309 msgid "generate a revocation certificate" -msgstr "ÇË´þ¾ÚÌÀ½ñ¤òºîÀ®" +msgstr "ÇË´þ¾ÚÌÀ½ñ¤òÀ¸À®" -#: g10/gpg.c:226 +#: g10/g10.c:310 msgid "export keys" msgstr "¸°¤ò½ñ¤­½Ð¤¹" -#: g10/gpg.c:227 +#: g10/g10.c:311 msgid "export keys to a key server" -msgstr "¸°¥µ¡¼¥Ð¤Ë¸°¤òÅÐÏ¿" +msgstr "¸°¥µ¡¼¥Ð¡¼¤Ë¸°¤ò½ñ¤­½Ð¤¹" -#: g10/gpg.c:228 +#: g10/g10.c:312 msgid "import keys from a key server" msgstr "¸°¥µ¡¼¥Ð¡¼¤«¤é¸°¤òÆɤ߹þ¤à" -#: g10/gpg.c:232 -msgid "import/merge keys" -msgstr "¸°¤ÎÆɤ߹þ¤ß/¥Þ¡¼¥¸" +#: g10/g10.c:314 +msgid "search for keys on a key server" +msgstr "¸°¥µ¡¼¥Ð¡¼¤Î¸°¤ò¸¡º÷¤¹¤ë" -#: g10/gpg.c:234 +#: g10/g10.c:316 +msgid "update all keys from a keyserver" +msgstr "¸°¥µ¡¼¥Ð¡¼¤«¤é¸°¤òÁ´Éô¹¹¿·¤¹¤ë" + +#: g10/g10.c:320 +msgid "import/merge keys" +msgstr "¸°¤ÎÆɹþ¤ß/Ê»¹ç" + +#: g10/g10.c:322 msgid "list only the sequence of packets" msgstr "¥Ñ¥±¥Ã¥ÈÎó¤Î¤ß¤Î°ìÍ÷" -#: g10/gpg.c:236 +#: g10/g10.c:324 msgid "export the ownertrust values" msgstr "½êÍ­¼Ô¤ò¿®ÍѤ·¤¿Ãͤò½ñ¤­½Ð¤¹" -#: g10/gpg.c:238 +#: g10/g10.c:326 msgid "import ownertrust values" msgstr "½êÍ­¼Ô¤ò¿®ÍѤ·¤¿ÃͤòÆɤ߹þ¤à" -#: g10/gpg.c:240 +#: g10/g10.c:328 msgid "update the trust database" msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ò¹¹¿·" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NAMES]|¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ò¥Á¥§¥Ã¥¯" +#: g10/g10.c:330 +msgid "unattended trust database update" +msgstr "¼êÅö¤Æ¤·¤Æ¤Ê¤¤¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ò¹¹¿·" -#: g10/gpg.c:243 +#: g10/g10.c:331 msgid "fix a corrupted trust database" msgstr "²õ¤ì¤¿¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ò½¤Éü" -#: g10/gpg.c:244 +#: g10/g10.c:332 msgid "De-Armor a file or stdin" -msgstr "¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ïɸ½àÆþÎϤÎÁõ¹Ã½üµî" +msgstr "" +"¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ïɸ½àÆþÎϤÎ\n" +"ÊñÁõ½üµî" -#: g10/gpg.c:246 +#: g10/g10.c:334 msgid "En-Armor a file or stdin" -msgstr "¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ïɸ½àÆþÎϤÎÁõ¹Ã²½" +msgstr "¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ïɸ½àÆþÎϤÎÊñÁõ²½" -#: g10/gpg.c:248 +#: g10/g10.c:336 msgid "|algo [files]|print message digests" -msgstr "|algo [files]|¥á¥Ã¥»¡¼¥¸Í×Ìó¤ò½ÐÎÏ" +msgstr "|¥¢¥ë¥´¥ê¥º¥à [¥Õ¥¡¥¤¥ë]|¥á¥Ã¥»¡¼¥¸Í×Ìó¤ò½ÐÎÏ" -#: g10/gpg.c:253 +#: g10/g10.c:340 msgid "" "@\n" "Options:\n" @@ -484,162 +527,247 @@ msgstr "" "¥ª¥×¥·¥ç¥ó:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:342 msgid "create ascii armored output" -msgstr "¥¢¥¹¥­¡¼·Á¼°¤ÎÁõ¹Ã¤òÀ¸À®" +msgstr "ASCII·Á¼°¤ÎÊñÁõ¤òºîÀ®" -#: g10/gpg.c:257 +#: g10/g10.c:344 msgid "|NAME|encrypt for NAME" -msgstr "|NAME|NAME ÍѤ˰Ź沽" +msgstr "|̾Á°|¡Ö̾Á°¡×ÍѤ˰Ź沽" -#: g10/gpg.c:260 +#: g10/g10.c:347 msgid "|NAME|use NAME as default recipient" -msgstr "|NAME|¥Ç¥Õ¥©¥ë¥È¤Î¼õ¿®¼Ô¤È¤·¤Æ NAME ¤òÍѤ¤¤ë" +msgstr "" +"|̾Á°|´ûÄê¤Î¼õ¿®¼Ô¤È¤·¤Æ\n" +"¡Ö̾Á°¡×¤ò»ÈÍÑ" -#: g10/gpg.c:262 +#: g10/g10.c:349 msgid "use the default key as default recipient" -msgstr "¥Ç¥Õ¥©¥ë¥È¤Î¼õ¿®¼Ô¤È¤·¤Æ¥Ç¥Õ¥©¥ë¥È¤Î¸°¤òÍѤ¤¤ë" +msgstr "´ûÄê¤Î¼õ¿®¼Ô¤Ë´ûÄê¤Î¸°¤ò»ÈÍÑ" -#: g10/gpg.c:266 +#: g10/g10.c:355 msgid "use this user-id to sign or decrypt" -msgstr "½ð̾¤äÉü¹æ¤Ë ¤³¤Î user-id ¤òÍѤ¤¤ë" +msgstr "" +"½ð̾¤äÉü¹æ¤Ë¤³¤Î¥æ¡¼¥¶¡¼id\n" +"¤ò»ÈÍÑ" -#: g10/gpg.c:267 +#: g10/g10.c:356 msgid "|N|set compress level N (0 disables)" -msgstr "|N|°µ½Ì¥ì¥Ù¥ë¤ò N ¤ËÀßÄꤹ¤ë (0 ¤ÏÈó°µ½Ì)" +msgstr "" +"|N|°µ½Ì¥ì¥Ù¥ë¤òN¤ËÀßÄê\n" +"(0¤ÏÈó°µ½Ì)" -#: g10/gpg.c:269 +#: g10/g10.c:358 msgid "use canonical text mode" -msgstr "ɸ½à¥Æ¥­¥¹¥È¥â¡¼¥É¤òÍѤ¤¤ë" +msgstr "Àµ½à¥Æ¥­¥¹¥È¡¦¥â¡¼¥É¤ò»ÈÍÑ" -#: g10/gpg.c:270 +#: g10/g10.c:365 msgid "use as output file" -msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë¤È¤·¤ÆÍѤ¤¤ë" +msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë¤È¤·¤Æ»ÈÍÑ" -#: g10/gpg.c:271 +#: g10/g10.c:366 msgid "verbose" msgstr "¾éĹ" -#: g10/gpg.c:272 +#: g10/g10.c:367 msgid "be somewhat more quiet" msgstr "¤ä¤äÀŤ«" -#: g10/gpg.c:273 +#: g10/g10.c:368 msgid "don't use the terminal at all" -msgstr "üËö¤ò»ÈÍѤ·¤Ê¤¤" +msgstr "üËö¤òÉÔ»ÈÍÑ" -#: g10/gpg.c:274 +#: g10/g10.c:369 msgid "force v3 signatures" -msgstr "¶¯À©Åª¤Ë v3 ½ð̾¤¹¤ë" +msgstr "¶¯À©Åª¤Ëv3½ð̾" -#: g10/gpg.c:275 +#: g10/g10.c:370 +msgid "do not force v3 signatures" +msgstr "v3½ð̾¤ò¶¯À©¤·¤Ê¤¤" + +#: g10/g10.c:371 +msgid "force v4 key signatures" +msgstr "¶¯À©Åª¤Ëv4½ð̾" + +#: g10/g10.c:372 +msgid "do not force v4 key signatures" +msgstr "v4½ð̾¤ò¶¯À©¤·¤Ê¤¤" + +#: g10/g10.c:373 msgid "always use a MDC for encryption" -msgstr "°Å¹æ²½¤Ë¤Ï¾ï¤Ë MDC ¤ò»ÈÍÑ" +msgstr "°Å¹æ²½¤Ë¤Ï¾ï¤ËMDC¤ò»ÈÍÑ" -#: g10/gpg.c:276 +#: g10/g10.c:375 +msgid "never use a MDC for encryption" +msgstr "°Å¹æ²½¤Ë¤ÏÀäÂФËMDC¤ò»ÈÍѤ·¤Ê¤¤" + +#: g10/g10.c:377 msgid "do not make any changes" -msgstr "Á´¤Æ¤ÎÊѹ¹¤òÍѤ¤¤Ê¤¤" +msgstr "̵Êѹ¹" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:379 msgid "use the gpg-agent" -msgstr "" +msgstr "gpg¥¨¡¼¥¸¥§¥ó¥È¤ò»ÈÍÑ" -#: g10/gpg.c:279 +#: g10/g10.c:382 msgid "batch mode: never ask" -msgstr "¥Ð¥Ã¥Á¥â¡¼¥É: Ì䤤¹ç¤ï¤»¤ò¹Ô¤ï¤Ê¤¤" +msgstr "¥Ð¥Ã¥Á¡¦¥â¡¼¥É: ³Îǧ¾Êά" -#: g10/gpg.c:280 +#: g10/g10.c:383 msgid "assume yes on most questions" -msgstr "Á´¤Æ¤Î¼ÁÌä¤Ë yes ¤È¸«¤Ê¤¹" - -#: g10/gpg.c:281 -msgid "assume no on most questions" -msgstr "Á´¤Æ¤Î¼ÁÌä¤Ë no ¤È¸«¤Ê¤¹" - -#: g10/gpg.c:282 -msgid "add this keyring to the list of keyrings" -msgstr "¸°¥ê¥ó¥°¤Î°ìÍ÷¤Ë ¤³¤Î¸°¤ò²Ã¤¨¤ë" - -#: g10/gpg.c:283 -msgid "add this secret keyring to the list" -msgstr "°ìÍ÷¤Ë ¤³¤ÎÈëÌ©¸°¥ê¥ó¥°¤ò²Ã¤¨¤ë" - -#: g10/gpg.c:284 -msgid "|NAME|use NAME as default secret key" -msgstr "|NAME|¥Ç¥Õ¥©¥ë¥È¤ÎÈëÌ©¸°¤È¤·¤Æ NAME ¤òÍѤ¤¤ë" - -#: g10/gpg.c:285 -msgid "|HOST|use this keyserver to lookup keys" -msgstr "|HOST|¸°¤Î¸¡º÷¤Ë ¤³¤Î¸°¥µ¡¼¥Ð¤òÍѤ¤¤ë" - -#: g10/gpg.c:286 -msgid "|NAME|set terminal charset to NAME" -msgstr "|NAME|üËö¤Îʸ»ú¥³¡¼¥É¤ò NAME ¤ËÀßÄꤹ¤ë" - -#: g10/gpg.c:287 -msgid "read options from file" -msgstr "¥Õ¥¡¥¤¥ë¤«¤é¥ª¥×¥·¥ç¥ó¤òÆɤ߹þ¤à" - -#: g10/gpg.c:291 -msgid "|FD|write status info to this FD" -msgstr "|FD|¤³¤Î FD ¤Ë¾õÂÖ¤ò½ñ¤­½Ð¤¹" - -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" msgstr "" +"¤¿¤¤¤Æ¤¤¤Î¼ÁÌä¤ÎÅú¤¨¤Ïyes\n" +"¤È¤ß¤Ê¤¹" -#: g10/gpg.c:297 +#: g10/g10.c:384 +msgid "assume no on most questions" +msgstr "" +"¤¿¤¤¤Æ¤¤¤Î¼ÁÌä¤ÎÅú¤¨¤Ïno\n" +"¤È¤ß¤Ê¤¹" + +#: g10/g10.c:385 +msgid "add this keyring to the list of keyrings" +msgstr "¸°ÎؤΰìÍ÷¤Ë¤³¤Î¸°ÎؤòÄɲÃ" + +#: g10/g10.c:386 +msgid "add this secret keyring to the list" +msgstr "°ìÍ÷¤Ë¤³¤ÎÈëÌ©¸°ÎؤòÄɲÃ" + +#: g10/g10.c:387 +msgid "show which keyring a listed key is on" +msgstr "°ìÍ÷¤Î¸°¤¬¤¢¤ë¸°Îؤòɽ¼¨" + +#: g10/g10.c:388 +msgid "|NAME|use NAME as default secret key" +msgstr "" +"|̾Á°|´ûÄê¤ÎÈëÌ©¸°¤È¤·¤Æ\n" +"¡Ö̾Á°¡×¤ò»ÈÍÑ" + +#: g10/g10.c:389 +msgid "|HOST|use this keyserver to lookup keys" +msgstr "|¥Û¥¹¥È|¸°¤Î¸¡º÷¤Ë¤³¤Î¸°¥µ¡¼¥Ð¡¼¤ò»ÈÍÑ" + +#: g10/g10.c:391 +msgid "|NAME|set terminal charset to NAME" +msgstr "" +"|CHARSET̾|üËö¤Îcharset¤ò¡ÖCHARSET̾¡×\n" +"¤ËÀßÄê" + +#: g10/g10.c:392 +msgid "read options from file" +msgstr "" +"¥Õ¥¡¥¤¥ë¤«¤é¥ª¥×¥·¥ç¥ó¤ò\n" +"Æɤ߹þ¤à" + +#: g10/g10.c:396 +msgid "|FD|write status info to this FD" +msgstr "" +"|¥Õ¥¡¥¤¥ëµ­½Ò»Ò|¤³¤Î¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Ë¾õÂÖ¤ò\n" +"½ñ¤­½Ð¤¹" + +#: g10/g10.c:398 +msgid "|[file]|write status info to file" +msgstr "" +"|¥Õ¥¡¥¤¥ë|¥¹¥Æ¡¼¥¿¥¹¾ðÊó¤ò¥Õ¥¡¥¤¥ë¤Ë\n" +"½ñ¤­½Ð¤¹" + +#: g10/g10.c:404 +msgid "|KEYID|ultimately trust this key" +msgstr "|¸°ID|¤³¤Î¸°¤òµæ¶ËŪ¤Ë¿®ÍѤ¹¤ë" + +#: g10/g10.c:405 msgid "|FILE|load extension module FILE" -msgstr "|FILE|³ÈÄ¥¥â¥¸¥å¡¼¥ë FILE ¤òÆɤߤ³¤à" +msgstr "" +"|¥Õ¥¡¥¤¥ë|³ÈÄ¥¥â¥¸¥å¡¼¥ë¤Î¥Õ¥¡¥¤¥ë¤ò\n" +"Æɤ߹þ¤à" -#: g10/gpg.c:298 +#: g10/g10.c:406 msgid "emulate the mode described in RFC1991" -msgstr "RFC1991 ¤Ëµ­½Ò¤µ¤ì¤¿¥â¡¼¥É¤òÍѤ¤¤ë" +msgstr "" +"RFC1991¤Ëµ­½Ò¤µ¤ì¤¿¥â¡¼¥É¤ò\n" +"»ÈÍÑ" -#: g10/gpg.c:299 +#: g10/g10.c:407 msgid "set all packet, cipher and digest options to OpenPGP behavior" -msgstr "Á´¤Æ¤Î¥Ñ¥±¥Ã¥È¤È°Å¹æ¤È½ð̾¤Î¥ª¥×¥·¥ç¥ó¤ò OpenPGP ¤Î¿¶Éñ¤ËÀßÄê" +msgstr "" +"¥Ñ¥±¥Ã¥È¤È°Å¹æ¤È½ð̾¤Î¥ª¥×¥·¥ç\n" +"¥ó¤òÁ´¤ÆOpenPGP¤Î¿¶Éñ¤ËÀßÄê" -#: g10/gpg.c:300 +#: g10/g10.c:408 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"¥Ñ¥±¥Ã¥È¤È°Å¹æ¤ÈÍ×Ìó¤Î¥ª¥×¥·¥ç\n" +"¥ó¤òÁ´¤ÆPGP 2.x¤Î¿¶Éñ¤ËÀßÄê" + +#: g10/g10.c:412 msgid "|N|use passphrase mode N" -msgstr "|N|¥Ñ¥¹¥Õ¥ì¡¼¥º¥â¡¼¥É N ¤òÍѤ¤¤ë" +msgstr "|N|¥Ñ¥¹¥Õ¥ì¡¼¥º¡¦¥â¡¼¥ÉN¤ò»ÈÍÑ" -#: g10/gpg.c:302 +#: g10/g10.c:414 msgid "|NAME|use message digest algorithm NAME for passphrases" -msgstr "|NAME|¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ë¥á¥Ã¥»¡¼¥¸Í×Ì󥢥르¥ê¥º¥à NAME ¤òÍѤ¤¤ë" +msgstr "" +"|̾Á°|¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ë¡Ö̾Á°¡×¤Î¥á¥Ã\n" +"¥»¡¼¥¸Í×Ì󥢥르¥ê¥º¥à¤ò»ÈÍÑ" -#: g10/gpg.c:304 +#: g10/g10.c:416 msgid "|NAME|use cipher algorithm NAME for passphrases" -msgstr "|NAME|¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ë°Å¹æ¥¢¥ë¥´¥ê¥º¥à NAME ¤òÍѤ¤¤ë" +msgstr "" +"|̾Á°|¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ë¡Ö̾Á°¡×¤Î°Å¹æ\n" +"¥¢¥ë¥´¥ê¥º¥à¤ò»ÈÍÑ" -#: g10/gpg.c:305 +#: g10/g10.c:418 msgid "|NAME|use cipher algorithm NAME" -msgstr "|NAME|°Å¹æ¥¢¥ë¥´¥ê¥º¥à NAME ¤òÍѤ¤¤ë" +msgstr "" +"|̾Á°|¡Ö̾Á°¡×¤Î°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤ò\n" +"»ÈÍÑ" -#: g10/gpg.c:306 +#: g10/g10.c:419 msgid "|NAME|use message digest algorithm NAME" -msgstr "|NAME|¥á¥Ã¥»¡¼¥¸Í×Ì󥢥르¥ê¥º¥à NAME ¤òÍѤ¤¤ë" +msgstr "" +"|̾Á°|¡Ö̾Á°¡×¤Î¥á¥Ã¥»¡¼¥¸Í×Ìó\n" +"¥¢¥ë¥´¥ê¥º¥à¤ò»ÈÍÑ" -#: g10/gpg.c:307 +#: g10/g10.c:420 msgid "|N|use compress algorithm N" -msgstr "|NAME|°µ½Ì¥¢¥ë¥´¥ê¥º¥à NAME ¤òÍѤ¤¤ë" +msgstr "" +"|̾Á°|¡Ö̾Á°¡×¤Î°µ½Ì¥¢¥ë¥´¥ê¥º¥à¤ò\n" +"»ÈÍÑ" -#: g10/gpg.c:308 +#: g10/g10.c:421 msgid "throw keyid field of encrypted packets" -msgstr "°Å¹æ¥Ñ¥±¥Ã¥È¤Î¸° ID ¥Õ¥£¡¼¥ë¥É¤òÁ÷½Ð¤¹¤ë" +msgstr "" +"°Å¹æ¥Ñ¥±¥Ã¥È¤Î¸°ID¥Õ¥£¡¼¥ë¥É\n" +"¤òÁ÷½Ð" -#: g10/gpg.c:309 +#: g10/g10.c:422 +msgid "Show Photo IDs" +msgstr "¥Õ¥©¥ÈID¤òɽ¼¨" + +#: g10/g10.c:423 +msgid "Don't show Photo IDs" +msgstr "¥Õ¥©¥ÈID¤òɽ¼¨¤·¤Ê¤¤" + +#: g10/g10.c:424 +msgid "Set command line to view Photo IDs" +msgstr "" +"¥Õ¥©¥ÈID¤ò±ÜÍ÷¤¹¤ë¥³¥Þ¥ó¥É¹Ô\n" +"¤òÀßÄê" + +#: g10/g10.c:425 msgid "|NAME=VALUE|use this notation data" -msgstr "|NAME=VALUE|¤³¤ÎÃí¼á¥Ç¡¼¥¿¤òÍѤ¤¤ë" +msgstr "|̾Á°=ÃÍ|¤³¤ÎÃí¼á¥Ç¡¼¥¿¤ò»ÈÍÑ" -#: g10/gpg.c:312 +#: g10/g10.c:428 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" +"@\n" +"(¥³¥Þ¥ó¥É¤È¥ª¥×¥·¥ç¥óÁ´Éô¤Î°ìÍ÷¤Ï¡¢\n" +"¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸¤ò¤´Í÷¤¯¤À¤µ¤¤)\n" -#: g10/gpg.c:315 +#: g10/g10.c:431 msgid "" "@\n" "Examples:\n" @@ -653,31 +781,31 @@ msgstr "" "@\n" "Îã:\n" "\n" -" -se -r Bob [file] ¥æ¡¼¥¶ Bob ¤Ø¤Î½ð̾¤È°Å¹æ²½\n" -" --clearsign [file] ¥¯¥ê¥¢½ð̾¤òÀ¸À®\n" -" --detach-sign [file] ʬΥ½ð̾¤òÀ¸À®\n" -" --list-keys [names] ¸°¤òɽ¼¨\n" -" --fingerprint [names] »ØÌæ¤òɽ¼¨\n" +" -se -r Bob [¥Õ¥¡¥¤¥ë] ¥æ¡¼¥¶¡¼Bob¤Ø¤Î½ð̾¤È°Å¹æ²½\n" +" --clearsign [¥Õ¥¡¥¤¥ë] ¥¯¥ê¥¢½ð̾¤òÀ¸À®\n" +" --detach-sign [¥Õ¥¡¥¤¥ë] ʬΥ½ð̾¤òÀ¸À®\n" +" --list-keys [̾Á°] ¸°¤òɽ¼¨\n" +" --fingerprint [̾Á°] »ØÌæ¤òɽ¼¨\n" -#: g10/gpg.c:417 +#: g10/g10.c:567 msgid "Please report bugs to .\n" -msgstr "¥Ð¥°¤ò¸«¤Ä¤±¤¿¤é ¤Þ¤Ç¥ì¥Ý¡¼¥È¤òÁ÷¤Ã¤Æ²¼¤µ¤¤¡£\n" +msgstr "¥Ð¥°¤ò¸«¤Ä¤±¤¿¤é ¤Þ¤Ç¤´Êó¹ð¤¯¤À¤µ¤¤¡£\n" -#: g10/gpg.c:421 +#: g10/g10.c:571 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "»È¤¤Êý: gpg [¥ª¥×¥·¥ç¥ó] [¥Õ¥¡¥¤¥ë] (¥Ø¥ë¥×¤Ï -h)" -#: g10/gpg.c:424 +#: g10/g10.c:574 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" -"½ñ¼°: gpg [options] [files]\n" -"½ð̾¡¢¸¡¾Ú¡¢°Å¹æ²½¡¢¤Þ¤¿¤Ï Éü¹æ\n" -"¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤ÏÆþÎϥǡ¼¥¿¤Ë°Í¸\n" +"½ñ¼°: gpg [¥ª¥×¥·¥ç¥ó] [¥Õ¥¡¥¤¥ë]\n" +"½ð̾¡¢¸¡¾Ú¡¢°Å¹æ²½¤äÉü¹æ\n" +"´ûÄê¤ÎÆ°ºî¤Ï¡¢ÆþÎϥǡ¼¥¿¤Ë°Í¸\n" -#: g10/gpg.c:431 +#: g10/g10.c:585 msgid "" "\n" "Supported algorithms:\n" @@ -685,627 +813,687 @@ msgstr "" "\n" "¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¥¢¥ë¥´¥ê¥º¥à:\n" -#: g10/gpg.c:537 +#: g10/g10.c:659 msgid "usage: gpg [options] " -msgstr "»È¤¤Êý: gpg [options] " +msgstr "»È¤¤Êý: gpg [¥ª¥×¥·¥ç¥ó] " -#: g10/gpg.c:595 +#: g10/g10.c:716 msgid "conflicting commands\n" msgstr "¥³¥Þ¥ó¥É¤Î¾×ÆÍ\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:891 #, c-format msgid "NOTE: no default option file `%s'\n" -msgstr "Ãí°Õ: ¥Ç¥Õ¥©¥ë¥È¥ª¥×¥·¥ç¥ó¥Õ¥¡¥¤¥ë `%s' ¤¬¤¢¤ê¤Þ¤»¤ó\n" +msgstr "Ãí°Õ: ´ûÄê¤Î¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë`%s'¤¬¤¢¤ê¤Þ¤»¤ó\n" -#: g10/gpg.c:747 +#: g10/g10.c:895 #, c-format msgid "option file `%s': %s\n" -msgstr "¥ª¥×¥·¥ç¥ó¥Õ¥¡¥¤¥ë `%s': %s\n" +msgstr "¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë`%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:902 #, c-format msgid "reading options from `%s'\n" -msgstr "`%s' ¤«¤é¥ª¥×¥·¥ç¥ó¤òÆɤ߹þ¤ß¤Þ¤¹\n" +msgstr "`%s'¤«¤é¥ª¥×¥·¥ç¥ó¤òÆɤ߹þ¤ß¤Þ¤¹\n" -#: g10/gpg.c:946 +#: g10/g10.c:1185 #, c-format msgid "%s is not a valid character set\n" -msgstr "%s ¤ÏÀµ¤·¤¤Ê¸»ú¥³¡¼¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" +msgstr "%s¤ÏÀµ¤·¤¤Ê¸»ú½¸¹ç¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1202 +msgid "could not parse keyserver URI\n" +msgstr "¸°¥µ¡¼¥Ð¡¼¤ÎURI¤ò²òÀÏÉÔǽ\n" + +#: g10/g10.c:1216 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "exec-path¤ò%s¤ËÀßÄêÉÔǽ\n" + +#: g10/g10.c:1239 g10/g10.c:1255 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "·Ù¹ð: %s¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤ë¥ª¥×¥·¥ç¥ó¤Ç¤¹¡£\n" + +#: g10/g10.c:1241 g10/g10.c:1258 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "\"--keyserver-options %s\"¤òÂå¤ï¤ê¤Ë»È¤Ã¤Æ¤¯¤À¤µ¤¤\n" + +#: g10/g10.c:1329 msgid "WARNING: program may create a core file!\n" -msgstr "·Ù¹ð: ¥×¥í¥°¥é¥à¤Ï¥³¥¢¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Þ¤¹!\n" +msgstr "·Ù¹ð: ¥×¥í¥°¥é¥à¤Î¥³¥¢¡¦¥Õ¥¡¥¤¥ë¤¬¤Ç¤­¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1333 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "·Ù¹ð: %s¤Ï%s¤è¤êÍ¥Àè\n" + +#: g10/g10.c:1340 g10/g10.c:1351 #, c-format msgid "NOTE: %s is not for normal use!\n" -msgstr "Ãí°Õ: %s ¤ÏÄ̾ï¤ÏÍѤ¤¤Þ¤»¤ó!\n" +msgstr "Ãí°Õ: ÉáÄÌ%s¤ÏÍѤ¤¤Þ¤»¤ó!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1342 g10/g10.c:1362 #, c-format msgid "%s not allowed with %s!\n" -msgstr "%s ¤Ï %s ¤È¶¦¤ËÍѤ¤¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó!\n" +msgstr "%s¤Ï%s¤È¤È¤â¤ËÍѤ¤¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1345 #, c-format msgid "%s makes no sense with %s!\n" -msgstr "%s ¤Ï %s ¤È¶¦¤ËÍѤ¤¤Æ¤â°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó!\n" +msgstr "%s¤Ï%s¤È¤È¤â¤ËÍѤ¤¤Æ¤â̵°ÕÌ£¤Ç¤¹!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1371 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "--pgp2¥â¡¼¥É¤Ç¤ÏʬΥ½ð̾¤«¥¯¥ê¥¢½ð̾¤À¤±¤·¤«¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/g10.c:1377 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "--pgp2¥â¡¼¥É¤Ç¤Ï½ð̾¤È°Å¹æ¤òƱ»þ¤Ë¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/g10.c:1383 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "--pgp2¤ò»ØÄꤷ¤¿¤é¡¢(¥Ñ¥¤¥×¤Ç¤Ê¤¯) ¥Õ¥¡¥¤¥ë¤ò»ØÄꤻ¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó¡£\n" + +#: g10/g10.c:1396 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "--pgp2¥â¡¼¥É¤Î¥á¥Ã¥»¡¼¥¸°Å¹æ²½¤Ç¤ÏIDEA°Å¹æ¤¬Í׵ᤵ¤ì¤Þ¤¹ \n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1410 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤ÏPGP 2.x¤Ç¤Ï»ÈÍѤǤ­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó\n" + +#: g10/g10.c:1451 g10/g10.c:1463 msgid "selected cipher algorithm is invalid\n" msgstr "ÁªÂò¤µ¤ì¤¿°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤Ï̵¸ú¤Ç¤¹\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1457 g10/g10.c:1469 msgid "selected digest algorithm is invalid\n" msgstr "ÁªÂò¤µ¤ì¤¿Í×Ì󥢥르¥ê¥º¥à¤Ï̵¸ú¤Ç¤¹\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "Í¿¤¨¤é¤ì¤¿¥Ý¥ê¥·¡¼ URL ¤Ï̵¸ú¤Ç¤¹\n" +#: g10/g10.c:1473 +msgid "the given signature policy URL is invalid\n" +msgstr "¤¢¤¿¤¨¤é¤ì¤¿½ð̾¥Ý¥ê¥·¡¼URL¤Ï̵¸ú¤Ç¤¹\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1477 +msgid "the given certification policy URL is invalid\n" +msgstr "¤¢¤¿¤¨¤é¤ì¤¿¾ÚÌÀ½ñ¥Ý¥ê¥·¡¼URL¤Ï̵¸ú¤Ç¤¹\n" + +#: g10/g10.c:1480 #, c-format msgid "compress algorithm must be in range %d..%d\n" -msgstr "°µ½Ì¥¢¥ë¥´¥ê¥º¥à¤Ï %d..%d ¤ÎÈϰϤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" +msgstr "°µ½Ì¥¢¥ë¥´¥ê¥º¥à¤Ï%d..%d¤ÎÈϰϤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1482 msgid "completes-needed must be greater than 0\n" -msgstr "completes-needed ¤Ï 0 ¤è¤êÂ礭¤ÊÃͤ¬É¬ÍפǤ¹\n" +msgstr "completes-needed¤ÏÀµ¤ÎÃͤ¬É¬ÍפǤ¹\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1484 msgid "marginals-needed must be greater than 1\n" -msgstr "marginals-needed ¤Ï 1 ¤è¤êÂ礭¤ÊÃͤ¬É¬ÍפǤ¹\n" +msgstr "marginals-needed¤Ï1¤è¤êÂ礭¤ÊÃͤ¬É¬ÍפǤ¹\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1486 msgid "max-cert-depth must be in range 1 to 255\n" -msgstr "max-cert-depth ¤Ï 1 ¤«¤é 255 ¤ÎÈϰϤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" +msgstr "max-cert-depth¤Ï1¤«¤é255¤ÎÈϰϤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1489 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" -msgstr "Ãí°Õ: ñ½ã¤Ê S2K ¥â¡¼¥É (0) ¤Î»ÈÍѤˤ϶¯¤¯È¿ÂФ·¤Þ¤¹\n" +msgstr "Ãí°Õ: ñ½ã¤ÊS2K¥â¡¼¥É(0)¤Î»ÈÍѤˤ϶¯¤¯È¿ÂФ·¤Þ¤¹\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1493 msgid "invalid S2K mode; must be 0, 1 or 3\n" -msgstr "̵¸ú¤Ê S2K ¥â¡¼¥É¡£0, 1 ¤Þ¤¿¤Ï 3 ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" +msgstr "̵¸ú¤ÊS2K¥â¡¼¥É¡£0¤«1¤«3¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1497 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "̵¸ú¤Êdefault-check-level¡£0¤«1¤«2¤«3¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" + +#: g10/g10.c:1500 +msgid "invalid preferences\n" +msgstr "̵¸ú¤ÊÍ¥Àè½ç°Ì\n" + +#: g10/g10.c:1594 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î½é´ü²½¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1614 msgid "--store [filename]" msgstr "--store [¥Õ¥¡¥¤¥ë̾]" -#: g10/gpg.c:1184 +#: g10/g10.c:1621 msgid "--symmetric [filename]" msgstr "--symmetric [¥Õ¥¡¥¤¥ë̾]" -#: g10/gpg.c:1192 +#: g10/g10.c:1629 msgid "--encrypt [filename]" msgstr "--encrypt [¥Õ¥¡¥¤¥ë̾]" -#: g10/gpg.c:1205 +#: g10/g10.c:1646 msgid "--sign [filename]" msgstr "--sign [¥Õ¥¡¥¤¥ë̾]" -#: g10/gpg.c:1218 +#: g10/g10.c:1659 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [¥Õ¥¡¥¤¥ë̾]" -#: g10/gpg.c:1232 +#: g10/g10.c:1673 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [¥Õ¥¡¥¤¥ë̾]" + +#: g10/g10.c:1682 msgid "--clearsign [filename]" msgstr "--clearsign [¥Õ¥¡¥¤¥ë̾]" -#: g10/gpg.c:1249 +#: g10/g10.c:1700 msgid "--decrypt [filename]" msgstr "--decrypt [¥Õ¥¡¥¤¥ë̾]" -#: g10/gpg.c:1257 +#: g10/g10.c:1711 msgid "--sign-key user-id" -msgstr "--sign-key user-id" +msgstr "--sign-key ¥æ¡¼¥¶¡¼id" -#: g10/gpg.c:1265 +#: g10/g10.c:1719 msgid "--lsign-key user-id" -msgstr "--lsign-key user-id" +msgstr "--lsign-key ¥æ¡¼¥¶¡¼id" -#: g10/gpg.c:1273 +#: g10/g10.c:1727 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key ¥æ¡¼¥¶¡¼id" + +#: g10/g10.c:1735 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key ¥æ¡¼¥¶¡¼id" + +#: g10/g10.c:1743 msgid "--edit-key user-id [commands]" -msgstr "--edit-key user-id [¥³¥Þ¥ó¥É]" +msgstr "--edit-key ¥æ¡¼¥¶¡¼id [¥³¥Þ¥ó¥É]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key user-id" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key user-id" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1799 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" -msgstr "%s ¤¬³«¤±¤Þ¤»¤ó: %s\n" +msgstr "%s¤¬³«¤±¤Þ¤»¤ó: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1814 msgid "-k[v][v][v][c] [user-id] [keyring]" -msgstr "-k[v][v][v][c] [user-id] [¸°¥ê¥ó¥°]" +msgstr "-k[v][v][v][c] [¥æ¡¼¥¶¡¼id] [¸°ÎØ]" -#: g10/gpg.c:1410 +#: g10/g10.c:1897 #, c-format msgid "dearmoring failed: %s\n" -msgstr "Áõ¹Ã½üµî¤Ë¼ºÇÔ: %s\n" +msgstr "ÊñÁõ½üµî¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1905 #, c-format msgid "enarmoring failed: %s\n" -msgstr "Áõ¹Ã²½¤Ë¼ºÇÔ: %s\n" +msgstr "ÊñÁõ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:1992 #, c-format msgid "invalid hash algorithm `%s'\n" -msgstr "¥Ï¥Ã¥·¥å¥¢¥ë¥´¥ê¥º¥à `%s' ¤Ï̵¸ú¤Ç¤¹\n" +msgstr "̵¸ú¤Ê¥Ï¥Ã¥·¥å¡¦¥¢¥ë¥´¥ê¥º¥à`%s'¤Ç¤¹\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2078 msgid "[filename]" msgstr "[¥Õ¥¡¥¤¥ë̾]" -#: g10/gpg.c:1605 +#: g10/g10.c:2082 msgid "Go ahead and type your message ...\n" -msgstr "³«»Ï¤·¤Þ¤¹¡£¥á¥Ã¥»¡¼¥¸¤ò¥¿¥¤¥×¤·¤Æ²¼¤µ¤¤ ...\n" +msgstr "³«»Ï¤·¤Þ¤¹¡£¥á¥Ã¥»¡¼¥¸¤ò¥¿¥¤¥×¤·¤Æ¤¯¤À¤µ¤¤ ...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2085 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" -msgstr "`%s' ¤¬³«¤±¤Þ¤»¤ó\n" +msgstr "`%s'¤¬³«¤±¤Þ¤»¤ó\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2294 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "Ãí¼á̾¤ÎÀèƬ¤Ïʸ»ú¤«¥¢¥ó¥À¡¼¥¹¥³¥¢(_)¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2300 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" -"Ãí¼á̾¤Ë¤Ïʸ»ú¡¢¿ô»ú¡¢¥É¥Ã¥È¡¢¥¢¥ó¥À¡¼¥¹¥³¥¢(_)¤Î¤ß¤òÍѤ¤¡¢'=' " -"¤òȼ¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" +"Ãí¼á̾¤Ë¤Ïʸ»ú¡¢¿ô»ú¡¢¥É¥Ã¥È¡¢¥¢¥ó¥À¡¼¥¹¥³¥¢¤Î¤ß¤òÍѤ¤¡¢\n" +"'='¤Ç½ª¤ï¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2306 msgid "dots in a notation name must be surrounded by other characters\n" -msgstr "Ãí¼á̾¤Î¥É¥Ã¥È¤Ï¾¤Îʸ»ú¤Ç°Ï¤Þ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" +msgstr "Ãí¼á̾¤Î¥É¥Ã¥È¤Ï¾¤Îʸ»ú¤Ç°Ï¤Þ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2314 msgid "a notation value must not use any control characters\n" msgstr "Ãí¼á̾¤ÎÃͤËÀ©¸æʸ»ú¤òÍѤ¤¤Æ¤Ï¤¤¤±¤Þ¤»¤ó\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" -msgstr "Áõ¹Ã: %s\n" +msgstr "ÊñÁõ: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " -msgstr "̵¸ú¤ÊÁõ¹Ã¥Ø¥Ã¥À: " +msgstr "̵¸ú¤ÊÊñÁõ¥Ø¥Ã¥À¡¼: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " -msgstr "Áõ¹Ã¥Ø¥Ã¥À: " +msgstr "ÊñÁõ¥Ø¥Ã¥À¡¼: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" -msgstr "̵¸ú¤Ê¥¯¥ê¥¢½ð̾¥Ø¥Ã¥À\n" +msgstr "̵¸ú¤Ê¥¯¥ê¥¢½ð̾¥Ø¥Ã¥À¡¼\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" -msgstr "¥Í¥¹¥È¤µ¤ì¤¿¥¯¥ê¥¢½ð̾\n" +msgstr "Æþ¤ì»Ò¤Î¥¯¥ê¥¢½ð̾\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "̵¸ú¤Ê¥À¥Ã¥·¥å¤Ç¥¨¥¹¥±¡¼¥×¤µ¤ì¤¿¹Ô: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" -msgstr "ͽ´ü¤·¤Ê¤¤Áõ¹Ã:" +msgstr "ͽ´ü¤»¤ÌÊñÁõ:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" -msgstr "̵¸ú¤Ê radix64 ʸ»ú %02x ¤ò¥¹¥­¥Ã¥×¤·¤Þ¤¹\n" +msgstr "̵¸ú¤Ê64¿Êʸ»ú%02x¤ò¤È¤Ð¤·¤Þ¤¹\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" -msgstr "eof ¤¬Á᤹¤®¤Þ¤¹ (CRC ¤¬¤¢¤ê¤Þ¤»¤ó)\n" +msgstr "¥Õ¥¡¥¤¥ëËöÈø¤¬Á᤹¤®¤Þ¤¹ (CRC¤¬¤¢¤ê¤Þ¤»¤ó)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" -msgstr "eof ¤¬Á᤹¤®¤Þ¤¹ (CRC ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹)\n" - -#: g10/armor.c:735 -msgid "malformed CRC\n" -msgstr "CRC ¤Î½ñ¼°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó\n" - -#: g10/armor.c:739 -#, c-format -msgid "CRC error; %06lx - %06lx\n" -msgstr "CRC ¥¨¥é¡¼; %06lx - %06lx\n" +msgstr "¥Õ¥¡¥¤¥ëËöÈø¤¬Á᤹¤®¤Þ¤¹ (CRC¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹)\n" #: g10/armor.c:756 +msgid "malformed CRC\n" +msgstr "CRC¤Î½ñ¼°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/armor.c:760 g10/armor.c:1279 +#, c-format +msgid "CRC error; %06lx - %06lx\n" +msgstr "CRC¥¨¥é¡¼¡£%06lx - %06lx\n" + +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" -msgstr "eof ¤¬Á᤹¤®¤Þ¤¹ (Trailer ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹)\n" +msgstr "¥Õ¥¡¥¤¥ëËöÈø¤¬Á᤹¤®¤Þ¤¹ (¸åÈøÉô¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" -msgstr "Trailer ¹Ô¤Ë¥¨¥é¡¼¤¬¤¢¤ê¤Þ¤¹\n" +msgstr "¸åÈø¤Î¹Ô¤Ë¥¨¥é¡¼¤¬¤¢¤ê¤Þ¤¹\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" -msgstr "Í­¸ú¤Ê OpenPGP ¥Ç¡¼¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n" +msgstr "Í­¸ú¤ÊOpenPGP¥Ç¡¼¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" -msgstr "̵¸ú¤ÊÁõ¹Ã: ¹Ô¤ÎŤµ¤¬ %d ʸ»ú¤ò±Û¤¨¤Æ¤¤¤Þ¤¹\n" +msgstr "̵¸ú¤ÊÊñÁõ: ¹Ô¤ÎŤµ¤¬%dʸ»ú¤òĶ¤¨¤Æ¤¤¤Þ¤¹\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" -"Áõ¹Ã¤ÎÃæ¤Ë quoted printable ʸ»ú¤¬¤¢¤ê¤Þ¤¹¡£¤ª¤½¤é¤¯¥Ð¥°¤Î¤¢¤ë MTA " -"¤¬»ÈÍѤµ¤ì¤¿¤Î¤Ç¤·¤ç¤¦\n" +"ÊñÁõ¤ÎÃæ¤Ë quoted printable ʸ»ú¤¬¤¢¤ê¤Þ¤¹¡£¤ª¤½¤é¤¯¥Ð¥°¤Î¤¢¤ë\n" +"MTA¤ò»ÈÍѤ·¤¿¤Î¤Ç¤·¤ç¤¦\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " »ØÌæ:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "»ØÌæ:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" -msgstr "" +msgstr "Íýͳ¤Ï»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" -msgstr "¸°¤ÏÊݸ¤ì¤Æ¤¤¤Þ¤¹¡£\n" +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "¸°¤¬¤È¤ê¤«¤ï¤Ã¤Æ¤¤¤Þ¤¹" -#: g10/pkclist.c:121 -#, fuzzy +#: g10/pkclist.c:65 msgid "Key has been compromised" -msgstr "¤³¤Î¸°¤Ï»ÈÍÑÉԲĤËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹" +msgstr "¸°¤¬¥Ñ¥¯¤é¤ì¤Þ¤·¤¿" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" -msgstr "" +msgstr "¸°¤Ï¤â¤¦»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" -msgstr "" +msgstr "¥æ¡¼¥¶¡¼ID¤¬¤â¤¦Í­¸ú¤Ç¤¢¤ê¤Þ¤»¤ó" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " -msgstr "" +msgstr "ÇË´þÍýͳ: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " -msgstr "" +msgstr "ŬÍÑ: " #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMqQsS" -#: g10/pkclist.c:308 +#: g10/pkclist.c:258 #, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" -"%lu ¤Ë¿®ÍÑÅÙ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó:\n" +"¿®ÍÑÅÙ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" -"¾¤Î¥æ¡¼¥¶¤Î¸°¤òÀµ¤·¤¯¸¡¾Ú¤¹¤ë¤¿¤á¤Ë¡¢¤³¤Î¥æ¡¼¥¶¤Î¿®ÍÑÅÙ¤ò·è¤á¤Æ²¼¤µ¤¤\n" -"(¥Ñ¥¹¥Ý¡¼¥È¤ò¸«¤»¤Æ¤â¤é¤Ã¤¿¤ê¡¢Â¾¤«¤éÆÀ¤¿»ØÌæ¤È¾È¹ç¤·¤¿¤ê...)?\n" +"¾¤Î¥æ¡¼¥¶¡¼¤Î¸°¤òÀµ¤·¤¯¸¡¾Ú¤¹¤ë¤¿¤á¤Ë¡¢¤³¤Î¥æ¡¼¥¶¡¼¤Î¿®ÍÑÅÙ¤ò·è¤á¤Æ\n" +"¤¯¤À¤µ¤¤(¥Ñ¥¹¥Ý¡¼¥È¤ò¸«¤»¤Æ¤â¤é¤Ã¤¿¤ê¡¢Â¾¤«¤éÆÀ¤¿»ØÌæ¤È¾È¹ç¤·¤¿¤ê...)?\n" "\n" -" 1 = ̤ÃÎ\n" -" 2 = ¿®ÍѤ·¤Ê¤¤\n" -" 3 = ¤¢¤ëÄøÅÙ¿®ÍѤ¹¤ë\n" -" 4 = ´°Á´¤Ë¿®ÍѤ¹¤ë\n" -" s = ¤è¤ê¾Ü¤·¤¤¾ðÊó¤ò¸«¤ë\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = ̤ÃÎ\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = ¿®ÍѤ· ¤Ê¤¤\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = ¤¢¤ëÄøÅÙ¿®ÍѤ¹¤ë\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = ´°Á´¤Ë¿®ÍѤ¹¤ë\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = ÀäÂÐŪ¤Ë¿®ÍѤ¹¤ë\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = ¤è¤ê¾Ü¤·¤¤¾ðÊó¤ò¸«¤ë\n" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" -msgstr " m = ¥á¥¤¥ó¥á¥Ë¥å¡¼¤ËÌá¤ë\n" +msgstr " m = ¥á¡¼¥ó¡¦¥á¥Ë¥å¡¼¤ËÌá¤ë\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = ¤³¤Î¸°¤Ï¤È¤Ð¤¹\n" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = ½ªÎ»\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "¤¢¤Ê¤¿¤Î·èÄê¤Ï? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "ËÜÅö¤Ë¤³¤Î¸°¤òÀäÂÐŪ¤Ë¿®ÍѤ·¤Þ¤¹¤«? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "ÀäÂÐŪ¤Ë¿®ÍѤ·¤¿¸°¤Ø¤Î¾ÚÌÀ½ñ:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"¸°¤Ø¤ÎÍ­¸ú¤Ê¿®ÍѤΥѥ¹¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£·ç¤±¤Æ¤¤¤ë¿Í¤Î¿®ÍÑÅÙ¤ò\n" -"ÀßÄê¤Ç¤­¤Ê¤¤¤«¤É¤¦¤«¡¢Ä´¤Ù¤Þ¤·¤ç¤¦¡£\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"²æ¡¹¤Î¸°¤Ø»ê¤ë¥Ñ¥¹¤¬¤¢¤ê¤Þ¤»¤ó¡£\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"¿®ÍÑÅÙ¤¬Ì¤ÄêµÁ¤Î¾ÚÌÀ½ñ¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"¿®ÍÑÅÙ¤ÎÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" -msgstr "¸° %08lX: ¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹!\n" +msgstr "¸°%08lX: ¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " -msgstr "¤½¤ì¤Ç¤â ¤³¤Î¸°¤ò»È¤¤¤Þ¤¹¤«? " +msgstr "¤½¤ì¤Ç¤â¤³¤Î¸°¤ò»È¤¤¤Þ¤¹¤«? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" -msgstr "¸° %08lX: Éû¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹!\n" +msgstr "¸°%08lX: Éû¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" -msgstr "¸° %08lX: ¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹!\n" +msgstr "¸°%08lX: ¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹\n" -#: g10/pkclist.c:519 +#: g10/pkclist.c:442 #, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: ¿®ÍÑÅÙ¤ò·×»»¤¹¤ë¾ðÊ󤬤¢¤ê¤Þ¤»¤ó\n" +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "%08lX: ¤³¤Î¸°¤¬ËܿͤΤâ¤Î¤«¤É¤¦¤«¤Î¸¡¾Ú¼êÃʤ¬¤¢¤ê¤Þ¤»¤ó\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" -msgstr "%08lX: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤Þ¤»¤ó\n" +msgstr "%08lX: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤Þ ¤»¤ó\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" "but it is accepted anyway\n" -msgstr "%08lX: ¤³¤Î¸°¤Ï¼ÂºÝ¤ËËܿͤΤâ¤Î¤«¤ÏÉÔÌÀ¤Ç¤¹¤¬¡¢¤½¤ì¤Ç¤â¼õ¤±Æþ¤ì¤Þ¤¹\n" +msgstr "" +"%08lX: ¤³¤Î¸°¤Ï¼ÂºÝ¤ËËܿͤΤâ¤Î¤«¤ÏÉÔÌÀ¤Ç¤¹¤¬¡¢\n" +"¤¤¤Á¤ª¤¦¼õÍý¤·¤Þ¤¹\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "¤³¤Î¸°¤Ï¤¿¤Ö¤óËܿͤΤâ¤Î¤Ç¤¹\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "¤³¤Î¸°¤Ï²æ¡¹¤Î¤â¤Î¤Ç¤¹\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" -"¤³¤Î¸°¤ÏËܿͤΤâ¤Î¤«¤É¤¦¤«³Î¿®¤Ç¤­¤Þ¤»¤ó¡£\n" +"¤³¤Î¸°¤ÏËܿͤΤâ¤Î¤«¤É¤¦¤«³Î¿®¤Ç¤­¤Þ ¤»¤ó¡£\n" "º£¤«¤é¹Ô¤¦¤³¤È¤ò *³Î¼Â¤Ë* Íý²ò¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢\n" -"¼¡¤Î¼ÁÌä¤Ë¤Ï no ¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£\n" +"¼¡¤Î¼ÁÌä¤Ë¤Ïno¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "·Ù¹ð: ¿®ÍѤǤ­¤Ê¤¤¸°¤òÍѤ¤¤Æ¤¤¤Þ¤¹!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "·Ù¹ð: ¤³¤Î¸°¤ÏËܿͤˤè¤Ã¤ÆÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" -msgstr " ½ð̾¤Ïµ¶Êª¤À¤È»×¤ï¤ì¤Þ¤¹¡£\n" +msgstr " ½ð̾¤¬µ¶Êª¤Ê¤³¤È¤â¤¢¤ë¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¡£\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "·Ù¹ð: ¤³¤ÎÉû¸°¤ÏËܿͤˤè¤Ã¤ÆÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Ãí°Õ: ¤³¤Î¸°¤Ï»ÈÍѶػߤËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Ãí°Õ: ¤³¤Î¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" -msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤ë½ð̾¤Ë¤è¤Ã¤Æ¾ÚÌÀ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!\n" +msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤ë½ð̾¤Ç¾ÚÌÀ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" -msgstr " ¤³¤Î½ð̾¤¬ËܿͤΤâ¤Î¤«¤É¤¦¤«¤Î¸¡¾Ú¼êÃʤ¬¤¢¤ê¤Þ¤»¤ó¡£\n" +msgstr " ¤³¤Î½ð̾¤¬ËܿͤΤâ¤Î¤«¤É¤¦¤«¤Î¸¡¾Ú¼êÃʤ¬¤¢¤ê¤Þ¤»¤ó¡£\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" -msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤Þ¤»¤ó!\n" +msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤Þ ¤»¤ó!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" -msgstr " ¤³¤Î½ð̾¤Ï¤ª¤½¤é¤¯ µ¶Êª ¤Ç¤¹¡£\n" +msgstr " ¤³¤Î½ð̾¤Ï¤ª¤½¤é¤¯ µ¶Êª ¤Ç¤¹¡£\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" -msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï½½Ê¬¤Ë¿®ÍѤǤ­¤ë½ð̾¤Ë¤è¤Ã¤Æ¾ÚÌÀ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!\n" +msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï½½Ê¬¤Ë¿®ÍѤǤ­¤ë½ð̾¤Ç¾ÚÌÀ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" -msgstr " ¤³¤Î½ð̾¤¬ËܿͤΤâ¤Î¤«¤É¤¦¤«³Î¿®¤Ç¤­¤Þ¤»¤ó¡£\n" +msgstr " ¤³¤Î½ð̾¤¬ËܿͤΤâ¤Î¤«¤É¤¦¤«³Î¿®¤Ç¤­¤Þ¤»¤ó¡£\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ¥¹¥­¥Ã¥×: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï´û¤Ë¤¢¤ê¤Þ¤¹\n" -#: g10/pkclist.c:855 +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "¥æ¡¼¥¶¡¼ID¤ò»ØÄꤷ¤Æ¤¤¤Þ¤»¤ó (¡Ö-r¡×¤òÍѤ¤¤Þ¤·¤ç¤¦) ¡£\n" + +#: g10/pkclist.c:762 msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" "\n" -msgstr "¥æ¡¼¥¶ ID ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó(\"-r\" ¤òÍѤ¤¤¿¤Ç¤·¤ç¤¦)¡£\n" +"Enter the user ID. End with an empty line: " +msgstr "\n¥æ¡¼¥¶¡¼ID¤òÆþÎÏ¡£¶õ¹Ô¤Ç½ªÎ»: " -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "¥æ¡¼¥¶ ID ¤òÆþÎÏ: " - -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" -msgstr "¤½¤Î¥æ¡¼¥¶ ID ¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" +msgstr "¤½¤Î¥æ¡¼¥¶¡¼ID¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" -msgstr "¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¼õ¿®¼Ô¤ËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹\n" +msgstr "¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï´ûÄê¤Î¼õ¿®¼Ô¤È¤·¤ÆÀßÄêºÑ¤ß¤Ç¤¹\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" -msgstr "¸ø³«¸°¤ò̵»ë¤·¤Þ¤·¤¿¡£\n" +msgstr "¸ø³«¸°¤Ï»ÈÍѶػߤǤ¹¡£\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï´û¤Ë --encrypt-to ¤Ë¤ÆÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹\n" +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "¥¹¥­¥Ã¥×: ¸ø³«¸°¤ÏÀßÄêºÑ¤ß¤Ç¤¹\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" -msgstr "¥Ç¥Õ¥©¥ë¥È¤Î¼õ¿®¼Ô `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n" +msgstr "´ûÄê¤Î¼õ¿®¼Ô`%s'¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: ¸°¤Î¥¨¥é¡¼: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" -msgstr "%s: ¥¹¥­¥Ã¥×: ¸ø³«¸°¤ò̵»ë¤·¤Þ¤·¤¿\n" +msgstr "%s: ¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï»ÈÍѶػߤǤ¹\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "Í­¸ú¤Ê¥¢¥É¥ì¥¹¤¬¤¢¤ê¤Þ¤»¤ó\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "Áª¹¥%c%lu¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "Áª¹¥%c%lu¤Î½ÅÊ£\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "¿¤¹¤®¤ë`%c'Áª¹¥\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "Áª¹¥Ê¸»úÎó¤Ë̵¸ú¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "¼«¸Ê½ð̾¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "½ð̾¤ËÂбþ¤¹¤ë¸°¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 -#, fuzzy, c-format +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format msgid "keysize invalid; using %u bits\n" -msgstr "Í׵ᤵ¤ì¤¿¸°¥µ¥¤¥º¤Ï %u ¥Ó¥Ã¥È\n" +msgstr "̵¸ú¤Ê¸°¥µ¥¤¥º¡£%u¥Ó¥Ã¥È¤Ë¤·¤Þ¤¹\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 -#, fuzzy, c-format +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format msgid "keysize rounded up to %u bits\n" -msgstr "%u ¥Ó¥Ã¥È¤Ë´Ý¤á¤Þ¤¹\n" +msgstr "¸°¥µ¥¤¥º¤ò%u¥Ó¥Ã¥È¤Ë´Ý¤á¤Þ¤¹\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" -msgstr "¸°¤Î¼ïÎà¤òÁªÂò¤·¤Æ²¼¤µ¤¤:\n" +msgstr "¤¹¤­¤Ê¸°¤Î¼ïÎà¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" -msgstr " (%d) DSA ¤È ElGamal (¥Ç¥Õ¥©¥ë¥È)\n" +msgstr " (%d) DSA¤ÈElGamal (´ûÄê)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (½ð̾¤Î¤ß)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (°Å¹æ²½¤Î¤ß)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (½ð̾¤È°Å¹æ²½)\n" -#: g10/keygen.c:643 -#, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (½ð̾¤È°Å¹æ²½)\n" +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (½ð̾¤Î¤ß)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (°Å¹æ²½¤Î¤ß)\n" + +#: g10/keyedit.c:508 g10/keygen.c:789 msgid "Your selection? " -msgstr "¤É¤ì¤òÁª¤Ó¤Þ¤¹¤«? " +msgstr "¤É¤ì¤Ë¤·¤Þ¤¹¤«? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "ËÜÅö¤Ë½ð̾¤È°Å¹æÍѤθ°¤òºî¤ê¤Þ¤¹¤«? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤Þ¤¹ - ¤½¤ì¤Ç¤âºî¤ê¤Þ¤¹¤«? " -#: g10/keygen.c:680 +#: g10/keyedit.c:521 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "̵¸ú¤ÊÁªÂò¤Ç¤¹¡£\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1313,27 +1501,26 @@ msgid "" " default keysize is 1024 bits\n" " highest suggested keysize is 2048 bits\n" msgstr "" -"¿·¤·¤¤ %s ¸°¥Ú¥¢¤ÎÀ¸À®¤Ë¤Ä¤¤¤Æ\n" -" ºÇ¾®¤Î¸°¥µ¥¤¥º¤Ï is 768 ¥Ó¥Ã¥È\n" -" ¥Ç¥Õ¥©¥ë¥È¤Î¸°¥µ¥¤¥º¤Ï 1024 ¥Ó¥Ã¥È\n" -" ºÇÂç¤Î¸°¥µ¥¤¥º¤Ï 2048 ¥Ó¥Ã¥È\n" +"¿·¤·¤¤%s¸°ÂФòÀ¸À®¤·¤Þ¤¹¡£\n" +" ºÇ¾®¤Î¸°Ä¹¤Ï 768 ¥Ó¥Ã¥È\n" +" ´ûÄê¤Î¸°Ä¹¤Ï 1024 ¥Ó¥Ã¥È\n" +" ºÇÂç¤Î¿ä¾©¸°Ä¹¤Ï 2048 ¥Ó¥Ã¥È\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " -msgstr "¤É¤Î¸°¥µ¥¤¥º¤òÁªÂò¤·¤Þ¤¹¤«? (1024) " +msgstr "¤É¤Î¸°Ä¹¤Ë¤·¤Þ¤¹¤«? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" -msgstr "DSA ¤Î¸°¥µ¥¤¥º¤Ï 512 ¤«¤é 1024 ¤Þ¤Ç¤Ç¤¹\n" +msgstr "DSA¤Î¸°Ä¹¤Ï512¤«¤é1024¤Þ¤Ç¤Ç¤¹\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "¸°¥µ¥¤¥º¤¬¾®¤µ¤¹¤®¤Þ¤¹; 768 ¤¬ºÇ¾®¤Ç¤¹¡£\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" -msgstr "¸°¥µ¥¤¥º¤¬¾®¤µ¤¹¤®¤Þ¤¹; 768 ¤¬ºÇ¾®¤Ç¤¹¡£\n" +msgstr "¸°Ä¹¤¬¾®¤µ¤¹¤®¤Þ¤¹¡£RSA¤ÏºÇ¾®¤Ç¤â1024¤Ç¤¹¡£\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "¸°Ä¹¤¬¾®¤µ¤¹¤®¤Þ¤¹¡£ºÇ¾®¤Ç¤â768¤Ç¤¹¡£\n" #. It is ridiculous and an annoyance to use larger key sizes! #. * GnuPG can handle much larger sizes; but it takes an eternity @@ -1343,46 +1530,42 @@ msgstr " #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" -msgstr "¸°¥µ¥¤¥º¤¬Â礭¤¹¤®¤Þ¤¹; %d ¤¬ºÇÂç¤Ç¤¹¡£\n" +msgstr "¸°Ä¹¤¬Â礭¤¹¤®¤Þ¤¹¡£%d¤¬ºÇÂç¤Ç¤¹¡£\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" -"2048 °Ê¾å¤Î¸°¥µ¥¤¥º¤Ï¡¢·×»»»þ´Ö¤¬ Èó¾ï¤Ë Ť¯¤Ê¤ë¤Î¤Ç\n" +"2048¤è¤êÂ礭¤Ê¸°Ä¹¤Ï¡¢·×»»»þ´Ö¤¬ Èó¾ï¤Ë Ť¯¤Ê¤ë¤Î¤Ç\n" "¿ä¾©¤·¤Þ¤»¤ó!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " -msgstr "¤³¤Î¸°¥µ¥¤¥º¤ÇËÜÅö¤ËÎɤ¤¤Ç¤¹¤«? " +msgstr "¤³¤Î¸°Ä¹¤ÇËÜÅö¤Ë¤¤¤¤¤Ç¤¹¤«? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" -"¤ï¤«¤ê¤Þ¤·¤¿¡£¤·¤«¤·¡¢¤¢¤Ê¤¿¤Î¥â¥Ë¥¿¡¼¤ä¥­¡¼¥Ü¡¼¥ÉÆþÎϤϡ¢¹¶·â¤ËÂФ·¤Æ " -"¤¹¤­¤À¤é¤±¤Ç¤¢¤ë¤³¤È¤ò¿´¤Ëα¤á¤Æ¤ª¤¤¤Æ²¼¤µ¤¤!\n" +"¤ï¤«¤ê¤Þ¤·¤¿¡£¤·¤«¤·¡¢¤¢¤Ê¤¿¤Î¥â¥Ë¥¿¡¼¤ä¥­¡¼¥Ü¡¼¥ÉÆþÎϤϡ¢\n" +"¹¶·â¤Ë¤¿¤¤¤·¤ÆÀȼå¤Ç¤¢¤ë¤³¤È¤ò¿´¤Ëα¤á¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "¤¢¤Ê¤¿¤ÏËÜÅö¤Ë¤³¤Î¤è¤¦¤ÊŤ¤¸°¤¬É¬ÍפǤ¹¤«? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" -msgstr "Í׵ᤵ¤ì¤¿¸°¥µ¥¤¥º¤Ï %u ¥Ó¥Ã¥È\n" +msgstr "Í׵ᤵ¤ì¤¿¸°Ä¹¤Ï%u¥Ó¥Ã¥È\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" -msgstr "%u ¥Ó¥Ã¥È¤Ë´Ý¤á¤Þ¤¹\n" +msgstr "%u¥Ó¥Ã¥È¤Ë´Ý¤á¤Þ¤¹\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1391,32 +1574,53 @@ msgid "" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" -"¸°¤Î´ü¸Â¤ò·è¤á¤Æ²¼¤µ¤¤\n" +"¸°¤Î´ü¸Â¤ò·è¤á¤Æ¤¯¤À¤µ¤¤¡£\n" " 0 = ̵´ü¸Â\n" -" = Í­¸ú´ü¸Â n Æü\n" +" = Í­¸ú´ü¸Â n Æü´Ö\n" " w = Í­¸ú´ü¸Â n ½µ´Ö\n" -" m = Í­¸ú´ü¸Â n ·î\n" -" y = Í­¸ú´ü¸Â n ǯ\n" +" m = Í­¸ú´ü¸Â n ¤«·î´Ö\n" +" y = Í­¸ú´ü¸Â n ǯ´Ö\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"½ð̾¤Î´ü¸Â¤ò·è¤á¤Æ¤¯¤À¤µ¤¤¡£\n" +" 0 = ̵´ü¸Â\n" +" = Í­¸ú´ü¸Â n Æü´Ö\n" +" w = Í­¸ú´ü¸Â n ½µ´Ö\n" +" m = Í­¸ú´ü¸Â n ¤«·î´Ö\n" +" y = Í­¸ú´ü¸Â n ǯ´Ö\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " -msgstr "¸°¤ÎÍ­¸úÀ­¤Ï? (0)" +msgstr "¸°¤ÎÍ­¸ú´ü´Ö¤Ï? (0)" -#: g10/keygen.c:817 +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "½ð̾¤ÎÍ­¸ú´ü´Ö¤Ï? (0)" + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "̵¸ú¤ÊÃÍ\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "¸°¤Ï̵´ü¸Â¤Ç¤¹\n" +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s¤Ï̵´ü¸Â¤Ç¤¹\n" #. print the date when the key expires -#: g10/keygen.c:828 +#: g10/keygen.c:992 #, c-format -msgid "Key expires at %s\n" -msgstr "¸°¤Ï %s ¤Ë¤Æ´ü¸ÂÀÚ¤ì¤Ë¤Ê¤ê¤Þ¤¹\n" +msgid "%s expires at %s\n" +msgstr "%s¤Ï%s¤Ë¤Æ´ü¸ÂÀÚ¤ì¤Ë¤Ê¤ê¤Þ¤¹\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1424,11 +1628,11 @@ msgstr "" "¤³¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢2038ǯ°Ê¹ß¤ÎÆüÉÕ¤òɽ¼¨¤Ç¤­¤Þ¤»¤ó¤¬¡¢\n" "2106ǯ¤Þ¤Ç¤Ê¤éÀµ¤·¤¯½èÍý¤Ç¤­¤Þ¤¹¡£\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " -msgstr "¤³¤ì¤ÇÎɤ¤¤Ç¤¹¤« (y/n)? " +msgstr "¤³¤ì¤Ç¤¤¤¤¤Ç¤¹¤« (y/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1438,1871 +1642,2155 @@ msgid "" "\n" msgstr "" "\n" -"¤¢¤Ê¤¿¤Î¸°¤ò¼±Ê̤¹¤ë¤¿¤á¤Ë ¥æ¡¼¥¶ ID ¤¬É¬ÍפǤ¹¡£\n" -"¤³¤Î¥½¥Õ¥È¤ÏËÜ̾¡¢Ãí¼á¡¢ÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤«¤é¡¢¼¡¤Î½ñ¼°¤Ç¥æ¡¼¥¶ ID " -"¤òºîÀ®¤·¤Þ¤¹:\n" +"¤¢¤Ê¤¿¤Î¸°¤òƱÄꤹ¤ë¤¿¤á¤Ë¥æ¡¼¥¶¡¼ID¤¬É¬ÍפǤ¹¡£\n" +"¤³¤Î¥½¥Õ¥È¤ÏËÜ̾¡¢¥³¥á¥ó¥È¡¢ÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤«¤é\n" +"¼¡¤Î½ñ¼°¤Ç¥æ¡¼¥¶¡¼ID¤ò¹½À®¤·¤Þ¤¹:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "ËÜ̾: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "̾Á°¤Ë̵¸ú¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" -msgstr "̾Á°¤Ï¿ô»ú¤Ç»Ï¤Þ¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó\n" +msgstr "̾Á°¤ò¿ô»ú¤Ç»Ï¤á¤Æ¤Ï¤¤¤±¤Þ¤»¤ó\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" -msgstr "̾Á°¤Ï 5 ʸ»ú°Ê¾å¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" +msgstr "̾Á°¤Ï5ʸ»ú°Ê¾å¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " -msgstr "ÅŻҥ᡼¥ë¥¢¥É¥ì¥¹: " +msgstr "ÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" -msgstr "Í­¸ú¤ÊÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" +msgstr "Í­¸ú¤ÊÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " -msgstr "Ãí¼á: " +msgstr "¥³¥á¥ó¥È: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" -msgstr "Ãí¼á¤Ë̵¸ú¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹\n" +msgstr "¥³¥á¥ó¥È¤Ë̵¸ú¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" -msgstr "¤¢¤Ê¤¿¤Ïʸ»ú¥³¡¼¥É `%s' ¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£\n" +msgstr "¤¢¤Ê¤¿¤Ïʸ»ú½¸¹ç`%s'¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" -"¼¡¤Î¥æ¡¼¥¶ ID ¤òÀßÄꤷ¤Þ¤·¤¿:\n" +"¼¡¤Î¥æ¡¼¥¶¡¼ID¤òÀßÄꤷ¤Þ¤·¤¿:\n" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" -msgstr "" +msgstr "ÅŻҥ᡼¥ë¤Î¥¢¥É¥ì¥¹¤òËÜ̾¤ä¥³¥á¥ó¥È¤ËÆþ¤ì¤Ê¤¤¤è¤¦¤Ë\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" -#: g10/keygen.c:986 -#, fuzzy +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " -msgstr "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " +msgstr "̾Á°(N)¡¢¥³¥á¥ó¥È(C)¡¢ÅŻҥ᡼¥ë(E)¤ÎÊѹ¹¡¢¤Þ¤¿¤Ï½ªÎ»(Q)? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " -msgstr "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " +msgstr "̾Á°(N)¡¢¥³¥á¥ó¥È(C)¡¢ÅŻҥ᡼¥ë(E)¤ÎÊѹ¹¡¢¤Þ¤¿¤ÏOK(O)¤«½ªÎ»(Q)? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" -msgstr "" +msgstr "¤Þ¤º¥¨¥é¡¼¤ò½¤Àµ¤·¤Æ¤¯¤À¤µ¤¤\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" -"ÈëÌ©¸°¤òÊݸ¤ë¤¿¤á¤Ë¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬É¬ÍפǤ¹¡£\n" +"ÈëÌ©¸°¤òÊݸ¤ë¤¿¤á¤Ë¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¤¤¤ê¤Þ¤¹¡£\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬°Û¤Ê¤ê¤Þ¤¹¡£¤â¤¦°ìÅÙÀßÄꤷ¤Æ²¼¤µ¤¤¡£\n" +#: g10/keyedit.c:696 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ò¤Á¤ã¤ó¤È·«¤êÊÖ¤·¤Æ¤¤¤Þ¤»¤ó¡£ºÆÆþÎϤ·¤Æ¤¯¤À¤µ¤¤" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" "using this program with the option \"--edit-key\".\n" "\n" msgstr "" -"¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬ÉÔɬÍפʤ褦¤Ç¤¹¤¬¡¢¤½¤ì¤Ï°­¤¤¹Í¤¨¤Ç¤¹!\n" -"³¹Ô¤·¤Þ¤¹¡£¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ï¡¢¤³¤Î¥×¥í¥°¥é¥à¤Î \"--edit-key\" \n" -"¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¡¢¤¤¤Ä¤Ç¤âÊѹ¹¤Ç¤­¤Þ¤¹¡£\n" +"¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬ÉÔɬÍפʤ褦¤Ç¤¹¤¬¡¢¤ª¤½¤é¤¯¤½¤ì¤Ï¤í¤¯¤Ê¹Í¤¨¤Ç¤Ï\n" +"¤¢¤ê¤Þ¤»¤ó! ¤¤¤Á¤ª¤¦Â³¹Ô¤·¤Þ¤¹¡£¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ï¡¢¤³¤Î¥×¥í¥°¥é¥à\n" +"¤Î¡Ö--edit-key¡×¥ª¥×¥·¥ç¥ó¤Ç¤¤¤Ä¤Ç¤âÊѹ¹¤Ç¤­¤Þ¤¹¡£\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" "disks) during the prime generation; this gives the random number\n" "generator a better chance to gain enough entropy.\n" msgstr "" -"º£¤«¤éŤ¤Íð¿ô¤òÀ¸À®¤·¤Þ¤¹¡£¥­¡¼¥Ü¡¼¥É¤òÂǤĤȤ«¡¢¥Þ¥¦¥¹¤òÆ°¤«¤¹¤È¤«¡¢\n" -"¥Ç¥£¥¹¥¯¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤Ê¤É¤Î¾¤Î¹ÔÆ°¤òƱ»þ¤Ë¹Ô¤¦¤È¡¢Íð¿ôÀ¸À®ÁõÃ֤ˤÆ\n" -"Í𻨤µ¤ÎÂ礭¤ÊÎɤ¤Íð¿ô¤òÀ¸À®¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢¤ª´«¤á¤·¤Þ¤¹¡£\n" +"º£¤«¤éŤ¤Íð¿ô¤òÀ¸À®¤·¤Þ¤¹¡£¥­¡¼¥Ü¡¼¥É¤òÂǤĤȤ«¡¢¥Þ¥¦¥¹¤òÆ°¤«¤¹\n" +"¤È¤«¡¢¥Ç¥£¥¹¥¯¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤È¤«¤Î¾¤Î¤³¤È¤ò¤¹¤ë¤È¡¢Íð¿ôÀ¸À®»Ò¤Ç\n" +"Í𻨤µ¤ÎÂ礭¤Ê¤¤¤¤Íð¿ô¤òÀ¸À®¤·¤ä¤¹¤¯¤Ê¤ë¤Î¤Ç¡¢¤ª´«¤á¤·¤Þ¤¹¡£\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" -msgstr "DSA ¸°¥Ú¥¢¤Ï 1024 ¥Ó¥Ã¥È¤Ë¤Ê¤ê¤Þ¤¹\n" +msgstr "DSA¸°ÂФÏ1024¥Ó¥Ã¥È¤Ë¤Ê¤ê¤Þ¤¹¡£\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "¸°¤ÎÀ¸À®¤¬Ãæ»ß¤µ¤ì¤Þ¤·¤¿¡£\n" -#: g10/keygen.c:1668 -#, fuzzy, c-format +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format msgid "writing public key to `%s'\n" -msgstr "`%s' ¤Ø¤Î¸ø³«¾ÚÌÀ½ñ¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n" +msgstr "`%s'¤Ø¸ø³«¸°¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n" -#: g10/keygen.c:1669 -#, fuzzy, c-format +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format msgid "writing secret key to `%s'\n" -msgstr "`%s' ¤Ø¤ÎÈëÌ©¾ÚÌÀ½ñ¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n" +msgstr "`%s'¤ØÈëÌ©¸°¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "½ñ¹þ¤ß²Äǽ¤Ê¸ø³«¸°Îؤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "½ñ¹þ¤ß²Äǽ¤ÊÈëÌ©¸°Îؤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "¸ø³«¸°ÎØ`%s'¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "ÈëÌ©¸°ÎØ`%s'¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" -msgstr "¸ø³«¸°¤ÈÈëÌ©¸°¤¬ºîÀ®¤µ¤ì¡¢½ð̾¤µ¤ì¤Þ¤·¤¿¡£\n" +msgstr "¸ø³«¸°¤ÈÈëÌ©¸°¤òºî¤ê¡¢½ð̾¤·¤Þ¤·¤¿¡£\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "ÀäÂÐŪ¤Ë¿®ÍѤ·¤¿¸°¤È¤·¤Æµ­Ï¿¤·¤Þ¤·¤¿¡£\n" + +#: g10/keygen.c:2009 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" msgstr "" "¤³¤Î¸°¤Ï°Å¹æ²½¤Ë¤Ï»ÈÍѤǤ­¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£°Å¹æ²½¤ò¹Ô¤¦¤Ë¤Ï¡¢\n" -"\"--edit-key\" ¥³¥Þ¥ó¥É¤òÍѤ¤¤ÆÉû¸°¤òºîÀ®¤·¤Æ¤¯¤À¤µ¤¤¡£\n" +"¡Ö--edit-key¡×¥³¥Þ¥ó¥É¤òÍѤ¤¤ÆÉû¸°¤òÀ¸À®¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2021 g10/keygen.c:2127 #, c-format msgid "Key generation failed: %s\n" -msgstr "¸°¤ÎºîÀ®¤Ë¼ºÇÔ: %s\n" +msgstr "¸°¤ÎÀ¸À®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2065 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" -msgstr "¸°¤Ï %lu ÉÃ̤Íè¤ËºîÀ®¤µ¤ì¤Þ¤·¤¿ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n" +msgstr "¸°¤Ï%luÉÃ̤Íè¤Ë¤Ç¤­¤Þ¤·¤¿ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2067 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" -msgstr "¸°¤Ï %lu ÉÃ̤Íè¤ËºîÀ®¤µ¤ì¤Þ¤·¤¿ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n" +msgstr "¸°¤Ï%luÉÃ̤Íè¤Ë¤Ç¤­¤Þ¤·¤¿ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2076 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "Ãí°Õ: v3¸°¤ÎÉû¸°¤ÎºîÀ®¤Ï¡¢OpenPGP¤ËŬ¹ç¤·¤Þ¤»¤ó\n" + +#: g10/keygen.c:2103 msgid "Really create? " -msgstr "ËÜÅö¤ËºîÀ®¤·¤Þ¤¹¤«? " +msgstr "ËÜÅö¤Ëºî¤ê¤Þ¤¹¤«? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "¤³¤Î¥³¥Þ¥ó¥É¤Ç--output¤Ïµ¡Ç½¤·¤Þ¤»¤ó\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s'¤Ï´û¤Ë°µ½ÌºÑ¤ß¤Ç¤¹\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: ³«¤±¤Þ¤»¤ó: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" -msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ÎÀ¸À®¤Ë¼ºÇÔ: %s\n" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ÎºîÀ®¥¨¥é¡¼: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: ·Ù¹ð: ¶õ¤Î¥Õ¥¡¥¤¥ë¤Ç¤¹\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "--pgp2¥â¡¼¥É¤Ç¤Ï2048¥Ó¥Ã¥È°Ê²¼¤ÎRSA¸°¤Ç°Å¹æ²½¤·¤«¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" -msgstr "`%s' ¤«¤éÆɤ߹þ¤ß¤Þ¤¹\n" +msgstr "`%s'¤«¤éÆɤ߹þ¤ß¤Þ¤¹\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "°Å¹æ²½¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¸°¤ÏÁ´ÉôIDEA°Å¹æ¤ò»È¤¨¤Þ¤»¤ó¡£\n" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" -msgstr "%s/%s °Å¹æ²½ ¼õ¿®¼Ô: %s\n" +msgstr "%s/%s°Å¹æ²½ ¼õ¿®¼Ô: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 +#: g10/delkey.c:69 g10/export.c:141 #, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: ¥æ¡¼¥¶¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" +msgid "key `%s' not found: %s\n" +msgstr "¸°`%s'¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "¸°¥Ö¥í¥Ã¥¯¤ÎÆɹþ¤ß¥¨¥é¡¼: %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" -msgstr "¸° %08lX: rfc2440 ¤Î¸°¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó - ¥¹¥­¥Ã¥×¤·¤Þ¤¹\n" +msgstr "¸° %08lX: rfc2440¤Î¸°¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó - ¥¹¥­¥Ã¥×\n" -#: g10/export.c:175 -#, fuzzy, c-format +#: g10/export.c:180 +#, c-format msgid "key %08lX: not protected - skipped\n" -msgstr "¸° %08lX: rfc2440 ¤Î¸°¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó - ¥¹¥­¥Ã¥×¤·¤Þ¤¹\n" +msgstr "¸° %08lX: Êݸ¤ì¤Æ¤¤¤Þ¤»¤ó - ¥¹¥­¥Ã¥×\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "¸° %08lX: PGP 2.x·Á¼°¤Î¸°¤Ç¤¹ - ¥¹¥­¥Ã¥×\n" + +#: g10/export.c:254 msgid "WARNING: nothing exported\n" msgstr "·Ù¹ð: ²¿¤â½ñ¤­½Ð¤·¤Æ¤¤¤Þ¤»¤ó\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" -msgstr "pk ¥­¥ã¥Ã¥·¥å¤Î¥¨¥ó¥È¥ê¡¼¤¬Â¿¤¹¤®¤Þ¤¹ - ̵»ë\n" +msgstr "pk¥­¥ã¥Ã¥·¥å¤Î¥¨¥ó¥È¥ê¡¼¤¬Â¿¤¹¤®¤Þ¤¹ - »ÈÍѶػß\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "unk ¥­¥ã¥Ã¥·¥å¤Î¥¨¥ó¥È¥ê¡¼¤¬Â¿¤¹¤®¤Þ¤¹ - ̵»ë\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2271 +msgid "[User id not found]" +msgstr "[¥æ¡¼¥¶¡¼id¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "--allow-non-selfsigned-uid¤ÇÍ­¸ú¤Ë¤µ¤ì¤¿Ìµ¸ú¤Ê¸°%08lX¤Ç¤¹\n" + +#: g10/getkey.c:1988 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" -msgstr "Éû¸° %08lX ¤ò»ÈÍѤ·¤Þ¤¹ - ¼ç¸° %08lX ¤ÎÂåÍÑ\n" +msgstr "Éû¸°%08lX¤ò¼ç¸°%08lX¤ËÂåÍѤ·¤Þ¤¹\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2035 #, c-format msgid "key %08lX: secret key without public key - skipped\n" -msgstr "¸° %08lX: ¸ø³«¸°¤Î¤Ê¤¤ÈëÌ©¸°¤Ç¤¹¡£¥¹¥­¥Ã¥×\n" - -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: ¥æ¡¼¥¶¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n" - -#: g10/import.c:182 -#, c-format -msgid "skipping block of type %d\n" -msgstr "¥¿¥¤¥× %d ¤Î¥Ö¥í¥Ã¥¯¤ò¥¹¥­¥Ã¥×¤·¤Þ¤¹\n" - -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 -#, c-format -msgid "%lu keys so far processed\n" -msgstr "%lu ¸°¤Þ¤Ç½èÍý\n" - -#: g10/import.c:194 -#, c-format -msgid "error reading `%s': %s\n" -msgstr "`%s' ¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ: %s\n" - -#: g10/import.c:204 -#, c-format -msgid "Total number processed: %lu\n" -msgstr "½èÍý¿ô¤Î¹ç·×: %lu\n" +msgstr "¸°%08lX: ¸ø³«¸°¤Î¤Ê¤¤ÈëÌ©¸°¤Ç¤¹¡£¥¹¥­¥Ã¥×\n" #: g10/import.c:206 -#, fuzzy, c-format -msgid " skipped new keys: %lu\n" -msgstr " ¿·¤¿¤ÊÉû¸°: %lu\n" +#, c-format +msgid "skipping block of type %d\n" +msgstr "¥¿¥¤¥×%d¤Î¥Ö¥í¥Ã¥¯¤ò¥¹¥­¥Ã¥×¤·¤Þ¤¹\n" -#: g10/import.c:209 +#: g10/import.c:213 +#, c-format +msgid "%lu keys so far processed\n" +msgstr "%lu¸°¤Þ¤Ç½èÍý\n" + +#: g10/import.c:218 +#, c-format +msgid "error reading `%s': %s\n" +msgstr "`%s'¤ÎÆɹþ¤ß¥¨¥é¡¼: %s\n" + +#: g10/import.c:230 +#, c-format +msgid "Total number processed: %lu\n" +msgstr " ½èÍý¿ô¤Î¹ç·×: %lu\n" + +#: g10/import.c:232 +#, c-format +msgid " skipped new keys: %lu\n" +msgstr " ¥¹¥­¥Ã¥×¤·¤¿¿·¤·¤¤¸°: %lu\n" + +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" -msgstr " ¥æ¡¼¥¶ ID ¤Ê¤·: %lu\n" +msgstr " ¥æ¡¼¥¶¡¼ID¤Ê¤·: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" -msgstr " Æɤ߹þ¤ß: %lu" +msgstr " Æɹþ¤ß: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" -msgstr " Êѹ¹¤Ê¤·: %lu\n" +msgstr " Êѹ¹¤Ê¤·: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" -msgstr " ¿·¤¿¤Ê¥æ¡¼¥¶ ID: %lu\n" +msgstr " ¿·¤·¤¤¥æ¡¼¥¶¡¼ID: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" -msgstr " ¿·¤¿¤ÊÉû¸°: %lu\n" +msgstr " ¿·¤·¤¤Éû¸°: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" -msgstr " ¿·¤¿¤Ê½ð̾: %lu\n" +msgstr " ¿·¤·¤¤½ð̾: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" -msgstr " ¿·¤¿¤Ê¸°¤ÎÇË´þ: %lu\n" +msgstr " ¿·¤·¤¤¸°¤ÎÇË´þ: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" -msgstr " ÈëÌ©¸°¤ÎÆɤ߽Ф·: %lu\n" +msgstr " ÈëÌ©¸°¤ÎÆɽФ·: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" -msgstr " ÈëÌ©¸°¤ÎÆɤ߹þ¤ß: %lu\n" +msgstr " ÈëÌ©¸°¤ÎÆɹþ¤ß: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" -msgstr " Êѹ¹¤Î̵¤¤ÈëÌ©¸°: %lu\n" +msgstr " ̵Êѹ¹¤ÎÈëÌ©¸°: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:654 #, c-format msgid "key %08lX: no user ID\n" -msgstr "¸° %08lX: ¥æ¡¼¥¶ ID ¤¬¤¢¤ê¤Þ¤»¤ó\n" +msgstr "¸°%08lX: ¥æ¡¼¥¶¡¼ID¤¬¤¢¤ê¤Þ¤»¤ó\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "¸°%08lX: ¼õÍý¤·¤¿Ì¤¼«¸Ê½ð̾¤Î¥æ¡¼¥¶¡¼ID '%s'\n" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" -msgstr "¸° %08lX: ¿®ÍѤǤ­¤ë¥æ¡¼¥¶ ID ¤¬¤¢¤ê¤Þ¤»¤ó\n" +msgstr "¸°%08lX: ¿®ÍѤǤ­¤ë¥æ¡¼¥¶¡¼ID¤¬¤¢¤ê¤Þ¤»¤ó\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" -msgstr "¼«¸Ê½ð̾¤¬¤µ¤ì¤Æ¤¤¤Ê¤¤¤¿¤á¤Ç¤·¤ç¤¦\n" +msgstr "¼«¸Ê½ð̾¤Î¤Ê¤¤¤»¤¤¤Ç¤·¤ç¤¦\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:475 g10/import.c:723 #, c-format msgid "key %08lX: public key not found: %s\n" -msgstr "¸° %08lX: ¸ø³«¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" +msgstr "¸°%08lX: ¸ø³«¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:480 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "¸° %08lX: rfc2440 ¤Î¸°¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó - ¥¹¥­¥Ã¥×¤·¤Þ¤¹\n" - -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 -#, c-format -msgid "writing to `%s'\n" -msgstr "`%s' ¤Ø¤Î½ñ¤­½Ð¤·\n" - -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" -msgstr "¸°¥ê¥ó¥° `%s' ¤Î½ñ¤­¹þ¤ß¤Ë¼ºÇÔ: %s\n" - -#: g10/import.c:436 -#, c-format -msgid "key %08lX: public key imported\n" -msgstr "¸° %08lX: ¸ø³«¸°¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n" - -#: g10/import.c:453 -#, c-format -msgid "key %08lX: doesn't match our copy\n" -msgstr "¸° %08lX: ²æ¡¹¤ÎÊÝÍ­¤¹¤ë¸°¤È°Û¤Ê¤ê¤Þ¤¹\n" - -#: g10/import.c:462 g10/import.c:632 -#, c-format -msgid "key %08lX: can't locate original keyblock: %s\n" -msgstr "¸° %08lX: ¥ª¥ê¥¸¥Ê¥ë¤Î¸°¥Ö¥í¥Ã¥¯¤Ë°ÌÃ֤Ǥ­¤Þ¤»¤ó: %s\n" - -#: g10/import.c:484 -#, c-format -msgid "key %08lX: 1 new user ID\n" -msgstr "¸° %08lX: ¿·¤¿¤Ê¥æ¡¼¥¶ ID ¤ò 1 ¸Ä\n" - -#: g10/import.c:487 -#, c-format -msgid "key %08lX: %d new user IDs\n" -msgstr "¸° %08lX: ¿·¤¿¤Ê¥æ¡¼¥¶ ID ¤ò %d ¸Ä\n" +msgstr "¸° %08lX: ¿·¤·¤¤¸°¤Ç¤¹ - ¥¹¥­¥Ã¥×\n" #: g10/import.c:490 #, c-format -msgid "key %08lX: 1 new signature\n" -msgstr "¸° %08lX: ¿·¤¿¤Ê½ð̾¤ò 1 ¸Ä\n" +msgid "no writable keyring found: %s\n" +msgstr "½ñ¹þ¤ß²Äǽ¤Ê¸°Îؤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" -#: g10/import.c:493 +#: g10/import.c:495 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 +#, c-format +msgid "writing to `%s'\n" +msgstr "`%s'¤Ø¤Î½ñ½Ð¤·\n" + +#: g10/import.c:498 g10/import.c:569 g10/import.c:674 g10/import.c:783 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "¸°ÎØ`%s'¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n" + +#: g10/import.c:503 +#, c-format +msgid "key %08lX: public key imported\n" +msgstr "¸°%08lX: ¸ø³«¸°¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n" + +#: g10/import.c:522 +#, c-format +msgid "key %08lX: doesn't match our copy\n" +msgstr "¸°%08lX: ¤³¤Á¤é¤ÎÊ£À½¤È¹ç¤¤¤Þ¤»¤ó\n" + +#: g10/import.c:540 g10/import.c:740 +#, c-format +msgid "key %08lX: can't locate original keyblock: %s\n" +msgstr "¸°%08lX: ¸µ¤Î¸°¥Ö¥í¥Ã¥¯¤Ë°ÌÃ֤Ť±¤Ç¤­¤Þ¤»¤ó: %s\n" + +#: g10/import.c:547 g10/import.c:746 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "¸°%08lX: ¸µ¤Î¸°¥Ö¥í¥Ã¥¯¤òÆɤ߹þ¤á¤Þ¤»¤ó: %s\n" + +#: g10/import.c:574 +#, c-format +msgid "key %08lX: 1 new user ID\n" +msgstr "¸°%08lX: ¿·¤·¤¤¥æ¡¼¥¶¡¼ID¤ò1¸Ä\n" + +#: g10/import.c:577 +#, c-format +msgid "key %08lX: %d new user IDs\n" +msgstr "¸°%08lX: ¿·¤·¤¤¥æ¡¼¥¶¡¼ID¤ò%d¸Ä\n" + +#: g10/import.c:580 +#, c-format +msgid "key %08lX: 1 new signature\n" +msgstr "¸°%08lX: ¿·¤·¤¤½ð̾¤ò1¸Ä\n" + +#: g10/import.c:583 #, c-format msgid "key %08lX: %d new signatures\n" -msgstr "¸° %08lX: ¿·¤¿¤Ê½ð̾¤ò %d ¸Ä\n" +msgstr "¸°%08lX: ¿·¤·¤¤½ð̾¤ò%d¸Ä\n" -#: g10/import.c:496 +#: g10/import.c:586 #, c-format msgid "key %08lX: 1 new subkey\n" -msgstr "¸° %08lX: ¿·¤¿¤ÊÉû¸°¤ò 1 ¸Ä\n" +msgstr "¸°%08lX: ¿·¤·¤¤Éû¸°¤ò1¸Ä\n" -#: g10/import.c:499 +#: g10/import.c:589 #, c-format msgid "key %08lX: %d new subkeys\n" -msgstr "¸° %08lX: ¿·¤¿¤ÊÉû¸°¤ò %d ¸Ä\n" +msgstr "¸°%08lX: ¿·¤·¤¤Éû¸°¤ò%d¸Ä\n" -#: g10/import.c:509 +#: g10/import.c:599 #, c-format msgid "key %08lX: not changed\n" -msgstr "¸° %08lX: Êѹ¹¤Ê¤·\n" +msgstr "¸°%08lX: Êѹ¹¤Ê¤·\n" -#: g10/import.c:581 +#: g10/import.c:668 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "´ûÄê¤ÎÈëÌ©¸°Îؤ¬¤¢¤ê¤Þ¤»¤ó: %s\n" + +#: g10/import.c:679 #, c-format msgid "key %08lX: secret key imported\n" -msgstr "¸° %08lX: ÈëÌ©¸°¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n" +msgstr "¸°%08lX: ÈëÌ©¸°¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:683 #, c-format msgid "key %08lX: already in secret keyring\n" -msgstr "¸° %08lX: ´û¤ËÈëÌ©¸°¥ê¥ó¥°¤Ë¤¢¤ê¤Þ¤¹\n" +msgstr "¸°%08lX: ´û¤ËÈëÌ©¸°Îؤˤ¢¤ê¤Þ¤¹\n" -#: g10/import.c:590 +#: g10/import.c:688 #, c-format msgid "key %08lX: secret key not found: %s\n" -msgstr "¸° %08lX: ÈëÌ©¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" +msgstr "¸°%08lX: ÈëÌ©¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" -#: g10/import.c:618 +#: g10/import.c:717 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" -msgstr "¸° %08lX: ¸ø³«¸°¤¬¤¢¤ê¤Þ¤»¤ó - ÇË´þ¾ÚÌÀ½ñ¤ÎŬÍѤ¬¤Ç¤­¤Þ¤»¤ó\n" +msgstr "¸°%08lX: ¸ø³«¸°¤¬¤¢¤ê¤Þ¤»¤ó - ÇË´þ¾ÚÌÀ½ñ¤òŬÍѤǤ­¤Þ¤»¤ó\n" -#: g10/import.c:643 +#: g10/import.c:757 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" -msgstr "¸° %08lX: ̵¸ú¤ÊÇË´þ¾ÚÌÀ½ñ: %s - µñÈݤ·¤Þ¤·¤¿\n" +msgstr "¸°%08lX: ̵¸ú¤ÊÇË´þ¾ÚÌÀ½ñ: %s - µñÈÝ\n" -#: g10/import.c:670 +#: g10/import.c:788 #, c-format msgid "key %08lX: revocation certificate imported\n" -msgstr "¸° %08lX: ÇË´þ¾ÚÌÀ½ñ¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n" - -#: g10/import.c:712 -#, c-format -msgid "key %08lX: no user ID for signature\n" -msgstr "¸° %08lX: ½ð̾¤ËÂбþ¤¹¤ë¥æ¡¼¥¶ ID ¤¬¤¢¤ê¤Þ¤»¤ó\n" - -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" -msgstr "¸° %08lX: ¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹\n" - -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" -msgstr "¸° %08lX: ¼«¸Ê½ð̾¤¬Ìµ¸ú¤Ç¤¹\n" - -#: g10/import.c:735 -#, c-format -msgid "key %08lX: no subkey for key binding\n" -msgstr "¸° %08lX: ¸°¤ËÂбþ¤¹¤ëÉû¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" - -#: g10/import.c:744 -#, c-format -msgid "key %08lX: invalid subkey binding\n" -msgstr "¸° %08lX: ̵¸ú¤ÊÉû¸°¤ÎÂбþ¤Ç¤¹\n" - -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "¸° %08lX: ¼õ¤±Æþ¤ì¤¿¼«¸Ê½ð̾¤µ¤ì¤Æ¤¤¤Ê¤¤¥æ¡¼¥¶ ID '" - -#: g10/import.c:800 -#, c-format -msgid "key %08lX: skipped user ID '" -msgstr "¸° %08lX: ¥¹¥­¥Ã¥×¤·¤¿¥æ¡¼¥¶ ID '" +msgstr "¸°%08lX: ÇË´þ¾ÚÌÀ½ñ¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n" #: g10/import.c:823 #, c-format +msgid "key %08lX: no user ID for signature\n" +msgstr "¸°%08lX: ½ð̾¤ËÂбþ¤¹¤ë¥æ¡¼¥¶¡¼ID¤¬¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/import.c:836 +#, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "¸°%08lX: ¥æ¡¼¥¶¡¼id \"%s\" ¤Î¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹\n" + +#: g10/import.c:838 +#, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "¸°%08lX: ¥æ¡¼¥¶¡¼id \"%s\" ¤Î¼«¸Ê½ð̾¤¬Ìµ¸ú¤Ç¤¹\n" + +#: g10/import.c:855 +#, c-format +msgid "key %08lX: no subkey for key binding\n" +msgstr "¸°%08lX: ¸°¤ËÂбþ¤¹¤ëÉû¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/import.c:865 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "¸°%08lX: ¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹\n" + +#: g10/import.c:866 +#, c-format +msgid "key %08lX: invalid subkey binding\n" +msgstr "¸°%08lX: ̵¸ú¤ÊÉû¸°¤ÎÂбþ¤Ç¤¹\n" + +#: g10/import.c:896 +#, c-format +msgid "key %08lX: skipped user ID '" +msgstr "¸°%08lX: ¥¹¥­¥Ã¥×¤·¤¿¥æ¡¼¥¶¡¼ID '" + +#: g10/import.c:919 +#, c-format msgid "key %08lX: skipped subkey\n" -msgstr "¸° %08lX: ¥¹¥­¥Ã¥×¤·¤¿Éû¸°\n" +msgstr "¸°%08lX: ¥¹¥­¥Ã¥×¤·¤¿Éû¸°\n" #. here we violate the rfc a bit by still allowing #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:942 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" -msgstr "¸° %08lX: ½ñ¤­½Ð¤·ÉԲĤʽð̾ (class %02x) - ¥¹¥­¥Ã¥×\n" +msgstr "¸°%08lX: ½ñ½Ð¤·ÉԲĤʽð̾ (¥¯¥é¥¹%02x) - ¥¹¥­¥Ã¥×\n" -#: g10/import.c:857 +#: g10/import.c:951 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" -msgstr "¸° %08lX: ÇË´þ¾ÚÌÀ½ñ¤¬´Ö°ã¤Ã¤ÆÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹ - ¥¹¥­¥Ã¥×\n" +msgstr "¸°%08lX: ÇË´þ¾ÚÌÀ½ñ¤¬¸í¤Ã¤ÆÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹ - ¥¹¥­¥Ã¥×\n" -#: g10/import.c:865 +#: g10/import.c:968 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" -msgstr "¸° %08lX: ̵¸ú¤ÊÇË´þ¾ÚÌÀ½ñ: %s - ¥¹¥­¥Ã¥×\n" +msgstr "¸°%08lX: ̵¸ú¤ÊÇË´þ¾ÚÌÀ½ñ: %s - ¥¹¥­¥Ã¥×\n" -#: g10/import.c:965 +#: g10/import.c:1069 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" -msgstr "¸° %08lX: ½ÅÊ£¤·¤¿¥æ¡¼¥¶ ID ¤Î¸¡½Ð - ÄɲÃ\n" +msgstr "¸°%08lX: ½ÅÊ£¤·¤¿¥æ¡¼¥¶¡¼ID¤Î¸¡½Ð - Ê»¹ç\n" -#: g10/import.c:1016 +#: g10/import.c:1128 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "·Ù¹ð: ¸°%08lX¤ÏÇË´þ¤µ¤ì¤¿¤è¤¦¤Ç¤¹: ÇË´þ¸°%08lX¤Î°ú¤­½Ð¤·\n" + +#: g10/import.c:1142 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "·Ù¹ð: ¸°%08lX¤ÏÇË´þ¤µ¤ì¤¿¤è¤¦¤Ç¤¹: ÇË´þ¸°%08lX¤ÏÉԺߡ£\n" + +#: g10/import.c:1198 #, c-format msgid "key %08lX: revocation certificate added\n" -msgstr "¸° %08lX: ÇË´þ¾ÚÌÀ½ñ¤ÎÄɲÃ\n" +msgstr "¸°%08lX: ÇË´þ¾ÚÌÀ½ñ¤ÎÄɲÃ\n" -#: g10/import.c:1130 g10/import.c:1183 +#: g10/import.c:1228 #, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "¸° %08lX: ²æ¡¹¤Î¥³¥Ô¡¼¤Ë¤Ï¼«¸Ê½ð̾¤¬¤¢¤ê¤Þ¤»¤ó\n" +msgid "key %08lX: direct key signature added\n" +msgstr "¸°%08lX: ľÀܸ°½ð̾¤òÄɲÃ\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:140 msgid "[revocation]" msgstr "[ÇË´þ]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:141 msgid "[self-signature]" msgstr "[¼«¸Ê½ð̾]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:212 msgid "1 bad signature\n" -msgstr "̵¸ú¤Ê½ð̾ 1 ¸Ä\n" +msgstr "̵¸ú¤Ê½ð̾1¸Ä\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:214 #, c-format msgid "%d bad signatures\n" -msgstr "̵¸ú¤Ê½ð̾ %d ¸Ä\n" +msgstr "̵¸ú¤Ê½ð̾%d¸Ä\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:216 msgid "1 signature not checked due to a missing key\n" -msgstr "¸°¤¬Ìµ¤¤¤Î¤Ç 1 ¸Ä¤Î½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Þ¤»¤ó\n" +msgstr "¸°¤¬¤Ê¤¤¤¿¤á1¸Ä¤Î½ð̾¤ò¸¡¾Ú¤·¤Þ¤»¤ó\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:218 #, c-format msgid "%d signatures not checked due to missing keys\n" -msgstr "¸°¤¬Ìµ¤¤¤Î¤Ç %d ¸Ä¤Î½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Þ¤»¤ó\n" +msgstr "¸°¤¬¤Ê¤¤¤¿¤á%d¸Ä¤Î½ð̾¤ò¸¡¾Ú¤·¤Þ¤»¤ó\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:220 msgid "1 signature not checked due to an error\n" -msgstr "¸°¤¬Ìµ¤¤¤Î¤Ç 1 ¸Ä¤Î½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Þ¤»¤ó\n" +msgstr "¥¨¥é¡¼¤Î¤¿¤á1¸Ä¤Î½ð̾¤ò¸¡¾Ú¤·¤Þ¤»¤ó\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:222 #, c-format msgid "%d signatures not checked due to errors\n" -msgstr "%d ¸Ä¤Î½ð̾¤Ï¥¨¥é¡¼¤Ë¤è¤ê¸¡¾Ú¤µ¤ì¤Þ¤»¤ó\n" +msgstr "¥¨¥é¡¼¤Î¤¿¤á%d¸Ä¤Î½ð̾¤ò¸¡¾Ú¤·¤Þ¤»¤ó\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:224 msgid "1 user ID without valid self-signature detected\n" -msgstr "Í­¸ú¤Ê¼«¸Ê½ð̾¤Î̵¤¤¥æ¡¼¥¶ ID ¤¬ 1 ¸Ä¤¢¤ê¤Þ¤¹\n" +msgstr "Í­¸ú¤Ê¼«¸Ê½ð̾¤Î¤Ê¤¤¥æ¡¼¥¶¡¼ID¤ò1¸Ä¸¡½Ð\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:226 #, c-format msgid "%d user IDs without valid self-signatures detected\n" -msgstr "Í­¸ú¤Ê¼«¸Ê½ð̾¤Î̵¤¤¥æ¡¼¥¶ ID ¤¬ %d ¸Ä¤¢¤ê¤Þ¤¹\n" +msgstr "Í­¸ú¤Ê¼«¸Ê½ð̾¤Î¤Ê¤¤¥æ¡¼¥¶¡¼ID¤ò%d¸Ä¸¡½Ð\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:333 #, c-format -msgid "Already signed by key %08lX\n" -msgstr "¸° %08lX ¤Ë¤è¤Ã¤Æ´û¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n" +msgid "User ID \"%s\" is revoked." +msgstr "¥æ¡¼¥¶¡¼ID \"%s\" ¤ÏÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£" -#: g10/keyedit.c:319 +#: g10/keyedit.c:341 g10/keyedit.c:424 g10/keyedit.c:476 g10/keyedit.c:1048 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "¤½¤ì¤Ç¤â¤³¤Î¸°¤Ë½ð̾¤·¤¿¤¤¤Ç¤¹¤«? (y/N) " + +#: g10/keyedit.c:348 g10/keyedit.c:430 g10/keyedit.c:1054 +msgid " Unable to sign.\n" +msgstr " ½ð̾ÉÔǽ¡£\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:362 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"\"%s\" ¤Ë¤¿¤¤¤¹¤ëº£¤Î¤¢¤Ê¤¿¤Î½ð̾¤Ï\n" +"ÆâÉô½ð̾¤Ç¤¹¡£\n" + +#: g10/keyedit.c:366 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "½ñ½Ð¤·²Äǽ¤Ê½ð̾¤Ë³Ê¾å¤²¤·¤¿¤¤¤Ç¤¹¤«? (y/N) " + +#: g10/keyedit.c:386 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" ¤Ï¸°%08lX¤Ç¤â¤¦ÆâÉô½ð̾¤·¤Æ¤¢¤ê¤Þ¤¹\n" + +#: g10/keyedit.c:391 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" ¤Ï¸°%08lX¤Ç¤â¤¦½ð̾¤·¤Æ¤¢¤ê¤Þ¤¹\n" + +#: g10/keyedit.c:403 #, c-format msgid "Nothing to sign with key %08lX\n" -msgstr "¸° %08lX ¤Ë¤è¤Ã¤Æ½ð̾¤¹¤ë¤â¤Î¤Ï¤¢¤ê¤Þ¤»¤ó\n" +msgstr "¸°%08lX¤Ç½ð̾¤¹¤ë¤â¤Î¤Ï¤¢¤ê¤Þ¤»¤ó\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:418 +msgid "This key has expired!" +msgstr "¤³¤Î¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹!" + +#: g10/keyedit.c:436 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "¤³¤Î¸°¤Ï%s¤Ç´ü¸Â¤¬ÀÚ¤ì¤Þ¤¹¡£\n" + +#: g10/keyedit.c:440 +msgid "Do you want your signature to expire at the same time? (y/N) " +msgstr "Ʊ»þ¤Ë½ð̾¤â´ü¸ÂÀÚ¤ì¤Ë¤·¤¿¤¤¤Ç¤¹¤«? (y/N) " + +#: g10/keyedit.c:469 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "--pgp2¥â¡¼¥É¤Ç¤ÏPGP 2.x¸°¤ÇOpenPGP½ð̾¤¬¤Ç¤­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£\n" + +#: g10/keyedit.c:471 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "¤³¤Î¸°¤ÏPGP 2.x¤Ç»ÈÍѤǤ­¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£\n" + +#: g10/keyedit.c:492 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"½ð̾¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¸°¤¬¼ÂºÝ¤Ë¾åµ­¤Î̾Á°¤Î¿Í¤Î¤â¤Î¤«¤É¤¦¤«¡¢¤É¤ÎÄøÅÙ\n" +"Ãí°Õ¤·¤Æ¸¡¾Ú¤·¤Þ¤·¤¿¤«? Åú¤¬¤ï¤«¤é¤Ê¤±¤ì¤Ð\"0\"¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n" + +#: g10/keyedit.c:496 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Åú¤¨¤Þ¤»¤ó¡£%s\n" + +#: g10/keyedit.c:498 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Á´Á³¡¢³Îǧ¤·¤Æ¤¤¤Þ¤»¤ó¡£%s\n" + +#: g10/keyedit.c:500 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) °ì±þ¡¢³Îǧ¤·¤Þ¤·¤¿¡£%s\n" + +#: g10/keyedit.c:502 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) ¤«¤Ê¤êÃí°Õ¤·¤Æ³Îǧ¤·¤Þ¤·¤¿¡£%s\n" + +#: g10/keyedit.c:527 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" -msgstr "ËÜÅö¤Ë ¤³¤Î¸°¤Ë¤¢¤Ê¤¿¤Î¸°¤Ç½ð̾¤·¤ÆÎɤ¤¤Ç¤¹¤«: \"" +msgstr "ËÜÅö¤Ë¤³¤Î¸°¤Ë¤¢¤Ê¤¿¤Î¸°¤Ç½ð̾¤·¤Æ¤è¤¤¤Ç¤¹¤«: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:536 msgid "" +"\n" "The signature will be marked as non-exportable.\n" -"\n" -msgstr "" -"½ð̾¤Ï½ñ¤­½Ð¤·ÉԲĤËÀßÄꤵ¤ì¤Þ¤¹¡£\n" -"\n" +msgstr "\n½ð̾¤Ï½ñ½Ð¤·ÉԲĤËÀßÄꤵ¤ì¤Þ¤¹¡£\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:540 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "\n½ð̾¤ÏÇË´þÉԲĤËÀßÄꤵ¤ì¤Þ¤¹¡£\n" + +#: g10/keyedit.c:545 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "\n¤³¤Î¸°¤ÏÁ´Á³¡¢³Îǧ¤·¤Æ¤¤¤Þ¤»¤ó¡£\n" + +#: g10/keyedit.c:549 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "\n¤³¤Î¸°¤Ï°ì±þ¡¢³Îǧ¤·¤Þ¤·¤¿¡£\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "\n¤³¤Î¸°¤Ï¡¢¤«¤Ê¤êÃí°Õ¤·¤Æ³Îǧ¤·¤Þ¤·¤¿¡£\n" + +#: g10/keyedit.c:561 msgid "Really sign? " msgstr "ËÜÅö¤Ë½ð̾¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:594 g10/keyedit.c:2570 g10/keyedit.c:2632 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "½ð̾¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:653 msgid "This key is not protected.\n" msgstr "¤³¤Î¸°¤ÏÊݸ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" -#: g10/keyedit.c:426 -#, fuzzy +#: g10/keyedit.c:657 msgid "Secret parts of primary key are not available.\n" -msgstr "ÈëÌ©¸°¤¬¤¢¤ê¤Þ¤»¤ó" +msgstr "¼ç¸°¤ÎÈëÌ©Éôʬ¤¬ÆÀ¤é¤ì¤Þ¤»¤ó¡£\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:661 msgid "Key is protected.\n" msgstr "¸°¤ÏÊݸ¤ì¤Æ¤¤¤Þ¤¹¡£\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:681 #, c-format msgid "Can't edit this key: %s\n" -msgstr "¤³¤Î¸°¤òÊÔ½¸¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó: %s\n" +msgstr "¤³¤Î¸°¤ÏÊÔ½¸¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:687 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" -"¤³¤ÎÈëÌ©¸°¤ËÂФ¹¤ë¿·¤·¤¤¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£\n" +"¤³¤ÎÈëÌ©¸°¤Î¿·¤·¤¤¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:701 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" -"¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬ÉÔɬÍפʤ褦¤Ç¤¹¤¬¡¢¤½¤ì¤Ï°­¤¤¹Í¤¨¤Ç¤¹!\n" +"¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬ÉÔɬÍפʤ褦¤Ç¤¹¤¬¡¢\n" +"¤ª¤½¤é¤¯¤½¤ì¤Ï¤í¤¯¤Ê¹Í¤¨¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:704 msgid "Do you really want to do this? " msgstr "ËÜÅö¤Ë¼Â¹Ô¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:768 msgid "moving a key signature to the correct place\n" msgstr "¸°¤Î½ð̾¤òÀµ¤·¤¤¾ì½ê¤Ë°ÜÆ°¤·¤Þ¤¹\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:810 msgid "quit this menu" msgstr "¤³¤Î¥á¥Ë¥å¡¼¤ò½ªÎ»" -#: g10/keyedit.c:576 +#: g10/keyedit.c:811 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:812 msgid "save" msgstr "save" -#: g10/keyedit.c:577 +#: g10/keyedit.c:812 msgid "save and quit" msgstr "Êݸ¤·¤Æ½ªÎ»" -#: g10/keyedit.c:578 +#: g10/keyedit.c:813 msgid "help" msgstr "help" -#: g10/keyedit.c:578 +#: g10/keyedit.c:813 msgid "show this help" msgstr "¤³¤Î¥Ø¥ë¥×¤ò¸«¤ë" -#: g10/keyedit.c:580 +#: g10/keyedit.c:815 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:815 msgid "show fingerprint" msgstr "»ØÌæ¤ò¸«¤ë" -#: g10/keyedit.c:581 +#: g10/keyedit.c:816 msgid "list" msgstr "list" -#: g10/keyedit.c:581 +#: g10/keyedit.c:816 msgid "list key and user IDs" -msgstr "¸°¤È¥æ¡¼¥¶ ID ¤Î°ìÍ÷" +msgstr "¸°¤È¥æ¡¼¥¶¡¼ID¤Î°ìÍ÷" -#: g10/keyedit.c:582 +#: g10/keyedit.c:817 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:818 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:818 msgid "select user ID N" -msgstr "¥æ¡¼¥¶ ID N ¤ÎÁªÂò" +msgstr "¥æ¡¼¥¶¡¼ID N¤ÎÁªÂò" -#: g10/keyedit.c:584 +#: g10/keyedit.c:819 msgid "key" msgstr "key" -#: g10/keyedit.c:584 +#: g10/keyedit.c:819 msgid "select secondary key N" -msgstr "Éû¸° N ¤ÎÁªÂò" +msgstr "Éû¸°N¤ÎÁªÂò" -#: g10/keyedit.c:585 +#: g10/keyedit.c:820 msgid "check" msgstr "check" -#: g10/keyedit.c:585 +#: g10/keyedit.c:820 msgid "list signatures" msgstr "½ð̾¤Î°ìÍ÷" -#: g10/keyedit.c:586 +#: g10/keyedit.c:821 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:822 msgid "sign" msgstr "sign" -#: g10/keyedit.c:587 +#: g10/keyedit.c:822 msgid "sign the key" msgstr "¸°¤Ø½ð̾" -#: g10/keyedit.c:588 +#: g10/keyedit.c:823 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:824 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:589 +#: g10/keyedit.c:824 msgid "sign the key locally" -msgstr "¸°¤Ë½ñ¤­½Ð¤·ÉԲĤʽð̾" +msgstr "¸°¤ØÆâÉôŪ¤Ë½ð̾" -#: g10/keyedit.c:590 +#: g10/keyedit.c:825 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:825 +msgid "sign the key non-revocably" +msgstr "ÇË´þ¤Ç¤­¤Ê¤¤¤è¤¦¸°¤Ø½ð̾" + +#: g10/keyedit.c:826 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:826 +msgid "sign the key locally and non-revocably" +msgstr "ÇË´þ¤Ç¤­¤Ê¤¤¤è¤¦¸°¤ØÆâÉôŪ¤Ë½ð̾" + +#: g10/keyedit.c:827 msgid "debug" msgstr "debug" -#: g10/keyedit.c:591 +#: g10/keyedit.c:828 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:828 msgid "add a user ID" -msgstr "¥æ¡¼¥¶ ID ¤ÎÄɲÃ" +msgstr "¥æ¡¼¥¶¡¼ID¤ÎÄɲÃ" -#: g10/keyedit.c:592 +#: g10/keyedit.c:829 +msgid "addphoto" +msgstr "addphoto" + +#: g10/keyedit.c:829 +msgid "add a photo ID" +msgstr "¥Õ¥©¥ÈID¤ÎÄɲÃ" + +#: g10/keyedit.c:830 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:830 msgid "delete user ID" -msgstr "¥æ¡¼¥¶ ID ¤Î¾Ãµî" +msgstr "¥æ¡¼¥¶¡¼ID¤Îºï½ü" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:832 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:833 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:593 +#: g10/keyedit.c:833 msgid "add a secondary key" msgstr "Éû¸°¤ÎÄɲÃ" -#: g10/keyedit.c:594 +#: g10/keyedit.c:834 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:594 +#: g10/keyedit.c:834 msgid "delete a secondary key" msgstr "Éû¸°¤Îºï½ü" -#: g10/keyedit.c:595 +#: g10/keyedit.c:835 msgid "delsig" msgstr "delsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:835 msgid "delete signatures" msgstr "½ð̾¤Îºï½ü" -#: g10/keyedit.c:596 +#: g10/keyedit.c:836 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:836 msgid "change the expire date" msgstr "Í­¸ú´ü¸Â¤ÎÊѹ¹" -#: g10/keyedit.c:597 +#: g10/keyedit.c:837 +msgid "primary" +msgstr "primary" + +#: g10/keyedit.c:837 +msgid "flag user ID as primary" +msgstr "¥æ¡¼¥¶¡¼ID¤ò¼ç¤Ë¤¹¤ë" + +#: g10/keyedit.c:838 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:597 +#: g10/keyedit.c:838 msgid "toggle between secret and public key listing" -msgstr "ÈëÌ©¸°¤È¸ø³«¸°°ìÍ÷¤ÎÀÚ¤êÂؤ¨" +msgstr "ÈëÌ©¸°¤È¸ø³«¸°¤Î°ìÍ÷¤ÎÀÚÂؤ¨" -#: g10/keyedit.c:599 +#: g10/keyedit.c:840 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:841 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "Í¥Àè½ç°Ì¤Î°ìÍ÷" +#: g10/keyedit.c:841 +msgid "list preferences (expert)" +msgstr "Áª¹¥¤Î°ìÍ÷ (¥¨¥­¥¹¥Ñ¡¼¥È)" -#: g10/keyedit.c:601 +#: g10/keyedit.c:842 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:842 +msgid "list preferences (verbose)" +msgstr "Áª¹¥¤Î°ìÍ÷ (¾éĹ)" + +#: g10/keyedit.c:843 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:843 +msgid "set preference list" +msgstr "Áª¹¥¤Î°ìÍ÷¤òÀßÄê" + +#: g10/keyedit.c:844 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:844 +msgid "updated preferences" +msgstr "Áª¹¥¤Î°ìÍ÷¤ò¹¹¿·" + +#: g10/keyedit.c:845 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:601 +#: g10/keyedit.c:845 msgid "change the passphrase" msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ÎÊѹ¹" -#: g10/keyedit.c:602 +#: g10/keyedit.c:846 msgid "trust" msgstr "trust" -#: g10/keyedit.c:602 +#: g10/keyedit.c:846 msgid "change the ownertrust" -msgstr "¼«¸Ê½ð̾¤ÎÊѹ¹" +msgstr "½êÍ­¼Ô¿®ÍѤÎÊѹ¹" -#: g10/keyedit.c:603 +#: g10/keyedit.c:847 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:847 msgid "revoke signatures" msgstr "½ð̾¤ÎÇË´þ" -#: g10/keyedit.c:604 +#: g10/keyedit.c:848 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:604 +#: g10/keyedit.c:848 msgid "revoke a secondary key" msgstr "Éû¸°¤ÎÇË´þ" -#: g10/keyedit.c:605 +#: g10/keyedit.c:849 msgid "disable" msgstr "disable" -#: g10/keyedit.c:605 +#: g10/keyedit.c:849 msgid "disable a key" -msgstr "¸°¤ò»ÈÍÑÉԲĤˤ¹¤ë" +msgstr "¸°¤Î»ÈÍѤò¶Ø»ß¤¹¤ë" -#: g10/keyedit.c:606 +#: g10/keyedit.c:850 msgid "enable" msgstr "enable" -#: g10/keyedit.c:606 +#: g10/keyedit.c:850 msgid "enable a key" -msgstr "¸°¤ò»ÈÍѲĤˤ¹¤ë" +msgstr "¸°¤Î»ÈÍѤòµö²Ä¤¹¤ë" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:851 +msgid "showphoto" +msgstr "showphoto" + +#: g10/keyedit.c:851 +msgid "show photo ID" +msgstr "¥Õ¥©¥ÈID¤òɽ¼¨" + +#: g10/delkey.c:112 g10/keyedit.c:871 msgid "can't do that in batchmode\n" -msgstr "¤½¤ì¤Ï¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¼Â¹Ô¤Ç¤­¤Þ¤»¤ó\n" +msgstr "¤½¤ì¤Ï¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¤Ç¤­¤Þ¤»¤ó\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:908 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "ÈëÌ©¸°¥Ö¥í¥Ã¥¯`%s'¤ÎÆɹþ¤ß¥¨¥é¡¼: %s\n" + +#: g10/keyedit.c:926 msgid "Secret key is available.\n" -msgstr "ÈëÌ©¸°¤¬»ÈÍѤǤ­¤Þ¤¹\n" +msgstr "ÈëÌ©¸°¤¬»ÈÍѤǤ­¤Þ¤¹¡£\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:957 msgid "Command> " msgstr "¥³¥Þ¥ó¥É> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:989 msgid "Need the secret key to do this.\n" -msgstr "¤³¤ì¤ò¼Â¹Ô¤¹¤ë¤Ë¤ÏÈëÌ©¸°¤¬É¬ÍפǤ¹¡£\n" +msgstr "¤³¤Î¼Â¹Ô¤Ë¤ÏÈëÌ©¸°¤¬¤¤¤ê¤Þ¤¹¡£\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:993 msgid "Please use the command \"toggle\" first.\n" -msgstr "" +msgstr "¤Þ¤º¡Ötoggle¡×¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1042 +msgid "Key is revoked." +msgstr "¸°¤ÏÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£" + +#: g10/keyedit.c:1061 msgid "Really sign all user IDs? " -msgstr "Á´¤Æ¤Î¥æ¡¼¥¶ ID ¤Ë ËÜÅö¤Ë ½ð̾¤·¤Þ¤¹¤«? " +msgstr "ËÜÅö¤ËÁ´¥æ¡¼¥¶¡¼ID¤Ë½ð̾¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1062 msgid "Hint: Select the user IDs to sign\n" -msgstr "¥Ò¥ó¥È: ½ð̾¤¹¤ë¥æ¡¼¥¶ ID ¤òÁªÂò\n" +msgstr "¥³¥Ä: ¤Þ¤º½ð̾¤¹¤ë¥æ¡¼¥¶¡¼ID¤òÁªÂò¤·¤Þ¤¹\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1087 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¹¹¿·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "%s¥â¡¼¥É¤Ç¤³¤Î¥³¥Þ¥ó¥É¤òÍѤ¤¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£\n" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1107 g10/keyedit.c:1128 msgid "You must select at least one user ID.\n" -msgstr "¾¯¤Ê¤¯¤È¤â 1 ¸Ä¤Î¥æ¡¼¥¶ ID ¤òÁªÂò¤·¤Æ²¼¤µ¤¤¡£\n" +msgstr "¥æ¡¼¥¶¡¼ID¤ò¾¯¤Ê¤¯¤È¤â¤Ò¤È¤ÄÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1109 msgid "You can't delete the last user ID!\n" -msgstr "ºÇ¸å¥æ¡¼¥¶ ID ¤Î½ð̾¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó\n" +msgstr "ºÇ¸å¤Î¥æ¡¼¥¶¡¼ID¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1112 msgid "Really remove all selected user IDs? " -msgstr "ÁªÂò¤·¤¿¥æ¡¼¥¶ ID ¤ò ËÜÅö¤Ë ºï½ü¤·¤Þ¤¹¤«? " +msgstr "ÁªÂò¤·¤¿Á´¥æ¡¼¥¶¡¼ID¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1113 msgid "Really remove this user ID? " -msgstr "¤³¤Î¥æ¡¼¥¶ ID ¤ò ËÜÅö¤Ë ºï½ü¤·¤Þ¤¹¤«? " +msgstr "¤³¤Î¥æ¡¼¥¶¡¼ID¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1151 g10/keyedit.c:1173 msgid "You must select at least one key.\n" -msgstr "¾¯¤Ê¤¯¤È¤â 1 ¸Ä¤Î¸°¤òÁªÂò¤·¤Æ²¼¤µ¤¤¡£\n" +msgstr "¸°¤ò¾¯¤Ê¤¯¤È¤â¤Ò¤È¤ÄÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1155 msgid "Do you really want to delete the selected keys? " -msgstr "ÁªÂò¤·¤¿¸°¤ò ËÜÅö¤Ë ºï½ü¤·¤Þ¤¹¤«? " +msgstr "ÁªÂò¤·¤¿¸°¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1156 msgid "Do you really want to delete this key? " -msgstr "¤³¤Î¸°¤ò ËÜÅö¤Ë ºï½ü¤·¤Þ¤¹¤«? " +msgstr "¤³¤Î¸°¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1177 msgid "Do you really want to revoke the selected keys? " -msgstr "ÁªÂò¤·¤¿¸°¤ò ËÜÅö¤Ë ÇË´þ¤·¤Þ¤¹¤«? " +msgstr "ÁªÂò¤·¤¿¸°¤òËÜÅö¤ËÇË´þ¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1178 msgid "Do you really want to revoke this key? " -msgstr "¤³¤Î¸°¤ò ËÜÅö¤Ë ÇË´þ¤·¤Þ¤¹¤«? " +msgstr "¤³¤Î¸°¤òËÜÅö¤ËÇË´þ¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1244 +msgid "Really update the preferences for the selected user IDs? " +msgstr "ÁªÂò¤·¤¿¥æ¡¼¥¶¡¼ID¤ÎÁª¹¥¤òËÜÅö¤Ë¹¹¿·¤·¤Þ¤¹¤«? " + +#: g10/keyedit.c:1246 +msgid "Really update the preferences? " +msgstr "Áª¹¥¤òËÜÅö¤Ë¹¹¿·¤·¤Þ¤¹¤«? " + +#: g10/keyedit.c:1284 msgid "Save changes? " msgstr "Êѹ¹¤òÊݸ¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1287 msgid "Quit without saving? " msgstr "Êݸ¤»¤º¤Ë½ªÎ»¤·¤Þ¤¹¤«? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1298 #, c-format msgid "update failed: %s\n" -msgstr "¹¹¿·¤Ë¼ºÇÔ: %s\n" +msgstr "¹¹¿·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1305 #, c-format msgid "update secret failed: %s\n" -msgstr "ÈëÌ©¸°¤Î¹¹¿·¤Ë¼ºÇÔ: %s\n" +msgstr "ÈëÌ©¸°¤Î¹¹¿·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1312 msgid "Key not changed so no update needed.\n" -msgstr "¸°¤ÏÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¤Î¤Ç¹¹¿·¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£\n" +msgstr "¸°¤Ï̵Êѹ¹¤Ê¤Î¤Ç¹¹¿·¤Ï¤¤¤ê¤Þ¤»¤ó¡£\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1323 msgid "Invalid command (try \"help\")\n" -msgstr "̵¸ú¤Ê¥³¥Þ¥ó¥É (\"help\" ¤ò¸«¤è)\n" +msgstr "̵¸ú¤Ê¥³¥Þ¥ó¥É (¡Öhelp¡×¤ò»²¾È)\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1480 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "¤³¤Î¸°¤Ï%s¸°%s%s¤Ë¤è¤Ã¤ÆÇË´þ¤µ¤ì¤¿¤è¤¦¤Ç¤¹\n" + +#: g10/keyedit.c:1483 +msgid " (sensitive)" +msgstr " (¥Ç¥ê¥±¡¼¥È)" + +#: g10/keyedit.c:1488 g10/keyedit.c:1514 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX ºîÀ®: %s ´ü¸Â: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1497 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " trust: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1501 msgid "This key has been disabled" -msgstr "¤³¤Î¸°¤Ï»ÈÍÑÉԲĤËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹" +msgstr "¤³¤Î¸°¤Ï»ÈÍѶػߤËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1530 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "¸° %08lX: Éû¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹!\n" +msgstr "rev! Éû¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1533 msgid "rev- faked revocation found\n" -msgstr " ¿·¤¿¤Ê¸°¤ÎÇË´þ: %lu\n" +msgstr "rev- ¤Ç¤Ã¤Á¤¢¤²¤ÎÇË´þ¤òȯ¸«\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1535 #, c-format msgid "rev? problem checking revocation: %s\n" -msgstr "" +msgstr "rev? ÇË´þ³Îǧ¾ã³²: %s\n" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1565 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" +"¥×¥í¥°¥é¥à¤òºÆµ¯Æ°¤¹¤ë¤Þ¤Ç¡¢É½¼¨¤µ¤ì¤¿¸°¤ÎÍ­¸úÀ­¤ÏÀµ¤·¤¯¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡¢\n" +"¤È¤¤¤¦¤³¤È¤òǰƬ¤ËÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£\n" + +#: g10/keyedit.c:1651 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"·Ù¹ð: ¤³¤Î¸°¤Ë¤Ï¤â¤¦¥Õ¥©¥ÈID¤¬¤¢¤ê¤Þ¤¹¡£\n" +" °ã¤¦¥Õ¥©¥ÈID¤òÄɲ乤ë¤È¡¢°ìÉô¤ÎÈǤÎPGP¤Ïº®Í𤹤뤫¤â¤·¤ì¤Þ¤»¤ó¡£\n" + +#: g10/keyedit.c:1655 g10/keyedit.c:1682 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "¤½¤ì¤Ç¤âÄɲä·¤¿¤¤¤Ç¤¹¤«? (y/N) " + +#: g10/keyedit.c:1663 +msgid "You may only have one photo ID on a key.\n" +msgstr "1Ëܤθ°¤Ë¤Ï¥Õ¥©¥ÈID¤ò¤Ò¤È¤ÄÉÕ¤±¤é¤ì¤ë¤À¤±¤Ç¤¹¡£\n" + +#: g10/keyedit.c:1677 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"·Ù¹ð: ¤³¤ì¤ÏPGP2·Á¼°¤Î¸°¤Ç¤¹¡£¥Õ¥©¥ÈID¤ÎÄɲäǡ¢°ìÉô¤ÎÈǤÎPGP¤Ï¡¢\n" +" ¤³¤Î¸°¤òµñÈݤ¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£\n" + +#: g10/keyedit.c:1688 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "PGP2·Á¼°¤Î¸°¤Ë¤Ï¥Õ¥©¥ÈID¤òÄɲäǤ­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£\n" + +#: g10/keyedit.c:1819 msgid "Delete this good signature? (y/N/q)" msgstr "¤³¤ÎÀµ¤·¤¤½ð̾¤òºï½ü¤·¤Þ¤¹¤«? (y/N/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1823 msgid "Delete this invalid signature? (y/N/q)" msgstr "¤³¤Î̵¸ú¤Ê½ð̾¤òºï½ü¤·¤Þ¤¹¤«? (y/N/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1827 msgid "Delete this unknown signature? (y/N/q)" -msgstr "¤³¤ÎÉÔÌÀ¤Ê½ð̾¤òºï½ü¤·¤Þ¤¹¤«? (y/N/q)" +msgstr "¤³¤Î̤ÃΤνð̾¤òºï½ü¤·¤Þ¤¹¤«? (y/N/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1833 msgid "Really delete this self-signature? (y/N)" -msgstr "¤³¤Î¼«¸Ê½ð̾¤ò ËÜÅö¤Ë ºï½ü¤·¤Þ¤¹¤«? (y/N)" +msgstr "¤³¤Î¼«¸Ê½ð̾¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? (y/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1847 #, c-format msgid "Deleted %d signature.\n" -msgstr "%d ¸Ä¤Î½ð̾¤òºï½ü¤·¤Þ¤·¤¿¡£\n" +msgstr "%d¸Ä¤Î½ð̾¤òºï½ü¤·¤Þ¤·¤¿¡£\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1848 #, c-format msgid "Deleted %d signatures.\n" -msgstr "%d ¸Ä¤Î½ð̾¤òºï½ü¤·¤Þ¤·¤¿¡£\n" +msgstr "%d¸Ä¤Î½ð̾¤òºï½ü¤·¤Þ¤·¤¿¡£\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1851 msgid "Nothing deleted.\n" msgstr "²¿¤âºï½ü¤·¤Æ¤¤¤Þ¤»¤ó¡£\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1920 msgid "Please remove selections from the secret keys.\n" -msgstr "ÈëÌ©¸°¤ÎÁªÂò¤òºï½ü¤·¤Æ²¼¤µ¤¤¡£\n" +msgstr "ÈëÌ©¸°¤ÎÁªÂò¤ò¤È¤¤¤Æ¤¯¤À¤µ¤¤¡£\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1926 msgid "Please select at most one secondary key.\n" -msgstr "¿¤¯¤Æ¤â 1 ¸Ä¤ÎÉû¸°¤òÁªÂò¤·¤Æ²¼¤µ¤¤¡£\n" +msgstr "¹â¡¹1¸Ä¤ÎÉû¸°¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1930 msgid "Changing expiration time for a secondary key.\n" msgstr "Éû¸°¤ÎÍ­¸ú´ü¸Â¤òÊѹ¹¤·¤Þ¤¹¡£\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1932 msgid "Changing expiration time for the primary key.\n" msgstr "¼ç¸°¤ÎÍ­¸ú´ü¸Â¤òÊѹ¹¤·¤Þ¤¹¡£\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1974 msgid "You can't change the expiration date of a v3 key\n" -msgstr "v3 ¸°¤ÎÍ­¸ú´ü¸Â¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹\n" +msgstr "v3¸°¤ÎÍ­¸ú´ü¸Â¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:1990 msgid "No corresponding signature in secret ring\n" -msgstr "ÈëÌ©¸°¥ê¥ó¥°¤ËÂбþ¤¹¤ë½ð̾¤¬¤¢¤ê¤Þ¤»¤ó\n" +msgstr "ÈëÌ©¸°ÎؤËÂбþ¤¹¤ë½ð̾¤¬¤¢¤ê¤Þ¤»¤ó\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2072 +msgid "Please select exactly one user ID.\n" +msgstr "¥æ¡¼¥¶¡¼ID¤ò¤­¤Ã¤«¤ê¤Ò¤È¤ÄÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n" + +#: g10/keyedit.c:2260 #, c-format msgid "No user ID with index %d\n" -msgstr "%d È֤Υ桼¥¶ ID ¤Ï¤¢¤ê¤Þ¤»¤ó\n" +msgstr "%dÈ֤Υ桼¥¶¡¼ID¤Ï¤¢¤ê¤Þ¤»¤ó\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2306 #, c-format msgid "No secondary key with index %d\n" -msgstr "%d ÈÖ¤ÎÉû¸°¤Ï¤¢¤ê¤Þ¤»¤ó\n" +msgstr "%dÈÖ¤ÎÉû¸°¤Ï¤¢¤ê¤Þ¤»¤ó\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2420 msgid "user ID: \"" -msgstr "¥æ¡¼¥¶ ID: \"" +msgstr "¥æ¡¼¥¶¡¼ID: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2425 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" "\"\n" -"¤¢¤Ê¤¿¤Î¸° %08lX ¤Ç %s ¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n" +"¤¢¤Ê¤¿¤Î¸°%08lX¤Ç%s¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" -msgstr "¤³¤Î½ð̾¤ËÂФ¹¤ëÇË´þ¾ÚÌÀ½ñ¤òºîÀ®¤·¤Þ¤¹¤«? (y/N)" +#: g10/keyedit.c:2428 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"¤¢¤Ê¤¿¤Î¸°%08lX¤Ç%s¤ËÆâÉôŪ¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n" + +#: g10/keyedit.c:2433 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "¤³¤Î½ð̾¤Ï%s¤Ç´ü¸ÂÀÚ¤ì¤Ç¤¹¡£\n" + +#: g10/keyedit.c:2437 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "¤½¤ì¤Ç¤âÇË´þ¤·¤¿¤¤¤Ç¤¹¤«? (y/N) " + +#: g10/keyedit.c:2441 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "¤³¤Î½ð̾¤Ë¤¿¤¤¤¹¤ëÇË´þ¾ÚÌÀ½ñ¤òºî¤ê¤Þ¤¹¤«? (y/N) " #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2467 msgid "You have signed these user IDs:\n" -msgstr "¤³¤ì¤é¤Î¥æ¡¼¥¶ ID ¤Ë½ð̾¤·¤Þ¤·¤¿:\n" +msgstr "¤³¤ì¤é¤Î¥æ¡¼¥¶¡¼ID¤Ë½ð̾¤·¤Þ¤·¤¿:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 +#: g10/keyedit.c:2481 #, c-format -msgid " signed by %08lX at %s\n" -msgstr " %08lX ¤Ë¤è¤Ã¤Æ %s ¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n" +msgid " signed by %08lX at %s%s%s\n" +msgstr " %08lX¤Ç%s%s%s¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2489 #, c-format msgid " revoked by %08lX at %s\n" -msgstr " %08lX ¤Ë¤è¤Ã¤Æ %s ¤ËÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹\n" +msgstr " %08lX¤Ç%s¤ËÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2509 msgid "You are about to revoke these signatures:\n" -msgstr "¤¢¤Ê¤¿¤Ï¤³¤ì¤é¤Î½ð̾¤òÇË´þ¤¹¤ë¤«Ì¤äƤ¤¤Þ¤¹:\n" +msgstr "¤³¤ì¤é¤Î½ð̾¤òÇË´þ¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" -msgstr "ÇË´þ¾ÚÌÀ½ñ¤ò ËÜÅö¤Ë ºîÀ®¤·¤Þ¤¹¤«? (y/N)" +#: g10/keyedit.c:2519 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " %08lX¤Ç%s%s¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2521 +msgid " (non-exportable)" +msgstr " (½ñ½Ð¤·ÉÔ²Ä)" + +#: g10/keyedit.c:2528 +msgid "Really create the revocation certificates? (y/N) " +msgstr "ÇË´þ¾ÚÌÀ½ñ¤òËÜÅö¤Ëºî¤ê¤Þ¤¹¤«? (y/N) " + +#: g10/keyedit.c:2558 msgid "no secret key\n" msgstr "ÈëÌ©¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "̵¸ú¤ÊÁõ¹Ã¤Ç¤¹" +#: g10/keyedit.c:2710 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "%s¤ò¥µ¥¤¥º%ld¤Î¸°0x%08lX (uid %d) ¤Î¥Õ¥©¥ÈID¤È¤·¤Æɽ¼¨\n" -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "revkey" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:82 +msgid "Signature policy: " +msgstr "½ð̾¥Ý¥ê¥·¡¼: " + +#: g10/keylist.c:107 g10/keylist.c:127 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "·Ù¹ð: ̵¸ú¤ÊÃí¼á¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤¹\n" + +#. This is UTF8 +#: g10/keylist.c:115 +msgid "Signature notation: " +msgstr "½ð̾Ãí¼á: " + +#: g10/keylist.c:122 +msgid "not human readable" +msgstr "¿Í¤Ë¤ÏÆɤá¤Þ¤»¤ó" + +#: g10/keylist.c:187 +msgid "Keyring" +msgstr "¸°ÎØ" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 -#, fuzzy, c-format -msgid " [expires: %s]" -msgstr "¸°¤Ï %s ¤Ë¤Æ´ü¸ÂÀÚ¤ì¤Ë¤Ê¤ê¤Þ¤¹\n" - -#: g10/mainproc.c:212 +#: g10/keylist.c:387 g10/mainproc.c:856 #, c-format -msgid "public key is %08lX\n" -msgstr "¸ø³«¸°¤Ï %08lX ¤Ç¤¹\n" +msgid " [expires: %s]" +msgstr " [Í­¸ú´ü¸Â: %s]" -#: g10/mainproc.c:247 -msgid "public key encrypted data: good DEK\n" -msgstr "¸ø³«¸°¤Ç°Å¹æ²½¤µ¤ì¤¿¥Ç¡¼¥¿: Àµ¤·¤¤ DEK ¤Ç¤¹\n" +#: g10/keylist.c:852 +msgid "Fingerprint:" +msgstr "»ØÌæ:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:858 +msgid " Fingerprint:" +msgstr " »ØÌæ:" + +#: g10/keylist.c:862 +msgid " Key fingerprint =" +msgstr " »ØÌæ =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s°Å¹æ²½¤µ¤ì¤¿¥Ç¡¼¥¿\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "̤ÃΤΥ¢¥ë¥´¥ê¥º¥à¤Ë¤è¤ë°Å¹æ %d\n" #: g10/mainproc.c:280 #, c-format -msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" -msgstr "%u ¥Ó¥Ã¥È %s ¸°, ID %08lX ¤Ë¤è¤Ã¤Æ°Å¹æ²½¤µ¤ì¤Þ¤·¤¿ %s\n" +msgid "public key is %08lX\n" +msgstr "¸ø³«¸°¤Ï%08lX¤Ç¤¹\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:326 +msgid "public key encrypted data: good DEK\n" +msgstr "¸ø³«¸°¤Ç°Å¹æ²½¤µ¤ì¤¿¥Ç¡¼¥¿: Àµ¤·¤¤DEK¤Ç¤¹\n" + +#: g10/mainproc.c:378 +#, c-format +msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" +msgstr "%u-¥Ó¥Ã¥È%s¸°, ID %08lX¤Ç°Å¹æ²½%s¤Ë¤Ç¤­¤Þ¤·¤¿\n" + +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" -msgstr "%s ¸°, ID %08lX ¤Ë¤è¤Ã¤Æ°Å¹æ²½¤µ¤ì¤Þ¤·¤¿\n" +msgstr "%s¸°, ID %08lX¤Ç°Å¹æ²½¤µ¤ì¤Þ¤·¤¿\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "Éü¹æ¤ËɬÍפÊÈëÌ©¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" -msgstr "¸ø³«¸°¤ÎÉü¹æ¤Ë¼ºÇÔ: %s\n" +msgstr "¸ø³«¸°¤ÎÉü¹æ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "%s°Å¹æ²½¤µ¤ì¤¿¥Ç¡¼¥¿¤ò²¾Äê\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "IDEA°Å¹æ¤ÏÍøÍÑÉÔǽ¤Ê¤Î¤Ç¡¢³ÚŷŪ¤Ç¤¹¤¬%s¤ÇÂåÍѤ·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹\n" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "Éü¹æ¤ËÀ®¸ù\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "·Ù¹ð: °Å¹æ²½¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤Ï²þã⤵¤ì¤Æ¤¤¤Þ¤¹!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" -msgstr "Éü¹æ¤Ë¼ºÇÔ: %s\n" +msgstr "Éü¹æ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" -msgstr "Ãí°Õ: Á÷¿®¼Ô¤Ï¡ÖÆɤ߽ª¤¨¤¿¤éºï½ü¤¹¤ë¡×¤è¤¦¤Ëµá¤á¤Æ¤¤¤Þ¤¹\n" +msgstr "Ãí°Õ: Á÷¿®¼Ô¤Ï¡ÖÆâ½ï¤Ë¤¹¤ë¡×¤è¤¦¤Ëµá¤á¤Æ¤¤¤Þ¤¹\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "¸µ¤Î¥Õ¥¡¥¤¥ë̾='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "ÆÈΩÇË´þ¡£¡Ögpg --import¡×¤ò»È¤Ã¤ÆŬÍѤ·¤Æ¤¯¤À¤µ¤¤\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "·Ù¹ð: ̵¸ú¤ÊÃí¼á¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤¹\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Ãí¼á: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "¥Ý¥ê¥·¡¼: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" -msgstr "½ð̾¤Î¸¡¾Ú¤¬¤Ç¤­¤Þ¤»¤ó\n" +msgstr "½ð̾¤Î¸¡¾Ú¤ò¾Êά\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "¤³¤Î¿½Å½ð̾¤Ï¼è¤ê°·¤¨¤Þ¤»¤ó\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" -msgstr "%.*s ¤Î %s ¸° ID %08lX ¤Ë¤è¤ë½ð̾\n" +msgstr "%.*s ¤Î%s¸°ID %08lX¤Ë¤è¤ë½ð̾\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" -msgstr "ÉÔÀµ¤Ê½ð̾: \"" +msgstr "ÉÔÀµ¤Ê ½ð̾: \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "´ü¸ÂÀÚ¤ì¤Î½ð̾: \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Àµ¤·¤¤½ð̾: \"" -#: g10/mainproc.c:1109 -msgid " aka \"" -msgstr " ÊÌ̾ \"" +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[ÉÔ³ÎÄê]" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1351 +msgid " aka \"" +msgstr " ÊÌ̾ \"" + +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" -msgstr "½ð̾¤Î¸¡¾Ú¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" +msgstr "½ð̾¤ò¸¡¾Ú¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "ʬΥ½ð̾¤Ç¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "¥¯¥é¥¹0x%02x¤ÎÆÈΩ½ð̾\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" -msgstr "¸Å¤¤·Á¼° (PGP 2.x) ¤Ë¤è¤ë½ð̾\n" +msgstr "¸Å¤¤·Á¼° (PGP 2.x) ¤Î½ð̾\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" -msgstr "proc_tree() ¤ÎÃæ¤Ë̵¸ú¤Ê¥Ñ¥±¥Ã¥È¤¬¸¡½Ð¤µ¤ì¤Þ¤·¤¿\n" +msgstr "proc_tree() ¤ÎÃæ¤Ë̵¸ú¤Ê¥Ñ¥±¥Ã¥È¤ò¸¡½Ð¤·¤Þ¤·¤¿\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" -msgstr "¥³¥¢¥À¥ó¥×¤ò̵¸ú¤Ë¤Ç¤­¤Þ¤»¤ó: %s\n" +msgstr "¥³¥¢¡¦¥À¥ó¥×¤ò̵¸ú¤Ë¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "¼Â¸³Ãæ¤Î¥¢¥ë¥´¥ê¥º¥à¤Ï»ÈÍѤ¹¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" -msgstr "¤³¤Î°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤Þ¤¹¡£°ìÈÌŪ¤ÊÊýË¡¤òÍѤ¤¤Æ²¼¤µ¤¤!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" +msgstr "" +"¤³¤Î°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤Þ¤¹¡£\n" +"¤â¤Ã¤Èɸ½àŪ¤Ê¥¢¥ë¥´¥ê¥º¥à¤òÍѤ¤¤Æ¤¯¤À¤µ¤¤!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "·Ù¹ð: %s \"%s\" ¤Î°ÂÁ´¤Ç¤Ê¤¤½êÍ­¼Ô\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "·Ù¹ð: %s \"%s\" ¤Î°ÂÁ´¤Ç¤Ê¤¤µö²Ä\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "IDEA°Å¹æ¤Î¥×¥é¥°¥¤¥ó¤¬¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "¾ÜºÙ¤Ï¡¢http://www.gnupg.org/why-not-idea.html¤ò¤´Í÷¤¯¤À¤µ¤¤\n" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" -msgstr "¸ø³«¸°¤Î¥¢¥ë¥´¥ê¥º¥à %d ¤Ï»ÈÍѤǤ­¤Þ¤»¤ó\n" +msgstr "¸ø³«¸°¤Î¥¢¥ë¥´¥ê¥º¥à%d¤Ï»ÈÍѤǤ­¤Þ¤»¤ó\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" -msgstr "subpacket of type %d has critical bit set\n" +msgstr "¥¿¥¤¥×%d¤Î²¼°Ì¥Ñ¥±¥Ã¥È¤Ë¥¯¥ê¥Æ¥£¥«¥ë¡¦¥Ó¥Ã¥È¤òȯ¸«\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:330 g10/passphrase.c:377 msgid "gpg-agent is not available in this session\n" -msgstr "" +msgstr "¤³¤Î¥»¥Ã¥·¥ç¥ó¤Çgpg¥¨¡¼¥¸¥§¥ó¥È¤Ï̵¸ú¤Ç¤¹\n" -#: g10/passphrase.c:204 +#: g10/passphrase.c:338 +msgid "can't set client pid for the agent\n" +msgstr "¥¨¡¼¥¸¥§¥ó¥È¤Î¥¯¥é¥¤¥¢¥ó¥Èpid¤òÀßÄê¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/passphrase.c:346 +msgid "can't get server read FD for the agent\n" +msgstr "¥¨¡¼¥¸¥§¥ó¥ÈÍѤΥµ¡¼¥Ð¡¼ÆɽФ·FD¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/passphrase.c:353 +msgid "can't get server write FD for the agent\n" +msgstr "¥¨¡¼¥¸¥§¥ó¥ÈÍѤΥµ¡¼¥Ð¡¼½ñ¹þ¤ßFD¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/passphrase.c:386 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "GPG_AGENT_INFO´Ä¶­ÊÑ¿ô¤Î½ñ¼°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó\n" -#: g10/hkp.c:158 g10/passphrase.c:223 -#, fuzzy, c-format +#: g10/passphrase.c:399 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "gpg-agent¥×¥í¥È¥³¥ë¡¦¥Ð¡¼¥¸¥ç¥ó%d¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" + +#: g10/hkp.c:148 g10/passphrase.c:420 +#, c-format msgid "can't connect to `%s': %s\n" -msgstr "`%s' ¤¬³«¤±¤Þ¤»¤ó: %s\n" +msgstr "`%s'¤ØÀܳ¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:442 +msgid "communication problem with gpg-agent\n" +msgstr "gpg-agent¤È¤ÎÄÌ¿®¾ã³²\n" + +#: g10/passphrase.c:511 g10/passphrase.c:897 #, c-format msgid " (main key ID %08lX)" -msgstr " (¼ç¸° ID %08lX)" +msgstr " (¼ç¸°ID %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:521 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" -"¼¡¤Î¥æ¡¼¥¶¤Î¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë¤Ë¤Ï¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬É¬ÍפǤ¹\n" -"¥æ¡¼¥¶: \"" +"¼¡¤Î¥æ¡¼¥¶¡¼¤ÎÈëÌ©¸°¤Î¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë¤Ë¤Ï¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¤¤¤ê¤Þ¤¹:\n" +"\"%.*s\"\n" +"%u¥Ó¥Ã¥È%s¸°, ID %08lXºîÀ®ÆüÉÕ¤Ï%s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:542 msgid "Enter passphrase\n" -msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎÏ: " +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎÏ\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:544 msgid "Repeat passphrase\n" -msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òºÆÆþÎÏ: " +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òºÆÆþÎÏ\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:585 msgid "passphrase too long\n" -msgstr "" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬Ä¹²á¤®¤Þ¤¹\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:598 msgid "invalid response from agent\n" -msgstr "" +msgstr "¥¨¡¼¥¸¥§¥ó¥È¤«¤é¤Î̵¸ú¤Ê±þÅú\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:607 g10/passphrase.c:688 msgid "cancelled by user\n" -msgstr "" +msgstr "¥æ¡¼¥¶¡¼¤Ë¤è¤ë¼è¾Ã¤·\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:609 g10/passphrase.c:770 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "¥¨¡¼¥¸¥§¥ó¥È¤Ë¾ã³²: ¥¨¡¼¥¸¥§¥ó¥È¤¬0x%lx¤òÊÖµÑ\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:691 g10/passphrase.c:799 +msgid "problem with the agent - disabling agent use\n" +msgstr "¥¨¡¼¥¸¥§¥ó¥È¤Ë¾ã³²: ¥¨¡¼¥¸¥§¥ó¥ÈÍøÍѶػß\n" + +#: g10/passphrase.c:883 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" -"¼¡¤Î¥æ¡¼¥¶¤Î¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë¤Ë¤Ï¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬É¬ÍפǤ¹\n" -"¥æ¡¼¥¶: \"" +"¼¡¤Î¥æ¡¼¥¶¡¼¤ÎÈëÌ©¸°¤Î¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë¤Ë¤Ï\n" +"¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¤¤¤ê¤Þ¤¹: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:892 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" -msgstr "%u ¥Ó¥Ã¥È %s ¸°, ID %08lX ¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿ %s" +msgstr "%u¥Ó¥Ã¥È%s¸°, ID %08lXºîÀ®ÆüÉÕ¤Ï%s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:943 msgid "can't query password in batchmode\n" -msgstr "¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¥Ñ¥¹¥ï¡¼¥É¤ÎÌ䤤¹ç¤ï¤»¤¬¤Ç¤­¤Þ¤»¤ó\n" +msgstr "¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¥Ñ¥¹¥ï¡¼¥É¤ÎÌä¹ç¤»¤¬¤Ç¤­¤Þ¤»¤ó\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:947 msgid "Enter passphrase: " msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎÏ: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:951 msgid "Repeat passphrase: " msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òºÆÆþÎÏ: " #: g10/plaintext.c:67 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" -"¥Ç¡¼¥¿¤ÏÊݸ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£Êݸ¤¹¤ë¤Ë¤Ï \"--output\" " -"¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ·¤Æ²¼¤µ¤¤¡£\n" +"¥Ç¡¼¥¿¤ÏÊݸ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" +"Êݸ¤¹¤ë¤Ë¤Ï¡Ö--output¡×¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "`%s'¤ÎºîÀ®¥¨¥é¡¼: %s\n" + +#: g10/plaintext.c:336 msgid "Detached signature.\n" msgstr "ʬΥ½ð̾¡£\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:340 msgid "Please enter name of data file: " -msgstr "¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÆþÎÏ: " +msgstr "¥Ç¡¼¥¿¡¦¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÆþÎÏ: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:361 msgid "reading stdin ...\n" -msgstr "ɸ½àÆþÎϤè¤êÆɤ߹þ¤ßÃæ ...\n" +msgstr "ɸ½àÆþÎϤè¤êÆɹþ¤ßÃæ ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:395 +msgid "no signed data\n" +msgstr "½ð̾¤µ¤ì¤¿¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/plaintext.c:403 #, c-format msgid "can't open signed data `%s'\n" -msgstr "½ð̾¤µ¤ì¤¿¥Ç¡¼¥¿ `%s' ¤¬³«¤±¤Þ¤»¤ó\n" +msgstr "½ð̾¤µ¤ì¤¿¥Ç¡¼¥¿`%s'¤¬³«¤±¤Þ¤»¤ó\n" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" -msgstr "ÉÔÆÃÄê¤Î¼õ¿®¼ÔÍѤǤ¹¡£ÈëÌ©¸° %08lX ¤òÍѤ¤¤Þ¤¹ ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "ƿ̾¤Î¼õ¿®¼ÔÍѤǤ¹¡£ÈëÌ©¸°%08lX¤òÍѤ¤¤Þ¤¹ ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" -msgstr "½ªÎ»¡£ÉÔÆÃÄê¤Î¼õ¿®¼ÔÍѤǤ¹¡£\n" +msgstr "½ªÎ»¡£Æ¿Ì¾¤Î¼õ¿®¼ÔÍѤǤ¹¡£\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" -msgstr "DEK ¤Ë¤è¤ëµì¼°¤Î°Å¹æ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" +msgstr "DEK¤Ë¤è¤ëµì¼°¤Î°Å¹æ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" -#: g10/pubkey-enc.c:216 -#, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "Êݸ¥ë¥´¥ê¥º¥à %d ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "Êݸ¥ë¥´¥ê¥º¥à%d%s¤Ï̤ÃΤ«»ÈÍÑÉԲĤǤ¹\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" -msgstr "Ãí°Õ: °Å¹æ¥¢¥ë¥´¥ê¥º¥à %d ¤ÏÍ¥Àè½ç¤ËÆþ¤Ã¤Æ¤¤¤Þ¤»¤ó\n" +msgstr "Ãí°Õ: °Å¹æ¥¢¥ë¥´¥ê¥º¥à%d¤ÏÍ¥Àè½ç¤ËÆþ¤Ã¤Æ¤¤¤Þ¤»¤ó\n" -#: g10/pubkey-enc.c:261 -#, fuzzy, c-format -msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "Ãí°Õ: ½ð̾¤Î¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹ %s\n" - -#: g10/hkp.c:62 +#: g10/pubkey-enc.c:242 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "Ãí°Õ: ÈëÌ©¸°%08lX¤Ï%s¤Ç´ü¸ÂÀÚ¤ì¤Ç¤¹\n" -#: g10/hkp.c:75 -#, fuzzy, c-format +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "¸°%08lX¤òHKP¸°¥µ¡¼¥Ð¡¼%s¤ËÍ×µá\n" + +#: g10/hkp.c:94 +#, c-format msgid "can't get key from keyserver: %s\n" -msgstr "¸°¥µ¡¼¥Ð¡¼¤«¤é¸°¤òÆɤ߹þ¤à" +msgstr "¸°¥µ¡¼¥Ð¡¼¤«¤é¸°¤òÆɤ߹þ¤á¤Þ¤»¤ó: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s ¤ÏÀµ¤·¤¤Ê¸»ú¥³¡¼¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" - -#: g10/hkp.c:182 -#, fuzzy, c-format +#: g10/hkp.c:172 +#, c-format msgid "error sending to `%s': %s\n" -msgstr "`%s' ¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ: %s\n" +msgstr "`%s'¤Ø¤ÎÁ÷¿®¥¨¥é¡¼: %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:187 #, c-format msgid "success sending to `%s' (status=%u)\n" -msgstr "" +msgstr "`%s'¤Ø¤ÎÁ÷¿®¤ËÀ®¸ù (¾õÂÖ=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:190 #, c-format msgid "failed sending to `%s': status=%u\n" -msgstr "" +msgstr "`%s'¤Ø¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: ¾õÂÖ=%u\n" -#: g10/seckey-cert.c:89 -#, fuzzy -msgid "secret key parts are not available\n" -msgstr "ÈëÌ©¸°¤¬¤¢¤ê¤Þ¤»¤ó" - -#: g10/seckey-cert.c:95 +#: g10/hkp.c:472 #, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "Êݸ¥ë¥´¥ê¥º¥à %d ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "\"%s\"¤òHKP¥µ¡¼¥Ð¡¼%s¤«¤é¸¡º÷\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "̵¸ú¤Ê¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ç¤¹¡£ºÆÆþÎϤ·¤Æ²¼¤µ¤¤ ...\n" +#: g10/hkp.c:522 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "¸°¥µ¡¼¥Ð¡¼¤ò¸¡º÷¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "ÈëÌ©Éôʬ¤¬ÆÀ¤é¤ì¤Þ¤»¤ó\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "Êݸ¥ë¥´¥ê¥º¥à%d%s¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "̵¸ú¤Ê¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ç¤¹¡£ºÆÆþÎϤ·¤Æ¤¯¤À¤µ¤¤" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" -msgstr "·Ù¹ð: ¼å¤¤¸°¤¬¸¡½Ð¤µ¤ì¤Þ¤·¤¿¡£¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÊѹ¹¤·¤Æ²¼¤µ¤¤¡£\n" +msgstr "·Ù¹ð: ¼å¤¤¸°¤ò¸¡½Ð¤·¤Þ¤·¤¿¡£¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "È¿ÂФµ¤ì¤¿16¥Ó¥Ã¥È¤Î¥Á¥§¥Ã¥¯¥µ¥à¤òÈëÌ©¸°¤ÎÊݸî¤ËÀ¸À®\n" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" -"¤³¤ì¤Ï PGP ¤Ë¤è¤Ã¤ÆºîÀ®¤µ¤ì¤¿ ElGamal " -"¸°¤Ç¤¹¡£¤³¤Î¸°¤Ï½ð̾¤ËÍѤ¤¤ë¤Ë¤Ï°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó!\n" +"¤³¤ì¤ÏPGP¤ÎÀ¸À®¤·¤¿ElGamal¸°¤Ç¤¹¡£\n" +"½ð̾¤ËÍѤ¤¤ë¤Ë¤Ï¡¢¤³¤Î¸°¤Ï°ÂÁ´¤Ç¤Ï ¤Ê¤¤ ¤Ç¤¹!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" -msgstr "¸ø³«¸°¤Ï½ð̾¤è¤ê¤â %lu Éøå¤ËºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹\n" +msgstr "¸ø³«¸°¤Ï½ð̾¤è¤ê¤â%luÉøå¤ËºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" -msgstr "¸ø³«¸°¤Ï½ð̾¤è¤ê¤â %lu Éøå¤ËºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹\n" +msgstr "¸ø³«¸°¤Ï½ð̾¤è¤ê¤â%luÉøå¤ËºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "Ãí°Õ: ½ð̾¤Î¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹ %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "Ãí°Õ: ½ð̾¸°%08lX¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹%s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" -msgstr "ÉÔÌÀ¤Ê¥¯¥ê¥Æ¥£¥«¥ë¥Ó¥Ã¥È¤¬¤¢¤Ã¤¿¤Î¤Ç¡¢½ð̾¤ÏÉÔÀµ¤À¤È¸«¤Ê¤·¤Þ¤¹\n" +msgstr "̤ÃΤΥ¯¥ê¥Æ¥£¥«¥ë¡¦¥Ó¥Ã¥È¤¬¤¢¤Ã¤¿¤Î¤Ç¡¢½ð̾¤ÏÉÔÀµ¤À¤È¤ß¤Ê¤·¤Þ¤¹\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "·Ù¹ð: ¥Ý¥ê¥·¡¼url¤ò%%³ÈÄ¥ÉÔǽ (Â礭¤¹¤®)¡£Ì¤³ÈÄ¥¤ò»ÈÍÑ¡£\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "ºîÀ®¤µ¤ì¤¿½ð̾¤Î¸¡¾Ú¤Ë¼ºÇÔ: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" -msgstr "%s ½ð̾¡£½ð̾¼Ô: %s\n" +msgstr "%s½ð̾¡£½ð̾¼Ô: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "·Ù¹ð: `%s'¤Ï¶õ¤Î¥Õ¥¡¥¤¥ë¤Ç¤¹\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "--pgp2¥â¡¼¥É¤Ç¤ÏPGP 2.x·Á¼°¤Î¸°¤Ç½ð̾¤Ç¤­¤ë¤À¤±¤Ç¤¹\n" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" -msgstr "%s ¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó: %s\n" +msgstr "%s¤òºîÀ®¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "½ð̾:" -#: g10/sign.c:583 +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "--pgp2¥â¡¼¥É¤Ç¤ÏPGP 2.x·Á¼°¤Î¸°¤Ç¥¯¥ê¥¢½ð̾¤·¤«¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/sign.c:953 #, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "·Ù¹ð: `%s' ¤Ï¶õ¤Î¥Õ¥¡¥¤¥ë¤Ç¤¹\n" +msgid "%s encryption will be used\n" +msgstr "%s°Å¹æ²½¤ò»ÈÍѤ·¤Þ¤¹\n" #: g10/textfilter.c:134 #, c-format msgid "can't handle text lines longer than %d characters\n" -msgstr "%d ʸ»ú°Ê¾å¤ÎŤµ¤Î¥Æ¥­¥¹¥È¹Ô¤Ï»ÈÍѤǤ­¤Þ¤»¤ó\n" +msgstr "%dʸ»ú°Ê¾å¤ÎŤµ¤Î¥Æ¥­¥¹¥È¹Ô¤Ï»ÈÍѤǤ­¤Þ¤»¤ó\n" #: g10/textfilter.c:231 #, c-format msgid "input line longer than %d characters\n" -msgstr "ÆþÎϹԤÎŤµ¤¬ %d ʸ»ú¤ò±Û¤¨¤Æ¤¤¤Þ¤¹\n" +msgstr "ÆþÎϹԤÎŤµ¤¬%dʸ»ú¤òĶ¤¨¤Æ¤¤¤Þ¤¹\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" -msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹ ¥ì¥³¡¼¥É %lu: ¥·¡¼¥¯¤Ë¼ºÇÔ: %s\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹ ¥ì¥³¡¼¥É%lu: ¥·¡¼¥¯¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" -msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹ ¥ì¥³¡¼¥É %lu: ½ñ¤­¹þ¤ß¤Ë¼ºÇÔ (n=%d): %s\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹ ¥ì¥³¡¼¥É%lu: ½ñ¹þ¤ß¤Ë¼ºÇÔ (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" -msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹ ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬Â礭¤¹¤®¤Þ¤¹\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬Â礭¤¹¤®¤Þ¤¹\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: ¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: ¼­½ñ¤¬¤¢¤ê¤Þ¤»¤ó!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 +#, c-format +msgid "%s: can't create lock\n" +msgstr "%s: ¥í¥Ã¥¯¤¬¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: ¥í¥Ã¥¯¤¬¤Ç¤­¤Þ¤»¤ó\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 #, c-format msgid "%s: can't create: %s\n" msgstr "%s: ºîÀ®¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/tdbio.c:459 g10/tdbio.c:508 -#, c-format -msgid "%s: can't create lock\n" -msgstr "%s: ¥í¥Ã¥¯¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó\n" - -#: g10/tdbio.c:473 +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" -msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¥ì¥³¡¼¥É¤ÎºîÀ®¤Ë¼ºÇÔ: %s" +msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: ̵¸ú¤Ê¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤òºîÀ®\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" -msgstr "%s: ¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤òºîÀ®¤·¤Þ¤·¤¿\n" +msgstr "%s: ¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤¬¤Ç¤­¤Þ¤·¤¿\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ̵¸ú¤Ê¿®Íѥǡ¼¥¿¥Ù¡¼¥¹\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" -msgstr "%s: ¥Ï¥Ã¥·¥åɽ¤ÎºîÀ®¤Ë¼ºÇÔ: %s\n" +msgstr "%s: ¥Ï¥Ã¥·¥åɽ¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" -msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¥ì¥³¡¼¥É¤Î¹¹¿·¥¨¥é¡¼: %s\n" +msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É¤Î¹¹¿·¥¨¥é¡¼: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" -msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¥ì¥³¡¼¥É¤ÎÆɤ߽Ф·¥¨¥é¡¼: %s\n" +msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É¤ÎÆɽФ·¥¨¥é¡¼: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" -msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¥ì¥³¡¼¥É¤Î½ñ¤­¹þ¤ß¥¨¥é¡¼: %s\n" +msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" -msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: ¥·¡¼¥¯¤Ë¼ºÇÔ: %s\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: ¥·¡¼¥¯¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" -msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: Æɤ߽Ф·¤Ë¼ºÇÔ (n=%d): %s\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: ÆɽФ·¤Ë¼ºÇÔ (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" -msgstr "%s: ¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" +msgstr "%s: ¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¡¦¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" -msgstr "%s: ¥ì¥³¡¼¥ÉÈÖ¹æ %lu È֤ΥС¼¥¸¥ç¥ó¥ì¥³¡¼¥É\n" +msgstr "%s: ¥ì¥³¡¼¥ÉÈÖ¹æ%luÈ֤ΥС¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" -msgstr "%s: ̵¸ú¤Ê¥Õ¥¡¥¤¥ë¥Ð¡¼¥¸¥ç¥ó %d\n" +msgstr "%s: ̵¸ú¤Ê¥Õ¥¡¥¤¥ë¡¦¥Ð¡¼¥¸¥ç¥ó%d\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" -msgstr "%s: ¶õ¤­¥ì¥³¡¼¥É¤ÎÆɤ߽Ф·¥¨¥é¡¼: %s\n" +msgstr "%s: ¶õ¤­¥ì¥³¡¼¥É¤ÎÆɽФ·¥¨¥é¡¼: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" -msgstr "%s: ¶õ¤­¥ì¥³¡¼¥É¤Î½ñ¤­¹þ¤ß¥¨¥é¡¼: %s\n" +msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê¡¼¡¦¥ì¥³¡¼¥É¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" -msgstr "%s: ¥ì¥³¡¼¥É¤Î½é´ü²½¤Ë¼ºÇÔ: %s\n" +msgstr "%s: ¥ì¥³¡¼¥É¤Î½é´ü²½¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" -msgstr "%s: ¥ì¥³¡¼¥É¤Î½é´ü²½¤Ë¼ºÇÔ: %s\n" +msgstr "%s: ¥ì¥³¡¼¥É¤ÎÄɲä˼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" -"¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤¬²õ¤ì¤Æ¤¤¤Þ¤¹¡£\"gpg --fix-trustdb\" ¤ò¼Â¹Ô¤·¤Æ²¼¤µ¤¤¡£\n" +"¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤¬²õ¤ì¤Æ¤¤¤Þ¤¹¡£¡Ögpg --fix-trustdb¡×¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' ¤ÏÀµ¤·¤¤Âç·¿¸°ID¤Ç¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "¸°%08lX: ¿®ÍѤ¹¤ë¸°¤È¤·¤Æ¼õÍý¤·¤Þ¤·¤¿\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "¸°%08lX¤¬¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ËÊ£¿ô¤¢¤ê¤Þ¤¹\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "¸° %08lX: ¿®ÍѤ¹¤ë¸°¤Î¸ø³«¸°¤¬¤¢¤ê¤Þ¤»¤ó - ¥¹¥­¥Ã¥×\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" -msgstr "¿®Íѥ쥳¡¼¥É %lu, ¥ê¥¯¥¨¥¹¥È¥¿¥¤¥× %d: Æɤ߽Ф·¤Ë¼ºÇÔ: %s\n" +msgstr "¿®Íѥ쥳¡¼¥É%lu, ¥ê¥¯¥¨¥¹¥È¡¦¥¿¥¤¥×%d: ÆɽФ·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "¿®Íѥ쥳¡¼¥É%lu¤¬Í׵ᤵ¤ì¤¿·¿%d¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" -msgstr "¿®Íѥ쥳¡¼¥É %lu, ¥¿¥¤¥× %d: ½ñ¤­¹þ¤ß¤Ë¼ºÇÔ: %s\n" +msgstr "¿®Íѥ쥳¡¼¥É%lu, ¥¿¥¤¥×%d: ½ñ¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "¿®Íѥ쥳¡¼¥É %lu: ºï½ü¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" -msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: Ʊ´ü¤Ë¼ºÇÔ: %s\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: Ʊ´ü¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#: g10/trustdb.c:377 +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¸¡¾Ú¤ÏÉÔÍפǤ¹\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1638 #, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "LID %lu ¤Î¥Ç¥£¥ì¥¯¥È¥ê¥ì¥³¡¼¥É¤ÎÆɤ߽Ф·¥¨¥é¡¼: %s\n" +msgid "next trustdb check due at %s\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¼¡²ó¤Î¸¡¾Ú¤Ï%s¤Ç¤¹\n" -#: g10/trustdb.c:384 +#: g10/trustdb.c:776 +msgid "checking the trustdb\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¸¡¾Ú\n" + +#: g10/trustdb.c:930 #, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: ´üÂÔ¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¥ì¥³¡¼¥É¡¢¥¿¥¤¥× %d\n" +msgid "public key %08lX not found: %s\n" +msgstr "¸ø³«¸°%08lX¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" -#: g10/trustdb.c:389 +#: g10/trustdb.c:1512 #, c-format -msgid "no primary key for LID %lu\n" -msgstr "LID %lu ¤Î¼ç¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "ÀäÂÐŪ¤Ë¿®ÍѤ¹¤ë¸°%08lX¤Î¸ø³«¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n" -#: g10/trustdb.c:394 +#: g10/trustdb.c:1590 #, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "LID %lu ¤Î¼ç¸°¤ÎÆɤ߽Ф·¥¨¥é¡¼: %s\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "¿¼¤µ%d¤Ç¸¡¾Ú¡¢½ð̾ºÑ¤ß=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record ¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "%s ¤ÏÀµ¤·¤¤Ê¸»ú¥³¡¼¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" - -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "¸° %08lX: ¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ËÅÐÏ¿¤Ç¤­¤Þ¤»¤ó\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "¸° %08lX: ¥¯¥¨¥ê¡¼¥ì¥³¡¼¥É¤Ë¼ºÇÔ\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "¸° %08lX: ´û¤Ë¿®ÍѤ¹¤ë¸°¤Îɽ¤Ë¤¢¤ê¤Þ¤¹\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "¸° %08lX: ¿®ÍѤ¹¤ë¸°¤È¤·¤Æ¼õÍý¤µ¤ì¤Þ¤·¤¿¡£\n" - -#: g10/trustdb.c:547 -#, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "¸° %08lX: rfc2440 ¤Î¸°¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó - ¥¹¥­¥Ã¥×¤·¤Þ¤¹\n" - -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "Ãí°Õ: ÈëÌ©¸° %08lX ¤ÏÊݸ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "¸° %08lX: ÈëÌ©¸°¤È¸ø³«¸°¤¬Âбþ¤·¤Æ¤¤¤Þ¤»¤ó\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "ÈëÌ©¸°¤Î°ìÍ÷¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "¸° %08lX.%lu: Éû¸°¤ÎÂбþ¤ÏÍ­¸ú¤Ç¤¹\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "¸° %08lX.%lu: Éû¸°¤ÎÂбþ¤¬Ìµ¸ú¤Ç¤¹: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "¸° %08lX.%lu: Í­¸ú¤Ê¸°¤ÎÇÑ»ß\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "¸° %08lX.%lu: ̵¸ú¤Ê¸°¤ÎÇË´þ: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "¸° %08lX.%lu: Í­¸ú¤ÊÉû¸°¤ÎÇË´þ\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Í­¸ú¤Ê¼«¸Ê½ð̾" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "̵¸ú¤Ê¼«¸Ê½ð̾" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "¿·¤·¤¯¼«¸Ê½ð̾¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢Í­¸ú¤Ê¥æ¡¼¥¶ ID ¤ÎÇË´þ¤Ï¹Ô¤¤¤Þ¤»¤ó" - -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Í­¸ú¤Ê¥æ¡¼¥¶ ID ¤ÎÇË´þ" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "̵¸ú¤Ê¥æ¡¼¥¶ ID ¤ÎÇË´þ" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Í­¸ú¤Ê¾ÚÌÀ½ñ¤ÎÇË´þ" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Í­¸ú¤Ê¾ÚÌÀ½ñ" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "̵¸ú¤Ê¾ÚÌÀ½ñ¤ÎÇË´þ" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "̵¸ú¤Ê¾ÚÌÀ½ñ" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "½ð̾¥ì¥³¡¼¥É %lu[%d] ¤Ï¸í¤Ã¤¿¥ì¥³¡¼¥É¤ò»Ø¤·¤Æ¤¤¤Þ¤¹¡£\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "½ÅÊ£¤·¤¿¾ÚÌÀ½ñ - ºï½ü¤·¤Þ¤·¤¿" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir ¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: ÁÞÆþ¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: ÁÞÆþ¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: ÁÞÆþ¤·¤Þ¤·¤¿\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "¥Ç¥£¥ì¥¯¥È¥ê¥ì¥³¡¼¥É¤ÎÆɤ߽Ф·¥¨¥é¡¼: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu ¸°¤ò½èÍý¤·¤Þ¤·¤¿\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu ¸°¤Ë¤Ï¥¨¥é¡¼¤¬¤¢¤ê¤Þ¤¹\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu ¸°¤òÁÞÆþ¤·¤Þ¤·¤¿\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "¸°¥Ö¥í¥Ã¥¯¤Î°ìÍ÷¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: ¸°¤Ê¤·¤Î¥Ç¥£¥ì¥¯¥È¥ê¥ì¥³¡¼¥É - ¥¹¥­¥Ã¥×\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu ¿·¤¿¤Ê¸ø³«¸°\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu ¸°¤ò¥¹¥­¥Ã¥×¤·¤Þ¤·¤¿\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu ¸°¤ò¹¹¿·¤·¤Þ¤·¤¿\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "¤ª¤Ã¤È¡¢¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "¤ª¤Ã¤È¡¢¥æ¡¼¥¶ ID ¤¬¤¢¤ê¤Þ¤»¤ó\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: ¥Ç¥£¥ì¥¯¥È¥ê¥ì¥³¡¼¥É¤Î¸¡º÷¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "¸° %08lX: ¿®Íѥ쥳¡¼¥É¤ÎÁÞÆþ¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "¸° %08lX.%lu: ¿®Íѥ쥳¡¼¥É¤ËÁÞÆþ¤·¤Þ¤·¤¿\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" -msgstr "" -"¸° %08lX.%lu: ̤Íè¤ËºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n" - -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "¸° %08lX.%lu: %s ¤Ç´ü¸ÂÀÚ¤ì¤Ç¤¹\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "¸° %08lX.%lu: ¿®ÍѤθ¡¾Ú¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "¥æ¡¼¥¶ '%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤«¤é '%s' ¤Î¸¡º÷¤Ë¾ã³²: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "¥æ¡¼¥¶ '%s' ¤Ï¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤»¤ó - ÁÞÆþ¤·¤Þ¤·¤¿\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "'%s' ¤Î¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Ø¤ÎÅÐÏ¿¤Ë¼ºÇÔ: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "·Ù¹ð: ¤Þ¤À long pref ¥ì¥³¡¼¥É¤Ï¼è¤ê°·¤¨¤Þ¤»¤ó\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3312,144 +3800,138 @@ msgstr "" "(.sig¤ä.asc)¤¬¥³¥Þ¥ó¥É¹Ô¤ÎºÇ½é¤Ç¤Ê¤±¤ì¤Ð\n" "¤Ê¤é¤Ê¤¤¤³¤È¤òǰƬ¤Ë¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" -msgstr "ÆþÎϤÎ%u¹ÔÌܤ¬Ä¹²á¤®¤ë¤«¡¢LF¤¬¤Ê¤¤¤è¤¦¤Ç¤¹\n" +msgstr "ÆþÎϤÎ%u¹ÔÌܤ¬Ä¹¤¹¤®¤ë¤«¡¢LF¤¬¤Ê¤¤¤è¤¦¤Ç¤¹\n" -#: g10/ringedit.c:296 +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"¤ä¤Ð¤¯¤Æ¤â¤¤¤¤¥Õ¥é¥°¤¬¸°¤Ë¤ÏÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" +"µ¶ÊªÍð¿ôÀ¸À®»Ò¤È¤Ï¤¤¤Ã¤·¤ç¤Ë»È¤¨¤Þ¤»¤ó!\n" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: ¸°¥ê¥ó¥°¤òºîÀ®¤Ç¤­¤Þ¤»¤ó: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "`%s'¤ò¥¹¥­¥Ã¥×: ½ÅÊ£\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: ¸°¥ê¥ó¥°¤òºîÀ®¤·¤Þ¤·¤¿\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "·Ù¹ð: ¿®ÍѾðÊó¤ò»ý¤Ã¤¿ 2 ¤Ä¤Î¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤¹¡£\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s ¤ÏÊѹ¹¤µ¤ì¤Æ¤¤¤Ê¤¤Êý¤Ç¤¹\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s ¤Ï¿·¤·¤¤Êý¤Ç¤¹\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "¤³¤Î°ÂÁ´¾å¤Î·ç´Ù¤ò½¤Àµ¤·¤Æ²¼¤µ¤¤\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" -msgstr "`%s' ¤ò¥¹¥­¥Ã¥×: %s\n" +msgstr "`%s'¤ò¥¹¥­¥Ã¥×: %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "¥¹¥­¥Ã¥×: ÈëÌ©¸°¤Ï´û¤Ë¤¢¤ê¤Þ¤¹\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" -"`%s' ¤ò¥¹¥­¥Ã¥×: ¤³¤ì¤Ï PGP ¤¬À¸À®¤·¤¿ ElGamal " -"¸°¤Ç¤¹¡£¤³¤Î¸°¤Ï½ð̾¤ËÍѤ¤¤ë¤Ë¤Ï°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó!\n" +"`%s'¤ò¥¹¥­¥Ã¥×: ¤³¤ì¤ÏPGP¤ÎÀ¸À®¤·¤¿ElGamal¸°¤Ç¤¹¡£\n" +"½ð̾¤ËÍѤ¤¤ë¤Ë¤Ï¡¢°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó!\n" #. do not overwrite #: g10/openfile.c:84 #, c-format msgid "File `%s' exists. " -msgstr "¥Õ¥¡¥¤¥ë `%s' ¤Ï´û¤Ë¸ºß¤·¤Þ¤¹¡£" +msgstr "¥Õ¥¡¥¤¥ë`%s'¤Ï´û¤Ë¸ºß¤·¤Þ¤¹¡£" #: g10/openfile.c:86 msgid "Overwrite (y/N)? " msgstr "¾å½ñ¤­¤·¤Þ¤¹¤« (y/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" -msgstr "%s: ÉÔÌÀ¤Ê³ÈÄ¥»Ò\n" +msgstr "%s: ̤ÃΤγÈÄ¥»Ò\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" -msgstr "¿·¤·¤¤¥Õ¥¡¥¤¥ë̾¤òÆþÎϤ·¤Æ²¼¤µ¤¤" +msgstr "¿·¤·¤¤¥Õ¥¡¥¤¥ë̾¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "ɸ½à½ÐÎϤ˽ñ¤­½Ð¤·¤Þ¤¹\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" -msgstr "½ð̾¤µ¤ì¤¿¥Ç¡¼¥¿¤¬ `%s' ¤Ë¤¢¤ë¤ÈÁÛÄꤷ¤Þ¤¹\n" +msgstr "½ð̾¤µ¤ì¤¿¥Ç¡¼¥¿¤¬`%s'¤Ë¤¢¤ë¤ÈÁÛÄꤷ¤Þ¤¹\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" -msgstr "%s: ¿·¤·¤¤¥ª¥×¥·¥ç¥ó¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Þ¤·¤¿\n" +msgstr "%s: ¿·¤·¤¤¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë¤¬¤Ç¤­¤Þ¤·¤¿\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" -msgstr "%s: ¼­½ñ¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó: %s\n" +msgstr "%s: ¼­½ñ¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" -msgstr "%s: ¼­½ñ¤òºîÀ®¤·¤Þ¤·¤¿\n" +msgstr "%s: ¼­½ñ¤¬¤Ç¤­¤Þ¤·¤¿\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë¤òÆɤßľ¤¹¤è¤¦¡¢GnuPG¤òºÆµ¯Æ°¤·¤Æ¤¯¤À¤µ¤¤\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "ÉÔÌÀ¤Ê¥¢¥ë¥´¥ê¥º¥à¤Ë¤è¤ë°Å¹æ %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "%s °Å¹æ²½¤µ¤ì¤¿¥Ç¡¼¥¿\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" -msgstr "·Ù¹ð: ¥á¥Ã¥»¡¼¥¸¤ÏÂоΰŹæË¡¤Î¼å¤¤¸°¤Ë¤è¤ê°Å¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n" +msgstr "·Ù¹ð: ¥á¥Ã¥»¡¼¥¸¤ÏÂоΰŹæË¡¤Î¼å¤¤¸°¤Ç°Å¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "°Å¹æ¥Ñ¥±¥Ã¥È¤Î¼è¤ê°·¤¤¤Ç¾ã³²\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" -msgstr "¼å¤¤¸°¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿ - ºÆ¼Â¹Ô¤·¤Þ¤¹\n" +msgstr "¼å¤¤¸°¤¬¤Ç¤­¤Þ¤·¤¿ - ºÆ¼Â¹Ô\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" -msgstr "ÂоΰŹæË¡¤Î¼å¤¤¸°¤ò²óÈò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£%d ²ó»î¤ß¤Þ¤·¤¿!\n" +msgstr "ÂоΰŹæË¡¤Î¼å¤¤¸°¤ò²óÈò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£%d²ó»î¤ß¤Þ¤·¤¿!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "¤³¤Î¸ø³«¸°¤Î°Ù¤ÎÈëÌ©¸°¤¬¤¢¤ê¤Þ¤¹!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "DSA¤Ç¤Ï160¥Ó¥Ã¥È¤Î¥Ï¥Ã¥·¥å¡¦¥¢¥ë¥´¥ê¥º¥à¤Î»ÈÍѤ¬É¬ÍפǤ¹\n" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "" -"¤Þ¤º¤³¤ì¤òºï½ü¤¹¤ë¤Ë¤Ï \"--delete-secret-key\" ¥ª¥×¥·¥ç¥ó ¤òÍѤ¤¤Æ²¼¤µ¤¤¡£\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" -msgstr "\"--yes\" ¤òȼ¤ï¤Ê¤¤¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¼Â¹Ô¤Ç¤­¤Þ¤»¤ó\n" +msgstr "¡Ö--yes¡×¤Î¤Ê¤¤¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¤Ç¤­¤Þ¤»¤ó\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " -msgstr "¤³¤Î¸°¤ò¸°¥ê¥ó¥°¤«¤éºï½ü¤·¤Þ¤¹¤«? " +msgstr "¤³¤Î¸°¤ò¸°Îؤ«¤éºï½ü¤·¤Þ¤¹¤«? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " -msgstr "ÈëÌ©¸°¤¬¤¢¤ê¤Þ¤¹! - ËÜÅö¤Ë ºï½ü¤·¤Þ¤¹¤«? " +msgstr "¤³¤ì¤ÏÈëÌ©¸°¤Ç¤¹! ËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? " + +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "¸°¥Ö¥í¥Ã¥¯¤Îºï½ü¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +#: g10/delkey.c:161 +msgid "ownertrust information cleared\n" +msgstr "½êÍ­¼Ô¿®ÍѾðÊó¤ò¥¯¥ê¥¢¤·¤Þ¤·¤¿\n" + +#: g10/delkey.c:189 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "¤³¤Î¸ø³«¸°¤Ë¤¿¤¤¤¹¤ëÈëÌ©¸° \"%s\" ¤¬¤¢¤ê¤Þ¤¹!\n" + +#: g10/delkey.c:191 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "¤Þ¤º¡Ö--delete-secret-keys¡×¥ª¥×¥·¥ç¥ó¤Ç¤³¤ì¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤¡£\n" #: g10/helptext.c:47 msgid "" @@ -3457,24 +3939,36 @@ msgid "" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" -"¤³¤³¤ÇÀßÄꤷ¤¿Ãͤϡ¢Â礭¤¹¤®¤Þ¤¹¡£¤³¤ÎÃͤϷ褷¤ÆÂè»°¼Ô¤Ë¤ÏÄ󶡤µ¤ì¤Þ¤»¤ó¡£\n" -"¤½¤ì¤ò¹Ô¤¦¤Ë¤Ï¡¢²æ¡¹¤¬ web-of-trust ¤ò¼ÂÁõ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¤¬¡¢\n" -"(°ÅÌÛŪ¤ËºîÀ®¤µ¤ì¤¿) web-of-certificates ¤¬Ìµ¤¯¤Æ¤Ï²¿¤â¤Ç¤­¤Þ¤»¤ó¡£" +"¤³¤ÎÃͤÎÀßÄê¤Ï¡¢¤¢¤Ê¤¿¼¡Âè¤Ç¤¹¡£¤³¤ÎÃͤϡ¢Âè»°¼Ô¤Ë·è¤·\n" +"¤ÆÄ󶡤µ¤ì¤Þ¤»¤ó¡£¤³¤ì¤Ï¡¢web-of-trust ¤Î¼ÂÁõ¤ËɬÍפǡ¢\n" +"(°ÅÌÛŪ¤Ë¤Ç¤­¤¿) web-of-certificates ¤È¤Ï̵´Ø·¸¤Ç¤¹¡£" #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Web-of-Trust¤ò¹½ÃÛ¤¹¤ë¤¿¤áGnuPG¤Ï¡¢¤É¤Î¸°¤òÀäÂÐŪ¤Ë¿®ÍѤ¹¤ë\n" +"¤Î¤«¤òÃΤëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤½¤ì¤Ï¤Õ¤Ä¤¦¡¢ÈëÌ©¸°¤Ë¥¢¥¯¥»¥¹¤Ç¤­\n" +"¤ë¸°¤Î¤³¤È¤Ç¤¹¡£¤³¤Î¸°¤òÀäÂÐŪ¤Ë¿®ÍѤ¹¤ë¤³¤È¤Ë¤¹¤ë¤Ê¤é¡¢\n" +"\"yes\"¤È¤ª¤³¤¿¤¨¤¯¤À¤µ¤¤¡£\n" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." -msgstr "¤³¤ÎÇË´þ¤µ¤ì¤¿¸°¤ò»È¤¤¤¿¤¯¤Ê¤±¤ì¤Ð¡¢\"no\" ¤ÈÅú¤¨¤Æ²¼¤µ¤¤¡£" +msgstr "¤³¤ÎÇË´þ¤µ¤ì¤¿¸°¤ò»È¤¤¤¿¤¯¤Ê¤±¤ì¤Ð¡¢¡Öno¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£" -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." -msgstr "¤³¤Î¿®ÍѤǤ­¤Ê¤¤¸°¤ò»È¤¤¤¿¤¯¤Ê¤±¤ì¤Ð¡¢\"no\" ¤ÈÅú¤¨¤Æ²¼¤µ¤¤¡£" +msgstr "¤³¤Î¿®ÍѤǤ­¤Ê¤¤¸°¤ò»È¤¤¤¿¤¯¤Ê¤±¤ì¤Ð¡¢¡Öno¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£" -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." -msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ëÁê¼ê¥¢¥É¥ì¥¹¤Î¥æ¡¼¥¶ ID ¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£" +msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ëÁê¼ê¥¢¥É¥ì¥¹¤Î¥æ¡¼¥¶¡¼ID¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£" -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3494,67 +3988,66 @@ msgid "" "this is the reason why the encryption only ElGamal key is not available in\n" "this menu." msgstr "" -"»ÈÍѤ¹¤ë¥¢¥ë¥´¥ê¥º¥à¤ÎÁªÂò\n" +"»ÈÍѤ¹¤ë¥¢¥ë¥´¥ê¥º¥à¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n" "\n" -"DSA (ÊÌ̾ DSS) ¤Ï¡¢½ð̾¤Ë¤Î¤ßÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ëÅŻҽð̾¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹¡£\n" -"DSA ½ð̾¤Ï ElGamal Ë¡¤è¤ê¤â¹â®¤Ë¸¡¾Ú¤Ç¤­¤ë¤Î¤Ç¡¢¤³¤ì¤Ï¿ä¾©¤¹¤ë¥¢¥ë¥´¥ê¥º¥à\n" -"¤Ç¤¹¡£\n" +"DSA (ÊÌ̾DSS) ¤Ï¡¢½ð̾¤Ë¤Î¤ßÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ëÅŻҽð̾¥¢¥ë¥´¥ê\n" +"¥º¥à¤Ç¤¹¡£DSA½ð̾¤ÏElGamalË¡¤è¤ê¤â¹â®¤Ë¸¡¾Ú¤Ç¤­¤ë¤Î¤Ç¡¢¤³¤ì¤Ï\n" +"¿ä¾©¤¹¤ë¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹¡£\n" "\n" -"ElGamal ¤Ï¡¢½ð̾¤È°Å¹æ²½¤ËÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹¡£\n" -"OpenPGP " -"¤Ç¤Ï¡¢¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤Î¡Ö°Å¹æ²½¤Î¤ß¡×¤È¡Ö½ð̾+°Å¹æ²½¡×¤Î£²¤Ä¤ÎÍÑË¡¤ò\n" -"¶èÊ̤·¤Æ¤¤¤Þ¤¹¤¬¡¢¼ÂºÝ¤Ë¤ÏƱ¤¸¤Ç¤¹¡£¤·¤«¤·¡¢½ð̾ÍѤΰÂÁ´¤Ê¸°¤òÀ¸À®¤¹¤ë¤Ë¤Ï\n" -"¤¤¤¯¤Ä¤«¤ÎÊÑ¿ô¤òÆÃÊ̤ÊÊýË¡¤ÇÁªÂò¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¡¢\n" -"¤½¤ì¤Ï²Äǽ¤Ç¤¹¤¬¡¢OpenPGP " -"¤Î¾¤Î¼ÂÁõ¤Ç¤Ï¡Ö½ð̾+°Å¹æ²½¡×¤ÎÍÑË¡¤ò²ò¼á¤·¤Þ¤»¤ó¡£\n" +"ElGamal¤Ï¡¢½ð̾¤È°Å¹æ²½¤ËÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹¡£\n" +"OpenPGP¤Ç¤Ï¡¢¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤Î¡Ö°Å¹æ²½¤Î¤ß¡×¤È¡Ö½ð̾+°Å¹æ²½¡×\n" +"¤Î2¤Ä¤ÎÍÑË¡¤ò¶èÊ̤·¤Æ¤¤¤Þ¤¹¤¬¡¢¼ÂºÝ¤Ë¤ÏƱ¤¸¤Ç¤¹¡£¤·¤«¤·¡¢½ð̾ÍÑ\n" +"¤Î°ÂÁ´¤Ê¸°¤òºî¤ë¤Ë¤Ï°ìÉô¤ÎÊÑ¿ô¤òÆÃÊ̤ÊÊýË¡¤ÇÁªÂò¤·¤Ê¤±¤ì¤Ð¤Ê¤ê\n" +"¤Þ¤»¤ó¡£¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¤½¤ì¤¬²Äǽ¤Ç¤¹¤¬¡¢Â¾¤ÎOpenPGP¤Î¼ÂÁõ¤Ç\n" +"¤Ï¡¢¡Ö½ð̾+°Å¹æ²½¡×¤ÎÍÑË¡¤ò²ò¼á¤·¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£\n" "\n" -"ºÇ½é¤Î¸°(¼ç¸°)¤Ï½ð̾¤Ë»ÈÍѤǤ­¤ë¸°¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£\n" -"¤³¤Î¤³¤È¤¬¡Ö°Å¹æ²½¤Î¤ß¡×¤Î ElGamal ¸°¤¬¡¢¤³¤Î¥á¥Ë¥å¡¼¤Ë̵¤¤¤³¤È¤ÎÍýͳ¤Ç¤¹¡£" +"ºÇ½é¤Î¸°(¼ç¸°)¤Ï¡¢½ð̾¤Ë»ÈÍѤǤ­¤ë¸°¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤³¤ì¤¬\n" +"¤³¤Î¥á¥Ë¥å¡¼¤Ë¡Ö°Å¹æ²½¤Î¤ß¡×¤ÎElGamal¸°¤Î¤Ê¤¤Íýͳ¤Ç¤¹¡£" -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" "with them are quite large and very slow to verify." msgstr "" -"¤³¤ì¤é¤Î¸°¤Ï RFC2440 ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¿ä¾©¤·¤Þ¤»¤ó¡£\n" -"²¿¸Î¤Ê¤é¡¢¤³¤ì¤é¤ÏÁ´¤Æ¤Î¥×¥í¥°¥é¥à¤Ë¤è¤Ã¤Æ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¯¡¢\n" -"À¸À®¤µ¤ì¤ë½ð̾¤ÏÈó¾ï¤ËŤ¯¤Æ¡¢¸¡¾Ú¤Ë¤â»þ´Ö¤¬¤«¤«¤ë¤¿¤á¤Ç¤¹¡£" +"¤³¤ì¤é¤Î¸°¤ÏRFC2440¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¿ä¾©¤·¤Þ¤»¤ó¡£\n" +"¤Ê¤¼¤Ê¤é¡¢¤³¤ì¤é¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥×¥í¥°¥é¥à¤¬¤¢¤ê¡¢\n" +"ºîÀ®¤µ¤ì¤ë½ð̾¤ÏÈó¾ï¤ËŤ¯¤Æ¡¢¸¡¾Ú¤Ë¤â»þ´Ö¤¬¤«¤«¤ë¤¿¤á¤Ç¤¹¡£" -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" -msgstr "¸°¤ÎŤµ¤òÆþÎϤ·¤Æ²¼¤µ¤¤" +msgstr "¸°¤ÎŤµ¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" -msgstr "\"yes\" ¤Þ¤¿¤Ï \"no\" ¤ÇÅú¤¨¤Æ²¼¤µ¤¤" +msgstr "¡Öyes¡×¤«¡Öno¡×¤ÇÅú¤¨¤Æ¤¯¤À¤µ¤¤" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" -"¥×¥í¥ó¥×¥È¤Ë¼¨¤µ¤ì¤ë½ñ¼°¤ÇÃͤòÆþÎϤ·¤Æ²¼¤µ¤¤¡£\n" -"ISO ¤ÎÆüÉդνñ¼° (YYYY-MM-DD) ¤Ç¤âÆþÎϤǤ­¤Þ¤¹¤¬¡¢Àµ¤·¤¤¥¨¥é¡¼¤Ï\n" -"ɽ¼¨¤µ¤ì¤Ê¤¤¤Ç¤·¤ç¤¦ - ¤½¤ÎÂå¤ï¤ê¤Ë¡¢¥·¥¹¥Æ¥à¤ÏÆþÎÏÃͤò´Ö³Ö¤ËÊÑ´¹¤¹¤ë\n" +"¥×¥í¥ó¥×¥È¤Ë¼¨¤¹½ñ¼°¤ÇÃͤòÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n" +"ISO¤ÎÆüÉդνñ¼° (YYYY-MM-DD) ¤Ç¤âÆþÎϤǤ­¤Þ¤¹¤¬¡¢Àµ¤·¤¤¥¨¥é¡¼¤Ï\n" +"ɽ¼¨¤µ¤ì¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤½¤ÎÂå¤ê¡¢¥·¥¹¥Æ¥à¤ÏÆþÎÏÃͤò´ü´Ö¤ØÊÑ´¹¤¹¤ë\n" "¤è¤¦¤Ë»î¤ß¤Þ¤¹¡£" -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" -msgstr "¸°¥Û¥ë¥À¤Î̾Á°¤òÆþÎϤ·¤Æ²¼¤µ¤¤" +msgstr "¸°¥Û¥ë¥À¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" -msgstr "¥ª¥×¥·¥ç¥ó¤Ç¤¹¤¬¡¢ÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤òÆþÎϤ¹¤ë¤³¤È¤ò¶¯¤¯¿ä¾©¤·¤Þ¤¹" +msgstr "¥ª¥×¥·¥ç¥ó¤Ç¤¹¤¬¡¢ÅŻҥ᡼¥ë¤Î¥¢¥É¥ì¥¹¤òÆþÎϤ¹¤ë¤³¤È¤ò¶¯¤¯¿ä¾©¤·¤Þ¤¹" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" -msgstr "¥ª¥×¥·¥ç¥ó¤Î¥³¥á¥ó¥È¤òÆþÎϤ·¤Æ²¼¤µ¤¤" +msgstr "¥ª¥×¥·¥ç¥ó¤Î¥³¥á¥ó¥È¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3562,43 +4055,112 @@ msgid "" "O to continue with key generation.\n" "Q to to quit the key generation." msgstr "" -"N ̾Á°¤ÎÊѹ¹\n" -"C ¥³¥á¥ó¥È¤ÎÊѹ¹\n" -"E ÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤ÎÊѹ¹\n" -"O ¸°¤ÎÀ¸À®¤Î³¹Ô\n" -"Q ¸°¤ÎÀ¸À®¤ÎÃæ»ß" +"N ̾Á°¤ÎÊѹ¹¡£\n" +"C ¥³¥á¥ó¥È¤ÎÊѹ¹¡£\n" +"E ÅŻҥ᡼¥ë¤Î¥¢¥É¥ì¥¹¤ÎÊѹ¹¡£\n" +"O ¸°¤ÎÀ¸À®¤Î³¹Ô¡£\n" +"Q ¸°¤ÎÀ¸À®¤ÎÃæ»ß¡£" -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." -msgstr "Éû¸°¤òÀ¸À®¤¹¤ë¾ì¹ç¡¢\"yes\" (¤Þ¤¿¤Ï¡¢Ã±¤Ë \"y\") ¤ÈÅú¤¨¤Æ²¼¤µ¤¤¡£" +msgstr "Éû¸°¤òÀ¸À®¤¹¤ë¾ì¹ç¡¢¡Öyes¡×(¤Þ¤¿¤Ï¡¢Ã±¤Ë¡Öy¡×) ¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£" -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"¸°¤Î¥æ¡¼¥¶¡¼ID¤Ë½ð̾¤¹¤ë¤È¤­¤Ï¡¢¸°¤Î¥æ¡¼¥¶¡¼ID¤Î̾Á°¤Î¿Í¤¬¸°\n" +"¤ò½êÍ­¤·¤Æ¤¤¤ë¡¢¤È¤¤¤¦¤³¤È¤ò³Îǧ¤¹¤ë¤Ù¤­¤Ç¤¹¡£¤¢¤Ê¤¿¤¬¤É¤ÎÄø\n" +"ÅÙÃí°Õ¿¼¤¯³Îǧ¤·¤¿¤Î¤«¤ò¾¤Î¿Í¤¿¤Á¤ËÃΤ餻¤ë¤È¡¢ÊØÍø¤Ç¤¹¡£\n" +"\n" +"\"0\" ¤Ï¡¢¤¢¤Ê¤¿¤¬¤É¤ÎÄøÅÙÃí°Õ¿¼¤¯³Îǧ¤·¤¿¤Î¤«¤ò¡¢Æä˼çÄ¥¤·¤Ê\n" +" ¤¤¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£\n" +"\n" +"\"1\" ¤Ï¡¢¸°¤Î½êÍ­¼Ô¤È¼çÄ¥¤·¤Æ¤¤¤ë¿Í¤¬¤½¤Î¸°¤ò½êÍ­¤·¤Æ¤¤¤ë¡¢¤È\n" +" ¤¢¤Ê¤¿¤Ï¿®¤¸¤Æ¤Ï¤¤¤ë¤â¤Î¤Î¡¢³Îǧ¤ÏÁ´Á³¤·¤Æ¤Ê¤«¤Ã¤¿¡¢¤Þ¤¿\n" +" ¤Ï¤Ç¤­¤Ê¤«¤Ã¤¿¡¢¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£¤³¤ì¤Ï¡¢¥Ú¥ó¥Í¡¼¥à¤ò»È¤¦\n" +" ¥æ¡¼¥¶¡¼¤Î¸°¤Ë½ð̾¤¹¤ë¾ì¹ç¤Î¡¢¡Ö¥Ú¥ë¥½¥Ê¡×³Îǧ¤ËÊØÍø¤Ç¤¹¡£\n" +"\n" +"\"2\" ¤Ï¡¢¤¢¤Ê¤¿¤¬°ì±þ¸°¤Î³Îǧ¤ò¤·¤¿¡¢¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£¤¿¤È¤¨¤Ð\n" +" ¸°¤Î»ØÌæ¤ò¸¡¾Ú¤·¡¢¥Õ¥©¥ÈID¤Ë¤¿¤¤¤·¤Æ¸°¤Î¥æ¡¼¥¶¡¼ID¤ò³Îǧ\n" +" ¤·¤¿¾ì¹ç¤¬¤½¤¦¤Ç¤¹¡£\n" +"\n" +"\"3\" ¤Ï¡¢¤¢¤Ê¤¿¤¬¹­ÈϰϤˤ錄¤ê¸°¤ò¸¡¾Ú¤·¤¿¡¢¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£\n" +" ¤¿¤È¤¨¤Ð¡¢¸°¤Î½êÍ­¼ÔËܿͤȸ°¤Î»ØÌæ¤ò¸¡¾Ú¤·¡¢(¥Ñ¥¹¥Ý¡¼¥È\n" +" ¤Î¤è¤¦¤Ê) µ¶Â¤¤Î¤à¤Ä¤«¤·¤¤¡¢¥Õ¥©¥ÈID¤Ä¤­¤Î¼êÃʤǡ¢¸°¤Î½ê\n" +" Í­¼Ô¤Î̾Á°¤¬¡¢¸°¤Î¥æ¡¼¥¶¡¼ID¤Î̾Á°¤È°ìÃפ¹¤ë¤³¤È¤ò³Îǧ¤·\n" +" ¤Æ¡¢(ÅŻҥ᡼¥ë¤Î¸ò´¹¤Ê¤É¤Ç) ¸°¤ÎÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤¬\n" +" ¸°¤Î½êÍ­¼Ô¤Ë°¤·¤Æ¤¤¤ë¤³¤È¤ò¸¡¾Ú¤·¤¿¾ì¹ç¤¬¤½¤¦¤Ç¤¹¡£\n" +"\n" +"¾åµ­2¤È3¤ÎÎã¤Ï¡¢*ñ¤Ê¤ë*Îã¤Ë¤¹¤®¤Ê¤¤¡¢¤È¤¤¤¦¤³¤È¤òǰƬ¤ËÃÖ¤¤\n" +"¤Æ¤¯¤À¤µ¤¤¡£Â¾¤Î¸°¤Ë½ð̾¤¹¤ëºÝ¡¢¡Ö°ì±þ¡×¤ä¡Ö¹­Èϰϡפ¬²¿¤ò°Õ\n" +"Ì£¤¹¤ë¤«¤òºÇ½ªÅª¤Ë·è¤á¤ë¤Î¤Ï¡¢¤¢¤Ê¤¿¤Ç¤¹¡£\n" +"\n" +"Àµ¤·¤¤Åú¤Î¤ï¤«¤é¤Ê¤¤¾ì¹ç¤Ï¡¢¡Ö0¡×¤ÇÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£" + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" -msgstr "Á´¤Æ¤Î ¥æ¡¼¥¶ ID ¤Ë½ð̾¤·¤¿¤±¤ì¤Ð¡¢\"yes\" ¤ÈÅú¤¨¤Æ²¼¤µ¤¤" +msgstr "Á´¤Æ¤Î ¥æ¡¼¥¶¡¼ID¤Ë½ð̾¤·¤¿¤±¤ì¤Ð¡¢¡Öyes¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" -"¤³¤ì¤é¤Î¥æ¡¼¥¶ ID ¤ò ËÜÅö¤Ë ºï½ü¤·¤¿¤±¤ì¤Ð¡¢\"yes\" " -"¤ÈÅú¤¨¤Æ²¼¤µ¤¤Á´¤Æ¤Î¾ÚÌÀ½ñ¤âƱ»þ¤Ëºï½ü¤µ¤ì¤Þ¤¹!" +"¤³¤ì¤é¤Î¥æ¡¼¥¶¡¼ID¤òËÜÅö¤Ëºï½ü¤·¤¿¤±¤ì¤Ð¡¢¡Öyes¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£\n" +"¾ÚÌÀ½ñ¤âÁ´ÉôƱ»þ¤Ëºï½ü¤·¤Þ¤¹!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" -msgstr "¤³¤ÎÉû¸°¤òºï½ü¤¹¤ë¾ì¹ç¡¢\"yes\" ¤ÈÅú¤¨¤Æ²¼¤µ¤¤" +msgstr "¤³¤ÎÉû¸°¤òºï½ü¤¹¤ë¾ì¹ç¡¢¡Öyes¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" -"¤³¤ì¤Ï¸°¤ËÂФ¹¤ëÍ­¸ú¤Ê½ð̾¤Ç¤¹¡£Ä̾ï¤Ï¤³¤Î½ð̾¤Ïºï½ü¤·¤¿¤¯¤Ê¤¤¤Ç¤·¤ç¤¦¡£\n" -"²¿¸Î¤Ê¤é¡¢¤³¤Î½ð̾¤Ï¡¢¸°¤Ø¤Î¿®ÍѤÎÎؤκîÀ®¤ä¡¢¤³¤Î¸°¤Ë¤è¤ë¾ÚÌÀ¤Ë¤È¤Ã¤Æ\n" -"½ÅÍפÀ¤«¤é¤Ç¤¹¡£" +"¤³¤ì¤Ï¸°¤Ë¤¿¤¤¤¹¤ëÍ­¸ú¤Ê½ð̾¤Ç¤¹¡£ÉáÄ̤³¤Î½ð̾¤òºï½ü¤¹¤ë¤Ù¤­¤Ç\n" +"¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤Ê¤¼¤Ê¤é¡¢¤³¤Î½ð̾¤Ï¡¢¸°¤Ø¤Î¿®ÍѤÎÎؤκîÀ®¤ä¡¢\n" +"¤³¤Î¸°¤Ë¤è¤ë¾ÚÌÀ¤Ë¤È¤Ã¤Æ½ÅÍפÀ¤«¤é¤Ç¤¹¡£" -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3606,19 +4168,19 @@ msgid "" "a trust connection through another already certified key." msgstr "" "¤³¤Î½ð̾¤È°ìÃפ¹¤ë¸°¤òÊÝÍ­¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢¤³¤Î½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Þ¤»¤ó¡£\n" -"¤¢¤Ê¤¿¤Ï¤½¤Î¸°¤¬»ÈÍѤµ¤ì¤ë¤Þ¤Ç¤Ï¡¢¤³¤Î½ð̾¤Îºï½ü¤òÊÝα¤¹¤ë¤Ù¤­¤Ç¤¹¡£\n" -"²¿¸Î¤Ê¤é¡¢¤³¤Î½ð̾¤Î¸°¤Ï¡¢Â¾¤Î¾ÚÌÀ¤µ¤ì¤¿¸°¤Ë¤è¤Ã¤Æ¿®ÍѤÎÎؤò·ÁÀ®¤¹¤ë¤«¤â\n" -"ÃΤì¤Ê¤¤¤«¤é¤Ç¤¹¡£" +"¤½¤Î¸°¤¬»ÈÍѤµ¤ì¤ë¤Þ¤Ç¤Ï¡¢¤¢¤Ê¤¿¤Ï¤³¤Î½ð̾¤Îºï½ü¤òÊÝα¤¹¤ë¤Ù¤­¤Ç¤¹¡£\n" +"¤Ê¤¼¤Ê¤é¡¢¤³¤Î½ð̾¤Î¸°¤Ï¡¢Â¾¤Î¾ÚÌÀ¤µ¤ì¤¿¸°¤Ç¿®ÍѤÎÎؤò·ÁÀ®¤¹¤ë¤«¤â\n" +"¤·¤ì¤Ê¤¤¤«¤é¤Ç¤¹¡£" -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" -"¤³¤Î½ð̾¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤³¤Î¤³¤È¤Ï¡¢¤¢¤Ê¤¿¤Î¸°¥ê¥ó¥°¤«¤éºï½ü¤¹¤Ù¤­¤À\n" -"¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£" +"¤³¤Î½ð̾¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤³¤Î¤³¤È¤Ï¡¢¤¢¤Ê¤¿¤Î¸°Îؤ«¤éºï½ü¤¹¤Ù¤­¤À\n" +"¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£" -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3626,47 +4188,52 @@ msgid "" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" -"¤³¤ì¤Ï¡¢¸°¤Î¥æ¡¼¥¶ ID ¤ËÂбþ¤·¤¿½ð̾¤Ç¤¹¡£Ä̾¤³¤Î½ð̾¤òºï½ü¤¹¤ë¤Î¤Ï\n" -"Îɤ¤¹Í¤¨¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¼ÂºÝ¤Ë¤Ï¡¢GnuPG ¤Ï¤â¤Ï¤ä¤³¤Î¸°¤ò»È¤¨¤Ê¤¤¤Î¤«¤â\n" -"ÃΤì¤Þ¤»¤ó¡£¤è¤Ã¤Æ¡¢¤³¤Î¼«¸Ê½ð̾¤¬²¿¤é¤«¤ÎÍýͳ¤Ë¤è¤ê̵¸ú¤Ç¤¢¤Ã¤Æ¡¢\n" -"ÂåÂؤȤʤ븰¤¬¤¢¤ë¾ì¹ç¤Ë¤Î¤ß¡¢ºï½ü¤ò¼Â¹Ô¤·¤Æ²¼¤µ¤¤¡£" +"¤³¤ì¤Ï¡¢¸°¤Î¥æ¡¼¥¶¡¼ID¤ËÂбþ¤·¤¿½ð̾¤Ç¤¹¡£Ä̾¤³¤Î½ð̾¤òºï½ü¤¹¤ë¤Î¤Ï\n" +"¤¤¤¤¹Í¤¨¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¼ÂºÝ¤Ë¤Ï¡¢GnuPG¤Ï¤â¤Ï¤ä¤³¤Î¸°¤ò»È¤¨¤Ê¤¤¤Î¤«¤â\n" +"¤·¤ì¤Þ¤»¤ó¡£¤è¤Ã¤Æ¡¢¤³¤Î¼«¸Ê½ð̾¤¬²¿¤é¤«¤ÎÍýͳ¤Ë¤è¤ê̵¸ú¤Ç¤¢¤Ã¤Æ¡¢\n" +"ÂåÂؤȤʤ븰¤¬¤¢¤ë¾ì¹ç¤Ë¤Î¤ß¡¢ºï½ü¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£" -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" msgstr "" -"¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£¤³¤ì¤ÏÈëÌ©¤Îʸ¾Ï¤Î¤³¤È¤Ç¤¹¡£\n" -" ¥Û¥²¥Û¥².... " +"Á´Éô (¤Þ¤¿¤ÏÁªÂò¤·¤¿) ¥æ¡¼¥¶¡¼ID¤ÎÁª¹¥¤ò¡¢¸½ºß¤ÎÁª¹¥°ìÍ÷¤ËÊѹ¹\n" +"¤·¤Þ¤¹¡£´Ø·¸¤¹¤ë¼«¸Ê½ð̾¤Î¥¿¥¤¥à¥¹¥¿¥ó¥×¤Ï¡¢1É乤¹¤ß¤Þ¤¹¡£\n" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£¤³¤ì¤ÏÈëÌ©¤Îʸ¾Ï¤Î¤³¤È¤Ç¤¹ \n" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." -msgstr "ÆþÎϤ·¤¿¥Õ¥ì¡¼¥º¤ò³Îǧ¤¹¤ë¤¿¤á¤Ë¡¢¥Ñ¥¹¥Õ¥ì¡¼¥º¤òºÆÆþÎϤ·¤Æ²¼¤µ¤¤¡£" +msgstr "ÆþÎϤ·¤¿¥Ñ¥¹¥Õ¥ì¡¼¥º¤Î³Îǧ¤Î¤¿¤á¡¢ºÆÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£" -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" -msgstr "½ð̾¤ò¹Ô¤¦¥Õ¥¡¥¤¥ë¤Î̾Á°¤òµ­½Ò¤·¤Æ²¼¤µ¤¤" +msgstr "½ð̾¤ò¹Ô¤¦¥Õ¥¡¥¤¥ë¤Î̾Á°¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" -msgstr "¾å½ñ¤­¤·¤Æ¤âÎɤ±¤ì¤Ð¡¢\"yes\" ¤ÈÅú¤¨¤Æ²¼¤µ¤¤" +msgstr "¾å½ñ¤­¤·¤Æ¤è¤±¤ì¤Ð¡¢¡Öyes¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" -"¿·¤·¤¤¥Õ¥¡¥¤¥ë̾¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£Ã±¤Ë¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤¹¤È¡¢\n" -"¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥¡¥¤¥ë̾ (³ç¸Ì¤Ç°Ï¤Þ¤ì¤¿¤â¤Î) ¤¬»ÈÍѤµ¤ì¤Þ¤¹" +"¿·¤·¤¤¥Õ¥¡¥¤¥ë̾¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£Ã±¤Ë¥ê¥¿¡¼¥ó¡¦¥­¡¼¤ò²¡¤¹¤È¡¢\n" +"(³ç¸Ì¤Ç°Ï¤ó¤À) ´ûÄê¤Î¥Õ¥¡¥¤¥ë̾¤ò»ÈÍѤ·¤Þ¤¹¡£" -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3674,83 +4241,346 @@ msgid "" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" +"¾ÚÌÀ½ñ¤ËÍýͳ¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£Á°¸å´Ø·¸¤Ë¤â¤è¤ê¤Þ¤¹¤¬¡¢\n" +"°Ê²¼¤«¤éÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£\n" +" ¡Ö¸°¤¬¥Ñ¥¯¤é¤ì¤Þ¤·¤¿¡×\n" +" ǧ¾Ú¤µ¤ì¤Æ¤¤¤Ê¤¤¿Í¤¬ÈëÌ©¸°¤Ø¤Î¥¢¥¯¥»¥¹¤òÆÀ¤¿¡¢¤È¿®¤º¤ë\n" +" ¤Ë­¤ëÍýͳ¤Î¤¢¤ë¤È¤­¤Ë¡¢¤³¤ì¤ò»È¤¤¤Þ¤¹¡£\n" +" ¡Ö¸°¤¬¤È¤ê¤«¤ï¤Ã¤Æ¤¤¤Þ¤¹¡×\n" +" ¤³¤Î¸°¤ò¼«Ê¬¤Ç¿·¤·¤¤¸°¤È¤È¤ê¤«¤¨¤¿¤È¤­¤Ë»È¤¤¤Þ¤¹¡£\n" +" ¡Ö¸°¤Ï¤â¤¦»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó¡×\n" +" ¤³¤Î¸°¤ò»È¤¦¤Î¤ò¤ä¤á¤¿¤È¤­¤Ë»È¤¤¤Þ¤¹¡£\n" +" ¡Ö¥æ¡¼¥¶¡¼ID¤¬¤â¤¦Í­¸ú¤Ç¤¢¤ê¤Þ¤»¤ó¡×\n" +" ¤â¤¦¤½¤Î¥æ¡¼¥¶¡¼ID¤Ï»È¤¦¤Ù¤­¤Ç¤Ê¤¤¡¢¤È¤¤¤¦¤È¤­¤Ë»È¤¤\n" +" ¤Þ¤¹¡£¤³¤ì¤ÏÉáÄÌ¡¢ÅŻҥ᡼¥ë¤Î¥¢¥É¥ì¥¹¤¬Ìµ¸ú¤Ë¤Ê¤Ã¤¿¤È\n" +" ¤­¤Ë»È¤¤¤Þ¤¹¡£\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" +"¤â¤·¤½¤¦¤·¤¿¤±¤ì¤Ð¡¢¤Ê¤¼ÇË´þ¾ÚÌÀ½ñ¤òȯ¹Ô¤¹¤ë¤Î¤«¤òÀâÌÀ¤¹¤ë¥Æ\n" +"¥­¥¹¥È¤òÆþÎϤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥Æ¥­¥¹¥È¤Ï´Ê·é¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£\n" +"¶õ¹Ô¤Ç½ª¤ï¤ê¤Ë¤Ê¤ê¤Þ¤¹¡£\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "¥Ø¥ë¥×¤Ï¤¢¤ê¤Þ¤»¤ó" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" -msgstr "`%s' ¤Ø¤Î¥Ø¥ë¥×¤Ï¤¢¤ê¤Þ¤»¤ó" +msgstr "`%s'¤Î¥Ø¥ë¥×¤Ï¤¢¤ê¤Þ¤»¤ó" -#~ msgid "certificate read problem: %s\n" -#~ msgstr "¾ÚÌÀ½ñ¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ: %s\n" +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "¸°ÎØ`%s'¤ÎºîÀ®¥¨¥é¡¼: %s\n" -#~ msgid "RSA key cannot be used in this version\n" -#~ msgstr "¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï RSA ¥­¡¼¤Ï»È¤¨¤Þ¤»¤ó\n" +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "`%s' ¤Ø¤Îµö²Ä¤ÎÊѹ¹¤Ë¼ºÇÔ: %s\n" -#~ msgid "No key for user ID\n" -#~ msgstr "¥æ¡¼¥¶ ID ¤Î¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "¸°ÎØ `%s' ¤¬¤Ç¤­¤Þ¤·¤¿\n" -#~ msgid "No user ID for key\n" -#~ msgstr "¸°¤Î¥æ¡¼¥¶ ID ¤¬¤¢¤ê¤Þ¤»¤ó\n" +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "¸°ÎØ¥­¥ã¥Ã¥·¥å¤ÎºÆ¹½Ãۤ˼ºÇÔ¤·¤Þ¤·¤¿: %s\n" -#~ msgid "no default public keyring\n" -#~ msgstr "¥Ç¥Õ¥©¥ë¥È¤Î¸ø³«¸°¥ê¥ó¥°¤¬¤¢¤ê¤Þ¤»¤ó\n" +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "·Ù¹ð: ¿®ÍѾðÊó¤ò¤â¤Ã¤¿2¤Ä¤Î¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤¹¡£\n" -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "¸°¥ê¥ó¥° `%s' ¤Î¥í¥Ã¥¯¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s¤ÏÊѹ¹¤Î¤Ê¤¤Êý¤Ç¤¹\n" -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "¸° %08lX: ¥ª¥ê¥¸¥Ê¥ë¤Î¸°¥Ö¥í¥Ã¥¯¤òÆɤá¤Þ¤»¤ó: %s\n" +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s¤Ï¿·¤·¤¤Êý¤Ç¤¹\n" -#~ msgid "%s: user not found\n" -#~ msgstr "%s: ¥æ¡¼¥¶¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n" +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "¤³¤Î°ÂÁ´¾å¤Î·ç´Ù¤ò½¤Àµ¤·¤Æ¤¯¤À¤µ¤¤\n" -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "RSA " -#~ "¸°¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤Þ¤¹¡£¿·¤·¤¤¸°¤òºîÀ®¤·¤Æº£¸å¤Ï¤½¤Î¸°¤òÍѤ¤¤ë¤³¤È¤ò¸¡Æ¤¤·¤Æ¤¯¤" -#~ "À¤µ¤¤\n" +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "¸°ÎØ`%s'¤ò¸¡¾Ú¤·¤Æ¤¤¤Þ¤¹\n" -#~ msgid "not processed" -#~ msgstr "̤½èÍý" +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "¤³¤ì¤Þ¤Ç¤Ë%lu¸Ä¤Î¸°¤Þ¤Ç¸¡¾Ú (%lu¸Ä¤Î½ð̾)\n" -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "ÉÔÌÀ¤Ê¥¯¥ê¥Æ¥£¥«¥ë¥Ó¥Ã¥È¤¬¤¢¤Ã¤¿¤Î¤Ç¡¢MDC ¤ÏÉÔÀµ¤À¤È¸«¤Ê¤·¤Þ¤¹\n" +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu¸Ä¤Î¸°¤Þ¤Ç¸¡¾Ú (%lu¸Ä¤Î½ð̾)\n" -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "¸°¤Ë¤Ï°ÂÁ´¤Ç¤Ê¤¤¥Õ¥é¥°¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó - " -#~ "µ¶ÊªÍð¿ôÀ¸À®ÁõÃ֤ˤÏÄɲäǤ­¤Þ¤»¤ó!\n" +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: ¸°Îؤ¬¤Ç¤­¤Þ¤·¤¿\n" -#~ msgid "set debugging flags" -#~ msgstr "¥Ç¥Ð¥Ã¥°¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë" +msgid "too many random bits requested; the limit is %d\n" +msgstr "¥é¥ó¥À¥à¡¦¥Ó¥Ã¥È¤ò¤¿¤¯¤µ¤óÍ׵ᤷ²á¤®¤Ç¤¹¡£¸Â³¦¤Ï %d\n" -#~ msgid "enable full debugging" -#~ msgstr "Á´¤Æ¤Î¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ë" +msgid "|[NAMES]|check the trust database" +msgstr "|[̾Á°]|¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ò¥Á¥§¥Ã¥¯" -#~ msgid "do not write comment packets" -#~ msgstr "¥³¥á¥ó¥È¥Ñ¥±¥Ã¥È¤ò½ñ¤­½Ð¤µ¤Ê¤¤" +msgid "--delete-secret-key user-id" +msgstr "--delete-secret-key ¥æ¡¼¥¶¡¼id" -#~ msgid "(default is 1)" -#~ msgstr "(¥Ç¥Õ¥©¥ë¥È¤Ï 1)" +msgid "--delete-key user-id" +msgstr "--delete-key ¥æ¡¼¥¶¡¼id" -#~ msgid "(default is 3)" -#~ msgstr "(¥Ç¥Õ¥©¥ë¥È¤Ï 3)" +msgid "--delete-secret-and-public-key user-id" +msgstr "--delete-secret-and-public-key ¥æ¡¼¥¶¡¼id" -#~ msgid " (%d) ElGamal in a v3 packet\n" -#~ msgstr " (%d) ElGamal in a v3 packet\n" +msgid "For info see http://www.gnupg.org" +msgstr "KUWASIKU WA http://www.gnupg.org/ WO GORANKUDASAI" -#~ msgid "Key generation can only be used in interactive mode\n" -#~ msgstr "¸°¤ÎºîÀ®¤ÏÂÐÏå⡼¥É¤Ç¤·¤«¼Â¹Ô¤Ç¤­¤Þ¤»¤ó\n" +msgid "sSmMqQ" +msgstr "sSmMqQ" + +msgid "" +"Could not find a valid trust path to the key. Let's see whether we\n" +"can assign some missing owner trust values.\n" +"\n" +msgstr "" +"¸°¤Ø¤ÎÍ­¸ú¤Ê¿®ÍѤηÐÏ©¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£\n" +"¤¤¤Ê¤¤¿Í¤Î¿®ÍÑÅÙ¤¬ÀßÄê¤Ç¤­¤Ê¤¤¤«¤É¤¦¤«¡¢Ä´¤Ù¤Þ¤·¤ç¤¦¡£\n" +"\n" + +msgid "" +"No path leading to one of our keys found.\n" +"\n" +msgstr "" +"¤³¤Á¤é¤Î¸°¤Ø»ê¤ë·ÐÏ©¤¬¤¢¤ê¤Þ¤»¤ó¡£\n" +"\n" + +msgid "" +"No certificates with undefined trust found.\n" +"\n" +msgstr "" +"¿®ÍÑÅÙ¤¬Ì¤ÄêµÁ¤Î¾ÚÌÀ½ñ¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" +"\n" + +msgid "" +"No trust values changed.\n" +"\n" +msgstr "" +"¿®ÍÑÅÙ¤ÎÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" +"\n" + +msgid "%08lX: no info to calculate a trust probability\n" +msgstr "%08lX: ¿®ÍÑÅÙ¤ò·×»»¤¹¤ë¾ðÊ󤬤¢¤ê¤Þ¤»¤ó\n" + +msgid "Enter the user ID: " +msgstr "¥æ¡¼¥¶¡¼ID¤òÆþÎÏ: " + +msgid "skipped: public key already set with --encrypt-to\n" +msgstr "¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï´û¤Ë --encrypt-to ¤ÇÀßÄêºÑ¤ß¤Ç¤¹\n" + +msgid "%s: error checking key: %s\n" +msgstr "%s: ¸°¤Î¸¡¾Ú¥¨¥é¡¼: %s\n" + +msgid " (%d) RSA (sign and encrypt)\n" +msgstr " (%d) RSA (½ð̾¤È°Å¹æ²½)\n" + +msgid "Do you really want to create a sign and encrypt key? " +msgstr "ËÜÅö¤Ë½ð̾¤È°Å¹æÍѤθ°¤òºî¤ê¤Þ¤¹¤«? " + +msgid "Do you really need such a large keysize? " +msgstr "¤³¤ó¤Ê¤ËŤ¤¸°¤¬ËÜÅö¤Ë¤¤¤ê¤Þ¤¹¤«? " + +msgid "%s: user not found: %s\n" +msgstr "%s: ¥æ¡¼¥¶¡¼¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n" + +msgid "certificate read problem: %s\n" +msgstr "¾ÚÌÀ½ñ¤ÎÆɹþ¤ß¾ã³²: %s\n" + +msgid "too many entries in unk cache - disabled\n" +msgstr "unk¥­¥ã¥Ã¥·¥å¤Î¥¨¥ó¥È¥ê¡¼¤¬Â¿¤¹¤®¤Þ¤¹ - »ÈÍѶػß\n" + +msgid "secret key %08lX not imported (use %s to allow for it)\n" +msgstr "ÈëÌ©¸°%08lX¤ÏÆɤ߹þ¤Þ¤ì¤Þ¤»¤ó (Í­¸ú¤Ë¤¹¤ë¤Ë¤Ï%s¤ò»È¤¤¤Þ¤¹)\n" + +msgid "key %08lX: our copy has no self-signature\n" +msgstr "¸°%08lX: ¤³¤Á¤é¤ÎÊ£À½¤Ë¤Ï¼«¸Ê½ð̾¤¬¤¢¤ê¤Þ¤»¤ó\n" + +msgid "%s: user not found\n" +msgstr "%s: ¥æ¡¼¥¶¡¼¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n" + +msgid "update of trustdb failed: %s\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¹¹¿·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "no keyserver known (use option --keyserver)\n" +msgstr "" +"´ûÃΤθ°¥µ¡¼¥Ð¡¼¤Ï¤¢¤ê¤Þ¤»¤ó (--keyserver¥ª¥×¥·¥ç¥ó¤ò»È¤¤¤Þ¤·¤ç¤¦)\n" + +msgid "%s: not a valid key ID\n" +msgstr "%s: Àµ¤·¤¤¸°ID¤Ç¤¢¤ê¤Þ¤»¤ó\n" + +msgid "assuming bad MDC due to an unknown critical bit\n" +msgstr "̤ÃΤΥ¯¥ê¥Æ¥£¥«¥ë¡¦¥Ó¥Ã¥È¤¬¤¢¤Ã¤¿¤Î¤Ç¡¢ÉÔÀµ¤ÊMDC¤È¤ß¤Ê¤·¤Þ¤¹\n" + +msgid "error reading dir record for LID %lu: %s\n" +msgstr "LID %lu¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼¡¦¥ì¥³¡¼¥É¤ÎÆɽФ·¥¨¥é¡¼: %s\n" + +msgid "lid %lu: expected dir record, got type %d\n" +msgstr "lid %lu: ´üÂÔ¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¡¼¡¦¥ì¥³¡¼¥É¡¢¥¿¥¤¥×%d\n" + +msgid "no primary key for LID %lu\n" +msgstr "LID %lu¤Î¼ç¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" + +msgid "error reading primary key for LID %lu: %s\n" +msgstr "LID %lu¤Î¼ç¸°¤ÎÆɽФ·¥¨¥é¡¼: %s\n" + +msgid "get_dir_record: search_record failed: %s\n" +msgstr "get_dir_record: search_record ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "key %08lX: query record failed\n" +msgstr "¸°%08lX: ¥ì¥³¡¼¥É¤ÎÌä¹ç¤»¤Ë¼ºÇÔ\n" + +msgid "key %08lX: already in trusted key table\n" +msgstr "¸°%08lX: ´û¤Ë¿®ÍѤ¹¤ë¸°¤Îɽ¤Ë¤¢¤ê¤Þ¤¹\n" + +msgid "NOTE: secret key %08lX is NOT protected.\n" +msgstr "Ãí°Õ: ÈëÌ©¸°%08lX¤ÏÊݸ¤ì¤Æ¤¤¤Þ ¤»¤ó¡£\n" + +msgid "key %08lX: secret and public key don't match\n" +msgstr "¸°%08lX: ÈëÌ©¸°¤È¸ø³«¸°¤¬Âбþ¤·¤Æ¤¤¤Þ¤»¤ó\n" + +msgid "enumerate secret keys failed: %s\n" +msgstr "ÈëÌ©¸°¤ÎÎóµó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "key %08lX.%lu: Good subkey binding\n" +msgstr "¸°%08lX.%lu: Éû¸°¤ÎÂбþ¤ÏÍ­¸ú¤Ç¤¹\n" + +msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +msgstr "¸°%08lX.%lu: Éû¸°¤ÎÂбþ¤¬Ìµ¸ú¤Ç¤¹: %s\n" + +msgid "key %08lX.%lu: Valid key revocation\n" +msgstr "¸°%08lX.%lu: Í­¸ú¤Ê¸°¤ÎÇË´þ\n" + +msgid "key %08lX.%lu: Invalid key revocation: %s\n" +msgstr "¸°%08lX.%lu: ̵¸ú¤Ê¸°¤ÎÇË´þ: %s\n" + +msgid "key %08lX.%lu: Valid subkey revocation\n" +msgstr "¸°%08lX.%lu: Í­¸ú¤ÊÉû¸°¤ÎÇË´þ\n" + +msgid "Good self-signature" +msgstr "Í­¸ú¤Ê¼«¸Ê½ð̾" + +msgid "Invalid self-signature" +msgstr "̵¸ú¤Ê¼«¸Ê½ð̾" + +msgid "Valid user ID revocation skipped due to a newer self signature" +msgstr "¿·¤·¤¯¼«¸Ê½ð̾¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢Í­¸ú¤Ê¥æ¡¼¥¶¡¼ID¤ÎÇË´þ¤Ï¹Ô¤¤¤Þ¤»¤ó" + +msgid "Valid user ID revocation" +msgstr "Í­¸ú¤Ê¥æ¡¼¥¶¡¼ID¤ÎÇË´þ" + +msgid "Invalid user ID revocation" +msgstr "̵¸ú¤Ê¥æ¡¼¥¶¡¼ID¤ÎÇË´þ" + +msgid "Valid certificate revocation" +msgstr "Í­¸ú¤Ê¾ÚÌÀ½ñ¤ÎÇË´þ" + +msgid "Good certificate" +msgstr "Í­¸ú¤Ê¾ÚÌÀ½ñ" + +msgid "Invalid certificate revocation" +msgstr "̵¸ú¤Ê¾ÚÌÀ½ñ¤ÎÇË´þ" + +msgid "Invalid certificate" +msgstr "̵¸ú¤Ê¾ÚÌÀ½ñ" + +msgid "sig record %lu[%d] points to wrong record.\n" +msgstr "½ð̾¥ì¥³¡¼¥É%lu[%d] ¤Ï¸í¤Ã¤¿¥ì¥³¡¼¥É¤ò»Ø¤·¤Æ¤¤¤Þ¤¹¡£\n" + +msgid "duplicated certificate - deleted" +msgstr "½ÅÊ£¤·¤¿¾ÚÌÀ½ñ - ºï½ü" + +msgid "tdbio_search_dir failed: %s\n" +msgstr "tdbio_search_dir ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "lid ?: insert failed: %s\n" +msgstr "lid ?: ÁÞÆþ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "lid %lu: insert failed: %s\n" +msgstr "lid %lu: ÁÞÆþ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "lid %lu: inserted\n" +msgstr "lid %lu: ÁÞÆþ¤·¤Þ¤·¤¿\n" + +msgid "error reading dir record: %s\n" +msgstr "¥Ç¥£¥ì¥¯¥È¥ê¡¼¡¦¥ì¥³¡¼¥É¤ÎÆɽФ·¥¨¥é¡¼: %s\n" + +msgid "\t%lu keys with errors\n" +msgstr "\t%lu¸°¤Ë¤Ï¥¨¥é¡¼¤¬¤¢¤ê¤Þ¤¹\n" + +msgid "\t%lu keys inserted\n" +msgstr "\t%lu¸°¤òÁÞÆþ¤·¤Þ¤·¤¿\n" + +msgid "lid %lu: dir record w/o key - skipped\n" +msgstr "lid %lu: ¸°¤Ê¤·¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼¡¦¥ì¥³¡¼¥É - ¥¹¥­¥Ã¥×\n" + +msgid "\t%lu due to new pubkeys\n" +msgstr "\t%lu¿·¤·¤¤¸ø³«¸°\n" + +msgid "\t%lu keys skipped\n" +msgstr "\t%lu¸°¤ò¥¹¥­¥Ã¥×¤·¤Þ¤·¤¿\n" + +msgid "\t%lu keys updated\n" +msgstr "\t%lu¸°¤ò¹¹¿·¤·¤Þ¤·¤¿\n" + +msgid "Ooops, no keys\n" +msgstr "¤ª¤Ã¤È¡¢¸°¤¬¤¢¤ê¤Þ¤»¤ó\n" + +msgid "Ooops, no user IDs\n" +msgstr "¤ª¤Ã¤È¡¢¥æ¡¼¥¶¡¼ID¤¬¤¢¤ê¤Þ¤»¤ó\n" + +msgid "check_trust: search dir record failed: %s\n" +msgstr "check_trust: ¥Ç¥£¥ì¥¯¥È¥ê¡¼¡¦¥ì¥³¡¼¥É¤Î¸¡º÷¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "key %08lX: insert trust record failed: %s\n" +msgstr "¸°%08lX: ¿®Íѥ쥳¡¼¥É¤ÎÁÞÆþ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "key %08lX.%lu: inserted into trustdb\n" +msgstr "¸°%08lX.%lu: ¿®Íѥ쥳¡¼¥É¤ËÁÞÆþ¤·¤Þ¤·¤¿\n" + +msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +msgstr "¸°%08lX.%lu: ̤Íè¤Ë¤Ç¤­¤Æ¤¤¤Þ¤¹ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n" + +msgid "key %08lX.%lu: expired at %s\n" +msgstr "¸°%08lX.%lu: %s¤Ç´ü¸ÂÀÚ¤ì¤Ç¤¹\n" + +msgid "key %08lX.%lu: trust check failed: %s\n" +msgstr "¸°%08lX.%lu: ¿®ÍѤθ¡¾Ú¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "problem finding '%s' in trustdb: %s\n" +msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤«¤é'%s'¤Î¸¡º÷¤Ë¾ã³²: %s\n" + +msgid "user '%s' not in trustdb - inserting\n" +msgstr "¥æ¡¼¥¶¡¼'%s'¤Ï¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤»¤ó - ÁÞÆþ\n" + +msgid "failed to put '%s' into trustdb: %s\n" +msgstr "'%s'¤Î¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Ø¤ÎÅÐÏ¿¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n" + +msgid "WARNING: can't yet handle long pref records\n" +msgstr "·Ù¹ð: ¤Þ¤À long pref ¥ì¥³¡¼¥É¤Ï¼è¤ê°·¤¨¤Þ¤»¤ó\n" + +msgid "%s: can't create keyring: %s\n" +msgstr "%s: ¸°Îؤ¬¤Ç¤­¤Þ¤»¤ó: %s\n" diff --git a/po/nl.po b/po/nl.po index 62f04e114..5de11eab1 100644 --- a/po/nl.po +++ b/po/nl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 1.0.0h\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" "PO-Revision-Date: 2000-02-20 21:30+01:00\n" "Last-Translator: Ivo Timmermans \n" "Language-Team: Dutch \n" @@ -13,289 +13,318 @@ msgstr "" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Let op: er wordt onveilig geheugen gebruikt!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "bewerking is niet mogelijk zonder initialisatie van veilig geheugen\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(misschien heb je hiervoor het verkeerde programma gebruikt)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "ja" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "yYjJ" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "nee" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "einde" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "qQeE" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "algemene fout" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "onbekend pakket type" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "onbekende versie" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "onbekend publieke sleutel algoritme" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "onbekend verteeralgoritme" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "foutieve publieke sleutel" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "foutieve geheime sleutel" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "foutieve ondertekening" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "verkeerd controlegetal" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "verkeerde sleuteltekst" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "publieke sleutel niet gevonden" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "onbekend versleutelalgoritme" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "kan de sleutelbos niet openen" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "ongeldig pakket" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "ongeldige versleuteling" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "niet-bestaand gebruikersnummer" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "geheime sleutel niet beschikbaar" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "verkeerde geheime sleutel gebruikt" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "niet ondersteund" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "foutieve sleutel" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "leesfout op bestand" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "schrijffout op bestand" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "onbekend compressiealgoritme" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "fout bij openen bestand" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "fout bij aanmaken bestand" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "ongeldige sleuteltekst" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "publieke sleutel algoritme niet geïmplementeerd" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "encryptie-algoritme niet geïmplementeerd" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "onbekende klasse van ondertekeningen" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "fout in de vertrouwensrelatiedatabase" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "foutieve MPI" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "hulpbronlimiet" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "ongeldige sleutelbos" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "foutief certificaat" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "ongeldige gebruikersidentificatie" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "fout bij het sluiten van het bestand" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "fout bij het hernoemen van het bestand" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "fout bij het verwijderen van het bestand" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "onverwachte gegevens" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "tijden komen niet overeen" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "onbruikbaar publieke sleutel-algoritme" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "bestand bestaat al" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "onveilige sleutel" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "ongeldig argument" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "foutieve URI" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "URI wordt niet ondersteund" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "netwerkfout" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "niet versleuteld" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "niet behandeld" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "foutieve publieke sleutel" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "foutieve geheime sleutel" + +#: util/errors.c:107 +#, fuzzy +msgid "keyserver error" +msgstr "algemene fout" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dit is een programmeerfout (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "u heeft een fout in het programma gevonden ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "kan `%s' niet openen: %s\n" -#: cipher/random.c:325 +#: cipher/random.c:324 #, fuzzy, c-format msgid "can't stat `%s': %s\n" msgstr "kan `%s' niet openen: %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" msgstr "" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" -#: cipher/random.c:349 +#: cipher/random.c:348 #, fuzzy, c-format msgid "can't read `%s': %s\n" msgstr "kan `%s' niet openen: %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" msgstr "" -#: cipher/random.c:407 +#: cipher/random.c:406 #, fuzzy, c-format msgid "can't create `%s': %s\n" msgstr "kan %s niet aanmaken: %s\n" -#: cipher/random.c:414 +#: cipher/random.c:413 #, fuzzy, c-format msgid "can't write `%s': %s\n" msgstr "kan `%s' niet openen: %s\n" -#: cipher/random.c:417 +#: cipher/random.c:416 #, fuzzy, c-format msgid "can't close `%s': %s\n" msgstr "kan `%s' niet openen: %s\n" -#: cipher/random.c:428 -#, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" - -#: cipher/random.c:659 +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "LET OP: de willekeurige getallengenerator is niet veilig!!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -309,7 +338,7 @@ msgstr "" "Gebruik geen enkele gegevens die door dit programma gegenereerd zijn!!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -321,19 +350,7 @@ msgstr "" "om het besturingssysteem de kans te geven om meer entropie te\n" "verzamelen! (Nog %d bytes nodig)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Let op: er wordt onveilig geheugen gebruikt!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "bewerking is niet mogelijk zonder initialisatie van veilig geheugen\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(misschien heb je hiervoor het verkeerde programma gebruikt)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -341,139 +358,170 @@ msgstr "" "@Opdrachten:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[bestand]|maak een ondertekening" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[bestand]|maak een niet versleutelde ondertekening" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "maak een losstaande ondertekening" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "versleutel gegevens" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "versleutel slechts met een symmetrische versleutelmethode" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "alleen bewaren" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "gegevens decoderen (standaard)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "ondertekening controleren" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "lijst van sleutels genereren" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "sleutels en ondertekeningen opnoemen" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "sleutelverificaties controleren" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "sleutels en vingerafdrukken opnoemen" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "geheime sleutels opnoemen" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "nieuw sleutelpaar genereren" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" +#: g10/g10.c:307 +#, fuzzy +msgid "remove keys from the public keyring" msgstr "sleutel weghalen uit de publieke sleutelbos" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" +#: g10/g10.c:309 +#, fuzzy +msgid "remove keys from the secret keyring" msgstr "sleutel weghalen uit de geheime sleutelbos" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "onderteken een sleutel" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "onderteken een sleutel lokaal" -#: g10/gpg.c:224 +#: g10/g10.c:312 +#, fuzzy +msgid "sign a key non-revocably" +msgstr "onderteken een sleutel lokaal" + +#: g10/g10.c:313 +#, fuzzy +msgid "sign a key locally and non-revocably" +msgstr "onderteken een sleutel lokaal" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "onderteken of bewerk een sleutel" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "genereer een terugtrekkings-certificaat" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "exporteer sleutels" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "exporteer sleutels naar een sleutelserver" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "importeer sleutels van een sleutelserver" -#: g10/gpg.c:232 +#: g10/g10.c:320 +#, fuzzy +msgid "search for keys on a key server" +msgstr "exporteer sleutels naar een sleutelserver" + +#: g10/g10.c:322 +#, fuzzy +msgid "update all keys from a keyserver" +msgstr "importeer sleutels van een sleutelserver" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "sleutels importeren/samenvoegen" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "noem alleen de volgorde van pakketten" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "exporteer het vertrouwen in de eigenaars" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importeer het vertrouwen in de eigenaars" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "werk de vertrouwensdatabase bij" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NAMEN]|controleer de vertrouwensdatabase" +#: g10/g10.c:336 +#, fuzzy +msgid "unattended trust database update" +msgstr "werk de vertrouwensdatabase bij" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "repareer een beschadigde vertrouwensdatabase" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "Verwijder de beveiliging op bestand of standaard invoer" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "Voeg beveiliging toe aan bestad of standaard invoer" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [bestanden]|geef controlegetal van berichten weer" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -483,163 +531,209 @@ msgstr "" "Opties:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "genereer beveiliging in ASCII" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NAAM|versleutel voor NAAM" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NAAM|gebruik NAAM als standaard ontvanger" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "gebruik de standaard sleutel als standaard ontvanger" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "" "gebruik deze gebruikersidentificatie om te ondertekenen of te decoderen" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|stel compressieniveau in op N (uitzetten met 0)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "gebruik de verkorte tekstmodus" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "gebruik als uitvoerbestand" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "geef meer informatie" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "wees iets stiller" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "gebruik de terminal helemaal niet" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "forcees v3 ondertekening" -#: g10/gpg.c:275 +#: g10/g10.c:376 +#, fuzzy +msgid "do not force v3 signatures" +msgstr "forcees v3 ondertekening" + +#: g10/g10.c:377 +#, fuzzy +msgid "force v4 key signatures" +msgstr "forcees v3 ondertekening" + +#: g10/g10.c:378 +#, fuzzy +msgid "do not force v4 key signatures" +msgstr "forcees v3 ondertekening" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "gebruik altijd een MDC voor versleuteling" -#: g10/gpg.c:276 +#: g10/g10.c:381 +#, fuzzy +msgid "never use a MDC for encryption" +msgstr "gebruik altijd een MDC voor versleuteling" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "maak geen enkele verandering" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" msgstr "" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "doorlopende modus: vraag nooit" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "veronderstel ja als antwoord op de meeste vragen" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "veronderstel nee als antwoord op de meeste vragen" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "voeg deze sleutelbos toe aan de lijst van sleutelbossen" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "voeg deze geheime sleutelbos toe aan de lijst" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NAAM|gebruik NAAM als standaard geheime sleutel" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|SERVER|gebruik deze sleutelserver om sleutels op te zoeken" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NAAM|zet tekenverzameling van terminal op NAAM" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "lees opties uit bestand" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "|BB|schrijf status naar deze bestandsbeschrijver" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" +#: g10/g10.c:404 +#, fuzzy +msgid "|[file]|write status info to file" +msgstr "|BB|schrijf status naar deze bestandsbeschrijver" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" msgstr "" -#: g10/gpg.c:297 +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|BESTAND|laad extensiemodule BESTAND" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "doe als RFC1991 voorschrijft" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "zet alle pakket-, versleutel- en controle-opties naar OpenPGP gedrag" -#: g10/gpg.c:300 +#: g10/g10.c:414 +#, fuzzy +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "zet alle pakket-, versleutel- en controle-opties naar OpenPGP gedrag" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|gebruik sleuteltekst modus N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NAAM|gebruik berichtsamenvattingsalgoritme NAAM voor sleutelteksten" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NAAM|gebruik versleutelalgoritme NAAM voor sleutelteksten" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAAM|gebruik versleutelalgoritme NAAM" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAAM|gebruik berichtsamenvattingsalgoritme NAAM" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|gebruik compressiealgoritme N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "plaats geen sleutelidentificatieveld in versleutelde pakketten" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NAAM=WAARDE|gebruik deze notitiegegevens" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -659,17 +753,17 @@ msgstr "" " --list-keys [namen] toon sleutels\n" " --fingerprints [namen] toon vingerafdrukken\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "" "Meld fouten in het programma a.u.b. aan ;\n" "fouten in de vertaling aan .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Gebruik: gpg [opties] [bestanden] (-h voor hulp)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -679,7 +773,7 @@ msgstr "" "onderteken, controleer, versleutel of decodeer de ingevoerde gegevens\n" "standaardactie hangt af van de gegevens\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -687,193 +781,257 @@ msgstr "" "\n" "Ondersteunde algoritmes:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "gebruik: gpg [opties] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "tegenstrijdige commando's\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "LET OP: geen bestand `%s' met standaardopties\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "optiebestand `%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "opties inlezen van `%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s is een onbekende tekenverzameling\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "LET OP: `%s' is een leeg bestand\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "LET OP: programma zou een geheugendump kunnen maken!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "LET OP: %s is niet voor gewoon gebruik!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s is niet toegestaan met deze %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s heeft geen betekenis met %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "geselecteerd versleutelalgoritme is ongeldig\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "geselecteerd controle-algoritme is ongeldig\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" +#: g10/g10.c:1492 +#, fuzzy +msgid "the given signature policy URL is invalid\n" msgstr "de gegeven beleids-URL is ongeldig\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +#, fuzzy +msgid "the given certification policy URL is invalid\n" +msgstr "de gegeven beleids-URL is ongeldig\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "compressie-algoritme moet in het bereik %d..%d liggen\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed(?) moet groter zijn dan 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed(?) moet groter zijn dan 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth moet tussen de 1 en de 255 (inclusief) liggen\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "LET OP: simpele S2K mode (0) wordt met klem afgeraden\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ongeldige S2K modus; moet 0, 1 of 3 zijn\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +#, fuzzy +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "ongeldige S2K modus; moet 0, 1 of 3 zijn\n" + +#: g10/g10.c:1519 +#, fuzzy +msgid "invalid preferences\n" +msgstr "toon voorkeuren" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "fout bij het initialiseren van de vertrouwensdatabase: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [bestandsnaam]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [bestandsnaam]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [bestandsnaam]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [bestandsnaam]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [bestandsnaam]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +#, fuzzy +msgid "--sign --symmetric [filename]" +msgstr "--symmetric [bestandsnaam]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [bestandsnaam]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [bestandsnaam]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key gebruikersidentificatie" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key gebruikers-identificatie" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +#, fuzzy +msgid "--nrsign-key user-id" +msgstr "--sign-key gebruikersidentificatie" + +#: g10/g10.c:1754 +#, fuzzy +msgid "--nrlsign-key user-id" +msgstr "--sign-key gebruikersidentificatie" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key gebruikersidentificatie [opdrachten]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key gebruikersidentificatie" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key gebruikersidentificatie" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "kan %s niet openen: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [gebruikersidentificatie] [sleutelbos]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "opheffen van beveiliging mislukt: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "beveiligen mislukt: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "ongeldig frommelalgoritme `%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[bestandsnaam]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Gaat uw gang, type het bericht ...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "kan `%s' niet openen\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "het eerste teken van een notitienaam moet een letter of laag liggend steepje " "zijn\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -881,160 +1039,142 @@ msgstr "" "een notitienaam mag alleen letters, cijfers, punten of underscores bevatten " "en eindig met een =\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "punten in notitienamen moeten omgeven zijn door andere tekens\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "een notitienaam mag geen controletekens bevatten\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "beveiliging: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "ongeldige beveiliginsinformatie: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "beveiligingsinformatie" -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "ongeldige informatie over leesbare ondertekening\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "geneste leesbare ondertekeningen\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "ongeldige regel met streepjes: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "onverwachte beveiliging:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "ongeldig wortel64 teken %02x overgeslagen\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "voortijdig einde (geen controlesom)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "voortijdig einde (in controlesom)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "verkeerde controlesom\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "fout in controlesom; %06lx - %06lx\n" # fixme -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "voortijdig einde (in trailer)\n" # fixme -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "fout in de trailer regel\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "geen geldige OpenPGP gegevens gevonden.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "ongeldige beveiliging: regel langer dan %d tekens\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "aangehaald gewoon teken in beveiliging - waaschijnlijk is er een foutief " "mailbezorgprogramma gebruikt\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Vingerafdruk:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Vingerafdruk:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" msgstr "" -#: g10/pkclist.c:119 +#: g10/pkclist.c:63 #, fuzzy -msgid "Key is superseeded" +msgid "Key is superseded" msgstr "Sleutel is beveiligd.\n" -#: g10/pkclist.c:121 +#: g10/pkclist.c:65 #, fuzzy msgid "Key has been compromised" msgstr "Deze sleutel is niet beschikbaar" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" msgstr "" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" msgstr "" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " msgstr "" -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " msgstr "" #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "" -#: g10/pkclist.c:308 -#, c-format +#: g10/pkclist.c:258 +#, fuzzy, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" "Geen vertrouwenswaarde toegekend aan %lu:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 +#, fuzzy msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Geef aan hoezeer je deze gebruiker vertrouwt om de sleutels van andere\n" "gebruikers correct te verifieren (door naar paspoorten of\n" @@ -1046,86 +1186,92 @@ msgstr "" " 4 = Ik vertrouw hem volledig\n" " s = Geef wat meer informatie\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr "" + +#: g10/pkclist.c:274 +#, fuzzy, c-format +msgid " %d = I do NOT trust\n" +msgstr "%08lx: We vertrouwen deze sleutel NIET\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr "" + +#: g10/pkclist.c:276 +#, fuzzy, c-format +msgid " %d = I trust fully\n" +msgstr "%s: is geen vertrouwensdatabasebestand\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr "" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr "" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = terug naar hoofdmenu\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr "" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = beëindigen\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Uw keuze? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +#, fuzzy +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Wilt u deze sleutel echt verwijderen? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificaten die leiden tot een volledig betrouwbare sleutel:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Kon geen pad vinden dat leidt tot vertrouwen van de sleutel. Laten we\n" -"eens proberen of we wat missende waarden kunnen invullen.\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"Geen pad gevonden dat leidt naar een van onze sleutels.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Geen certificaten gevonden zonder betrouwbaarheidswaarden.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Betrouwbaarheidswaarden zijn niet veranderd.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "sleutel %08lx: sleutel is teruggeroepen!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Deze sleutel toch gebruiken? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "sleutel %08lx: subsleutel is teruggeroepen!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lx: sleutel is verlopen\n" -#: g10/pkclist.c:519 -#, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lx: geen informatie om een betrouwbaarheidskans te berekenen\n" +#: g10/pkclist.c:442 +#, fuzzy, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +" Er is geen indicatie dat deze ondertekening van de eigenaar is.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lx: We vertrouwen deze sleutel NIET\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1134,15 +1280,15 @@ msgstr "" "%08lx: Het is niet helemaal zeker dat deze sleutel echt aan de\n" "eigenaar toebehoort, maar ik accepteer hem toch\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Deze sleutel behoort waarschijnlijk toe aan de eigenaar\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Deze sleutel is van ons\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1154,179 +1300,206 @@ msgstr "" "beantwoorden met ja\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "LET OP: Ik gebruik een onbetrouwbare sleutel!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "LET OP: Deze sleutel is ingetrokken door de eigenaar!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr "" " Dit zou kunnen betekenen dat de ondertekening een vervalsing is.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "LET OP: Deze subsleutel is ingetrokken door de eigenaar!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +#, fuzzy +msgid "Note: This key has been disabled.\n" +msgstr "Deze sleutel is niet beschikbaar" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Let op: Deze sleutel is verlopen!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "LET OP: Deze sleutel is niet getekend met een betrouwbare ondertekening!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Er is geen indicatie dat deze ondertekening van de eigenaar is.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "LET OP: We vertrouwen NIET op deze sleutel!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " De sleutel is waarschijnlijk VERVALST.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "LET OP: Deze sleutel is niet getekend met genoeg betrouwbare " "ondertekeningen!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Het is niet zeker dat deze ondertekening toebehoort aan de " "eigenaar.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: overgeslagen: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: overgeslagen: openbare sleutel is al aanwezig\n" -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" +#: g10/pkclist.c:752 +#, fuzzy +msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Je gaf geen gebruikersidentificatie op. (je kunt \"-r\" gebruiken)\n" "\n" -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Geef de gebruikersidentificatie: " +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Gebruiker bestaat niet.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "" "overgeslagen: openbare sleutel is al ingesteld als de standaard ontvanger\n" # fixme -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "Openbare sleutel is niet toegankelijk.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "overgeslagen: openbare sleutel is al ingesteld met --encrypt-to\n" +#: g10/pkclist.c:806 +#, fuzzy +msgid "skipped: public key already set\n" +msgstr "%s: overgeslagen: openbare sleutel is al aanwezig\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "onbekende standaard ontvanger `%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: fout tijdens controleren van de sleutel: %s\n" - # fixme -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: overgeslagen: openbare sleutel is niet toegankelijk\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "geen geldige adressen\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "" + +#: g10/keygen.c:187 +#, fuzzy, c-format +msgid "preference %c%lu duplicated\n" +msgstr "`%s' overgeslagen: dubbel\n" + +#: g10/keygen.c:192 +#, fuzzy, c-format +msgid "too many `%c' preferences\n" +msgstr "toon voorkeuren" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "Ongeldig teken in naam\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "zelfondertekening wegschrijven\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "schrijven van sleutelbindingsondertekening\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 #, fuzzy, c-format msgid "keysize invalid; using %u bits\n" msgstr "Gevraagde sleutellengte is %u bits\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 #, fuzzy, c-format msgid "keysize rounded up to %u bits\n" msgstr "afgerond naar %u bits\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Selecteer aub wat voor sleutel u wilt:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA en ElGamal (standaard)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (alleen ondertekenen)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (alleen versleutelen)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (ondertekenen en versleutelen)\n" -#: g10/keygen.c:643 +#: g10/keygen.c:784 #, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (ondertekenen en versleutelen)\n" +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) DSA (alleen ondertekenen)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, fuzzy, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) ElGamal (alleen versleutelen)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Uw keuze? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Wilt u echt een sleutel maken om mee te ondertekenen en versleutelen? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "" -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Ongeldige keuze.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1339,23 +1512,23 @@ msgstr "" " standaard sleutellengte is 1024 bits\n" " hoogste aan te raden sleutellengte is 2048 bits\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Hoe lang wil je de sleutel maken? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA staat alleen sleutellengtes toe van 512 tot 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "sleutel te kort; 768 is de kleinste toegestane waarde.\n" - -#: g10/keygen.c:708 +#: g10/keygen.c:852 #, fuzzy msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" msgstr "sleutel te kort; 768 is de kleinste toegestane waarde.\n" +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "sleutel te kort; 768 is de kleinste toegestane waarde.\n" + #. It is ridiculous and an annoyance to use larger key sizes! #. * GnuPG can handle much larger sizes; but it takes an eternity #. * to create such a key (but less than the time the Sirius @@ -1364,12 +1537,12 @@ msgstr "sleutel te kort; 768 is de kleinste toegestane waarde.\n" #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "sleutel te lang; %d is de maximumlengte.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1377,11 +1550,11 @@ msgstr "" "Sleutels langer dan 2048 worden afgeraden omdat berekeningen dan ERG\n" "lang duren!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1389,21 +1562,17 @@ msgstr "" "Okee, maar houd er rekening mee dat straling van monitor en toetsenbord ook " "erg vatbaar zijn voor aanvallen!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Heb je echt een sleutel nodig die zo lang is? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Gevraagde sleutellengte is %u bits\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "afgerond naar %u bits\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1419,26 +1588,49 @@ msgstr "" " m = sleutel verloopt over n maanden\n" " y = sleutel verloopt over n jaar\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +#, fuzzy +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Geef aub aan hoe lang de sleutel geldig mag blijven.\n" +" 0 = sleutel verloopt nooit\n" +" = sleutel verloopt over n dagen\n" +" w = sleutel verloopt over n weken\n" +" m = sleutel verloopt over n maanden\n" +" y = sleutel verloopt over n jaar\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "Sleutel is geldig gedurende? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +#, fuzzy +msgid "Signature is valid for? (0) " +msgstr "Sleutel is geldig gedurende? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "ongeldige waarde\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" +#: g10/keygen.c:985 +#, fuzzy, c-format +msgid "%s does not expire at all\n" msgstr "Sleutel verloopt nooit\n" #. print the date when the key expires -#: g10/keygen.c:828 -#, c-format -msgid "Key expires at %s\n" +#: g10/keygen.c:992 +#, fuzzy, c-format +msgid "%s expires at %s\n" msgstr "Sleutel verloopt op %s\n" # fixme -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1446,11 +1638,11 @@ msgstr "" "Uw systeem kan geen data weergeven van na 2038.\n" "Desondanks wordt het goed behandeld tot 2106.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Klopt dit (j/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1466,44 +1658,44 @@ msgstr "" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Echte naam: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Ongeldig teken in naam\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Naam mag niet beginnen met een cijfer\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Naam moet ten minste 5 tekens lang zijn\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Email Adres: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Ongeldig email adres\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Kommentaar: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Ongeldig teken in kommentaar\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Je gebruik tekenverzameling `%s'.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1514,28 +1706,28 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnKkEeOoEe" -#: g10/keygen.c:986 +#: g10/keygen.c:1151 #, fuzzy msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Verander (N)aam, (K)ommentaar, (E)mail of (O)kee/ei(N)de? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Verander (N)aam, (K)ommentaar, (E)mail of (O)kee/ei(N)de? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" msgstr "" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1543,11 +1735,17 @@ msgstr "" "Je hebt een sleuteltekst nodig om je geheime sleutel te bewaken.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +#, fuzzy +msgid "passphrase not correctly repeated; try again" msgstr "sleuteltekst is niet goed herhaald; probeer het opnieuw.\n" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1559,7 +1757,7 @@ msgstr "" "nog aanpassen, gebruik dit programma met de optie \"--edit-key\".\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1572,29 +1770,54 @@ msgstr "" "dit geeft de generator een grotere kans om genoeg entropie te\n" "verzamelen.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "DSA sleutelpaar zal 1024 bits lang zijn.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Sleutelgeneratie afgebroken.\n" -#: g10/keygen.c:1668 +#: g10/keygen.c:1883 g10/keygen.c:1963 #, fuzzy, c-format msgid "writing public key to `%s'\n" msgstr "Openbaar certificaat wordt geschreven naar `%s'\n" -#: g10/keygen.c:1669 +#: g10/keygen.c:1884 g10/keygen.c:1965 #, fuzzy, c-format msgid "writing secret key to `%s'\n" msgstr "Geheim certificaat wordt weggeschreven naar `%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, fuzzy, c-format +msgid "no writable public keyring found: %s\n" +msgstr "sleutel %08lX: openbare sleutel niet gevonden: %s\n" + +#: g10/keygen.c:1958 +#, fuzzy, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "sleutel %08lX: geheime sleutel niet gevonden: %s\n" + +#: g10/keygen.c:1972 +#, fuzzy, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "fout bij schrijven van de sleutelbos `%s': %s\n" + +#: g10/keygen.c:1979 +#, fuzzy, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "fout bij schrijven van de sleutelbos `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "openbare en geheime sleutels zijn gemaakt en getekend.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +#, fuzzy +msgid "key marked as ultimately trusted.\n" +msgstr "Certificaten die leiden tot een volledig betrouwbare sleutel:\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" @@ -1603,12 +1826,12 @@ msgstr "" "U wilt misschien het commando \"--edit-key\" gebruiken om een tweede\n" "sleutel te maken hiervoor.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "Sleutelgeneratie is mislukt: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1616,7 +1839,7 @@ msgstr "" "Sleutel is %lu seconden in de toekomst gemaakt (tijdsverschuiving of\n" "klokprobleem)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1624,309 +1847,364 @@ msgstr "" "sleutel is %lu seconden in de toekomst gemaakt (tijdsverschuiving of\n" "klokprobleem)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Echt maken? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "" + +#: g10/encode.c:92 g10/encode.c:296 +#, fuzzy, c-format +msgid "`%s' already compressed\n" +msgstr "%lu sleutels verwerkt\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: kon niet openen: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "fout tijdens aanmake sleuteltekst: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: LET OP: leeg bestand\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "lezen uit `%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s versleuteld voor: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 -#, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: gebruiker niet gevonden: %s\n" +#: g10/delkey.c:69 g10/export.c:141 +#, fuzzy, c-format +msgid "key `%s' not found: %s\n" +msgstr "gebruiker `%s' niet gevonden: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, fuzzy, c-format +msgid "error reading keyblock: %s\n" +msgstr "fout bij lezen `%s': %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n" -#: g10/export.c:175 +#: g10/export.c:180 #, fuzzy, c-format msgid "key %08lX: not protected - skipped\n" msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, fuzzy, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "LET OP: er is niets geëxporteerd\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "te veel ingangen in de pk cache - uitgezet\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "te veel ingangen in de unk cache - uitgezet\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +#, fuzzy +msgid "[User id not found]" +msgstr "[gebruiker niet gevonden]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "gebruik secundaire sleutel %08lx in plaats van de primaire %08lx\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "" "sleutel %08lX: geheime sleutel zonder openbare sleutel - overgeslagen\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: gebruiker niet gevonden\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "blok van type %d wordt overgeslagen\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu sleutels zijn tot nu toe behandeld\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "fout bij lezen `%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr "Totaal aantal behandeld: %lu\n" -#: g10/import.c:206 +#: g10/import.c:232 #, fuzzy, c-format msgid " skipped new keys: %lu\n" msgstr "nieuwe subsleutels: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " zonder identificatie: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr "geïmporteerd: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr "onveranderd: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr "nieuwe gebruikers: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr "nieuwe subsleutels: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr "nieuwe ondertekeningen: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr "nieuwe sleutelterugtrekkingen: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr "geheime sleutels gelezen: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr "geheime sleutels geïmporteerd: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "onveranderde geheime sleutels: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "sleutel %08lX: geen gebruikersidentificatie\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "" +"sleutel %08lX: niet zelfondertekende gebruikersidentificatie geaccepteerd '" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "sleutel %08lX: geen geldige gebruikersidentificaties\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "" "dit zou veroorzaakt kunnen worden door een ontbrekende zelf-ondertkening\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "sleutel %08lX: openbare sleutel niet gevonden: %s\n" -#: g10/import.c:421 +#: g10/import.c:479 #, fuzzy, c-format msgid "key %08lX: new key - skipped\n" msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, fuzzy, c-format +msgid "no writable keyring found: %s\n" +msgstr "fout bij schrijven van de sleutelbos `%s': %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "schrijven naar `%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "fout bij schrijven van de sleutelbos `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "sleutel %08lX: openbare sleutel geïmporteerd\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "sleutel %08lX: komt niet overeen met onze kopie\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "sleutel %08lX: kan originele sleutelblok niet vinden: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "sleutel %08lX: kan origineel sleutelblok niet lezen: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "sleutel %08lX: 1 nieuwe gebruiker\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "sleutel %08lX: %d nieuwe gebruikers\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "sleutel %08lX: 1 nieuwe ondertekening\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "sleutel %08lX: %d nieuwe ondertekeningen\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "sleutel %08lX: 1 nieuwe subsleutel\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "sleutel %08lX: %d nieuwe subsleutels\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "sleutel %08lX: niet veranderd\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, fuzzy, c-format +msgid "no default secret keyring: %s\n" +msgstr "geen standaard openbare sleutelbos\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "sleutel %08lX: geheime sleutel geïmporteerd\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "sleutel %08lX: reeds aanwezig in de geheime sleutelbos\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "sleutel %08lX: geheime sleutel niet gevonden: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "sleutel %08lX: geen openbare sleutel - kan terugtrekkingscertificaat niet " "toepassen\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "sleutel %08lX: ongeldig terugtrekkingscertificaat: %s - afgewezen\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "sleutel %08lX: terugtrekkingscertificaat geïmporteerd\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "sleutel %08lX: geen gebruikersidentificatie voor ondertekening\n" -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" msgstr "sleutel %08lX: openbaar sleutel algoritme niet ondersteund\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" msgstr "sleutel %08lX: ongeldige eigen ondertekening\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "sleutel %08lX: geen subsleutel voor sleutelbinding\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "sleutel %08lX: openbaar sleutel algoritme niet ondersteund\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "sleutel %08lX: ongeldige subsleutelbinding\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "" -"sleutel %08lX: niet zelfondertekende gebruikersidentificatie geaccepteerd '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "sleutel %08lX: gebruikersidentificatie overgeslagen '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "sleutel %08lX: subsleutel overgeslagen\n" @@ -1935,99 +2213,190 @@ msgstr "sleutel %08lX: subsleutel overgeslagen\n" #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "" "sleutel %08lX: niet exporteerbare ondertekening (klasse %02x) - " "overgeslagen\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "" "sleutel %08lX: terugtrekkingscertificaat op de verkeerde plek - " "overgeslagen\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "sleutel %08lX: ongeldig terugtrekkingscertificaat: %s - overgeslagen\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "" "sleutel %08lX: dubbele gebruikersidentificatie gevonden - samengevoegd\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "sleutel %08lX: terugtrekkingscertificaat toegevoegd\n" -#: g10/import.c:1130 g10/import.c:1183 -#, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "sleutel %08lX: onze versie heeft geen zelfondertekening\n" +#: g10/import.c:1231 +#, fuzzy, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "sleutel %08lX: %d nieuwe ondertekeningen\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[terugtrekking]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[zelfondertekening]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 ongeldige ondertekening\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d ongeldige ondertekeningen\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 ondertekening niet gecontroleerd wegens een ontbrekende sleutel\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d ondertekeningen niet gecontroleerd wegens ontbrekende sleutels\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 ondertekening niet gecontroleerd wegens een fout\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d ondertekeningen niet gecontroleerd wegens fouten\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "1 gebruikersidentificatie gevonden zonder geldige zelfondertekening\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "" "%d gebruikersidentificaties gevonden zonder geldige zelfondertekening\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Sleutel is beveiligd.\n" + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +#, fuzzy +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr "" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 #, c-format -msgid "Already signed by key %08lX\n" +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" + +#: g10/keyedit.c:388 +#, fuzzy, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" msgstr "Reeds ondertekend met sleutel %08lx\n" -#: g10/keyedit.c:319 +#: g10/keyedit.c:393 +#, fuzzy, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "Reeds ondertekend met sleutel %08lx\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Niets te tekenen met sleutel %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +#, fuzzy +msgid "This key has expired!" +msgstr "Let op: Deze sleutel is verlopen!\n" + +#: g10/keyedit.c:440 +#, fuzzy, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Deze sleutel is niet beveiligd.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "" + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr "" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr "" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr "" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr "" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2035,42 +2404,70 @@ msgstr "" "Bent u er echt zeker van dat u deze sleutel wilt tekenen\n" "met uw sleutel: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 +#, fuzzy msgid "" -"The signature will be marked as non-exportable.\n" "\n" +"The signature will be marked as non-exportable.\n" msgstr "" "Deze ondertekening zal gemarkeerd worden als niet exporteerbaar.\n" "\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +#, fuzzy +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"Deze ondertekening zal gemarkeerd worden als niet exporteerbaar.\n" +"\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Echt tekenen? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "ondertekening mislukt: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Deze sleutel is niet beveiligd.\n" -#: g10/keyedit.c:426 +#: g10/keyedit.c:662 #, fuzzy msgid "Secret parts of primary key are not available.\n" msgstr "geheime sleutel niet beschikbaar" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "Sleutel is beveiligd.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Kan deze sleutel niet bewerken: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2078,7 +2475,7 @@ msgstr "" "Geef de sleuteltekst voor deze geheime sleutel.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2086,421 +2483,566 @@ msgstr "" "U wilt geen sleuteltekst - dit is waaschijnlijk een *slecht* idee!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Wilt u dit echt? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "sleutelondertekening naar de juiste plaats schuiven\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "beëindig dit menu" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "bewaar" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "opslaan en beëindigen" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "hulp" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "geef deze hulp" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "toon vingerafdruk" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "lijst" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "lijst van sleutel- en gebruikersidentificaties" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "gebruikersidentificatie" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "selecteer gebruikersidentificatie N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "sleutel" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "selecteer subsleutel N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "controleer" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "toon ondertekeningen" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "onderteken" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "onderteken de sleutel" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lteken" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "teken de sleutel lokaal" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +#, fuzzy +msgid "nrsign" +msgstr "onderteken" + +#: g10/keyedit.c:830 +#, fuzzy +msgid "sign the key non-revocably" +msgstr "teken de sleutel lokaal" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "nrlsign" +msgstr "onderteken" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "sign the key locally and non-revocably" +msgstr "teken de sleutel lokaal" + +#: g10/keyedit.c:832 msgid "debug" msgstr "debug" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "voeg een gebruikersidentificatie toe" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "" + +#: g10/keyedit.c:834 +#, fuzzy +msgid "add a photo ID" +msgstr "voeg een gebruikersidentificatie toe" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "verwijder gebruikersidentificatie" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "voeg een secundaire sleutel toe" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "verwijder een secundaire sleutel" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "delsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "verwijder ondertekeningen" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "verander de vervaldatum" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "wissel" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "wissel tussen geheime en openbare sleutels" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" +#: g10/keyedit.c:846 +#, fuzzy +msgid "list preferences (expert)" msgstr "toon voorkeuren" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +#, fuzzy +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +#, fuzzy +msgid "list preferences (verbose)" +msgstr "toon voorkeuren" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "setpref" +msgstr "pref" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "set preference list" +msgstr "toon voorkeuren" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updpref" +msgstr "pref" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updated preferences" +msgstr "toon voorkeuren" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "verander de sleuteltekst" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "trust" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "verander het vertrouwen in de eigenaar" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "roep ondertekeningen terug" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "trek secundaire sleutel in" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "disable" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "sta het gebruik van een sleutel niet toe" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "enable" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "sta gebruik van een sleutel toe" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "kan dat niet doen in lopende band-modus\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, fuzzy, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "fout bij lezen `%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Geheime sleutel is beschikbaar.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Commando> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "Ik heb de geheime sleutel nodig om dat te doen.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" msgstr "" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "Sleutel is beveiligd.\n" + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Echt alle gebruikers tekenen? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Hint: Selecteer de gebruikersidentificaties om te tekenen\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "bijwerken van de vertrouwensdatabase ging niet goed: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "U moet op zijn minst een gebruikersidentificatie opgeven.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "U kunt de laatste gebruiker niet verwijderen!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Al deze gebruikers echt verwijderen? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Deze gebruiker echt verwijderen? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "U moet op zijn minst een sleutel selecteren.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Wilt u echt alle geselecteerde sleutels verwijderen? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Wilt u deze sleutel echt verwijderen? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Wilt u echt alle geselecteerde sleutels intrekken? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Wilt u deze sleutel echt intrekken? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +#, fuzzy +msgid "Really update the preferences for the selected user IDs? " +msgstr "Al deze gebruikers echt verwijderen? " + +#: g10/keyedit.c:1254 +#, fuzzy +msgid "Really update the preferences? " +msgstr "Echt deze terugtrekkingscertificaten aanmaken? (j/N)" + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Veranderingen bewaren? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Beëindigen zonder te bewaren? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "bijwerken ging niet: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "bijwerken van de geheime sleutel mislukte: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "sleutel is niet veranderd en hoeft dus niet bijgewerkt te worden.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Foutief commando (probeer \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, fuzzy, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "LET OP: Deze sleutel is ingetrokken door de eigenaar!\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr "" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" msgstr "" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" msgstr "" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Deze sleutel is niet beschikbaar" -#: g10/keyedit.c:1116 +#: g10/keyedit.c:1539 #, fuzzy, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "sleutel %08lx: subsleutel is teruggeroepen!\n" +msgstr "rev! subsleutel is teruggeroepen: %s\n" -#: g10/keyedit.c:1119 +#: g10/keyedit.c:1542 #, fuzzy msgid "rev- faked revocation found\n" -msgstr "nieuwe sleutelterugtrekkingen: %lu\n" +msgstr "rev- vervalste sleutelterugtrekking gevonden\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" msgstr "" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Verwijder deze goede ondertekening? (j/N/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Verwijder deze ongeldige ondertekening? (j/N/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Verwijder deze onbekende ondertekening? (j/N/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Deze zelfondertekening echt verwijderen? (j/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "%d ondertekening verwijderd.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d ondertekeningen verwijderd.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Niets verwijderd.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Haal a.u.b. de selecties weg voor de geheime sleutels.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Selecteer a.u.b. maximaal één secundaire sleutel.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Vervaldatum voor secundaire sleutel instellen.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Vervaldatum voor primaire sleutel instellen.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "U kunt de vervaldatum van een v3 sleutel niet wijzigen\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Geen overeenkomende ondertekening in de geheime sleutelbos\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +#, fuzzy +msgid "Please select exactly one user ID.\n" +msgstr "U moet op zijn minst een gebruikersidentificatie opgeven.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Geen gebruikersidentificatie met index %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Geen secundaire sleutel met index %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "gebruikersidentificatie: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2509,202 +3051,343 @@ msgstr "" "\"\n" "tekende met uw sleutel %08lX op %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, fuzzy, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"tekende met uw sleutel %08lX op %s\n" + +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "Deze sleutel is niet beveiligd.\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? " + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Terugtrekkingscertificaat maken voor deze ondertekening? (j/N)" #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "U heeft deze gebruikers ondertekend:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 -#, c-format -msgid " signed by %08lX at %s\n" +#: g10/keyedit.c:2504 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s%s\n" msgstr " getekend door %08lX op %s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " ingetrokken door %08lX op %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "U staat op het punt om deze ondertekeningen in te trekken:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " getekend door %08lX op %s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " msgstr "Echt deze terugtrekkingscertificaten aanmaken? (j/N)" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "geen geheime sleutel\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "ongeldige versleuteling" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" -#: g10/keylist.c:178 +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 #, fuzzy -msgid "revoked" -msgstr "revkey" +msgid "Signature policy: " +msgstr "%s ondertekening van: %s\n" + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "LET OP: ongeldige aantekeningen gevonden\n" + +#. This is UTF8 +#: g10/keylist.c:120 +#, fuzzy +msgid "Signature notation: " +msgstr "Aantekening: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 +#: g10/keylist.c:423 g10/mainproc.c:856 #, fuzzy, c-format msgid " [expires: %s]" msgstr "Sleutel verloopt op %s\n" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Vingerafdruk:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Vingerafdruk:" + +#: g10/keylist.c:899 +#, fuzzy +msgid " Key fingerprint =" +msgstr " Vingerafdruk:" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s versleutelde gegevens\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "versleuteld met onbekend algoritme %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "openbare sleutel is %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "gegevens versleuteld met een openbare sleutel: goede DEK\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "versleuteld met %u-bit %s sleutel, nummer %08lX, gemaakt op %s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "versleuteld met %s sleutel, nummer %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "geheime sleutel voor ontsleuteling is niet beschikbaar\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "openbare sleutel-ontsleuteling ging niet: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, fuzzy, c-format +msgid "assuming %s encrypted data\n" +msgstr "%s versleutelde gegevens\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "ontsleutelen ging goed\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "LET OP: het versleutelde bericht is veranderd!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "ontsleuteling mislukte: %s\n" # Dit kan wel Engels blijven.. toch? -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "LET OP: afzender vroeg om \"for-your-eyes-only\"\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "originele bestandsnaam='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "alleenstaande intrekking - gebruik \"gpg --import\" om uit te voeren\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "LET OP: ongeldige aantekeningen gevonden\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Aantekening: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Beleid: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "controle van de ondertekening overgeslagen\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +#, fuzzy +msgid "can't handle these multiple signatures\n" +msgstr "maak een losstaande ondertekening" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Ondertekening gemaakt op %.*s met %s sleutel nummer %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "FOUTE ondertekening van \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +#, fuzzy +msgid "Expired signature from \"" +msgstr "Correcte ondertekening van \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Correcte ondertekening van \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Kan ondertekening niet controleren: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +#, fuzzy +msgid "not a detached signature\n" +msgstr "maak een losstaande ondertekening" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "losstaande ondertekening van type 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "oude stijl (PGP 2.x) ondertekening\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "ongeldig hoofdpakket gevonden in proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "kan geheugendumps niet uitzetten: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Experimentele algoritmes dienen niet gebruikt te worden!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +#, fuzzy +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "dit versleutelalgoritme is verouderd; gebruik een meer algemene!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "kan openbare sleutel-algoritme %d niet behandelen\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpakket type %d heeft kritische bit gezet\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" msgstr "" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "" -#: g10/hkp.c:158 g10/passphrase.c:223 +#: g10/passphrase.c:511 +#, fuzzy, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "beschermingsalgoritme %d wordt niet ondersteund\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 #, c-format msgid "can't connect to `%s': %s\n" msgstr "kan geen verbinding maken met `%s': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (hoofdsleutelnummer %08lX)" -#: g10/passphrase.c:294 +#: g10/passphrase.c:641 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" @@ -2713,40 +3396,37 @@ msgid "" msgstr "" "\n" "U heeft een sleuteltekst nodig om de beveiliging voor de geheime\n" -"sleutel voor gebruiker op te heffen: \"" +"sleutel op te heffen voor gebruiker \"%.*s\"\n" +"%u-bit %s sleutel, ID %08lX, gemaakt op %s%s\n" -#: g10/passphrase.c:315 +#: g10/passphrase.c:662 #, fuzzy msgid "Enter passphrase\n" msgstr "Geef de sleuteltekst: " -#: g10/passphrase.c:317 +#: g10/passphrase.c:664 #, fuzzy msgid "Repeat passphrase\n" msgstr "Herhaal de sleuteltekst: " -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" msgstr "" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" msgstr "" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" msgstr "" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" msgstr "" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2756,20 +3436,20 @@ msgstr "" "U heeft een sleuteltekst nodig om de beveiliging voor de geheime\n" "sleutel voor gebruiker op te heffen: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "%u-bit %s sleutel, nummer %08lX, gemaakt op %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "kan niet om wachtwoord vragen in lopende band-modus\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Geef de sleuteltekst: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Herhaal de sleuteltekst: " @@ -2778,149 +3458,195 @@ msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "gegevens niet bewaard; gebruik de optie \"--output\" om het op te slaan in\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, fuzzy, c-format +msgid "error creating `%s': %s\n" +msgstr "fout bij lezen `%s': %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" msgstr "Losstaande ondertekening.\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Geef de naam van het gegevensbestand: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "lezen uit standaard invoer ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +#, fuzzy +msgid "no signed data\n" +msgstr "geen ondertekende gegevens\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "kan ondertekende gegevens `%s' niet openen\n" -#: g10/pubkey-enc.c:135 -#, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +#: g10/pubkey-enc.c:100 +#, fuzzy, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "anonieme ontvanger; ik probeer geheime sleutel %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "okee, wij zijn de anonieme ontvanger.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "oude codering van de DEK wordt niet ondersteund.\n" -#: g10/pubkey-enc.c:216 +#: g10/pubkey-enc.c:177 #, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" +msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "beschermingsalgoritme %d wordt niet ondersteund\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "LET OP: versleutelalgoritme %d niet gevonden in de voorkeuren\n" -#: g10/pubkey-enc.c:261 +#: g10/pubkey-enc.c:242 #, fuzzy, c-format msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "LET OP: sleutel voor ondertekening is vervallen op %s\n" +msgstr "LET OP: geheime sleutel %08lX is vervallen op %s\n" -#: g10/hkp.c:62 -#, c-format -msgid "requesting key %08lX from %s ...\n" +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, fuzzy, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" msgstr "opvragen van sleutel %08lX van %s ...\n" -#: g10/hkp.c:75 +#: g10/hkp.c:94 #, c-format msgid "can't get key from keyserver: %s\n" msgstr "kan de sleutel niet opvragen van de server: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "geen sleutelserver bekend (gebruik de optie --keyserver)\n" - -#: g10/hkp.c:106 -#, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s: ongeldig sleutelnummer\n" - -#: g10/hkp.c:182 +#: g10/hkp.c:171 #, c-format msgid "error sending to `%s': %s\n" msgstr "fout bij versturen naar `%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" msgstr "versturen naar `%s' gelukt (status=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" msgstr "fout bij versturen naar `%s': status=%u\n" -#: g10/seckey-cert.c:89 +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "" + +#: g10/hkp.c:521 +#, fuzzy, c-format +msgid "can't search keyserver: %s\n" +msgstr "kan de sleutel niet opvragen van de server: %s\n" + +#: g10/seckey-cert.c:53 #, fuzzy msgid "secret key parts are not available\n" msgstr "geheime sleutel niet beschikbaar" -#: g10/seckey-cert.c:95 -#, c-format -msgid "protection algorithm %d is not supported\n" +#: g10/seckey-cert.c:59 +#, fuzzy, c-format +msgid "protection algorithm %d%s is not supported\n" msgstr "beschermingsalgoritme %d wordt niet ondersteund\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" +#: g10/seckey-cert.c:215 +#, fuzzy +msgid "Invalid passphrase; please try again" msgstr "Foutieve sleuteltekst; probeer a.u.b. opnieuw ...\n" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "LET OP: Kwetsbare sleutel gevonden - verander a.u.b. de sleuteltekst " "opnieuw.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "dit is een ElGamal sleutel van PGP, die NIET veilig is voor " "ondertekeningen!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "openbare sleutel is %lu seconde nieuwer dan de ondertekening\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "openbare sleutel is %lu seconden nieuwer dan de ondertekening\n" -#: g10/sig-check.c:306 -#, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "LET OP: sleutel voor ondertekening is vervallen op %s\n" +#: g10/sig-check.c:237 +#, fuzzy, c-format +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "LET OP: sleutel voor ondertekening %08lX is vervallen op %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "foutieve ondertekening aangenomen wegens een onbekende kritische bit\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" + +#: g10/sign.c:274 +#, fuzzy, c-format +msgid "checking created signature failed: %s\n" +msgstr "Kan ondertekening niet controleren: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "%s ondertekening van: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "LET OP: `%s' is een leeg bestand\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "kan %s niet aanmaken: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "ondertekenen:" -#: g10/sign.c:583 -#, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "LET OP: `%s' is een leeg bestand\n" +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:953 +#, fuzzy, c-format +msgid "%s encryption will be used\n" +msgstr "ontsleuteling mislukte: %s\n" #: g10/textfilter.c:134 #, c-format @@ -2933,426 +3659,209 @@ msgid "input line longer than %d characters\n" msgstr "invoerregel langer dan %d tekens\n" # Untranslated. -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseed failed: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: write failed (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "transactie naar vertrouwensdatabase te groot\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: kan er niet bij: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: map bestaat niet!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: kan hem niet aanmaken: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: kan hem niet vergrendelen\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, fuzzy, c-format +msgid "%s: can't make lock\n" +msgstr "%s: kan hem niet vergrendelen\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: kan hem niet aanmaken: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: aanmaken van versieveld lukte niet: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: foutieve vertrouwensdatabase aangemaakt\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: vertrouwensdatabase aangemaakt\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ongeldige vertrouwensdatabase\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: kon frommeltabel niet aanmaken: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: fout bij het bijwerken van versieveld: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: fout bij het lezen van het versieveld: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: fout bij het schrijven van het versieveld: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "vertrouwensdatabase: lseek mislukte: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "vertrouwensdatabase: lezen mislukte (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: is geen vertrouwensdatabasebestand\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versieveld met recnr %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: ongeldige bestandsversie %d\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: fout bij het lezen van een beschikbaar veld: %s\n" # dir? -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: fout bij het schrijven van indexveld: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: veld met nullen vullen lukte niet: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: kon geen veld toevoegen: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "de vertrouwensdatabase is beschadigd; draai a.u.b. \"gpg --fix-trustdb\".\n" -#: g10/trustdb.c:169 -#, c-format -msgid "trust record %lu, req type %d: read failed: %s\n" -msgstr "vertrouwensveld %lu, req type %d: lezen mislukte: %s\n" - -#: g10/trustdb.c:184 -#, c-format -msgid "trust record %lu, type %d: write failed: %s\n" -msgstr "vertrouwensveld %lu, type %d: schrijven mislukte: %s\n" - -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "vertrouwensveld %lu: verwijderen mislukte: %s\n" - -#: g10/trustdb.c:212 -#, c-format -msgid "trustdb: sync failed: %s\n" -msgstr "vertrouwensdatabase: synchronisatie mislukte: %s\n" - -#: g10/trustdb.c:377 -#, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "fout tijdens lezen van indexveld voor LID %lu: %s\n" - -#: g10/trustdb.c:384 -#, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: verwachtte indexveld, kreeg type %d\n" - -#: g10/trustdb.c:389 -#, c-format -msgid "no primary key for LID %lu\n" -msgstr "geen pimaire sleutel voor LID %lu\n" - -#: g10/trustdb.c:394 -#, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "fout tijdens het lezen van primaire sleutel voor LID %lu: %s\n" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record mislukte: %s\n" - -#: g10/trustdb.c:474 +#: g10/trustdb.c:200 #, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" +msgid "`%s' is not a valid long keyID\n" msgstr "%s: ongeldig sleutelnummer\n" -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "sleutel %08lX: kan niet toevoegen aan de vertrouwensdatabase\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "sleutel %08lX: opvragen van veld mislukte\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "sleutel %08lX: reeds aanwezig in de betrouwbare sleutel-tabel\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" +#: g10/trustdb.c:235 +#, fuzzy, c-format +msgid "key %08lX: accepted as trusted key\n" msgstr "sleutel %08lX: geaccepteerd als een betrouwbare sleutel.\n" -#: g10/trustdb.c:547 +#: g10/trustdb.c:274 +#, fuzzy, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "sleutel %08lX: kan niet toevoegen aan de vertrouwensdatabase\n" + +#: g10/trustdb.c:290 #, fuzzy, c-format msgid "key %08lX: no public key for trusted key - skipped\n" msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n" -#: g10/trustdb.c:566 +#: g10/trustdb.c:332 #, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "LET OP: geheime sleutel %08lX is NIET beveiligd.\n" +msgid "trust record %lu, req type %d: read failed: %s\n" +msgstr "vertrouwensveld %lu, req type %d: lezen mislukte: %s\n" -#: g10/trustdb.c:585 +#: g10/trustdb.c:338 +#, fuzzy, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "vertrouwensveld %lu: verwijderen mislukte: %s\n" + +#: g10/trustdb.c:353 #, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "sleutel %08lX: geheime en openbare sleutel horen niet bij elkaar\n" +msgid "trust record %lu, type %d: write failed: %s\n" +msgstr "vertrouwensveld %lu, type %d: schrijven mislukte: %s\n" -#: g10/trustdb.c:598 +#: g10/trustdb.c:368 #, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "nummeren van de geheime sleutels mislukte: %s\n" +msgid "trustdb: sync failed: %s\n" +msgstr "vertrouwensdatabase: synchronisatie mislukte: %s\n" -#: g10/trustdb.c:994 +#: g10/trustdb.c:468 +#, fuzzy +msgid "no need for a trustdb check\n" +msgstr "%s: is geen vertrouwensdatabasebestand\n" + +# Untranslated. +#: g10/trustdb.c:474 g10/trustdb.c:1641 +#, fuzzy, c-format +msgid "next trustdb check due at %s\n" +msgstr "trustdb rec %lu: lseed failed: %s\n" + +#: g10/trustdb.c:779 +#, fuzzy +msgid "checking the trustdb\n" +msgstr "verander het vertrouwen in de eigenaar" + +#: g10/trustdb.c:933 +#, fuzzy, c-format +msgid "public key %08lX not found: %s\n" +msgstr "publieke sleutel niet gevonden" + +#: g10/trustdb.c:1515 #, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "sleutel %08lX.%lu: Goede subsleutelbinding\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "sleutel %08lX.%lu: Foutieve subsleutelbinding: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "sleutel %08lX.%lu: Geldige sleutelterugtrekking\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "sleutel %08lX.%lu: Ongeldige sleutelterugtrekking: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "sleutel %08lX.%lu: Geldige subsleutelterugtrekking\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Correcte zelfondertekening" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Ongeldige zelfondertekening" - -# User ID onvertaald -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" +msgid "public key of ultimately trusted key %08lX not found\n" msgstr "" -"Geldig terugtrekkingscertificaat overgeslagen wegens een nieuwere " -"zelfondertekening" -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Geldig terugtrekkingscertificaat voor gebruiker" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Ongeldig terugtrekkingscertificaat voor gebruiker" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Geldige terugtrekking van certificaat" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Correct certificaat" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Ongeldige terugtrekking van certificaat" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Ongeldig certificaat" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 +#: g10/trustdb.c:1593 #, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "ondert. veld %lu[%d] wijst naar een verkeerd veld.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "dubbel certificaat - verwijderd" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir mislukte: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: invoegen mislukte: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: invoegen mislukte: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: ingevoegd\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "fout bij het lezen van indexveld: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu sleutels verwerkt\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr " %lu sleutels met fouten\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr " %lu sleutels ingevoegd\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "nummeren van de sleutelblokken mislukte: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: indexveld zonder sleutel - overgeslagen\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr " %lu vanwege nieuwe openbare sleutels\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr " %lu sleutels overgeslagen\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr " %lu sleutels bijgewerkt\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Ooeeps, geen sleutels\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Ooeeps, geen gebruikersidentificaties\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: zoeken naar indexveld mislukte: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "sleutel %08lX: invoegen van vertrouwensveld mislukte: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "sleutel %08lX.%lu: ingevoegd in de vertrouwensdatabase\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -"sleutel %08lX.%lu: aangemaakt in de toekomst (tijdsverschuiving of " -"klokprobleem)\n" -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "sleutel %08lX.%lu: vervallen op %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "sleutel %08lX.%lu: betrouwbaarheidscontrole mislukt: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "gebruiker `%s' niet gevonden: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "kon `%s' niet opzoeken in de vertrouwensdatabase: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "gebruiker '%s' komt niet voor in de vertrouwensdatabase - invoegen\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "kon '%s' niet invoegen in de vertrouwensdatabase: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "LET OP: kan nog geen lange voorkeursblokken verwerken\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3362,45 +3871,33 @@ msgstr "" "Onthoud dat het bestand met de ondertekening (.sig of .asc) het eerste\n" "bestand van de commandoregel moet zijn.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "invoerregel %u is te lang, of ontbrekende LF\n" -#: g10/ringedit.c:296 -#, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: kan sleutelbos niet aanmaken: %s\n" +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"sleutel is niet als onveilig gemarkeerd - kan hem niet gebruiken met nep-" +"RNG!\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: sleutelbos aangemaakt\n" +#: g10/skclist.c:138 +#, fuzzy, c-format +msgid "skipped `%s': duplicated\n" +msgstr "`%s' overgeslagen: dubbel\n" -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "LET OP: er zijn 2 bestanden met vertrouwelijke informatie.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s is de onveranderde\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s is de nieuwe\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Dicht dit mogelijke beveiligingsgat\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "`%s' overgeslagen: %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +#, fuzzy +msgid "skipped: secret key already present\n" +msgstr "overgeslagen: geheime sleutel is al aanwezig\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3419,93 +3916,103 @@ msgstr "Bestand `%s' bestaat al. " msgid "Overwrite (y/N)? " msgstr "Overschrijven (j/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: onbekend achtervoegsel\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Geef een nieuwe bestandsnaam" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "naar standaard uitvoer schrijven\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "ik neem aan dat de getekende gegevens zich in `%s' bevinden\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: nieuw optiebestand aangemaakt\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: kan map niet aamaken: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: map aangemaakt\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "" "u moet GnuPG opnieuw starten, zodat het het nieuwe optiebestand kan inlezen\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "versleuteld met onbekend algoritme %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "%s versleutelde gegevens\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "LET OP: dit bericht werd versleuteld met een zwakke sleutel in het\n" "symmetrische versleutelalgoritme.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +#, fuzzy +msgid "problem handling encrypted packet\n" +msgstr "plaats geen sleutelidentificatieveld in versleutelde pakketten" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "zwakke sleutel gemaakt - ik probeer het opnieuw\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "kon het aanmaken van een zwakke sleutel voor het symmetrische\n" "algoritme niet voorkomen; ik heb het %d keer geprobeerd!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "er is een geheime sleutel voor deze openbare sleutel!\n" - -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" msgstr "" -"gebruik eerst de optie \"--delete-secret-key\" om hem te verwijderen.\n" -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "kan dat niet doen in lopende band-mode zonder \"--yes\"\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Deze sleutel van de sleutelbos verwijderen? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "Dit is een geheime sleutel! - echt verwijderen? " +#: g10/delkey.c:156 +#, fuzzy, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "nummeren van de sleutelblokken mislukte: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, fuzzy, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "er is een geheime sleutel voor deze openbare sleutel!\n" + +#: g10/delkey.c:196 +#, fuzzy +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "" +"gebruik eerst de optie \"--delete-secret-key\" om hem te verwijderen.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3518,20 +4025,28 @@ msgstr "" "netwerk-van-certificaten (dat automatisch gemaakt wordt)." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "Als u dit desondanks toch wilt intrekken, antwoord dan \"ja\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Als u deze onbetrouwbare sleutel toch wilt gebruiken, antwoord dan \"ja\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Geef de identificatie van de ontvangende gebruiker." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3570,7 +4085,7 @@ msgstr "" "ondertekend kan worden; om deze reden is de ElGamal sleutel voor\n" "alleen versleutelen niet aanwezig in dit menu." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3581,16 +4096,16 @@ msgstr "" "ondertekeningen die ermee gemaakt zijn, zijn behoorlijk groot en traag\n" "te verifiëren." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Geef de sleutelgrootte" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Antwoord met \"ja\" of \"nee\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3602,19 +4117,19 @@ msgstr "" "dan geen goede foutafhandeling krijgen, inplaats daarvan zal het\n" "systeem deze waarde proberen te interpreteren als een interval." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Geef de naam van de eigenaar van de sleutel" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "geef a.u.b. een optioneel maar aan te raden e-mail adres." -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Geef eventueel een kanttekening" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3628,15 +4143,56 @@ msgstr "" "O om door te gaan met de sleutelgeneratie.\n" "Q om te stoppen met de sleutelgeneratie." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Antwoord met \"ja\" (of alleen \"j\") om een subsleutel aan te maken." -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Antwoord met \"ja\" als u ALLE gebruikersidentificaties wilt tekenen" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3644,11 +4200,11 @@ msgstr "" "Antwoord \"ja\" indien u deze gebruiker echt wilt verwijderen.\n" "Alle certificaten gaan dan ook verloren!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Antwoord met \"ja\" als het goed is om de subsleutel te verwijderen" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3659,7 +4215,7 @@ msgstr "" "relatie met deze of een andere sleutel verstoort, die getekend is met\n" "deze sleutel." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3672,7 +4228,7 @@ msgstr "" "ondertekenen met deze sleutel misschien een vertrouwensband kan\n" "scheppen met een andere, al getekende, sleutel." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." @@ -3680,7 +4236,7 @@ msgstr "" "De ondertekening is ongeldig. Het is zinnig om deze uit de sleutelbos\n" "te verwijderen." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3694,29 +4250,35 @@ msgstr "" "hierna te gebruiken. Dus doe dit alleen als de zelfondertekening om de\n" "een of andere reden niet geldig is, en een tweede beschikbaar is." -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" + +#: g10/helptext.c:238 +#, fuzzy +msgid "Please enter the passhrase; this is a secret sentence \n" msgstr "" "Geef a.u.b. een sleuteltekst; dit is een geheime zin\n" " blabla, blablabla, ..." -#: g10/helptext.c:209 +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Herhaal a.u.b. de voorgaande sleuteltekst, zodat u zeker weet wat u ingetypt " "heeft." -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "Geef de naam van het bestand waaraan de ondertekening toebehoort" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Antwoord \"ja\" als het goed is om het bestand te overschrijven" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3724,14 +4286,14 @@ msgstr "" "Geef a.u.b. een nieuwe bestansnaam. Als u op RETURN drukt, wordt de\n" "standaard bestandsnaam (tussen blokhaken weergegeven) gebruikt." -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3740,25 +4302,375 @@ msgid "" " this is normally used to mark an email address invalid.\n" msgstr "" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Geen hulp beschikbaar" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Geen hulp beschikbaar voor `%s'" +#: g10/keydb.c:177 +#, fuzzy, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "fout bij schrijven van de sleutelbos `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "" + +#: g10/keydb.c:197 +#, fuzzy, c-format +msgid "keyring `%s' created\n" +msgstr "%s: sleutelbos aangemaakt\n" + +#: g10/keydb.c:587 +#, fuzzy, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "%s: kon frommeltabel niet aanmaken: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "LET OP: er zijn 2 bestanden met vertrouwelijke informatie.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s is de onveranderde\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s is de nieuwe\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Dicht dit mogelijke beveiligingsgat\n" + +#: g10/keyring.c:1337 +#, fuzzy, c-format +msgid "checking keyring `%s'\n" +msgstr "fout bij schrijven van de sleutelbos `%s': %s\n" + +#: g10/keyring.c:1368 +#, fuzzy, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu sleutels zijn tot nu toe behandeld\n" + +#: g10/keyring.c:1379 +#, fuzzy, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "sleutels en ondertekeningen opnoemen" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: sleutelbos aangemaakt\n" + +#, fuzzy +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? " + +#, fuzzy +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? " + +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "Echt tekenen? " + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "sleutel %08lX: onze versie heeft geen zelfondertekening\n" + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Heb je echt een sleutel nodig die zo lang is? " + +#~ msgid " signed by %08lX at %s\n" +#~ msgstr " getekend door %08lX op %s\n" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key gebruikersidentificatie" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key gebruikersidentificatie" + +#, fuzzy +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key gebruikersidentificatie" + +#~ msgid "Enter the user ID: " +#~ msgstr "Geef de gebruikersidentificatie: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "overgeslagen: openbare sleutel is al ingesteld met --encrypt-to\n" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "WARNING: This is a PGP2-style key\n" +#~ msgstr "LET OP: `%s' is een leeg bestand\n" + +#~ msgid "sSmMqQ" +#~ msgstr "sSmMqQ" + +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "geen sleutelserver bekend (gebruik de optie --keyserver)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s: ongeldig sleutelnummer\n" + +#, fuzzy +#~ msgid "duplicate (short) key ID %08lX\n" +#~ msgstr "openbare sleutel is %08lX\n" + +#, fuzzy +#~ msgid "%lu key(s) to refresh\n" +#~ msgstr " %lu sleutels met fouten\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NAMEN]|controleer de vertrouwensdatabase" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Kon geen pad vinden dat leidt tot vertrouwen van de sleutel. Laten we\n" +#~ "eens proberen of we wat missende waarden kunnen invullen.\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "Geen pad gevonden dat leidt naar een van onze sleutels.\n" +#~ "\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "Geen certificaten gevonden zonder betrouwbaarheidswaarden.\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Betrouwbaarheidswaarden zijn niet veranderd.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "%08lx: geen informatie om een betrouwbaarheidskans te berekenen\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: fout tijdens controleren van de sleutel: %s\n" + +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "te veel ingangen in de unk cache - uitgezet\n" + +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "bijwerken van de vertrouwensdatabase ging niet goed: %s\n" + +#~ msgid "assuming bad MDC due to an unknown critical bit\n" +#~ msgstr "foutieve MDC aangenomen wegens een onbekende kritische bit\n" + +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "fout tijdens lezen van indexveld voor LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lid %lu: verwachtte indexveld, kreeg type %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "geen pimaire sleutel voor LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "fout tijdens het lezen van primaire sleutel voor LID %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record mislukte: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "sleutel %08lX: opvragen van veld mislukte\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "sleutel %08lX: reeds aanwezig in de betrouwbare sleutel-tabel\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "LET OP: geheime sleutel %08lX is NIET beveiligd.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "sleutel %08lX: geheime en openbare sleutel horen niet bij elkaar\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "nummeren van de geheime sleutels mislukte: %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "sleutel %08lX.%lu: Goede subsleutelbinding\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "sleutel %08lX.%lu: Foutieve subsleutelbinding: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "sleutel %08lX.%lu: Geldige sleutelterugtrekking\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "sleutel %08lX.%lu: Ongeldige sleutelterugtrekking: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "sleutel %08lX.%lu: Geldige subsleutelterugtrekking\n" + +#~ msgid "Good self-signature" +#~ msgstr "Correcte zelfondertekening" + +#~ msgid "Invalid self-signature" +#~ msgstr "Ongeldige zelfondertekening" + +# User ID onvertaald +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "" +#~ "Geldig terugtrekkingscertificaat overgeslagen wegens een nieuwere " +#~ "zelfondertekening" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Geldig terugtrekkingscertificaat voor gebruiker" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Ongeldig terugtrekkingscertificaat voor gebruiker" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Geldige terugtrekking van certificaat" + +#~ msgid "Good certificate" +#~ msgstr "Correct certificaat" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Ongeldige terugtrekking van certificaat" + +#~ msgid "Invalid certificate" +#~ msgstr "Ongeldig certificaat" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "ondert. veld %lu[%d] wijst naar een verkeerd veld.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "dubbel certificaat - verwijderd" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir mislukte: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: invoegen mislukte: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: invoegen mislukte: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: ingevoegd\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "fout bij het lezen van indexveld: %s\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr " %lu sleutels ingevoegd\n" + +#~ msgid "enumerate keyblocks failed: %s\n" +#~ msgstr "nummeren van de sleutelblokken mislukte: %s\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: indexveld zonder sleutel - overgeslagen\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr " %lu vanwege nieuwe openbare sleutels\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr " %lu sleutels overgeslagen\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr " %lu sleutels bijgewerkt\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Ooeeps, geen sleutels\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Ooeeps, geen gebruikersidentificaties\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: zoeken naar indexveld mislukte: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "sleutel %08lX: invoegen van vertrouwensveld mislukte: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "sleutel %08lX.%lu: ingevoegd in de vertrouwensdatabase\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "sleutel %08lX.%lu: aangemaakt in de toekomst (tijdsverschuiving of " +#~ "klokprobleem)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "sleutel %08lX.%lu: vervallen op %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "sleutel %08lX.%lu: betrouwbaarheidscontrole mislukt: %s\n" + +#~ msgid "user '%s' not found: %s\n" +#~ msgstr "gebruiker `%s' niet gevonden: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "kon `%s' niet opzoeken in de vertrouwensdatabase: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "" +#~ "gebruiker '%s' komt niet voor in de vertrouwensdatabase - invoegen\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "kon '%s' niet invoegen in de vertrouwensdatabase: %s\n" + +#, fuzzy +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) ElGamal (ondertekenen en versleutelen)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "" +#~ "Wilt u echt een sleutel maken om mee te ondertekenen en versleutelen? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: gebruiker niet gevonden: %s\n" + #~ msgid "certificate read problem: %s\n" #~ msgstr "leesprobleem voor certificaat: %s\n" +#~ msgid "can't lock keyring `%s': %s\n" +#~ msgstr "kan sleutelbos `%s' niet vergrendelen: %s\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: gebruiker niet gevonden\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "LET OP: kan nog geen lange voorkeursblokken verwerken\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: kan sleutelbos niet aanmaken: %s\n" + +#, fuzzy +#~ msgid "invalid" +#~ msgstr "ongeldige versleuteling" + +#, fuzzy +#~ msgid "revoked" +#~ msgstr "revkey" + #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "RSA sleutel kan niet gebruikt worden in deze versie\n" @@ -3768,36 +4680,16 @@ msgstr "Geen hulp beschikbaar voor `%s'" #~ msgid "No user ID for key\n" #~ msgstr "Geen gebruikersidentificatie voor sleutel\n" -#~ msgid "no default public keyring\n" -#~ msgstr "geen standaard openbare sleutelbos\n" - -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "kan sleutelbos `%s' niet vergrendelen: %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "sleutel %08lX: kan origineel sleutelblok niet lezen: %s\n" - -#~ msgid "%s: user not found\n" -#~ msgstr "%s: gebruiker niet gevonden\n" +#~ msgid "no secret key for decryption available\n" +#~ msgstr "geheime sleutel voor ontsleuteling is niet beschikbaar\n" #~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" +#~ "RSA keys are deprecated; please consider creating a new key and use this " +#~ "key in the future\n" #~ msgstr "" #~ "RSA sleutels zijn verouderd; overweeg a.u.b. het aanmaken van een\n" #~ "nieuwe sleutel om in de toekomst te gebruiken\n" -#~ msgid "not processed" -#~ msgstr "niet behandeld" - -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "foutieve MDC aangenomen wegens een onbekende kritische bit\n" - -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "sleutel is niet als onveilig gemarkeerd - kan hem niet gebruiken met " -#~ "nep-RNG!\n" - #~ msgid "set debugging flags" #~ msgstr "zet afluistervlaggen" diff --git a/po/pl.po b/po/pl.po index ab47df1fb..1465feeed 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,313 +1,342 @@ # Gnu Privacy Guard. -# Copyright (C) 1998, 1999 Free Software Foundation, Inc. -# Janusz A. Urbanowicz , 1998, 1999. +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Janusz A. Urbanowicz , 1999, 2000, 2001, 2002. # -# To be included in GnuPG 1.0.1 +# To be included in GnuPG 1.0.7 # msgid "" msgstr "" -"Project-Id-Version: gnupg 1.0.0h\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 1999-12-05 21:29+01:00\n" +"Project-Id-Version: gnupg-1.0.6\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-28 02:44+02:00\n" "Last-Translator: Janusz A. Urbanowicz \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " -"--keyword=_ --keyword=N_ --files-from=./POTFILES.in\n" +"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments --" +"keyword=_ --keyword=N_ --files-from=./POTFILES.in\n" "Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " "cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " -"g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " -"g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c " -"g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c g10/status.c " -"g10/pubkey-enc.c\n" +"g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c g10/" +"mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c g10/" +"sig-check.c g10/sign.c g10/trustdb.c g10/verify.c g10/status.c g10/pubkey-" +"enc.c\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Ostrze¿enie: u¿ywana pamiêæ nie jest pamiêci± bezpieczn±!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "obja¶nienie mo¿na przeczytaæ tutaj: http://www.gnupg.org/faq.html\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "operacja niemo¿liwa do wykonania bez dostêpnej pamiêci bezpiecznej\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(prawdopodobnie u¿ywany program jest niew³a¶ciwy dlatego zadania)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "tak" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "tT" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "nie" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "wyj¶cie" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "wW" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "b³±d ogólny" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "nieznany rodzaj pakietu" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "nieznana wersja" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "nieznany algorytm klucza publicznego" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "nieznany algorytm skrótu" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "niepoprawny klucz publiczny" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "niepoprawny klucz tajny" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "niepoprawny podpis" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "b³±d sumy kontrolnej" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" -msgstr "niepoprawne wyra¿enie przej¶ciowe" +msgstr "niepoprawne d³ugie has³o." + +#: util/errors.c:64 +msgid "public key not found" +msgstr "brak klucza publicznego." #: util/errors.c:65 -msgid "public key not found" -msgstr "nie odnaleziono klucza publicznego" - -#: util/errors.c:66 msgid "unknown cipher algorithm" msgstr "nieznany algorytm szyfruj±cy" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "otwarcie zbioru kluczy jest niemo¿liwe" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "niepoprawny pakiet" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" -msgstr "b³±d w opakowaniu ASCII" +msgstr "b³±d w opakowaniu ASCII." -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "brak takiego identyfikatora u¿ytkownika." -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" -msgstr "klucz tajny nie jest dostêpny" +msgstr "brak klucza tajnego." + +#: util/errors.c:71 +msgid "wrong secret key used" +msgstr "zosta³ u¿yty niew³a¶ciwy klucz tajny" #: util/errors.c:72 -msgid "wrong secret key used" -msgstr "u¿yty zosta³ niew³a¶ciwy klucz tajny" - -#: util/errors.c:73 msgid "not supported" msgstr "nie jest obs³ugiwany" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" -msgstr "niepoprawny klucz" +msgstr "niepoprawny klucz." + +#: util/errors.c:74 +msgid "file read error" +msgstr "b³±d przy odczycie pliku." #: util/errors.c:75 -msgid "file read error" -msgstr "b³±d przy odczycie pliku" +msgid "file write error" +msgstr "b³±d przy zapisie pliku." #: util/errors.c:76 -msgid "file write error" -msgstr "b³±d przy zapisie pliku" - -#: util/errors.c:77 msgid "unknown compress algorithm" msgstr "nieznany algorytm kompresji" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" -msgstr "b³±d przy otwieraniu pliku" +msgstr "b³±d przy otwieraniu pliku." -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "b³±d przy tworzeniu pliku" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" -msgstr "niepoprawne wyra¿enie przej¶ciowe" +msgstr "niepoprawne d³ugie has³o" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algorytm szyfrowania z kluczem publicznym nie jest zaimplementowany" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algorytm szyfruj±cy nie jest zaimplementowany" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "nieznana klasa podpisu" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" -msgstr "b³±d w bazie zaufania" +msgstr "b³±d w bazie zaufania." -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "b³±d MPI" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "ograniczenie zasobów" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "b³±d w zbiorze kluczy" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "niepoprawny certyfikat" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" -msgstr "b³±d formatu indentyfikatora u¿ytkownika" +msgstr "b³±d formatu identyfikatora u¿ytkownika" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "b³±d przy zamykaniu pliku" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "b³±d przy zmianie nazwy pliku" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "b³±d przy usuwaniu pliku" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" -msgstr "nieoczekiwane dane" +msgstr "nieoczekiowane dane" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "konflikt znaczników czasu" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "nieu¿yteczny algorytm z kluczem publicznym" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "plik ju¿ istnieje" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "klucz s³aby" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "b³êdny argument" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "niepoprawny URI" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" -msgstr "URI nie obs³ugiwanego typu" +msgstr "URI nie jest obs³ugiwany" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "b³±d sieci" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" -msgstr "nie jest zaszyfrowany" +msgstr "nie zaszyfrowany" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "nie zosta³ przetworzony" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "bezu¿yteczny klucz publiczny" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "bezu¿yteczny klucz tajny" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "b³±d serwera kluczy" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... to jest b³±d w programie (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "znalaz³e¶(a¶) b³±d w programie ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "nie mo¿na otworzyæ %s: %s\n" -#: cipher/random.c:325 -#, fuzzy, c-format +#: cipher/random.c:324 +#, c-format msgid "can't stat `%s': %s\n" -msgstr "nie mo¿na otworzyæ %s: %s\n" +msgstr "nie mo¿na sprawdziæ %s: %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" -msgstr "" +msgstr "'%s' nie jest zwyk³ym plikiem - zostaje pominiêty\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" -msgstr "" +msgstr "uwaga: plik random_seed jest pusty\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" +"ostrze¿enie: plik random_seed ma niew³a¶ciwy rozmiar - nie zostanie u¿yty\n" -#: cipher/random.c:349 -#, fuzzy, c-format +#: cipher/random.c:348 +#, c-format msgid "can't read `%s': %s\n" -msgstr "nie mo¿na otworzyæ %s: %s\n" +msgstr "nie mo¿na odczytaæ %s: %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" -msgstr "" +msgstr "uwaga: plik random_seed nie jest uaktualniony\n" -#: cipher/random.c:407 -#, fuzzy, c-format +#: cipher/random.c:406 +#, c-format msgid "can't create `%s': %s\n" msgstr "nie mo¿na stworzyæ %s: %s\n" -#: cipher/random.c:414 -#, fuzzy, c-format -msgid "can't write `%s': %s\n" -msgstr "nie mo¿na otworzyæ %s: %s\n" - -#: cipher/random.c:417 -#, fuzzy, c-format -msgid "can't close `%s': %s\n" -msgstr "nie mo¿na otworzyæ %s: %s\n" - -#: cipher/random.c:428 +#: cipher/random.c:413 #, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" +msgid "can't write `%s': %s\n" +msgstr "nie mo¿na zapisaæ %s: %s\n" -#: cipher/random.c:659 +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "nie mo¿na zamkn±æ %s: %s\n" + +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "OSTRZE¯ENIE: u¿ywany generator liczb losowych\n" "nie jest kryptograficznie bezpieczny!!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -321,7 +350,7 @@ msgstr "" "JAKIEKOLWIEK DANE GENEROWANE PRZEZ TEN PROGRAM NIE NADAJ¡ SIÊ DO \n" "NORMALNEGO U¯YTKU I NIE ZAPEWNIAJ¡ BEZPIECZEÑSTWA!!\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -333,19 +362,7 @@ msgstr "" "Proszê kontynuowaæ inne dzia³ania aby system móg³ zebraæ odpowiedni±\n" "ilo¶æ entropii do ich wygenerowania (brakuje %d bajtów).\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Ostrze¿enie: u¿ywana pamiêæ nie jest pamiêci± bezpieczn±!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "operacja niemo¿liwa do wykonania bez dostêpnej pamiêci bezpiecznej\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(prawdopodobnie u¿ywany program jest niew³a¶ciwy dla tego zadania)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -353,139 +370,167 @@ msgstr "" "@Polecenia:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[plik]|z³o¿enie podpisu" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[plik]|z³o¿enie podpisu na czytelnym dokumencie" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" -msgstr "sporz±dzenie podpisu oddzielonego od dokumentu" +msgstr "z³o¿enie podpisu oddzielonego od dokumentu" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "szyfrowanie danych" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[pliki]|szyfrowanie plików" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "szyfrowanie tylko szyfrem symetrycznym" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" -msgstr "tylko zapis do pliku" +msgstr "tylko zapis danych w formacie OpenPGP" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "odszyfrowywanie danych (domy¶lnie)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[pliki]|odszyfrowywanie plików" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "sprawdzenie podpisu" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "lista kluczy" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "lista kluczy i podpisów" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "sprawdzenie podpisów kluczy" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "lista kluczy i ich odcisków" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "lista kluczy tajnych" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" -msgstr "generacja nowej pary klucza" +msgstr "generacja nowej pary kluczy" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" +#: g10/g10.c:307 +msgid "remove keys from the public keyring" msgstr "usuniêcie klucza ze zbioru kluczy publicznych" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" msgstr "usuniêcie klucza ze zbioru kluczy tajnych" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "z³o¿enie podpisu na kluczu" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" -msgstr "z³o¿enie lokalnego podpisu na kluczu" +msgstr "z³o¿enie prywatnego podpisu na kluczu" -#: g10/gpg.c:224 +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "" +"z³o¿enie na kluczu podpisu nie podlegaj±cego \n" +"uniewa¿nieniu" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "" +"z³o¿enie na kluczu podpisu prywatnego,\n" +"nie podlegaj±cego uniewa¿nieniu" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "podpisanie lub modyfikacja klucza" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "tworzenie certyfikatu uniewa¿nienia klucza" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "eksport kluczy do pliku" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "eksport kluczy do serwera kluczy" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "import kluczy z serwera kluczy" -#: g10/gpg.c:232 -msgid "import/merge keys" -msgstr "import/do³±czanie kluczy" +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "szukanie kluczy na serwerze" -#: g10/gpg.c:234 +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "od¶wie¿enie kluczy z serwera" + +#: g10/g10.c:326 +msgid "import/merge keys" +msgstr "import/do³±czenie kluczy" + +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "wypisane sekwencji pakietów" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "eksport warto¶ci zaufania" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "wczytanie warto¶æi zaufania" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "uaktualnienie bazy zaufania" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NAZWY]|sprawdzenie bazy zaufania" +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "automatyczne uaktualnienie bazy zaufania" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "naprawa uszkodzonej bazy zaufania" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "zdjêcie opakowania ASCII pliku lub potoku" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "opakowanie ASCII pliku lub potoku" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [pliki]|skróty wiadomo¶ci" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -495,162 +540,204 @@ msgstr "" "Opcje:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" -msgstr "plik wynikowy bêdzie w opakowaniu ASCII" +msgstr "plik wynikowy w opakowaniu ASCII" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" -msgstr "|NAZWA|szyfrowanie dla adresata NAZWA" +msgstr "|NAZWA|szyfrowanie dla odbiorcy NAZWA" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NAZWA|u¿ycie NAZWA jako domy¶lnego adresata" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "domy¶lny klucz jest domy¶lnym adresatem" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "identyfikator do podpisania lub odszyfrowania" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|poziom kompresji N (0 - brak)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "kanoniczny format tekstowy" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "plik wyj¶ciowy" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "z informacjami dodatkowymi" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "mniej komunikatóww" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "bez odwo³añ do terminala" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "wymuszenie trzeciej wersji formatu podpisów" -#: g10/gpg.c:275 +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "bez wymuszania trzeciej wersji formatu podpisów" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "wymuszenie czwartej wersji formatu podpisów" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "bez wymuszania czwartej wersji formatu podpisów" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "do szyfrowania bêdzie u¿ywany MDC" -#: g10/gpg.c:276 +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "do szyfrowania nie zostanie u¿yty MDC" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "pozostawienie bez zmian" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "wykorzystanie gpg-agenta" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "tryb wsadowy: ¿adnych pytañ" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "automatyczna odpowied¼ tak na wiêkszo¶æ pytañ" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "automatyczna odpowied¼ nie na wiêkszo¶æ pytañ" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "dodaæ zbiór kluczy do listy u¿ywanych" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "dodaæ zbiór kluczy tajnych do listy" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "okazanie, w którym zbiorze kluczy znajduje siê dany klucz" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NAZWA|u¿ycie NAZWA jako domy¶lnego klucza tajnego" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|serwer kluczy w którym bêd± poszukiwane" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NAZWA|zestaw znaków terminala NAZWA" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "wczytanie opcji z pliku" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "|FD|zapisaæ opis stanu do FD" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "|KLUCZ|ca³kowite zaufanie dla tego klucza" +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[plik]|zapisaæ opis stanu do pliku" -#: g10/gpg.c:297 +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|KLUCZ|klucz ca³kowicie zaufany" + +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|PLIK|³adowanie modu³u rozszerzenia z PLIK" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "emulacja trybu opisanego w RFC1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" -msgstr "zgodno¶æ ustawieñ pakietów, szyfrów i skrótów z OpenPGP" +msgstr "tryb zgodno¶ci formatu pakietów, szyfrów i skrótów z OpenPGP" -#: g10/gpg.c:300 +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "tryb zgodno¶ci formatów, szyfrów i skrótów z PGP 2.x" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" -msgstr "|N|N-ty tryb wprowadzania wyra¿enia przej¶ciowego" +msgstr "|N|N-ty tryb obliczania has³a" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" -msgstr "|ALG|algorytm obliczania skrótów wiadomo¶ci ALG" +msgstr "|ALG|algorytm skrótu dla has³a ALG" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|ALG|algorytmu szyfruj±cy ALG dla has³a" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAZWA|algorytm szyfruj±cy NAZWA" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAZWA|algorytm obliczania skrótów wiadomo¶ci NAZWA" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|algorytm kompresji N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" -msgstr "usuniêcie identyfikatorów kluczy z pakietów" +msgstr "usuniêcie numerów kluczy adresatów z zaszyfrowanych pakietów" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "okazanie identyfikatora - zdjêcia u¿ytkownika" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "bez pokazywania zdjêæ" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "polecenie wywo³ania przegl±darki do zdjêæ" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NAZWA=TRE¦Æ|adnotacje" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" +"@\n" +"(Pe³n± listê poleceñ i opcji mo¿na znale¼æ w podrêczniku systemowym.)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -671,15 +758,15 @@ msgstr "" " --list-keys [nazwy] pokazuje klucze\n" " --fingerprint [nazwy] pokazuje odciski kluczy\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "B³êdy prosimy zg³aszaæ na adres .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Wywo³anie: gpg [opcje] [pliki] (-h podaje pomoc)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -689,7 +776,7 @@ msgstr "" "podpisywanie, sprawdzanie podpisów, szyfrowanie, deszyfrowanie\n" "domy¶lnie wykonywana operacja zale¿y od danych wej¶ciowych\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -697,638 +784,694 @@ msgstr "" "\n" "Obs³ugiwane algorytmy:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "wywo³anie: gpg [opcje]" -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "sprzeczne polecenia\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "UWAGA: brak domy¶lnego pliku opcji '%s'\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "plik opcji '%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "odczyt opcji z '%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s nie jest poprawn± nazw± zestawu znaków\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "niezrozuma³y URI serwera kluczy\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "nie mo¿na ustawiæ ¶cie¿ki programów wykonywalnych na %s\n" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "OSTRZE¯ENIE: '%s' jest przestarza³± opcj±.\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "nale¿y u¿yæ opcji \"--keyserver-options %s\"\n" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "OSTRZE¯ENIE: program mo¿e stworzyæ plik zrzutu pamiêci!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "OSTRZE¯ENIE: %s powoduje obej¶cie %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "UWAGA: %s nie jest do normalnego u¿ytku!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" -msgstr "%s jest niedozwolony z %s!\n" +msgstr "Nie wolno u¿ywaæ %s z %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s nie ma sensu z %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" +"w trybie --pgp2 mo¿na sk³adaæ tylko podpisy oddzielne lub do³±czone do " +"tekstu\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "w trybie --pgp2 nie mo¿na jednocze¶nie szyfrowaæ i podpisywaæ\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "w trybie --pgp2 trzeba u¿ywaæ plików a nie potoków.\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "szyfrowanie wiadomo¶ci w trybie --pgp2 wymaga modu³u szyfru IDEA\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "tej wiadomo¶ci mo¿e nie daæ siê odczytaæ za pomoc± PGP 2.x\n" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "wybrany algorytm szyfruj±cy jest niepoprawny\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "wybrany algorytm geenracji skrótów wiadomo¶ci jest niepoprawny\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "podany URL regulaminu jest niepoprawny\n" +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "podany URL regulaminu podpisów jest niepoprawny\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "podany URL regulaminu certyfikacji jest niepoprawny\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "ustawienie algortytmu kompresji musi pochodziæ z zakresu %d..%d\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "warto¶æ completes-needed musi byæ wiêksza od 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "warto¶æ marginals-needed musi byæ wiêksza od 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "warto¶æ max-cert-depth musi mie¶ciæ siê w zakresie od 1 do 255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "UWAGA: prosty tryb S2K (0) jest stanowczo odradzany\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "niepoprawny tryb S2K; musi mieæ warto¶æ 0, 1 lub 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "" +"niew³a¶ciwy domy¶lny poziom sprawdzania; musi mieæ warto¶æ 0, 1 lub 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "niew³a¶ciwe ustawienia\n" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "inicjowanie Bazy Zaufania nie powiod³o siê: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [plik]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [plik]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [plik]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [plik]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [plik]" -#: g10/gpg.c:1232 -msgid "--clearsign [filename]" -msgstr "--clearsign [plik]" +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [plik]" -#: g10/gpg.c:1249 +#: g10/g10.c:1701 +msgid "--clearsign [filename]" +msgstr "--clearsign [plik]\"" + +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [plik]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key nazwa u¿ytkownika" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key nazwa u¿ytkownika" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key nazwa u¿ytkownika" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrsign-key nazwa u¿ytkownika" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key nazwa u¿ytkownika [polecenia]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key nazwa u¿ytkownika" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key nazwa u¿ytkownika" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "nie mo¿na otworzyæ %s: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [identyfikator] [zbiór kluczy]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" -msgstr "usuniêcie opakowania ASCII nie powiod³o siê: %s\n" +msgstr "zdjêcie opakowania ASCII nie powiod³o siê: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "opakowywanie ASCII nie powiod³o siê: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" -msgstr "niew³a¶ciwy algorytm skrótu '%s'\n" +msgstr "niew³a¶ciwy algorytm skrótu ,%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[nazwa pliku]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Wpisz tutaj swoj± wiadomo¶æ ...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" -msgstr "nie mo¿na otworzyæ '%s'\n" +msgstr "nie mo¿na otworzyæ ,%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" -msgstr "adnotacja musi zaczynaæ siê od litery lub podkre¶lenia\n" +msgstr "adnotacja musi zaczynaæ siê od podkre¶lenia lub litery\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" "nazwa adnotacji mo¿e zawieraæ tylko litery, cyfry, kropki,\n" -"podkre¶lenia, i musi koñczyæ siê '='\n" +"podkre¶lenia, i musi koñczyæ siê ,='\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "kropki w adnotacji musz± znajdowaæ siê pomiêdzy innymi znakami\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "warto¶æ adnotacji nie mo¿e zawieraæ znaków steruj±cych\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "opakowanie: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "niepoprawny nag³ówek opakowania: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "nag³ówek opakowania: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "niew³a¶ciwy nag³ówek czytelnego podpisanego dokumentu\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "zagnie¿d¿one podpisy na czytelnym dokumencie\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "niepoprawne oznaczenie linii minusami: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "nieoczekiwane opakowanie:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "niew³a¶ciwy znak formatu radix64 %02x zosta³ pominiêty\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "przewczesny koniec pliku (brak CRC)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "przedwczesny koniec pliku (w CRC)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "b³±d formatu CRC\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "B³±d sumy CRC; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" -msgstr "przedwczesny koniec pliku (w zakoñczeniu)\n" +msgstr "przedwczesny koniec pliku (w linii koñcz±cej)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "b³±d w linii koñcz±cej\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "nie odnaleziono poprawnych danych w formacie OpenPGP.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "b³±d opakowania: linia d³u¿sza ni¿ %d znaków\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "znak kodowania quoted-printable w opakowaniu ASCII - prawdopodobnie\n" "przek³amanie wprowadzone przez program transportowy poczty\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Odcisk:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Odcisk klucza:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" -msgstr "" +msgstr "Nie podano przyczyny" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" -msgstr "Klucz jest chroniony.\n" +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "Klucz zosta³ zast±piony" -#: g10/pkclist.c:121 -#, fuzzy +#: g10/pkclist.c:65 msgid "Key has been compromised" -msgstr "Ten klucz zosta³ wy³±czony z u¿ycia" +msgstr "Klucz zosta³ skompromitowany" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" -msgstr "" +msgstr "Klucz nie jest ju¿ u¿ywany" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" -msgstr "" +msgstr "Identyfikator u¿ytkownika przesta³ byæ poprawny" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " -msgstr "" +msgstr "Powód uniewa¿nienia: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " -msgstr "" +msgstr "Komentarz do uniewa¿nienia: " #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "iIpPwW" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMwWpP" -#: g10/pkclist.c:308 +#: g10/pkclist.c:258 #, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" -"Brak warto¶ci zaufania dla %lu:\n" +"Brak warto¶ci zaufania dla:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Zastanów siê jak bardzo ufasz temu u¿ytkownikowi w kwestii sprawdzania\n" "to¿samo¶ci innych w³a¶cicieli kluczy (czy sprawdzi on odciski klucza \n" -"pobrane z ró¿nych ¼róde³, dokumenty potwierdzaj±ce to¿samo¶æ w³a¶ciciela\n" -"klucza itd.)?\n" -"\n" -" 1 = Nie wiem.\n" -" 2 = NIE ufam mu w tej kwestii.\n" -" 3 = Ufam marginalnie.\n" -" 4 = W pe³ni mu ufam.\n" -" i = potrzebujê wiêcej informacji\n" +"pobrane z ró¿nych ¼róde³, dokumenty potwierdzaj±ce to¿samo¶æ, itd.)?\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = nie wiem\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = NIE ufam mu\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = mam ograniczone zaufanie\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = mam pe³ne zaufanie\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = ufam absolutnie\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = potrzebujê wiêcej informacji\n" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" -msgstr " p = powrót do g³ównego menu\n" +msgstr " m = powrót do g³ównego menu\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " p = pominiêcie klucza\n" + +#: g10/pkclist.c:285 msgid " q = quit\n" -msgstr "w = wyj¶cie\n" +msgstr " w = wyj¶cie\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Twoja decyzja? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Czy na pewno chcesz przypisaæ absolutne zaufanie temu kluczowi? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certyfikaty prowadz±ce do ostatecznie zaufanego klucza:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Niemo¿liwe jest znalezienie poprawnej scie¿ki zaufania do tego klucza.\n" -"Sprawd¼my czy mo¿na przypisaæ brakuj±ce warto¶ci zaufania.\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"Brak ¶cie¿ki prowadz±cej do którego¶ z naszych kluczy.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Brak certyfikatów o niezdefiniowanym poziomie zaufania.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Parametry zaufania nie zosta³y zmienione.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "klucz %08lX: klucz zosta³ uniewa¿niony!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " -msgstr "U¿yæ tego klucza mimo wszystko? " +msgstr "U¿yæ tego klucza pomimo to? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "klucz %08lX: podklucz zosta³ uniewa¿niony!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: data wa¿no¶ci klucza up³ynê³a\n" -#: g10/pkclist.c:519 +#: g10/pkclist.c:442 #, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: brak informacji aby obliczyæ prawdopodobieñstwo zaufania\n" +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "%08lX: Nie ma pewno¶ci co do to¿samo¶ci w³a¶ciciela klucza.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: NIE UFAMY temu kluczowi\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" "but it is accepted anyway\n" msgstr "" -"%08lX: Nie ma pewno¶æi ¿e ten klucz faktycznie nale¿y do odoby podaj±cej\n" -"siê za jego w³a¶ciciela, ale jest akceptowalny.\n" +"%08lX: Nie ma pewne, do do kogo nale¿y ten klucz, ale jest akceptowalny.\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" -msgstr "" -"Ten klucz prawdopodobnie nale¿y do osoby podaj±cej siê za jego w³a¶ciciela.\n" +msgstr "Ten klucz prawdopodobnie nale¿y do tej osoby.\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Ten klucz nale¿y do nas\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" -"NIE MA pewno¶ci ¿e ten klucz nale¿y do osoby która podaje siê za jego\n" -"w³a¶ciciela. Je¶li nie masz co do tego ¿adnych w±tpliwo¶ci i *naprawdê*\n" -"wiesz co robisz mo¿esz odpowiedzieæ \"tak\" na nastêpne pytanie.\n" +"NIE MA pewno¶ci, do kogo nale¿y ten klucz. Je¶li nie masz co do\n" +"tego ¿adnych w±tpliwo¶ci i *naprawdê* wiesz co robisz mo¿esz\n" +"odpowiedzieæ \"tak\" na nastêpne pytanie.\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "OSTRZE¯ENIE: u¿ywany jest klucz nie obdarzony zaufaniem!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "OSTRZE¯ENIE: Ten klucz zosta³ uniewa¿niony przez w³a¶ciciela!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " To mo¿e oznaczaæ ¿e podpis jest fa³szerstwem.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "OSTRZE¯ENIE: Ten podklucz zosta³ uniewa¿niony przez w³a¶ciciela!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Uwaga: Ten klucz zosta³ wy³±czony z u¿ytku\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Uwaga: Data wa¿no¶ci tego klucza up³ynê³a!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "OSTRZE¯ENIE: Ten klucz nie jest po¶wiadczony zaufanym podpisem!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" -" Nic nie wskazuje na to ¿e ten podpis z³o¿y³ w³a¶ciciel klucza.\n" +" Nie ma pewno¶ci co do to¿samo¶ci osoby która z³o¿y³a podpis.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "OSTRZE¯ENIE: NIE UFAMY temu kluczowi!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " Ten podpis prawdopodobnie jest FA£SZERSTWEM.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" -"OSTRZE¯ENIE: Ten klucz nie jest po¶wiadczony wystarczaj±co zaufanymi " -"podpisami!\n" +"OSTRZE¯ENIE: Tego klucza nie po¶wiadczaj± wystarczaj±c zaufane podpisy!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" -" Nie ma pewno¶ci ¿e ten podpis zosta³ z³o¿ony przez " -"w³a¶ciciela.\n" +" Nie ma pewno¶ci co do to¿samo¶ci osoby która z³o¿y³a ten " +"podpis.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: pominiêty: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" -msgstr "%s: pominiêty: klucz publiczny ju¿ znajduje siê w bazie\n" +msgstr "%s: pominiêty: zosta³ ju¿ wybrany\n" -#: g10/pkclist.c:855 +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "Nie zosta³ podany identyfikatora u¿ytkownika (np za pomoc± ,,-r'')\n" + +#: g10/pkclist.c:762 msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" "\n" +"Enter the user ID. End with an empty line: " msgstr "" -"Nie poda³e¶(a¶) identyfikatora u¿ytkownika (user ID).\n" -"Mo¿na to zrobiæ za pomoc± opcji \"-r\".\n" +"\n" +"Identyfikator u¿ytkownika (pusta linia oznacza koniec): " -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Wprowad¼ identyfikator u¿ytkownika (user ID): " - -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Brak takiego identyfikatora u¿ytkownika.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "pominiêty: klucz publiczny ju¿ jest domy¶lnym adresatem\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "Klucz publiczny wy³±czony z uzycia.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "pominiêty: klucz publiczny ju¿ wybrany w --encrypt-to\n" +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "pominiêty: zosta³ ju¿ wybrany\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "nieznany domy¶lny adresat '%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: b³±d podczas sprawdzania klucza: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: pominiêty: klucz publiczny wy³±czony z u¿ycia\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" -msgstr "brak poprawnych adresów\n" +msgstr "brak poprawnych adresatów\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "ustawienie %c%lu jest niepoprawne\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "ustawienie %c%lu powtarza siê\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "zbyt wiele `%c' ustawieñ\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "niew³a¶ciwy znak w tek¶cie ustawieñ\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "zapis podpisu klucza nim samym\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "zapis podpisu wi±¿±cego klucz\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 -#, fuzzy, c-format +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format msgid "keysize invalid; using %u bits\n" -msgstr "¯±dana d³ugo¶æ klucza to %u bity.\n" +msgstr "niew³a¶ciwa d³ugo¶æ klucza; wykorzystano %u bitów\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 -#, fuzzy, c-format +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format msgid "keysize rounded up to %u bits\n" -msgstr "zaokr±glono do %u bitów\n" +msgstr "rozmair klucza zaokr±glony do %u bitów\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Proszê wybraæ rodzaj klucza:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) Para kluczy dla algorytmów DSA i ElGamala (domy¶lne)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (tylko do podpisywania)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" -msgstr " (%d) Klucz dla algorytmu ElGamala (tylko do szyfrowanie)\n" +msgstr " (%d) Klucz dla algorytmu ElGamala (tylko do szyfrowania)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) Klucz dla algorytmu ElGamala (do szyfrowania i podpisywania)\n" -#: g10/keygen.c:643 -#, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) Klucz dla algorytmu ElGamala (do szyfrowania i podpisywania)\n" +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (tylko do podpisywania)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (tylko do szyfrowania)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Twój wybór? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Czy na pewno chcesz stworzyæ klucz do szyfrowania i podpisywania? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "U¿ywanie tego algorytmu jest odradzane - tworzyæ mimo to? " -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Niew³a¶ciwy wybór.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1341,21 +1484,21 @@ msgstr "" " domy¶lny rozmiar klucza wynosi 1024 bity\n" " najwiêkszy sugerowany rozmiar klucza wynosi 2048 bitów\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Jakiej d³ugo¶ci klucz wygenerowaæ? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "Klucz dla DSA musi mieæ d³ugo¶æ pomiêdzy 512 i 1024 bitow.\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "D³ugo¶æ klucza zbyt ma³a; minimalna dopuszczona wynosi 768 bitów.\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "" +"D³ugo¶æ klucza zbyt ma³a; minimalna dopuszczalna dla RSA wynosi 1024 bity.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "D³ugo¶æ klucza zbyt ma³a; minimalna dopuszczona wynosi 768 bitów.\n" #. It is ridiculous and an annoyance to use larger key sizes! @@ -1366,12 +1509,12 @@ msgstr "D #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "zbyt du¿y rozmiar klucza, ograniczenie wynosi %d.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1379,11 +1522,11 @@ msgstr "" "Klucze d³u¿sze ni¿ 2048 bitów s± odradzane, poniewa¿ obliczenia\n" "trwaj± wtedy BARDZO d³ugo!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Na pewno wygenerowaæ klucz takiej d³ugo¶ci? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1391,21 +1534,17 @@ msgstr "" "Nale¿y tak¿e pamiêtaæ o tym, ¿e informacje mog± byæ te¿ wykradzione z\n" "komputera przez pods³uch emisji elektromagnetycznej klawiatury i monitora!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Czy naprawdê potrzebujesz takiego d³ugiego klucza? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "¯±dana d³ugo¶æ klucza to %u bity.\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "zaokr±glono do %u bitów\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1421,37 +1560,58 @@ msgstr "" " m = termin wa¿no¶ci klucza up³ywa za n miesiêcy\n" " y = termin wa¿no¶ci klucza up³ywa za n lat\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Okres wa¿no¶æi podpisu.\n" +" 0 = klucz nie ma okre¶lonego terminu wa¿no¶ci\n" +" = termin wa¿no¶ci podpisu up³ywa za n dni\n" +" w = termin wa¿no¶ci podpisu up³ywa za n tygodni\n" +" m = termin wa¿no¶ci podpisu up³ywa za n miesiêcy\n" +" y = termin wa¿no¶ci podpisu up³ywa za n lat\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "Okres wa¿no¶ci klucza ? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Okres wa¿no¶ci podpisu? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "niepoprawna warto¶æ\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "Klucz nie ma daty wa¿no¶ci (nie traci wa¿no¶ci z up³ywem czasu).\n" +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s nie ma daty wa¿no¶ci (nie traci wa¿no¶ci z up³ywem czasu).\n" #. print the date when the key expires -#: g10/keygen.c:828 +#: g10/keygen.c:992 #, c-format -msgid "Key expires at %s\n" -msgstr "Data wa¿no¶ci klucza: %s\n" +msgid "%s expires at %s\n" +msgstr "%s traci wa¿no¶æ: %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" -"Twój system nie potrafi poprawnie wy¶wietlaæ dat po roku 2036.\n" -"Jednak¿e poprawnie obs³ugiwane s± daty do roku 2106.\n" +"Twój system nie potrafi pokazaæ daty po roku 2038.\n" +"Niemniej daty do roku 2106 bêd± poprawnie obs³ugiwane.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Dane poprawne (t/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1464,47 +1624,47 @@ msgstr "" "Musisz okre¶liæ identyfikator u¿ytkownika aby mo¿na by³o rozpoznaæ twój\n" "klucz; program z³o¿y go z twojego imienia i nazwiska, komentarza i adresu\n" "poczty elektronicznej. Bêdzie on mia³ tak± postaæ:\n" -" \"Tadeusz ¯eleñski (Boy) \"\n" +" \"Tadeusz ¯eleñski (Boy) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Imiê i nazwisko: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Niew³a¶ciwy znak w imieniu lub nazwisku\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Imiê lub nazwisko nie mo¿e zaczynaæ siê od cyfry\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Imiê i nazwisko musz± mieæ conajmniej 5 znaków d³ugo¶ci.\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Adres poczty elektronicznej: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" -msgstr "to nie jest poprawny adres poczty elektronicznej\n" +msgstr "To nie jest poprawny adres poczty elektronicznej\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Komentarz: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Niew³a¶ciwy znak w komentarzu\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "U¿ywasz zestawu znaków %s.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1515,58 +1675,61 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" +"Nie nalezy umieszczaæ adresu poczty elektronicznej w polu nazwiska czy\n" +"komentarza.\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "IiKkEeDdWw" -#: g10/keygen.c:986 -#, fuzzy +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "" "Zmieniæ (I)miê/nazwisko, (K)omentarz, adres (E)mail, \n" -"przej¶æ (D)alej czy (W)yj¶æ z programu? " +"czy (W)yj¶æ? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "Zmieniæ (I)miê/nazwisko, (K)omentarz, adres (E)mail, \n" -"przej¶æ (D)alej czy (W)yj¶æ z programu? " +"przej¶æ (D)alej czy (W)yj¶æ z programu ? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" -msgstr "" +msgstr "Najpierw trzeba poprawiæ ten b³±d\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" -"Musisz podaæ wyra¿enie przej¶ciowe (has³o) aby ochroniæ swój klucz tajny.\n" +"Musisz podaæ d³ugie, skomplikowane has³o aby ochroniæ swój klucz tajny.\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "" -"Powtórzone wyra¿enie przej¶ciowe nie zgadza siê z podanym w pierwszej " -"próbie;\n" -"spróbuj jeszcze raz.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "has³o nie zosta³o poprawnie powtórzone; jeszcze jedna próba" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" "using this program with the option \"--edit-key\".\n" "\n" msgstr "" -"Nie chcesz podaæ wyra¿enia przej¶ciowego (has³a) - to *z³y* pomys³!\n" -"W ka¿dej chwili mo¿esz ustawiæ wyra¿enie przej¶ciowe u¿ywaj±c tego programu\n" -"i opcji \"--edit-key\".\n" +"Nie chcesz podaæ has³a - to *z³y* pomys³!\n" +"W ka¿dej chwili mo¿esz ustawiæ has³o u¿ywaj±c tego programu i opcji\n" +"\"--edit-key\".\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1576,54 +1739,78 @@ msgstr "" "Musimy wygenerowaæ du¿o losowych bajtów. Dobrym pomys³em podczas " "generowania\n" "liczb pierszych jest wykonanywanie w tym czasie innych dzia³añ (pisanie na\n" -"klawiaturzeze, poruszanie myszk±, odwo³anie siê do dysków); dziêki temu\n" -"generator liczb losowych ma mo¿liwo¶æ zebrania odpowiedniej ilo¶ci entropii. " -"\n" +"klawiaturze, poruszanie myszk±, odwo³anie siê do dysków); dziêki temu\n" +"generator liczb losowych ma mo¿liwo¶æ zebrania odpowiedniej ilo¶ci " +"entropii.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "Para kluczy dla DSA bêdzie mia³a 1024 bity d³ugo¶ci.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Procedura generacji klucza zosta³a anulowana.\n" -#: g10/keygen.c:1668 -#, fuzzy, c-format +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format msgid "writing public key to `%s'\n" -msgstr "zapis certyfikatu publicznego w '%s'\n" +msgstr "zapisujê klucz publiczny w '%s'\n" -#: g10/keygen.c:1669 -#, fuzzy, c-format +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format msgid "writing secret key to `%s'\n" -msgstr "zapis tajnego certyfikatu w '%s'\n" +msgstr "zapisujê klucz tajny w '%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "brak zapisywalnego zbioru kluczy publicznych: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "brak zapisywalnego zbioru kluczy tajnych: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "b³±d podczas zapisu zbioru kluczy publicznych `%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "b³±d podczas zapisu zbioru kluczy tajnych `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" -msgstr "klucze publiczny i tajny zosta³y stworzone i podpisane.\n" +msgstr "klucz publiczny i prywatny (tajny) zosta³y utworzone i podpisane.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "klucz zosta³ oznaczony jako obdarzony absolutnym zaufaniem.\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" msgstr "" -"Ten klucz nie mo¿e byæ wykorzystany do szyfrowania. Komend± \"--edit-key\" \n" +"Ten klucz nie mo¿e byæ wykorzystany do szyfrowania. Komend± \"--edit-key\"\n" "mo¿na dodaæ do niego podklucz u¿ywany do szyfrowania.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "Generacja klucza nie powiod³a siê: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" -"klucz zosta³ stworzony %lu sekund w przysz³o¶ci (zaburzenia\n" +"klucz zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n" "czasoprzestrzeni, lub ¼le ustawiony zegar systemowy)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1631,309 +1818,366 @@ msgstr "" "klucz zosta³ stworzony %lu sekund w przysz³o¶ci (zaburzenia\n" "czasoprzestrzeni, lub ¼le ustawiony zegar systemowy)\n" -#: g10/keygen.c:1858 -msgid "Really create? " -msgstr "Na pewno generowaæ? " +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "" +"UWAGA: tworzenie podkluczy dla kluczy wersji 3 jest niezgodne z OpenPGP.\n" -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/keygen.c:2107 +msgid "Really create? " +msgstr "Na pewno utworzyæ? " + +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "opcja --output nie dzia³a z tym poleceniem\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' ju¿ jest spakowany\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: nie mo¿na otworzyæ: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" -msgstr "b³±d podczs tworzenia wyra¿enia przej¶ciowego (has³a): %s\n" +msgstr "b³±d podczas tworzenia has³a: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: OSTRZE¯ENIE: plik jest pusty\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"w trybie --pgp2 mo¿na szyfrowaæ dla kluczy RSA krótszych od 2048 bitów\n" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "odczyt z '%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" +"nie mo¿na u¿yæ szyfru IDEA z wszystkimi kluczami dla których szyfrujesz.\n" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s zaszyfrowany dla: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 +#: g10/delkey.c:69 g10/export.c:141 #, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: nie znaleziono u¿ytkownika: %s\n" +msgid "key `%s' not found: %s\n" +msgstr "klucz `%s' nie zosta³ odaleziony: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "b³±d odczytu bloku kluczy: %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "klucz %08lX: nie jest w formacie RFC 2440 - pominiêty\n" -#: g10/export.c:175 -#, fuzzy, c-format +#: g10/export.c:180 +#, c-format msgid "key %08lX: not protected - skipped\n" -msgstr "klucz %08lX: nie jest w formacie RFC 2440 - pominiêty\n" +msgstr "klucz %08lX: nie jest chroniony - pominiêty\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "klucz %08lX: klucz PGP 2.x - pominiêty\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "OSTRZE¯ENIE: nic nie zosta³o wyeksportowane!\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "zbyt wiele wpisów w buforze kluczy publicznych - wy³±czony\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "zbyt wiele wpisów w buforze nieznanych kluczy - wy³±czony\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[brak identyfikatora u¿ytkownika]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" +"Niepoprawny klucz %08lX uznany za poprawny przez --allow non-selfsigned-" +"uid.\n" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "u¿ywany jest podklucz %08lX zamiast klucza g³ównego %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "klucz %08lX: klucz tajny bez klucza jawnego - pominiêty\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: nie znaleziono u¿ytkownika\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "blok typu %d zostaje pominiêty\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu kluczy przetworzonych do tej chwili\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "b³±d odczytu '%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr "Ogó³em przetworzonych kluczy: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " nowych podkluczy: %lu\n" +msgstr " pominiêtych nowych kluczy: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " bez identyfikatora: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " do³±czono do zbioru: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " bez zmian: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " nowych identyfikatorów: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " nowych podkluczy: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " nowych podpisów: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr " nowych uniewa¿nieñ kluczy: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " tajnych kluczy wczytanych: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr " tajnych kluczy dodanych: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " tajnych kluczy bez zmian: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "klucz %08lX: brak identyfikatora u¿ytkownika\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "klucz %08lX: przyjêto identyfikator nie podpisany nim samym '%s'\n" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "klucz %08lX: brak poprawnych identyfikatorów u¿ytkownika\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "to mo¿e byæ spowodowane brakiem podpisu w³a¶ciciela klucza\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "klucz %08lX: brak klucza publicznego: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "klucz %08lX: nie jest w formacie RFC 2440 - pominiêty\n" +msgstr "klucz %08lX: nowy klucz - pominiêty\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "brak zapisywalnego zbioru kluczy: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "zapis do '%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" -msgstr "b³±d zapisu zbioru kluczy '%': %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "b³±d zapisu zbioru kluczy '%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" -msgstr "klucz %08lX: klucz publiczny do³±czony do zbioru\n" +msgstr "klucz %08lX: klucz publiczny wczytano do zbioru\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "klucz %08lX: nie zgadza siê z lokalnie posiadan± kopi±\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "klucz %08lX: brak oryginalnego bloku klucza; %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "klucz %08lX: nie mo¿na odczytaæ oryginalnego bloku klucza; %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "klucz %08lX: 1 nowy identyfikator u¿ytkownika\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "klucz %08lX: %d nowych identyfikatorów u¿ytkownika\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "klucz %08lX: 1 nowy podpis\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "klucz %08lX: %d nowych podpisów\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "klucz %08lX: 1 nowy podklucz\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "klucz %08lX: %d nowych podkluczy\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "klucz %08lX: bez zmian\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "brak domy¶lego zbioru kluczy tajnych: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "Klucz %08lX: klucz tajny wczytany do zbioru\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "Klucz %08lX: ten klucz ju¿ znajduje siê w zbiorze\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "klucz %08lX: brak klucza tajnego: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "klucz %08lX: brak klucza publicznego - wczytany certyfikat \n" "uniwa¿nienia nie mo¿e byæ zastosowany\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" -msgstr "" -"klucz %08lX: niepoprawny certyfikat uniewa¿nienia:\n" -"%s - odrzucony\n" +msgstr "klucz %08lX: niepoprawny certyfikat uniewa¿nienia: %s - odrzucony\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "klucz %08lX: wczytany certyfikat uniewa¿nienia\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "klucz %08lX: brak identyfikatora u¿ytkownika do podpisu\n" -#: g10/import.c:719 g10/import.c:743 +#: g10/import.c:839 +#, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "klucz %08lX: algorytm klucza publicznego \"%s\" nie jest obs³ugiwany\n" + +#: g10/import.c:841 +#, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "klucz %08lX: niepoprawny podpis na identyfikatorze \"%s\"\n" + +#: g10/import.c:858 +#, c-format +msgid "key %08lX: no subkey for key binding\n" +msgstr "klucz %08lX: brak podklucza do dowi±zania\n" + +#: g10/import.c:868 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "" "klucz %08lX: nie obs³ugiwany algorytm szyfrowania z kluczem publicznym\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" -msgstr "klucz %08lX: niepoprawny podpis w³a¶ciciela klucza\n" - -#: g10/import.c:735 -#, c-format -msgid "key %08lX: no subkey for key binding\n" -msgstr "klucz %08lX: brak podklucza do dowi±zania\n" - -#: g10/import.c:744 +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "klucz %08lX: niepoprawne dowi±zanie podklucza\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "klucz %08lX: przyjêto identyfikator nie podpisany nim samym '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "klucz %08lX: pominiêto identyfikator u¿ytkownika '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "klucz %08lX: podklucz pominiêty\n" @@ -1942,570 +2186,837 @@ msgstr "klucz %08lX: podklucz pomini #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "klucz %08lX: podpis nieeksportowalny (klasa %02x) - pominiêty\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "" "klucz %08lX: certyfikat uniewa¿nienia umieszczony w niew³a¶ciwym \n" "miejscu - zosta³ pominiêty\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "klucz %08lX: niepoprawny certyfikat uniewa¿nienia: %s - pominiêty\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "key %08lX: powtórzony identyfikator u¿ytkownika - do³±czony\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"Ostrze¿enie: klucz %08lX móg³ zostaæ uniewazniony:\n" +" zapytanie o uniewa¿niaj±cy klucz %08lX w serwerze kluczy\n" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" +"Ostrze¿enie: klucz %08lX móg³ zostaæ uniewa¿niony:\n" +" brak uniewa¿niaj±cego klucza %08lX.\n" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "klucz %08lX: dodany certyfikat uniewa¿nienia\n" -#: g10/import.c:1130 g10/import.c:1183 +#: g10/import.c:1231 #, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "klucz %08lX: dostêpna kopia nie jest podpisana ni± sam±\n" +msgid "key %08lX: direct key signature added\n" +msgstr "klucz %08lX: dodano bezpo¶redni podpis\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[uniewa¿nienie]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[podpis klucza nim samym]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 niepoprawny podpis\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d niepoprawnych podpisów\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 podpis nie zosta³ sprawdzony z powodu braku klucza\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d podpisów nie zosta³o sprawdzonych z powodu braku kluczy\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 podpis nie zosta³ sprawdzony z powodu b³êdu\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d podpisów nie sprawdzonych z powodu b³êdów\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "wykryto 1 identyfikator u¿ytkownika bez podpisu w³a¶ciciela klucza\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "" "wykryto %d identyfikatorów u¿ytkownika bez podpisów w³a¶ciciela klucza\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:335 #, c-format -msgid "Already signed by key %08lX\n" -msgstr "Ju¿ podpisano kluczem %08lX.\n" +msgid "User ID \"%s\" is revoked." +msgstr "Identyfikator u¿ytkownika \"%s\" zosta³ uniewa¿niony." -#: g10/keyedit.c:319 +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Czy na pewno chcesz podpisaæ? (t/N) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr " Nie da siê z³o¿yæ podpisu.\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Twój podpis na \"%s\"\n" +"jest podpisem prywatnym (lokalnym).\n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" +"Czy chcesz zamieniæ go na pe³ny, publiczny, eksportowalny podpis? (t/N) " + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" jest ju¿ lokalnie podpisany kluczem %08lX\n" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" jest ju¿ podpisany kluczem %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nie ma nic do podpisania kluczem %08lX.\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Data wa¿no¶ci tego klucza up³ynê³a!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Wa¿no¶æ tego klucza wygasa %s.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "" +"Czy chcesz ¿eby wa¿no¶æ Twojego podpisu wygasa³a w tej samej chwili? (T/n) " + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "W trybie --pgp2 nie mo¿na podpisywaæ w formacie OpenPGP.\n" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "To uczyni ten klucz nieuzytecznym dla PGP 2.x.\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Jak dok³adnie zosta³a przez Ciebie sprawdzona to¿samo¶æ tej osoby?\n" +"Je¶li nie wiesz co odpowiedzieæ, podaj \"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Nie odpowiem na to pytanie. %s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) W ogóle nie.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Pobie¿nie.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Bardzo dok³adnie.%s\n" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" -"Czy jeste¶ naprawdê pewien ¿e chcesz podpisaæ ten klucz\n" +"Czy jeste¶ naprawdê pewien ¿e chcesz podpisaæ ten klucz \n" "swoim kluczem: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 msgid "" +"\n" "The signature will be marked as non-exportable.\n" -"\n" msgstr "" -"Podpis zostanie oznaczony jako nieeksportowalny.\n" "\n" +"Podpis zostanie oznaczony jako nieeksportowalny (prywatny).\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"Podpis zostanie oznaczony jako nie podlegaj±cy uniewa¿nieniu.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"To¿samo¶æ u¿ytkownika nie zosta³a w ogóle sprawdzona.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"To¿samo¶æ u¿ytkownika zosta³a sprawdzona pobie¿nie.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"To¿samo¶æ u¿ytkownika zosta³a dok³adnie sprawdzona.\n" + +#: g10/keyedit.c:569 msgid "Really sign? " -msgstr "Na pewno podpisaæ? " +msgstr "Czy na pewno podpisaæ? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "z³o¿enie podpisu nie powiod³o siê: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Ten klucz nie jest chroniony.\n" -#: g10/keyedit.c:426 -#, fuzzy +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" -msgstr "klucz tajny nie jest dostêpny" +msgstr "Czê¶æ tajna g³ównego klucza jest niedostêpna.\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "Klucz jest chroniony.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Tego klucza nie mo¿na edytowaæ: %s.\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" -"Wprowad¼ nowe wyra¿enie przej¶ciowe (has³o) dla tego klucza tajnego.\n" +"Wprowad¼ nowe d³ugie has³o dla tego klucza tajnego.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" -"Nie chcesz podaæ wyra¿enia przej¶ciowego (has³a) - to *z³y* pomys³!\n" +"Nie chcesz has³a - to *z³y* pomys³!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Czy na pewno chcesz to zrobiæ? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" -msgstr "przeniesienie podpis klucza na w³a¶ciwe miejsce\n" +msgstr "przenoszê podpis klucza na w³a¶ciwe miejsce\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "wyj¶cie z tego menu" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "w" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "zapis" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "zapis zmian i wyj¶cie" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "pomoc" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "ten tekst pomocy" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "odc" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "okazanie odcisku klucza" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "lista" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "lista kluczy i identyfikatorów u¿ytkowników" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "id" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "wybór identyfikatora u¿ytkownika N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "klucz" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "wybór podklucza N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "lista" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "lista podpisów" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "l" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "podpis" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "z³o¿enie podpisu na kluczu" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "p" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lpodpis" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "z³o¿enie lokalnego podpisu na kluczu" -#: g10/keyedit.c:590 -msgid "debug" -msgstr "¶ledzenie" +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nupodpis" -#: g10/keyedit.c:591 +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "z³o¿enie na kluczu podpisu nie podlegaj±cego uniewa¿nieniu" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nulpodpis" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "z³o¿enie na kluczu lokalnego podpisu nie podlegaj±cego uniewa¿nieniu" + +#: g10/keyedit.c:832 +msgid "debug" +msgstr "¶ledzenia" + +#: g10/keyedit.c:833 msgid "adduid" msgstr "dodid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "dodanie nowego identyfikatora u¿ytkownika do klucza" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "dodfoto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "dodanie zdjêcia u¿ytkownika do klucza" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "usid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "usuniêcie identyfikatora u¿ytkownika z klucza" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "usfoto" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "dodkl" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "dodanie podklucza" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "uskl" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "usuniêcie podklucza" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" -msgstr "lpodpis" +msgstr "uspod" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" -msgstr "lista podpisów" +msgstr "usuniêcie podpisów" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "data" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "zmiana daty wa¿no¶ci klucza" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "g³ówny" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "oznaczenie identyfikatora u¿ytkownika jako g³ównego" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "prze³" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "prze³±czenie pomiêdzy list± kluczy publicznych i tajnych" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "p" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "opcje" -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "lista opcji" +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "ustawienia (zaawansowane)" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "opcje" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "rozbudowana lista ustawieñ" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "ustaw" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "ustawienie opcji klucza" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "aktopc" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "aktualizacja ustawieñ klucza" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "has³o" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" -msgstr "zmiana wyra¿enia przej¶ciowego (has³a)" +msgstr "zmiana has³a klucza" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "zaufanie" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "zmiana zaufania w³a¶ciciela" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "unpod" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "uniewa¿nienie podpisu" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "unpkl" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "uniewa¿nienie podklucza" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "wy³kl" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "wy³±czyæ klucz z u¿ycia" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "w³kl" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "w³±czyæ klucz do u¿ycia" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "foto" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "okazanie identyfikatora - zdjêcia" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "nie dzia³a w trybie wsadowym\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "b³±d odczytu bloku klucza tajnego '%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Dostêpny jest klucz tajny.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Polecenie> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" -msgstr "" +msgstr "Najpierw trzeba u¿yæ polecenia \"prze³\".\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +msgid "Key is revoked." +msgstr "Klucz uniewa¿niony." + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Podpisaæ wszystkie identyfikatory u¿ytkownika na tym kluczu? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Podpowied¼: wybierz identyfikatory u¿ytkownika do podpisania.\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "naniesienie poprawek bazy zaufania nie powiod³o siê: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "To polecenie nie jest dostêpne w trybie %s.\n" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Musisz wybraæ co najmniej jeden identyfikator u¿ytkownika.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Nie mo¿esz usun±æ ostatniego identyfikatora u¿ytkownika!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Czy na pewno usun±æ wszystkie wybrane identyfikatory u¿ytkownika? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Czy na pewno usun±æ ten identyfikator u¿ytkownika? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Musisz wybraæ co najmniej jeden klucz.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Czy na pewno chcesz usun±æ wybrane klucze? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Czy na pewno chcesz usun±æ ten klucz? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Czy na pewno chcesz uniewa¿niæ wybrane klucze? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Czy na pewno chcesz uniewa¿niæ ten klucz? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "" +"Czy na pewno zaktualizowaæ ustawienia klucza dla wybranych identyfikatorów? " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Czy na pewno usaktualniæ ustawienia? " + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Zapisaæ zmiany? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Wyj¶æ bez zapisania zmian? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "naniesienie poprawek nie powiod³o siê: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "naniesienie poprawek na kluczu tajnym nie powiod³o siê: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "" -"Klucz nie zosta³ zmieniony wiêc nanoszenie poprawek nie jest konieczne.\n" +"Klucz nie zosta³ zmieniony wiêc naniesienie poprawek nie jest konieczne.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" -msgstr "Niepoprawne polecenie (spróbuj \"help\")\n" +msgstr "Niepoprawna komenda (spróbuj \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Klucz mo¿e zostaæ uniewa¿niony przez klucz %s %s%s.\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (poufne)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX utworzony: %s, wa¿ny do: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " zaufanie: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" -msgstr "Ten klucz zosta³ wy³±czony z u¿ycia" +msgstr "Ten klucz zosta³ wy³±czony z u¿ytku" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "klucz %08lX: podklucz zosta³ uniewa¿niony!\n" +msgstr "podklucz zosta³ uniewa¿niony: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr " nowych uniewa¿nieñ kluczy: %lu\n" +msgstr "fa³szywy certyfikat uniewa¿nienia\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" +msgstr "problem przy sprawdzaniu uniewa¿nienia: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" msgstr "" +"Pokazana warto¶æ wiarygodno¶ci klucza mo¿e byæ niepoprawna dopóki program " +"nie\n" +"zostanie uruchomiony ponownie.\n" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"OSTRZE¯ENIE: Do tego klucza dodano ju¿ zdjêcie u¿ytkownika.\n" +" Dodanie drugiego spowoduje, ¿e niektóre wersje PGP przestan±\n" +" rozumieæ ten klucz.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Czy dalej chcesz je dodaæ? (t/N) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Do klucza mo¿na do³±czyæ tylko jedno zdjêcie.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"OSTRZE¯ENIE: To jest klucz PGP wersji 2. Dodanie zdjêcia spowoduje, ¿e " +"niektóre \n" +" wersje przestan± go rozumieæ.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "Do klucza dla wersji 2 PGP nie mo¿na dodaæ zdjêcia.\n" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" -msgstr "Usun±æ ten poprawny podpis? (t/N/w)" +msgstr "Usun±æ ten poprawny podpis? (t/N/w) " -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" -msgstr "Usun±æ ten niepoprawny podpis? (t/N/w)" +msgstr "Usun±æ ten niepoprawny podpis? (t/N/w) " -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" -msgstr "Usun±æ ten nieznany podpis? (t/N/w)" +msgstr "Usun±æ ten nieznany podpis? (t/N/w) " -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" -msgstr "Na pewno usun±æ ten podpis klucza nim samym? (t/N)" +msgstr "Na pewno usun±æ ten podpis klucza nim samym? (t/N) " -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "%d podpis usuniêty.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d podpisów usuniêtych.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Nic nie zosta³o usuniête.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Proszê usun±æ znacznik wyboru z kluczy tajnych.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" -msgstr "Proszê wybraæ najwy¿ej jeden podklucz.\n" +msgstr "Proszê wybraæ tylko jeden podklucz.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Zmiana daty wa¿no¶ci podklucza.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Zmiana daty wa¿no¶ci g³ównego klucza.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Nie mo¿na zmieniæ daty wa¿no¶ci klucza w wersji 3.\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Brak odpowiadaj±cego podpisu w zbiorze kluczy tajnych\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Proszê wybraæ dok³adnie jeden identyfikator u¿ytkownika.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Brak identyfikatora u¿ytkownika o numerze %d.\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" -msgstr "Brak podklucza o indeksie %d\n" +msgstr "Brak podklucza o numerze %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "Identyfikator u¿ytkownika: " -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2514,428 +3025,590 @@ msgstr "" "\"\n" "podpisano Twoim kluczem %08lX w %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" -msgstr "Stworzyæ certyfikat uniewa¿nienia tego podpisu? (t/N)" +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"lokalnie podpisano Twoim kluczem %08lX w %s\n" + +#: g10/keyedit.c:2457 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "Wa¿no¶æ tego klucza wygas³a %s.\n" + +#: g10/keyedit.c:2461 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Czy dalej chcesz go uniewa¿niæ? (t/N) " + +#: g10/keyedit.c:2465 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "Stworzyæ certyfikat uniewa¿nienia tego podpisu? (t/N) " #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" -msgstr "Te identyfikatory s± podpisane przez ciebie:\n" +msgstr "Te identyfikatory u¿ytkowników s± podpisane przez Ciebie:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 +#: g10/keyedit.c:2504 #, c-format -msgid " signed by %08lX at %s\n" -msgstr " podpisany kluczem %08lX w %s\n" +msgid " signed by %08lX at %s%s%s\n" +msgstr "podpisany przez %08lX w %s%s%s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" -msgstr "uniewa¿niony kluczem %08lX w %s\n" +msgstr "uniewa¿niony przez %08lX w %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Czy na pewno chcesz uniewa¿niæ te podpisy:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" -msgstr "Na pewno utworzyæ certyfikaty uniewa¿nienia ? (t/N)" +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr "podpisany przez %08lX w %s%s\n" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr " (podpis nieeksportowalny) " + +#: g10/keyedit.c:2551 +msgid "Really create the revocation certificates? (y/N) " +msgstr "Na pewno utworzyæ certyfikaty uniewa¿nienia ? (t/N) " + +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "brak klucza tajnego\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "b³±d w opakowaniu ASCII" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "Zdjêcie w formacie %s, rozmiar %ld bajtów, klucz 0x%08lX (id %d).\n" -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "unpkl" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Regulamin podpisu: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "OSTRZE¯ENIE: niepoprawne dane w adnotacji\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Adnotacje podpisu: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "nieczytelne dla cz³owieka" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Zbiór kluczy" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 -#, fuzzy, c-format +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format msgid " [expires: %s]" -msgstr "Data wa¿no¶ci klucza: %s\n" +msgstr " [wygasa :%s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Odcisk klucza:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Odcisk:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Odcisk klucza =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "dane zaszyfrowano za pomoc± %s\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "dane zaszyfrowano nieznanym algorytmem numer %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "klucz publiczny %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "dane zaszyfrowane kluczem publicznym: poprawny klucz sesyjny\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" -msgstr "d³ugo¶æ %u bitów, typ %s, klucz %08lX, stworzony %s\n" +msgstr "Zaszyfrowano %u-bitowym kluczem %s, numer %08lX, stworzonym %s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" -msgstr "zaszyfrowane kluczem %s, o identyfikatorze %08lX\n" +msgstr "Zaszyfrowano kluczem %s, o numerze %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "odszyfrowuj±cy klucz tajny do jest niedostêpny\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "b³±d odszyfrowywania kluczem publicznym: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "przyjmuj±c ¿e dane zosta³y zaszyfrowane za pomoc± %s\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "szyfr IDEA nie jest dostêpny, %s zostanie wykorzystany zamiast niego\n" + +#: g10/mainproc.c:466 msgid "decryption okay\n" -msgstr "odszyfrowane poprawnie\n" +msgstr "odszyfrowanie poprawne\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" -msgstr "OSTRZE¯ENIE: dokonano manipulacji zaszyfrowan± wiadomo¶ci±!\n" +msgstr "OSTRZE¯ENIE: zaszyfrowana wiadomo¶æ by³a manipulowana!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "b³±d odszyfrowywania: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" -msgstr "UWAGA: nadawca zaznaczy³ ¿e wiadomo¶æ nie powinna byæ zapisywana!\n" +msgstr "UWAGA: nadawca zaznaczy³ ¿e wiadomo¶æ nie powinna byæ zapisywana\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "pierwotna nazwa pliku='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" -"oddzielony certyfikat uniewa¿nienia - wywo³aj \"gpg --import\" aby go u¿yæ\n" +"osobny certyfikat uniewa¿nienia - u¿yj ,,gpg --import'' aby go przyj±æ\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "OSTRZE¯ENIE: niepoprawne dane w adnotacji\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Adnotacja: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Regulamin: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "wymuszono pominiêcie sprawdzenia podpisu\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "nie mo¿na obs³uzyæ tych wielokrotnych podpisów\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" -msgstr "" -"Podpis z³o¿ony %.*s za pomoc± %s,\n" -"z u¿yciem klucza o identyfikatorze %08lX\n" +msgstr "Podpisano w %.*s kluczem %s o numerze %08lX.\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "NIEPOPRAWNY podpis z³o¿ony przez \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Przeterminowany podpis z³o¿ony przez \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Poprawny podpis z³o¿ony przez \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[niepewne]" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Nie mo¿na sprawdziæ podpisu: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "nie jest oddzielonym podpisem.\n" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" -msgstr "oddzielony podpis klasy 0x%02x\n" +msgstr "oddzielony podpis klasy 0x%02x.\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" -msgstr "podpis starego typu (PGP 2.x)\n" +msgstr "podpis starego typu (PGP 2.x).\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "wykryto niepoprawny pakiet pierwotny w proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "nie mo¿na wy³±czyæ zrzutów pamiêci: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Nie nale¿y u¿ywaæ algorytmów do¶wiadczalnych!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "" -"ten algorytm szyfruj±cy jest odradzany; proszê u¿ywaæ bardziej " -"standardowych!\n" +"u¿ywanie tego szyfru jest odradzane; nale¿y u¿ywaæ standardowych szyfrów!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Ostrze¿enie: niebezpieczne prawa w³asno¶ci do %s \"%s\".\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Ostrze¿enie: niebezpieczne prawa dostêpu do %s \"%s\".\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "modu³ szyfru IDEA nie jest dostêpny\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "wiêcej informacji jest tutaj: http://www.gnupg.org/why-not-idea.html\n" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" -msgstr "algorytm klucza publicznego niemo¿liwy do obs³u¿enia: %d\n" +msgstr "nie mo¿na obs³u¿yæ tego algorytmu klucza publicznego: %d\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "podpakiet typu %d ma ustawiony krytyczny bit\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" -msgstr "" +msgstr "gpg-agent nie jest dostêpny w tej sesji\n" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "nie mo¿na ustawiæ numeru procesu klienckiego agenta\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "serwer nie chce czytaæ deskryptora dla agenta\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "serwer nie chce pisaæ deskryptora dla agenta\n" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "z³y format zmiennej GPG_AGENT_INFO\n" -#: g10/hkp.c:158 g10/passphrase.c:223 -#, fuzzy, c-format +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "wersja %d protoko³u agenta nie jest obs³ugiwana\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format msgid "can't connect to `%s': %s\n" -msgstr "nie mo¿na otworzyæ %s: %s\n" +msgstr "nie mo¿na siê po³±czyæ z ,,%s'': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "problem z porozumiewaniem siê z gpg-agentem\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "problem z agentem - zostaje wy³±czony\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" -msgstr "" -" \n" -"(identyfikator g³ównego klucza %08lX)" +msgstr " (podklucz %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" -"Musisz podaæ wyra¿enie przej¶ciowe (has³o) aby uaktywniæ klucz tajny\n" -"dla u¿ytkownika: \"" +"Musisz podaæ has³o aby odbezpieczyæ klucz tajny u¿ytkownika:\n" +"\"%.*s\".\n" +"Klucz o d³ugo¶ci %u bitów, typ %s, numer %08lX, stworzony %s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Wyra¿enie przej¶ciowe: " +msgstr "Has³o\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Powtórzone wyra¿enie przej¶ciowe: " +msgstr "Powtórzone has³o\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 -#, fuzzy +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "linia za d³uga\n" +msgstr "has³o zbyt d³ugie\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "b³êdna odpowied¼ agenta\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "anulowano przez u¿ytkownika\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "problem agenta: zwróci³ 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" -"Musisz podaæ wyra¿enie przej¶ciowe (has³o) aby uaktywniæ klucz tajny\n" -"dla u¿ytkownika: \"" +"Musisz podaæ has³o aby odbezpieczyæ klucz tajny u¿ytkownika:\n" +"\"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" -msgstr "d³ugo¶æ %u bitów, typ %s, klucz %08lX, stworzony %s" +msgstr "d³ugo¶æ %u bitów, typ %s, numer %08lX, stworzony %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "pytanie o has³o nie dzia³a w trybie wsadowym\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " -msgstr "Wyra¿enie przej¶ciowe: " +msgstr "Podaj has³o: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " -msgstr "Powtórzone wyra¿enie przej¶ciowe: " +msgstr "Powtórz has³o: " #: g10/plaintext.c:67 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" -"dane nie zosta³y zapisane; nale¿y u¿yæ opcji \"--output\" aby je zapisaæ\n" +"dane nie zosta³y zapisane; aby to zrobiæ, nale¿y u¿yæ opcji \"--output\"\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "b³±d tworzenia `%s': %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" -msgstr "Podpis oddzielony.\n" +msgstr "Podpis oddzielony od danych.\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Nazwa pliku danych: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" -msgstr "odczyt ze strumienia standardowego wej¶cia...\n" +msgstr "czytam strumieñ standardowego wej¶cia\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "brak podpisanych danych\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "nie mo¿na otworzyæ podpisanego pliku '%s'\n" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" -msgstr "adresat anonimowy; próba klucza tajnego %08lX ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "adresat anonimowy; sprawdzanie %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "OK, to my jeste¶my adresatem anonimowym.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "stary, nie obs³ugiwany algorytm szyfrowania klucza sesyjnego\n" -#: g10/pubkey-enc.c:216 -#, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "%d - algorytm ochrony nie obs³ugiwany\n" +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "algorytm szyfruj±cy %d%s jest nieznany, b±d¼ te¿ zosta³ wy³±czony\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "UWAGA: brak algorytmu szyfruj±cego %d w ustawieniach\n" -#: g10/pubkey-enc.c:261 -#, fuzzy, c-format -msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "UWAGA: klucz podpisuj±cy przekroczy³ datê wa¿no¶ci %s\n" - -#: g10/hkp.c:62 +#: g10/pubkey-enc.c:242 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "UWAGA: wa¿no¶æ klucza tajnego %08lX wygas³a %s\n" -#: g10/hkp.c:75 -#, fuzzy, c-format +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "zapytanie o klucz %08lX w serwerze HKP %s\n" + +#: g10/hkp.c:94 +#, c-format msgid "can't get key from keyserver: %s\n" -msgstr "niemo¿liwy jest zapis do zbioru kluczy: %s\n" +msgstr "nie mo¿na pobraæ klucza z serwera: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "'%s\" nie jest w³a¶ciwym identyfikatorem klucza\n" - -#: g10/hkp.c:182 -#, fuzzy, c-format +#: g10/hkp.c:171 +#, c-format msgid "error sending to `%s': %s\n" -msgstr "b³±d odczytu '%s': %s\n" +msgstr "b³±d przy wysy³aniu do '%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" -msgstr "" +msgstr "wysy³anie do '%s' powiod³o siê (status=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" -msgstr "" +msgstr "wysy³anie do '%s' nie powiod³o siê (status=%u)\n" -#: g10/seckey-cert.c:89 -#, fuzzy -msgid "secret key parts are not available\n" -msgstr "klucz tajny nie jest dostêpny" - -#: g10/seckey-cert.c:95 +#: g10/hkp.c:471 #, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "%d - algorytm ochrony nie obs³ugiwany\n" +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "zapytanie o \"%s\" w serwerze HKP %s\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "" -"Niepoprawne wyra¿enie przej¶ciowe (has³o); proszê spróbowaæ ponownie ...\n" +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "nie mo¿na przeszukaæ serwera: %s\n" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "tajne czê¶ci klucza s± niedostêpne\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "algorytm ochrony %d%s nie jest obs³ugiwany\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Niepoprawne has³o; proszê spróbowaæ ponownie" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" -"OSTRZE¯ENIE: Wykryto klucz s³aby algorytmu - nale¿y ponownie zmieniæ \n" -" wyra¿enie przej¶ciowe (has³o).\n" +"OSTRZE¯ENIE: Wykryto klucz s³aby algorytmu - nale¿y ponownie zmieniæ has³o.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" +"tworzenie przestarza³ej 16-bitowej sumy kontrolnej dla ochrony klucza\n" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Klucz algorytmu ElGamala wygenerowany przez PGP - podpisy nim sk³adane\n" "nie zapewniaj± bezpieczeñstwa!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "klucz publiczny jest o %lu sekund m³odszy od podpisu\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "klucz publiczny jest o %lu sekund m³odszy od podpisu\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "UWAGA: klucz podpisuj±cy przekroczy³ datê wa¿no¶ci %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "UWAGA: klucz podpisuj±cy %08lX przekroczy³ datê wa¿no¶ci %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "przyjêto niewa¿no¶æ podpisu z powodu ustawienia nieznanego bitu krytycznego\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"OSTRZE¯ENIE: nie mo¿na rozkodowaæ urla regulaminu, pozostanie zakodowany.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "sprawdzenie z³o¿onego podpisu nie powiod³o siê: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "%s podpis z³o¿ony przez: %s\n" -#: g10/sign.c:435 g10/sign.c:690 -#, c-format -msgid "can't create %s: %s\n" -msgstr "nie mo¿na stworzyæ %s: %s\n" - -#: g10/sign.c:538 -msgid "signing:" -msgstr "podpis:" - -#: g10/sign.c:583 +#: g10/sign.c:430 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "OSTRZE¯ENIE: plik '%s' jest pusty\n" +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "w trybie --pgp2 mo¿na podpisywaæ tylko za pomoc± kluczy z wersji 2.x\n" + +#: g10/sign.c:643 g10/sign.c:812 +#, c-format +msgid "can't create %s: %s\n" +msgstr "nie mo¿na utworzyæ %s: %s\n" + +#: g10/sign.c:704 +msgid "signing:" +msgstr "podpis:" + +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "w trybie --pgp2 mo¿na podpisywaæ tylko za pomoc± kluczy z wersji 2.x\n" + +#: g10/sign.c:953 +#, c-format +msgid "%s encryption will be used\n" +msgstr "zostanie u¿yty szyfr %s\n" + #: g10/textfilter.c:134 #, c-format msgid "can't handle text lines longer than %d characters\n" @@ -2946,473 +3619,243 @@ msgstr "nie mo msgid "input line longer than %d characters\n" msgstr "linia d³u¿sza ni¿ %d znaków\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "baza zaufania, wpis %lu: lseek() nie powiod³a siê: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "baza zaufania, wpis %lu: zapis nie powiód³ siê (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "zbyt du¿e zlecenie dla bazy zaufania\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: dostêp niemo¿liwy: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: katalog nie istnieje!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: nie mo¿na utworzyæ: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: nie mo¿na utworzyæ blokady\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: nie mo¿na utworzyæ blokady\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: nie mo¿na utworzyæ: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" -msgstr "%s: utworzenie zapisu o wersji nie powiod³o siê: %s" +msgstr "%s: stworzenie zapisu o wersji nie powiod³o siê: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" -msgstr "%s: utworzono niepoprawny plik bazy zaufania\n" +msgstr "%s: stworzony niepoprawny plik bazy zaufania\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: baza zaufania utworzona\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: niepoprawny plik bazy zaufania\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: tworzenie tablicy skrótów nie powiod³o siê: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: b³±d przy uaktualnianiu numeru wersji: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: b³±d odczytu numeru wersji: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: b³±d zapisu numeru wersji: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "baza zaufania: procedura lseek() zawiod³a: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "baza zaufania: procedura read() (n=%d) zawiod³a: %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" -msgstr "%s: nie jest plikiem bazy zaufania\n" +msgstr "%s: to nie jest plik bazy zaufania\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: wpis wersji z numerem %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: niew³a¶ciwa wersja pliku %d\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" -msgstr "%s: b³±d odczytu wolnego wpisu: %s\n" +msgstr "%s: b³±d odczytu pustego wpisu: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: b³±d zapisu wpisu katalogowego: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: zerowanie rekordu nie powiod³o siê: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: dopisanie rekordu nie powiod³o siê: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" -"Baza zaufania jest uszkodzona; proszê uruchomiæ \"gpgm --fix-trust-db\".\n" +"Baza zaufania jest uszkodzona; proszê uruchomiæ \"gpg --fix-trustdb\".\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' nie jest poprawnym d³ugim numerem klucza\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "klucz %08lX: zaakceptowany jako klucz zaufany\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "klucz %08lX jest wpisany wiêcej ni¿ raz w bazie zaufania\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "" +"klucz %08lX: brak klucza publicznego dla zaufanego klucza - pominiêty\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "wpis zaufania %lu, typ zapytania %d: odczyt nie powiód³ siê: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "wpis zaufania %lu jest typu innego ni¿ poszukiwany %d\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "wpis zaufania %lu, typ zapytania %d: zapis nie powiód³ siê: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "wpis zaufania %lu: usuniêcie nie powiod³o siê %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "baza zaufania: synchronizacja nie powiod³a siê %s\n" -#: g10/trustdb.c:377 -#, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "b³±d odczytu wpisu katalogowego dla LID %lu: %s\n" +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "sprawdzanie bazy jest niepotrzebne\n" -#: g10/trustdb.c:384 +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: oczekiwany wpis katalogowy, napotkano typ %d\n" +msgid "next trustdb check due at %s\n" +msgstr "nastêpne sprawdzanie bazy odbêdzie siê %s\n" -#: g10/trustdb.c:389 +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "sprawdzanie bazy zaufania\n" + +#: g10/trustdb.c:933 #, c-format -msgid "no primary key for LID %lu\n" -msgstr "brak klucza g³ównego dla LID %lu\n" +msgid "public key %08lX not found: %s\n" +msgstr "klucz publiczny %08lX nie odnaleziony: %s\n" -#: g10/trustdb.c:394 +#: g10/trustdb.c:1515 #, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "b³±d odczytu g³ównego klucza dla LID %lu: %s\n" +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "klucz publiczny absolutnie zaufanego klucza %08lX nie odnaleziony\n" -#: g10/trustdb.c:433 +#: g10/trustdb.c:1593 #, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: funkcja search_record zawiod³a: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "'%s\" nie jest w³a¶ciwym identyfikatorem klucza\n" - -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "klucz %08lX: wpisanie do bazy zaufania niemo¿liwe\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "klucz %08lX: wyszukanie zapisu nie powiod³o siê\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "klucz %08lX: ju¿ znajduje siê w tablicy kluczy zaufanych\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "Klucz %08lX: zaakceptowany jako klucz zaufany.\n" - -#: g10/trustdb.c:547 -#, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -"klucz %08lX: brak klucza publicznego dla klucza zaufanego - pominiêty\n" +"sprawdzanie na g³êboko¶ci %d podpisów =%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%" +"d)\n" -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "UWAGA: klucz tajny %08lX NIE jest chroniony.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "klucz %08lX: klucz tajny nie pasuje do klucza jawnego\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "wyliczenie kluczy tajnych nie powiod³o siê %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "klucz %08lX.%lu Dobre dowi±zanie podklucza\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "klucz %08lX.%lu: Niepoprawne dowi±zanie podklucza %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "klucz %08lX.%lu: Poprawne uniewa¿nienie klucza\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "klucz %08lX.%lu: Niew³a¶ciwe uniewa¿nienie klucza: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "klucz %08lX.%lu: Poprawne uniewa¿nienie podklucza\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Poprawny podpis klucza nim samym" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Niepoprawny podpis klucza nim samym" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "" -"Poprawne uniewa¿nienie identyfikatora u¿ytkownika pominiête z powodu\n" -"nowszego podpisu tym samym kluczem" - -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Poprawne uniewa¿nienie identyfikatora u¿ytkownika" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Niepoprawne uniewa¿nienie identyfikatora u¿ytkownika" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Poprawne uniewa¿nienie certyfikatu" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Poprawny certyfikat" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Niepoprawne uniewa¿nienie certyfikatu" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Niepoprawny certyfikat" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "zapis o podpisach %lu[%d] wskazuje na z³y wpis.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "podwójny certyfikat - usuniêty" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "Procedura tdbio_search_dir nie powiod³a siê: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: wpisanie nie powiod³o siê: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: wpisanie nie powiod³o siê: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: wpisany\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "b³±d podczas odczytu wpisu katalogowego: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu kluczy przetworzonych\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu kluczy z b³êdami\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu kluczy wpisanych\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "wyliczenie bloków kluczy nie powiod³o siê: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: wpis katalogowy bez bloku klucza - pominiêty\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu z powodu nowych kluczy publicznych\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu kluczy pominiêtych\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu kluczy uaktualnionych\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Oops, brak kluczy\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Oops, brak identyfikatorów u¿ytkowników\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: poszukiwanie wpisu katalogowego nie powiod³o siê: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiod³o siê: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "Klucz %08lX.%lu: wprowadzony do bazy zaufania\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" -msgstr "" -"Klucz %08lX.%lu: stworzony w przysz³o¶ci (zaburzenia czasoprzestrzeni,\n" -"lub ¼le ustawiony zegar systemowy)\n" - -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "klucz %08lX.%lu: okres wa¿no¶ci up³yn±³ %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "klucz %08lX.%lu: b³±d przy sprawdzaniu zaufania: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "u¿ytkownik '%s' nie odnaleziony: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "problem podczas szukania '%s' w bazie zaufania: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "brak u¿ytkownika '%s' w bazie zaufania - dodano\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "umieszczenie '%s' w bazie zaufania nie powiod³o siê: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "OSTRZE¯ENIE: d³ugie wpisy ustawieñ jeszcze nie s± obs³ugiwane.\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" -"podpis niemo¿liwy do sprawdzenia.\n" -"Nale¿y pamiêtaæ aby plik zawieraj±cy podpis (.sig lub .asc)<\n" -"by³ pierwszym plikiem podanym w linii poleceñ.\n" +"nie mo¿na sprawdziæ podpisu.\n" +"Nale¿y pamiêtaæ o podawaniu pliku podpisu (.sig lub .asc) jako pierwszego\n" +"argumentu linii poleceñ.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" -msgstr "linia wej¶ciowa %u jest zbyt d³uga lub brakuje jej zakoñczenia\n" +msgstr "linia wej¶cia %u zbyt d³uga lub brak znaku LF\n" -#: g10/ringedit.c:296 +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"klucz nie jest oznaczony jako niepewny - nie mo¿na go u¿yæ z atrap± \n" +"generatora liczb losowych!\n" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: stworzenie zbioru kluczy jest niemo¿liwe: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "pominiêty '%s': duplikat\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: zbiór kluczy utworzony\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "OSTRZE¯ENIE: Istniej± dwa pliki z poufnymi informacjami.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s pozosta³ bez zmian\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s zosta³ utworzony\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Proszê usun±æ to naruszenie zasad bezpieczeñstwa.\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "pominiêty '%s': %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "pominiêty: klucz tajny ju¿ znajduje siê w bazie\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3431,89 +3874,98 @@ msgstr "Plik '%s' ju msgid "Overwrite (y/N)? " msgstr "Nadpisaæ (t/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: nieznana koñcówka\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Nazwa pliku" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "zapisywanie na wyj¶cie standardowe\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "przyjêto obecno¶æ podpisanych danych w '%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: stworzono nowy plik ustawieñ\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: nie mo¿na utworzyæ katalogu: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: katalog utworzony\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" -msgstr "musisz uruchomiæ GnuPG od nowa aby wczytaæ nowe ustawienia\n" +msgstr "aby u¿yæ nowego pliku ustawieñ, nale¿y od nowa uruchomiæ GnuPG\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "zaszyfrowane nieznanym algorytmem %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "%s zaszyfrowane dane\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "OSTRZE¯ENIE: wiadomo¶æ by³a szyfrowana s³abym kluczem szyfru symetrycznego.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problem podczas obróbki pakietu szyfrowego\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "wygenerowano s³aby klucz - operacja zostaje powtórzona\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "brak mo¿liwo¶ci generacji dobrego klucza dla szyfru symetrycznego;\n" "operacja by³a powtarzana %d razy!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "dla tego klucza publicznego istnieje klucz tajny!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "" +"Algorytm DSA wymaga u¿ycia algorytmu skrótu daj±cego 160-bitowy wynik.\n" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "nale¿y najpierw go usun±æ opcj± \"--delete-secret-key\".\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" -msgstr "nie dzia³a w trybie wsadowym bez opcji \"--yes\"\n" +msgstr "bez opcji \"--yes\" nie dzia³a w trybie wsadowym\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Usun±æ ten klucz ze zbioru? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " -msgstr "To jest klucz tajny - czy na pewno go usun±æ? " +msgstr "To jest klucz tajny! - czy na pewno go usun±æ? " + +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "usuniêcie bloku klucza nie powiod³o siê: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "informacja o zaufaniu dla w³a¶ciciela klucza zosta³a wymazana\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "dla klucza publicznegi ,,%s'' jest klucz tajny!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "aby go usun±æ nalezy najpierw u¿yæ opcji \"--delete-secret-key\".\n" #: g10/helptext.c:47 msgid "" @@ -3522,27 +3974,40 @@ msgid "" "to do with the (implicitly created) web-of-certificates." msgstr "" "Te wartosci u¿ytkownik przydziela wg swojego uznania; nie bêd± nigdy\n" -"eksportowane poza ten system. Potrzebne s± one do zbudowania pajêczyny\n" +"eksportowane poza ten system. Potrzebne s± one do zbudowania sieci\n" "zaufania, i nie ma to nic wspólnego z tworzon± automatycznie sieci±\n" "certyfikatów." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Aby zbudowaæ Sieæ Zaufania, GnuPG potrzebuje znaæ klucze do których\n" +"masz absolutne zaufanie. Zwykle s± to klucze do których masz klucze\n" +"tajne. Odpowiedz \"tak\", je¶li chcesz okre¶liæ ten klucz jako klucz\n" +"do którego masz absolutne zaufanie.\n" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "" -"Je¶li mimo wszystko chcesz u¿yæ tego uniewa¿nionego klucza, odpowiedz " -"\"tak\"." +"Je¶li mimo wszystko chcesz u¿yæ tego uniewa¿nionego klucza, odpowiedz \"tak" +"\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" -"Je¶li mimo wszystko chcesz u¿yæ tego nie zaufanego klucza, odpowiedz \"tak\"." +"Je¶li mimo wszystko chcesz u¿yæ tego klucza, klucza, co do którego nie ma\n" +"¿adnej pewno¶ci do kogo nale¿y, odpowiedz \"tak\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." -msgstr "Podaj nazwy u¿ytkownika adresatów tej wiadomo¶ci." +msgstr "Podaj adresatów tej wiadomo¶ci." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3564,68 +4029,68 @@ msgid "" msgstr "" "Wybór algorytmu.\n" "\n" -"DSA (zwany te¿ DSS) to algorytm podpisu cyfrowego, i tylko do sk³adania\n" -"podpisów mo¿e on byæ u¿ywany. Jest to preferowany algorytm poniewa¿ " -"sk³adane\n" -"nim podpisy sprawdza siê du¿o szybciej ni¿ te sk³adane algorytmem ElGamala.\n" +"DSA (zwany te¿ DSS) to algorytm podpisu cyfrowego i tylko do sk³adania\n" +"podpisów mo¿e byæ u¿ywany. Jest to preferowany algorytm poniewa¿\n" +"sk³adane nim podpisy sprawdza siê du¿o szybciej ni¿ te sk³adane\n" +"algorytmem ElGamala.\n" "\n" -"Algorytm ElGamala mo¿e byæ u¿ywany zarówno do podpisów jak i do " -"szyfrowania.\n" -"Standard OpenPGP rozró¿nia dwa typy tego algorytmu - tylko do szyfrowania,\n" -"oraz do szyfrowania i podpisywania. Faktycznie algorytm pozostaje bez zmian\n" -"ale pewne parametry musz± byæ odpowiednio dobrane aby stworzyæ klucz którym\n" -"mo¿na sk³adaæ bezpieczne podpisy. Ten program obs³uguje oba typy ale inne\n" -"implementacje nie musz± rozumieæ kluczy do podpisów i szyfrowania\n" +"Algorytm ElGamala mo¿e byæ u¿ywany zarówno do podpisów jak i do\n" +"szyfrowania. Standard OpenPGP rozró¿nia dwa typy tego algorytmu -\n" +"tylko do szyfrowania, oraz do szyfrowania i podpisywania. Faktycznie\n" +"algorytm pozostaje bez zmian ale pewne parametry musz± byæ odpowiednio\n" +"dobrane aby stworzyæ klucz którym mo¿na sk³adaæ bezpieczne\n" +"podpisy. Ten program obs³uguje oba typy ale inne implementacje nnie\n" +"musz± rozumieæ kluczy do podpisów i szyfrowania\n" "\n" -"G³ówny klucz musi byæ kluczem podpisuj±cym, jest to powodem dla którego w " -"tym\n" -"menu nie ma mo¿no¶ci wyboru klucza ElGamala do szyfrowania." +"G³ówny klucz musi byæ kluczem podpisuj±cym, jest to powodem dla\n" +"którego w tym menu nie ma mo¿no¶ci wyboru klucza ElGamala do\n" +"szyfrowania." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" "with them are quite large and very slow to verify." msgstr "" -"Ten typ klucza jest zdefiniowany w RFC2440, jednak¿e jest on odradzany gdy¿\n" -"nie jest obs³ugiwany przez wszystkie programy, a podpisy nim sk³adane s± " -"du¿e\n" -"i ich sprawdzanie trwa d³ugo." +"Ten typ klucza jest zdefiniowany w RFC2440, jednak¿e jest on odradzany\n" +"gdy¿ nie jest obs³ugiwany przez wszystkie programy, a podpisy nim\n" +"sk³adane s± du¿e i ich sprawdzanie trwa d³ugo." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Wprowad¼ rozmiar klucza" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" -msgstr "Odpowiedz \"tak\" lub \"nie\"." +msgstr "Odpowied¼ \"tak\" lub \"nie\"." -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" -"Wprowad¼ ¿±dan± warto¶æ (jak w znaku zachêty). Mo¿na tu podaæ datê w\n" -"formacie ISO (RRRR-MM-DD) ale nie da to w³a¶ciwej obs³ugi b³êdów - system\n" -"próbuje interpretowaæ podan± warto¶æ jako okres." +"Wprowad¼ ¿±dan± warto¶æ (jak w znaku zachêty). \n" +"Mo¿na tu podaæ datê w formacie ISO (RRRR-MM-DD) ale nie da to\n" +"w³a¶ciwej obs³ugi b³êdów - system próbuje interpretowaæ podan± warto¶æ\n" +"jako okres." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Nazwa w³a¶ciciela klucza." -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" -msgstr "proszê wprowadziæ opcjonalny ale mocno doradzany adres e-mail" +msgstr "proszê wprowadziæ opcjonalny ale wysoce doradzany adres e-mail" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Proszê wprowadziæ opcjonalny komentarz" # OSTRZE¯ENIE: nic nie zosta³o wyeksportowane! -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3639,17 +4104,86 @@ msgstr "" "O aby kontynuowaæ tworzenie klucza.\n" "Q aby zrezygnowaæ z tworzenia klucza." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Je¶li ma zostaæ wygenerowany podklucz, nale¿y odpowiedzieæ \"tak\"." -#: g10/helptext.c:164 -msgid "Answer \"yes\" is you want to sign ALL the user IDs" +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." msgstr "" -"Aby podpisaæ WSZYSTKIE identyfikatory u¿ytkownika nale¿y odpowiedzieæ " -"\"tak\"." +"Przy podpisywaniu identyfikatora u¿ytkownika na kluczu nale¿y sprawdziæ, \n" +"czy to¿samo¶æ u¿ytkownika odpowiada temu, co jest wpisane w " +"identyfikatorze.\n" +"Innym u¿ytkownikom przyda siê informacja, jak dog³êbnie zosta³o to przez\n" +"Ciebie sprawdzone.\n" +"\n" +"\"0\" oznacza, ¿e nie podajesz ¿adnych informacji na temat tego jak " +"dog³êbnie\n" +" sprawdzi³a¶/e¶ to¿samo¶æ u¿ytkownika.\n" +"\n" +"\"1\" oznacza, ¿e masz przekonanie, ¿e to¿samo¶æ u¿ytkownka odpowiada\n" +" identyfikatorowi klucza, ale nie by³o mo¿liwo¶ci sprawdzenia tego.\n" +" Taka sytuacja wystêpuje te¿ kiedy podpisujesz identyfikator bêd±cy\n" +" pseudonimem.\n" +"\n" +"\"2\" oznacza, ¿e to¿samo¶æ u¿ytkownika zosta³± przez Ciebie potwierdzona\n" +" pobie¿nie - sprawdzili¶cie odcisk klucza, sprawdzi³a¶/e¶ to¿samo¶æ\n" +" na okazanym dokumencie ze zdjêciem.\n" +"\n" +"\"3\" to dog³êbna weryfikacja to¿samo¶ci. Na przyk³ad sprawdzenie odcisku \n" +" klucza, sprawdzenie to¿samo¶ci z okazanego oficjalnego dokumentu ze\n" +" zdjêciem (np paszportu) i weryfikacja poprawno¶ci adresu poczty\n" +" elektronicznej przez wymianê poczty z tym adresem.\n" +"\n" +"Zauwa¿, ¿e podane powy¿ej przyk³ady dla poziomów \"2\" i \"3\" to *tylko*\n" +"przyk³ady. Do Ciebie nale¿y decyzja co oznacza \"pobie¿ny\" i \"dog³êbny\" " +"w\n" +"kontek¶cie po¶wiadczania i podpisywania kluczy.\n" +"\n" +"Je¶li nie wiesz co odpowiedzieæ, podaj \"0\"." -#: g10/helptext.c:168 +#: g10/helptext.c:194 +msgid "Answer \"yes\" is you want to sign ALL the user IDs" +msgstr "Odpowiedz \"tak\", aby podpisaæ WSZYSTKIE identyfikatory u¿ytkownika." + +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3657,11 +4191,11 @@ msgstr "" "Aby skasowaæ ten identyfikator u¿ytkownika (co wi±¿e siê ze utrat±\n" "wszystkich jego po¶wiadczeñ!) nale¿y odpowiedzieæ \"tak\"." -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Aby skasowaæ podklucz nale¿y odpowiedzieæ \"tak\"." -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3671,26 +4205,26 @@ msgstr "" "poniewa¿ mo¿e byæ wa¿ny dla zestawienia po³aczenia zaufania do klucza\n" "którym go z³o¿ono lub do innego klucza nim po¶wiadczonego." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" -"Ten podpis nie mo¿e zostaæ potwierdzony poniewa¿ nie masz\n" +"Ten podpis nie mo¿e zostaæ potwierdzony poniewa¿ nie ma\n" "odpowiadaj±cego mu klucza publicznego. Nale¿y od³o¿yæ usuniêcie tego\n" -"podpisu do czasu, kiedy oka¿e siê który klucz zosta³ u¿yty, poniewa¿ w\n" -"momencie uzyskania tego klucza mo¿e pojawiæ siê ¶cie¿ka zaufania\n" +"podpisu do czasu, kiedy oka¿e siê który klucz zosta³ u¿yty, poniewa¿\n" +"w momencie uzyskania tego klucza mo¿e pojawiæ siê ¶cie¿ka zaufania\n" "pomiêdzy tym a innym, ju¿ po¶wiadczonym kluczem." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." -msgstr "Ten podpis jest niepoprawny. Ma sens usuniêcie go z bazy kluczy." +msgstr "Ten podpis jest niepoprawny. Mo¿na usuni±æ go z bazy kluczy." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3704,42 +4238,47 @@ msgstr "" "klucza nim samym z jakich¶ przyczyn nie jest poprawny, i klucz jest\n" "drugi raz podpisany w ten sam sposób." -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" msgstr "" -"Podaj wyra¿enie przej¶ciowe (d³ugie, skomplikowane has³o)\n" -" Bla, bla, bla...." +"Przestawienie wszystkich (lub tylko wybranych) identyfikatorów na aktualne\n" +"ustawienia. Data na odpowiednich podpisach zostane przesuniêta do przodu o\n" +"jedn± sekundê. \n" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Podaj d³ugie, skomplikowane has³o, np ca³e zdanie.\n" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." -msgstr "" -"Proszê powrótrzyæ wyra¿enie przej¶ciowe, aby upewniæ siê ¿e nie by³o pomy³ki." +msgstr "Proszê powrótrzyæ has³o, aby upewniæ siê ¿e nie by³o pomy³ki." -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" -msgstr "Nazwa pliku którego dotyczy podpis" +msgstr "Podaj nazwê pliku którego dotyczy ten podpis" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" -msgstr "Je¶li mo¿na nadpisaæ ten plik, nale¿y napisaæ \"tak\"" +msgstr "Je¶li mo¿na nadpisaæ ten plik, nale¿y odpowiedzieæ ,,tak''" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Nazwa pliku. Naci¶niêcie ENTER potwierdzi nazwê domy¶ln± (w nawiasach)." -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3747,26 +4286,378 @@ msgid "" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" +"Nalezy podaæ powód uniewa¿nienia klucza. W zale¿no¶ci od kontekstu mo¿na\n" +"go wybraæ z listy:\n" +" \"Klucz zosta³ skompromitowany\"\n" +" Masz powody uwa¿aæ ¿e twój klucz tajny dosta³ siê w niepowo³ane rêce.\n" +" \"Klucz zosta³ zast±piony\"\n" +" Klucz zosta³ zast±piony nowym.\n" +" \"Klucz nie jest ju¿ u¿ywany\"\n" +" Klucz zosta³ wycofany z u¿ycia.\n" +" \"Identyfikator u¿ytkownika przesta³ byæ poprawny\"\n" +" Identyfikator u¿ytkownika (najczê¶ciej adres e-mail przesta³ byæ \n" +" poprawny.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" +"Je¶li chcesz, mo¿esz podaæ opis powodu wystawienia certyfikatu\n" +"uniewa¿nienia. Opis powinien byc zwiêz³y. \n" +"Pusta linia koñczy wprowadzanie tekstu.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Pomoc niedostêpna" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Brak pomocy o '%s'" +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "b³±d tworzenia zbioru kluczy `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "zmiana uprawnieñ do `%s' nie powiod³a siê: %s\n" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "zbiór kluczy `%s' utworzony\n" + +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "nie powiod³a siê odbudowa bufora bazy: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "OSTRZE¯ENIE: Istniej± dwa pliki z poufnymi informacjami.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s pozosta³ bez zmian\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s zosta³ utworzony\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Proszê usun±æ to naruszenie zasad bezpieczeñstwa\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "sprawdzanie zbioru kluczy `%s'\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu kluczy do tej chwili (%lu podpisów)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu kluczy (%lu podpisów)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: zbiór kluczy utworzony\n" + +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Czy na pewno chcesz to podpisaæ?\n" + +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr " Czy na pewno chcesz go podpisaæ?\n" + +#~ msgid "Really sign? (y/N) " +#~ msgstr "Czy na pewno podpisaæ? (t/N) " + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Czy naprawdê potrzebujesz takiego d³ugiego klucza? " + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "klucz %08lX: dostêpna kopia nie jest podpisana ni± sam±\n" + +#~ msgid " signed by %08lX at %s\n" +#~ msgstr "podpisany przez %08lX w %s\n" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key nazwa u¿ytkownika" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key nazwa u¿ytkownika" + +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key key nazwa u¿ytkownika" + +#~ msgid "Enter the user ID: " +#~ msgstr "Podaj identyfikator u¿ytkownika (user ID): " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "pominiêty: klucz publiczny ju¿ wybrany w --encrypt-to\n" + +#~ msgid "" +#~ "\n" +#~ "WARNING: This is a PGP2-style key\n" +#~ msgstr "" +#~ "\n" +#~ "OSTRZE¯ENIE: Klucz z PGP wersji 2.\n" + +#~ msgid "sSmMqQ" +#~ msgstr "iIpPwW" + +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "brak znanyk serwerów kluczy (u¿yj opcji --keyserver)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s: nie jest poprawnym identyfikatorem klucza\n" + +#~ msgid "duplicate (short) key ID %08lX\n" +#~ msgstr "skrócony numer klucza siê powtarza %08lX\n" + +#~ msgid "%lu key(s) to refresh\n" +#~ msgstr "%lu klucz(y) do od¶wie¿enia\n" + +#~ msgid "too many random bits requested; the limit is %d\n" +#~ msgstr "¿±danie zbyt wielu losowych bitów; ograniczenie wynosi %d\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NAZWY]|sprawdzenie bazy zaufania" + +#~ msgid "For info see http://www.gnupg.org" +#~ msgstr "Dalsze informacje znajduj± siê na http://www.gnupg.org/" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Niemo¿liwe jest znalezienie poprawnej scie¿ki zaufania do tego klucza.\n" +#~ "Sprawd¼my czy mo¿na przypisaæ brakuj±ce warto¶ci zaufania.\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "Brak ¶cie¿ki prowadz±cej do którego¶ z naszych kluczy.\n" +#~ "\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "Brak certyfikatów o niezdefiniowanym poziomie zaufania.\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Parametry zaufania nie zosta³y zmienione.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "%08lX: brak informacji aby obliczyæ prawdopodobieñstwo zaufania\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: b³±d podczas sprawdzania klucza: %s\n" + +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) Klucz dla algorytmu RSA (do szyfrowania i podpisywania)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "Czy na pewno chcesz stworzyæ klucz do szyfrowania i podpisywania? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: nie znaleziono u¿ytkownika %s\n" + #~ msgid "certificate read problem: %s\n" #~ msgstr "b³±d przy odczycie certyfikatu: %s\n" +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "zbyt wiele wpisów w buforze nieznanych kluczy - wy³±czony\n" + +#~ msgid "no default public keyring\n" +#~ msgstr "brak domy¶lnego zbioru kluczy publicznych\n" + +#~ msgid "secret key %08lX not imported (use %s to allow for it)\n" +#~ msgstr "klucz tajny %08lX nie zosta³ wczytany (aby to zrobiæ u¿yj %s)\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: nie znaleziono u¿ytkownika\n" + +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "naniesienie poprawek bazy zaufania nie powiod³o siê: %s\n" + +#~ msgid "assuming bad MDC due to an unknown critical bit\n" +#~ msgstr "" +#~ "przyjêto niepoprawno¶æ MDC z powonu ustawienia nieznanego bitu " +#~ "krytycznego\n" + +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "b³±d odczytu wpisu katalogowego dla LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lid %lu: oczekiwany wpis katalogowy, napotkano typ %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "brak klucza g³ównego dla LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "b³±d odczytu g³ównego klucza dla LID %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: funkcja search_record zawiod³a: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "klucz %08lX: wyszukanie zapisu nie powiod³o siê\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "klucz %08lX: ju¿ znajduje siê w tablicy kluczy zaufanych\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "UWAGA: klucz tajny %08lX NIE jest chroniony.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "klucz %08lX: klucz tajny nie pasuje do klucza jawnego\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "wyliczenie kluczy tajnych nie powiod³o siê %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "klucz %08lX.%lu Dobre dowi±zanie podklucza\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "klucz %08lX.%lu: Niepoprawne dowi±zanie podklucza %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "klucz %08lX.%lu: Poprawne uniewa¿nienie klucza\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "klucz %08lX.%lu: Niew³a¶ciwe uniewa¿nienie klucza: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "klucz %08lX.%lu: Poprawne uniewa¿nienie podklucza\n" + +#~ msgid "Good self-signature" +#~ msgstr "Poprawny podpis klucza nim samym" + +#~ msgid "Invalid self-signature" +#~ msgstr "Niepoprawny podpis klucza nim samym" + +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "" +#~ "Poprawne uniewa¿nienie identyfikatora u¿ytkownika pominiête z powodu\n" +#~ "nowszego podpisu tym samym kluczem" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Poprawne uniewa¿nienie identyfikatora u¿ytkownika" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Niepoprawne uniewa¿nienie identyfikatora u¿ytkownika" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Poprawne uniewa¿nienie certyfikatu" + +#~ msgid "Good certificate" +#~ msgstr "Poprawny certyfikat" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Niepoprawne uniewa¿nienie certyfikatu" + +#~ msgid "Invalid certificate" +#~ msgstr "Niepoprawny certyfikat" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "zapis o podpisach %lu[%d] wskazuje na z³y wpis.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "podwójny certyfikat - usuniêty" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "Procedura tdbio_search_dir nie powiod³a siê: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: wpisanie nie powiod³o siê: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: wpisanie nie powiod³o siê: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: wpisany\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "b³±d podczas odczytu wpisu katalogowego: %s\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu kluczy wpisanych\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: wpis katalogowy bez bloku klucza - pominiêty\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr " %lu z powodu nowych podkluczy\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu kluczy pominiêtych\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu kluczy uaktualnionych\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Oops, brak kluczy\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Oops, brak identyfikatorów u¿ytkowników\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: poszukiwanie wpisu katalogowego nie powiod³o siê: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiod³o siê: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "Klucz %08lX.%lu: wprowadzony do bazy zaufania\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "Klucz %08lX.%lu: stworzony w przysz³o¶ci (zaburzenia czasoprzestrzeni,\n" +#~ "lub ¼le ustawiony zegar systemowy)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "klucz %08lX.%lu: okres wa¿no¶ci up³yn±³ %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "klucz %08lX.%lu: b³±d przy sprawdzaniu zaufania: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "problem podczas szukania '%s' w bazie zaufania: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "brak u¿ytkownika '%s' w bazie zaufania - dodano\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "umieszczenie '%s' w Bazie Zaufania nie powiod³o siê: %s\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "OSTRZE¯ENIE: d³ugie wpisy ustawieñ jeszcze nie s± obs³ugiwane.\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: stworzenie zbioru kluczy jest niemo¿liwe: %s\n" + #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "W tej wersji nie mo¿na u¿ywaæ kluczy RSA\n" @@ -3776,45 +4667,20 @@ msgstr "Brak pomocy o '%s'" #~ msgid "No user ID for key\n" #~ msgstr "Brak identyfikatora u¿ytkownika dla klucza.\n" -#~ msgid "no default public keyring\n" -#~ msgstr "brak domy¶lnego zbioru kluczy publicznych\n" +#~ msgid "invalid" +#~ msgstr "niepoprawny" -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "nie mo¿na zablokowaæ zbioru kluczy publicznych '%s': %s\n" +#~ msgid "revoked" +#~ msgstr "uniewa¿niony" -#~ msgid "error writing keyring `%s': %s\n" -#~ msgstr "b³±d zapisu zbioru kluczy '%s': %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "klucz %08lX: nie mo¿na odczytaæ oryginalnego bloku klucza; %s\n" - -#~ msgid "%s: user not found\n" -#~ msgstr "%s: nie znaleziono u¿ytkownika\n" - -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "Klucze RSA s± odradzane; proszê rozwa¿yæ przej¶cie na inne algorytmy po\n" -#~ "wygenerowaniu odpowiednich kluczy.\n" - -#~ msgid "not processed" -#~ msgstr "nie przetworzony" - -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "" -#~ "przyjêto niepoprawno¶æ MDC z powonu ustawienia nieznanego bitu krytycznego\n" - -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "klucz nie jest oznaczony jako niepewny - nie mo¿na go u¿yæ z atrap±\n" -#~ "generatora liczb losowych!\n" +#~ msgid "no secret key for decryption available\n" +#~ msgstr "odszyfrowuj±cy klucz tajny do jest niedostêpny\n" #~ msgid "set debugging flags" #~ msgstr "ustawienie opcji ¶ledzenia wykonania programu" #~ msgid "enable full debugging" -#~ msgstr "w³±czenie pe³nego ¶ledzenia programu" +#~ msgstr "umo¿liwienie pe³nego ¶ledzenia programu" #~ msgid "do not write comment packets" #~ msgstr "nie zapisywaæ pakietów z komentarzem" @@ -3827,17 +4693,29 @@ msgstr "Brak pomocy o '%s'" #~ msgid " (%d) ElGamal in a v3 packet\n" #~ msgstr "" -#~ " (%d) Klucz dla algorytmu ElGamala w pakiecie w trzeciej wersji formatu\n" +#~ " (%d) Klucz dla algorytmu ElGamala w pakiecie w trzeciej wersji " +#~ "formatu\n" #~ msgid "Key generation can only be used in interactive mode\n" #~ msgstr "Generacjê klucza mo¿na wykonywaæ tylko w trybie interaktywnym\n" +#~ msgid "" +#~ "RSA keys are deprecated; please consider creating a new key and use this " +#~ "key in the future\n" +#~ msgstr "" +#~ "Odradza siê stosowanie kluczy RSA; proszê rozwa¿yæ przej¶cie na inne " +#~ "algorytmy\n" +#~ "po wygenerowaniu odpowiednich kluczy.\n" + #~ msgid "print all message digests" #~ msgstr "wszystkie skróty wiadomo¶ci" #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "nie mo¿na zablokowaæ zbioru kluczy publicznych: %s\n" +#~ msgid "error writing keyring `%': %s\n" +#~ msgstr "b³±d zapisu zbioru kluczy '%': %s\n" + #~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" #~ msgstr "" #~ "UWAGA: wpis podpisu %lu[%d] znajduje siê w li¶cie domy¶lnej %lu,\n" @@ -3878,9 +4756,6 @@ msgstr "Brak pomocy o '%s'" #~ msgid "lid %lu: can't get keyblock: %s\n" #~ msgstr "lid %lu: pobranie bloku klucza niemo¿liwe: %s\n" -#~ msgid "Too many preferences" -#~ msgstr "Zbyt wiele ustawieñ." - #~ msgid "Too many preference items" #~ msgstr "Zbyt wiele pozycji w ustawieniach" @@ -3947,14 +4822,17 @@ msgstr "Brak pomocy o '%s'" #~ "stosowaæ\n" #~ "zarówno do szyfrowania jak i do tworzenia podpisów cyfrowych\n" #~ "W standardzie OpenPGP algorytm ElGamala wystêpuje w dwóch wersjach:\n" -#~ "obs³uguj±cej podpisywanie, oraz obs³uguj±cej podpisywanie i szyfrowanie; z\n" +#~ "obs³uguj±cej podpisywanie, oraz obs³uguj±cej podpisywanie i szyfrowanie; " +#~ "z\n" #~ "technicznego punktu widzenia algorytm dzia³a tak samo, ale pewne " #~ "wspó³czynniki\n" #~ "musz± byæ dobrane tak aby klucz nadawa³ siê do sk³adania bezpiecznych\n" -#~ "podpisów. Ten program obs³uguje obie wersje, ale inne implementacje OpenPGP\n" +#~ "podpisów. Ten program obs³uguje obie wersje, ale inne implementacje " +#~ "OpenPGP\n" #~ "nie musz± rozumieæ obs³ugiwaæ klucza przeznaczonego jednocze¶nie do\n" #~ "podpisywania i szyfrowania.\n" -#~ "G³ówny klucz musi byæ zawsze kluczem s³u¿±cym umo¿liwiaj±cym podpisywanie,\n" +#~ "G³ówny klucz musi byæ zawsze kluczem s³u¿±cym umo¿liwiaj±cym " +#~ "podpisywanie,\n" #~ "dlatego te¿ ten program nie obs³uguje osobnych kluczy ElGamala s³u¿±cych " #~ "tylko\n" #~ "do szyfrowania." @@ -4026,7 +4904,8 @@ msgstr "Brak pomocy o '%s'" #~ msgid "keyedit.remove.uid.okay" #~ msgstr "" -#~ "Odpowiedz \"tak\" je¶li na pewno chcesz skasowaæ ten identyfikator klucza.\n" +#~ "Odpowiedz \"tak\" je¶li na pewno chcesz skasowaæ ten identyfikator " +#~ "klucza.\n" #~ "Utracisz wszystkie podpisy innych u¿ytkowników z³o¿one na tym " #~ "identyfikatorze!" @@ -4060,12 +4939,6 @@ msgstr "Brak pomocy o '%s'" #~ msgid "can't write keyblock: %s\n" #~ msgstr "nie mogê zapisaæ bloku klucza: %s\n" -#~ msgid "can't lock secret keyring: %s\n" -#~ msgstr "nie mogê zablokowaæ zbioru kluczy tajnych: %s\n" - -#~ msgid "can't write keyring: %s\n" -#~ msgstr "niemo¿liwy jest zapis zbioru kluczy: %s\n" - #~ msgid "encrypted message is valid\n" #~ msgstr "zaszyfrowana wiadomo¶æ jest poprawna\n" @@ -4100,9 +4973,6 @@ msgstr "Brak pomocy o '%s'" #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu ustawieñ nie powiód³ siê: %s\n" -#~ msgid "lid %lu: read sig record failed: %s\n" -#~ msgstr "lid %lu: odczyt wpisu o podpisach nie powiód³ siê: %s\n" - #~ msgid "user '%s' read problem: %s\n" #~ msgstr "u¿ytkownik '%s' b³±d przy odczycie: %s\n" @@ -4140,9 +5010,6 @@ msgstr "Brak pomocy o '%s'" #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Oops: klucz ju¿ jest w bazie zaufania???\n" -#~ msgid "insert trust record failed: %s\n" -#~ msgstr "wstawienie wpisu zaufania nie powiod³o siê: %s\n" - #~ msgid "Hmmm, public key lost?" #~ msgstr "Hmmm, klucz publiczny utracony?" diff --git a/po/pt_PT.po b/po/pt.po similarity index 56% rename from po/pt_PT.po rename to po/pt.po index b129dbfc5..a0e82191a 100644 --- a/po/pt_PT.po +++ b/po/pt.po @@ -1,304 +1,333 @@ -# PT_pt messages for gnupg -# Pedro Morais +# pt messages for gnupg +# Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Pedro Morais # -# Based on PT_br work done by: -# Thiago Jung Bauermann , 1999. -# Rafael Caetano dos Santos . +# Based on pt_PT work done by: +# Thiago Jung Bauermann +# Rafael Caetano dos Santos msgid "" msgstr "" "Project-Id-Version: gnupg\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 1999-09-09 20:28+0000\n" -"Last-Translator: Pedro Morais \n" -"Language-Team: pt\n" -"MIME-Version:\n" -"Content-Type:\n" -"Content-Transfer-Encoding:\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-03-05 16:05+0000\n" +"Last-Translator: Pedro Morais \n" +"Language-Team: pt \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Aviso: a utilizar memória insegura!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "por favor veja http://www.gnupg.org/faq.html para mais informações\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "a operação não é possível sem memória segura inicializada\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(você pode ter usado o programa errado para esta tarefa)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "sim" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "sS" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "não" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -# INICIO MENU -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "sair" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "qQ" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "erro geral" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "formato de pacote desconhecido" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "versão desconhecida" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "algoritmo de chave pública desconhecido" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "algoritmo de \"digest\" desconhecido" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "chave pública incorrecta" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "chave secreta incorrecta" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "assinatura incorrecta" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "erro de \"checksum\"" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "frase secreta incorrecta" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "chave pública não encontrada" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "algoritmo de criptografia desconhecido" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "não é possível abrir o porta-chaves" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "pacote inválido" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "armadura inválida" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "identificador de utilizador inexistente" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "chave secreta não disponível" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "chave secreta incorrecta" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "não suportado" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "chave incorrecta" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "erro de leitura" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "erro de escrita" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "algoritmo de compressão desconhecido" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "erro na abertura do ficheiro" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "erro na criação do ficheiro" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "frase-secreta inválida" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algoritmo de chave pública não implementado" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algoritmo de criptografia não implementado" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "classe de assinatura desconhecida" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "erro na base de dados de confiança" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "MPI incorreto" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "limite de recursos" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "porta-chaves inválido" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "certificado incorrecto" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "identificador de utilizador malformado" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "erro ao fechar ficheiro" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "erro na renomeação do ficheiro" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "erro na remoção do ficheiro" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "dados inesperados" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "conflito de \"timestamp\"" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "algoritmo de chave pública inutilizável" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "o ficheiro já existe" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "chave fraca" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "argumento inválido" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "URI incorrecto" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "URI não suportado" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "erro na rede" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" -msgstr "não encriptado" +msgstr "não cifrado" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "não processado" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "chave pública não utilizável" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "chave secreta não utilizável" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "erro do servidor de chaves" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... isto é um bug (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "você encontrou um bug ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "impossível abrir `%s': %s\n" -#: cipher/random.c:325 -#, fuzzy, c-format +#: cipher/random.c:324 +#, c-format msgid "can't stat `%s': %s\n" -msgstr "impossível abrir `%s': %s\n" +msgstr "impossível 'stat' a `%s': %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" -msgstr "" +msgstr "`%s' não é um ficheiro normal - ignorado\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" -msgstr "" +msgstr "nota: random_seed está vazia\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" +"aviso: o ficheiro random_seed tem um tamanho inválido - não utilizado\n" -#: cipher/random.c:349 -#, fuzzy, c-format -msgid "can't read `%s': %s\n" -msgstr "impossível abrir `%s': %s\n" - -#: cipher/random.c:387 -msgid "note: random_seed file not updated\n" -msgstr "" - -#: cipher/random.c:407 -#, fuzzy, c-format -msgid "can't create `%s': %s\n" -msgstr "impossível criar %s: %s\n" - -#: cipher/random.c:414 -#, fuzzy, c-format -msgid "can't write `%s': %s\n" -msgstr "impossível abrir `%s': %s\n" - -#: cipher/random.c:417 -#, fuzzy, c-format -msgid "can't close `%s': %s\n" -msgstr "impossível abrir `%s': %s\n" - -#: cipher/random.c:428 +#: cipher/random.c:348 #, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" +msgid "can't read `%s': %s\n" +msgstr "impossível ler `%s': %s\n" -#: cipher/random.c:659 +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "nota: ficheiro random_seed não actualizado\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "impossível criar `%s': %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "impossível escrever `%s': %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "impossível fechar `%s': %s\n" + +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVISO: a utilizar gerador de números aleatórios inseguro!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -312,7 +341,7 @@ msgstr "" "NÃO USE NENHUM DADO GERADO POR ESTE PROGRAMA!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -323,19 +352,7 @@ msgstr "" "Não há bytes aleatórios suficientes. Por favor, faça outro trabalho para\n" "que o sistema possa recolher mais entropia! (São necessários mais %d bytes)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Aviso: a utilizar memória insegura!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "a operação não é possível sem memória segura inicializada\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(você pode ter usado o programa errado para esta tarefa)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -343,140 +360,163 @@ msgstr "" "@Comandos:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[ficheiro]|fazer uma assinatura" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[ficheiro]|fazer uma assinatura em texto puro" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "fazer uma assinatura separada" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" -msgstr "encriptar dados" +msgstr "cifrar dados" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[ficheiros]|cifrar ficheiros" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" -msgstr "encriptar apenas com cifra simétrica" +msgstr "cifrar apenas com cifra simétrica" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "apenas armazenar" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" -msgstr "desencriptar dados (acção por omissão)" +msgstr "decifrar dados (acção por omissão)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[ficheiros]|decifrar ficheiros" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "verificar uma assinatura" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "listar as chaves" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "listar as chaves e as assinaturas" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "verificar as assinaturas das chaves" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "listar as chaves e as impressões digitais" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "listar as chaves secretas" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "gerar um novo par de chaves" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" -msgstr "remover a chave do porta-chaves público" +#: g10/g10.c:307 +msgid "remove keys from the public keyring" +msgstr "remover chaves do porta-chaves público" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" -msgstr "remover a chave do porta-chaves secreto" +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "remover chaves do porta-chaves secreto" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "assinar uma chave" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "assinar uma chave localmente" -#: g10/gpg.c:224 +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "assinar uma chave de forma não revocável" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "assinar uma chave localmente e de forma não revocável" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "assinar ou editar uma chave" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "gerar um certificado de revogação" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "exportar chaves" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" -msgstr "exportar chaves para um servidor" +msgstr "exportar chaves para um servidor de chaves" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" -msgstr "importar chaves de um servidor" +msgstr "importar chaves de um servidor de chaves" -#: g10/gpg.c:232 +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "procurar chaves num servidor de chaves" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "actualizar todas as chaves a partir de um servidor de chaves" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "importar/fundir chaves" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "listar apenas as sequências de pacotes" -# ownertrust ??? -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "exportar os valores de confiança" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importar os valores de confiança" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "actualizar a base de dados de confiança" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NOMES]|verificar a base de dados de confiança" +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "actualizar automaticamente a base de dados de confiança" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "consertar uma base de dados de confiança" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "retirar armadura de um ficheiro ou do \"stdin\"" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "criar armadura para um ficheiro ou \"stdin\"" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [ficheiros]|imprimir \"digests\" de mensagens" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -486,179 +526,222 @@ msgstr "" "Opções:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "criar saída com armadura ascii" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" -msgstr "|NOME|encriptar para NOME" +msgstr "|NOME|cifrar para NOME" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" -msgstr "|NOME|usar NOME como destinatário padrão" +msgstr "|NOME|usar NOME como destinatário por omissão" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" -msgstr "usar a chave padrão como destinatário padrão" +msgstr "usar a chave por omissão como destinatário por omissão" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "" "usar este identificador de utilizador para\n" -"assinar ou desencriptar" +"assinar ou decifrar" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "" "|N|estabelecer nível de compressão N\n" "(0 desactiva)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "usar modo de texto canônico" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "usar como ficheiro de saída" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "detalhado" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "ser mais silencioso" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "nunca usar o terminal" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "forçar assinaturas v3" -#: g10/gpg.c:275 -msgid "always use a MDC for encryption" -msgstr "sempre usar um MDC para encriptar" +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "não forçar assinaturas v3" -#: g10/gpg.c:276 +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "forçar assinaturas v4" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "não forçar assinaturas v4" + +#: g10/g10.c:379 +msgid "always use a MDC for encryption" +msgstr "sempre usar um MDC para cifrar" + +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "nunca usar um MDC para cifrar" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "não fazer alterações" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "utilizar o gpg-agent" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "modo não-interactivo: nunca perguntar" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "assumir sim para a maioria das perguntas" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "assumir não para a maioria das perguntas" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "" "adicionar este porta-chaves\n" "à lista de porta-chaves" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "adicionar este porta-chaves secreto à lista" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "mostrar em que porta-chave a chave está" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NOME|usar NOME como chave secreta por omissão" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|ENDEREÇO|usar este servidor para buscar chaves" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "" "|NOME|definir mapa de caracteres do terminal como\n" "NOME" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "ler opções do ficheiro" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "" "|DF|escrever informações de estado para o\n" "descritor de ficheiro DF" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "" +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[ficheiro]|escrever ifnroamções de estado para o ficheiro" -#: g10/gpg.c:297 +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|KEYID|confiar totalmente nesta chave" + +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|FICHEIRO|carregar módulo de extensão FICHEIRO" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "emular o modo descrito no RFC1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" -"configurar todas as opções de pacote,\n" -"criptografia e \"digest\" para comportamento\n" -"OpenPGP" +"configurar todas as opções de pacote, cifragem e \"digest\"\n" +"para comportamento OpenPGP" -#: g10/gpg.c:300 +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"configurar todas as opções de pacote, cifragem e \"digest\"\n" +"para comportamento PGP 2.x" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|usar mode de frase secreta N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "" "|NOME|usar algoritmo de \"digest\" de mensagens NOME\n" "para frases secretas" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "" "|NOME|usar algoritmo de criptografia NOME para\n" "frases secretas" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOME|usar algoritmo de criptografia NOME" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOME|usar algoritmo de \"digest\" de mensagens NOME" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|usar algoritmo de compressão N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" -msgstr "eliminar campo keyid dos pacotes encriptados" +msgstr "eliminar campo keyid dos pacotes cifrados" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Mostrar IDs Fotográficos" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Não mostrar IDs Fotográficos" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "Configurar linha de comandos para ver fotografias" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NOME=VALOR|usar estes dados de notação" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" +"@\n" +"(Veja a página man para uma lista completa de comandos e opções)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -672,31 +755,31 @@ msgstr "" "@\n" "Exemplos:\n" "\n" -" -se -r Bob [ficheiro] assinar e encriptar para o utilizador Bob\n" +" -se -r Bob [ficheiro] assinar e cifrar para o utilizador Bob\n" " --clearsign [ficheiro] criar uma assinatura em texto puro\n" " --detach-sign [ficheiro] criar uma assinatura separada\n" " --list-keys [nomes] mostrar chaves\n" " --fingerprint [nomes] mostrar impressões digitais\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "Por favor comunique bugs para .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opções] [ficheiros] (-h para ajuda)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Sintaxe: gpg [opções] [ficheiros]\n" -"assina, verifica, encripta ou desencripta\n" +"assina, verifica, cifra ou decifra\n" "a operação por omissão depende dos dados de entrada\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -704,194 +787,251 @@ msgstr "" "\n" "Algoritmos suportados:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "uso: gpg [opções] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "comandos em conflito\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: ficheiro de opções por omissão `%s' inexistente\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "ficheiro de opções `%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "a ler opções de `%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s não é um conjunto de caracteres válido\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "não consegui processar a URI do servidor de chaves\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "AVISO: `%s' é um ficheiro vazio\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "AVISO: O programa pode criar um ficheiro core!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "AVISO: %s sobrepõe %s\n" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: %s não é para uso normal!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s não é permitido com %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s não faz sentido com %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "só pode fazer assinaturas separadas ou em texto puro no modo --pgp2\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "não pode assinar e cifrar ao mesmo tempo no modo --pgp2\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" +"deve utilizar ficheiros (e não um 'pipe') quando trabalho no modo --pgp2.\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "cifrar uma mensagem no modo --pgp2 necessita da cifra IDEA\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "esta mensagem poderá não ser utilizável pelo PGP 2.x\n" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "o algoritmo de cifragem selecionado não é válido\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "o algoritmo de \"digest\" selecionado não é válido\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "a URL de política dada é inválida\n" +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "a URL de política de assinatura dada é inválida\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "a URL de política de certificação dada é inválida\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "o algoritmo de compressão deve estar na faixa %d..%d\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve ser maior que 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve ser maior que 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth deve estar na entre 1 e 255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: o modo S2K simples (0) não é recomendável\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K inválido: deve ser 0, 1 ou 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "nível de verificação por omissão inválido: deve ser 0, 1, 2 ou 3\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "preferências inválidas\n" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "falha ao inicializar a base de dados de confiança: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [nome_do_ficheiro]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [nome_do_ficheiro]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [nome_do_ficheiro]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [nome_do_ficheiro]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nome_do_ficheiro]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [nome_do_ficheiro]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [nome_do_ficheiro]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [nome_do_ficheiro]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key id-utilizador" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key id-utilizador" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key id-utilizador" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key id-utilizador" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-utilizador [comandos]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key id-utilizador" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key id-utilizador" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "impossível abrir %s: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-utilizador] [porta-chaves]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "retirada de armadura falhou: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "criação de armadura falhou: %s\n" -# "hash" poderia ser "espalhamento", mas não fica claro -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" -msgstr "algoritmo de hash inválido `%s'\n" +msgstr "algoritmo de dispersão inválido `%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[nome_do_ficheiro]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Digite a sua mensagem ...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "impossível abrir `%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "o primeiro caracter de um nome de notação deve ser uma letra ou um " "sublinhado\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -899,250 +1039,229 @@ msgstr "" "um nome de notação deve ter apenas letras, dígitos, pontos ou sublinhados e " "terminar com '='\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" "pontos num nome de notação devem estar cercados por outros caracteres\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "um valor de notação não deve usar caracteres de controle\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "cabeçalho de armadura inválido: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "cabeçalho de armadura: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "cabeçalho de assinatura em texto puro inválido\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "assinaturas em texto puro aninhadas\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "linha com hífen inválida: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "armadura inesperada:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "caracter radix64 inválido %02x ignorado\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "fim de ficheiro prematuro (sem CRC)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "fim de ficheiro prematuro (no CRC)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "CRC malformado\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "erro de CRC; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "fim de ficheiro prematuro (no \"Trailer\")\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" -msgstr "erro na linha \"trailer\"\n" +msgstr "erro na última linha\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "nenhum dado OpenPGP válido encontrado.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura inválida: linha maior que %d caracteres\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caracter \"quoted printable\" na armadura - provavelmente um MTA com bugs " "foi usado\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Impressão digital:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Impressão digital:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" -msgstr "" +msgstr "Nenhum motivo especificado" -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" -msgstr "A chave é protegida.\n" +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "A chave foi substituída" -#: g10/pkclist.c:121 -#, fuzzy +#: g10/pkclist.c:65 msgid "Key has been compromised" -msgstr "Esta chave foi desactivada" +msgstr "A chave foi comprometida" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" -msgstr "" +msgstr "A chave já não é utilizada" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" -msgstr "" +msgstr "O identificador do utilizador já não é válido" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " -msgstr "" +msgstr "Motivo da revocação: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " -msgstr "" +msgstr "Comentário da revocação: " #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "iImMqQsS" -#: g10/pkclist.c:308 +#: g10/pkclist.c:258 #, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" -"Nenhum valor de confiança designado para %lu:\n" +"Nenhum valor de confiança designado para:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Por favor decida quanto confia neste utilizador para\n" "verificar correctamente as chaves de outros utilizadores\n" "(vendo passaportes, verificando impressões digitais...)?\n" "\n" -" 1 = Não sei\n" -" 2 = Eu NÃO confio\n" -" 3 = Eu confio moderadamente\n" -" 4 = Eu confio completamente\n" -" s = Mostrar mais informações\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = Não sei\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = Eu NÃO confio\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Confio moderadamente\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Confio plenamente\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Confio de forma total\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " i = mostrar mais informações\n" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" -msgstr " m = volta ao menu principal\n" +msgstr " m = voltar ao menu principal\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " s = saltar esta chave\n" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = sair\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Decisão? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Tem a certeza que quer confiar totalmente nesta chave?" + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que levam a uma chave confiada plenamente:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Não foi possível encontrar uma rota de confiança válida para a chave.\n" -"Vamos ver se é possível designar alguns valores de confiança ausentes.\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"Nenhuma rota encontrada que leve a uma de nossas chaves.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Nenhum certificado com confiança indefinida encontrado.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Nenhum valor de confiança modificado.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "chave %08lX: a chave foi revogada!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Usar esta chave de qualquer modo? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "chave %08lX: a subchave foi revogada!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: a chave expirou\n" -#: g10/pkclist.c:519 +#: g10/pkclist.c:442 #, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: sem informação para calcular probabilidade de confiança\n" +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +"%08lx: Não há indicação de que a assinatura pertence realmente ao dono.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: Nós NÃO confiamos nesta chave\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1151,15 +1270,15 @@ msgstr "" "%08lX: Não se tem certeza de que esta chave realmente pertence ao dono,\n" "mas é aceite de qualquer modo\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Esta chave provavelmente pertence ao dono\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Esta chave pertence-nos\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1171,172 +1290,195 @@ msgstr "" "sim à próxima pergunta\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" -msgstr "AVISO: Utilizando chave não confiável!\n" +msgstr "AVISO: A utilizar uma chave que não é de confiança!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Isto pode significar que a assinatura é falsificada.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVISO: Esta subchave foi revogada pelo seu dono!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Nota: Esta chave foi desactivada.\n" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Nota: Esta chave expirou!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVISO: Esta chave não está certificada com uma assinatura confiável!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Não há indicação de que a assinatura pertence ao dono.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVISO: Nós NÃO confiamos nesta chave!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " A assinatura é provavelmente uma FALSIFICAÇÃO.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVISO: Esta chave não está certificada com assinaturas suficientemente\n" " confiáveis!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Não se tem certeza de que a assinatura pertence ao dono.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignorado: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ignorado: a chave pública já está presente\n" -#: g10/pkclist.c:855 +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "Não especificou um identificador de utilizador. (pode usar \"-r\")\n" + +#: g10/pkclist.c:762 msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" "\n" +"Enter the user ID. End with an empty line: " msgstr "" -"Você não especificou um identificador de utilizador. (pode-se usar \"-r\")\n" "\n" +"Insira o identificador do utilizador. Termine com uma linha vazia: " -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Digite o identificador de utilizador: " - -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Identificador de utilizador inexistente.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "ignorado: chave pública já colocada como destinatário por omissão\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "A chave pública está desativada.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "ignorado: a chave pública já colocada com --encrypt-to\n" +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "ignorado: a chave pública já está presente\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" -msgstr "destinatário padrão desconhecido `%s'\n" +msgstr "destinatário por omissão desconhecido `%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: erro na verificação da chave: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: ignorado: a chave pública está desactivada\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "nenhum endereço válido\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "preferência %c%lu não é válida\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "preferência %c%lu duplicada\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "demasiadas preferências `%c'\n" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "caracter inválido na cadeia de caractéres\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "escrevendo auto-assinatura\n" -# key binding ??? -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "escrevendo assinatura ligada a uma chave\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 -#, fuzzy, c-format +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format msgid "keysize invalid; using %u bits\n" -msgstr "O tamanho de chave pedido é %u bits\n" +msgstr "tamanho de chave inválido; a utilizar %u bits\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 -#, fuzzy, c-format +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format msgid "keysize rounded up to %u bits\n" -msgstr "arredondado para %u bits\n" +msgstr "tamanho da chave arredondado para %u bits\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Por favor selecione o tipo de chave desejado:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA e ElGamal (por omissão)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (apenas assinatura)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" -msgstr " (%d) ElGamal (apenas encripção)\n" +msgstr " (%d) ElGamal (apenas cifragem)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" -msgstr " (%d) ElGamal (assinatura e encriptação)\n" +msgstr " (%d) ElGamal (assinatura e cifragem)\n" -#: g10/keygen.c:643 -#, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (assinatura e encriptação)\n" +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (apenas assinatura)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (apenas cifragem)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Opção? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Você quer realmente criar uma chave para assinatura e criptografia? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "A utilização destes algoritmos está desactualizada - criar na mesma?" -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Opção inválida.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1349,21 +1491,20 @@ msgstr "" " tamanho por omissão é 1024 bits\n" " tamanho máximo sugerido é 2048 bits\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Qual o tamanho de chave desejado? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permite apenas tamanhos de 512 a 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "tamanho muito pequeno; 768 é o valor mínimo permitido.\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "tamanho muito pequeno; 1024 é o valor mínimo permitido para RSA.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "tamanho muito pequeno; 768 é o valor mínimo permitido.\n" #. It is ridiculous and an annoyance to use larger key sizes! @@ -1374,12 +1515,12 @@ msgstr "tamanho muito pequeno; 768 #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "tamanho muito grande; %d é o valor máximo permitido.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1387,11 +1528,11 @@ msgstr "" "Tamanhos de chave maiores que 2048 não são recomendados\n" "porque o tempo de computação é REALMENTE longo!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Você tem certeza de que quer este tamanho de chave? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1399,21 +1540,17 @@ msgstr "" "Tudo bem, mas não se esqueça que a radiação do seu monitor e teclado também " "é extremamente vulnerável a ataques!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Você precisa realmente de uma chave tão grande? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "O tamanho de chave pedido é %u bits\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "arredondado para %u bits\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1429,25 +1566,46 @@ msgstr "" " m = chave expira em n meses\n" " y = chave expira em n anos\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Por favor especifique por quanto tempo a assinatura deve ser válida.\n" +" 0 = assinatura não expira\n" +" = assinatura expira em n dias\n" +" w = assinatura expira em n semanas\n" +" m = assinatura expira em n meses\n" +" y = assinatura expira em n anos\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "A chave é valida por? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "A assinatura é valida por? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "valor inválido\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "A chave não expira nunca\n" +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "A %s não expira nunca\n" #. print the date when the key expires -#: g10/keygen.c:828 +#: g10/keygen.c:992 #, c-format -msgid "Key expires at %s\n" -msgstr "A chave expira em %s\n" +msgid "%s expires at %s\n" +msgstr "%s expira em %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1455,11 +1613,11 @@ msgstr "" "O seu sistema não consegue mostrar datas para além de 2038.\n" "No entanto, estas vão ser tratadas correctamente até 2106.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Está correto (s/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1476,44 +1634,44 @@ msgstr "" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Nome completo: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Caracter inválido no nome\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "O nome não pode começar com um dígito\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "O nome deve ter pelo menos 5 caracteres\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Endereço de correio eletrónico: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Endereço eletrónico inválido\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Comentário: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Caracter inválido no comentário\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Você está usando o conjunto de caracteres `%s'.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1524,28 +1682,29 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" +"Por favor não coloque o endereço de email no nome verdadeiro ou no " +"comentário\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnCcEeOoSs" -#: g10/keygen.c:986 -#, fuzzy +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " -msgstr "Mudar (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? " +msgstr "Mudar (N)ome, (C)omentário, (E)mail ou (S)air? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Mudar (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" -msgstr "" +msgstr "Por favor corrija primeiro o erro\n" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1553,11 +1712,16 @@ msgstr "" "Você precisa de uma frase secreta para proteger a sua chave.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "a frase secreta não foi repetida corretamente; tente outra vez.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "a frase secreta não foi repetida corretamente; tente outra vez" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1569,7 +1733,7 @@ msgstr "" "qualquer hora, usando este programa com a opção \"--edit-key\".\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1581,42 +1745,66 @@ msgstr "" "geração dos números primos; isso dá ao gerador de números aleatórios\n" "uma hipótese maior de ganhar entropia suficiente.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "O par de chaves DSA terá 1024 bits.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Geração de chave cancelada.\n" -#: g10/keygen.c:1668 -#, fuzzy, c-format +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format msgid "writing public key to `%s'\n" -msgstr "escrevendo certificado público para `%s'\n" +msgstr "a escrever chave pública para `%s'\n" -#: g10/keygen.c:1669 -#, fuzzy, c-format +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format msgid "writing secret key to `%s'\n" -msgstr "escrevendo certificado privado para `%s'\n" +msgstr "a escrever chave privada para `%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "nenhum porta-chaves público com permissões de escrita encontrado: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "nenhum porta-chaves secreto com permissões de escrita encontrado: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "erro ao escrever no porta-chaves público `%s': %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "erro ao escrever no porta-chaves secreto `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "chaves pública e privada criadas e assinadas.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "chave marcada como de confiança absoluta\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" msgstr "" -"Note que esta chave não pode ser usada para encriptação. Você pode usar\n" +"Note que esta chave não pode ser usada para cifragem. Você pode usar\n" "o comando \"--edit-key\" para gerar uma chave secundária para esse fim.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "A geração de chaves falhou: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1624,7 +1812,7 @@ msgstr "" "a chave foi criada %lu segundo no futuro\n" "(viagem no tempo ou problema no relógio)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1632,306 +1820,362 @@ msgstr "" "a chave foi criada %lu segundos no futuro\n" "(viagem no tempo ou problema no relógio)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "NOTA: a criação de sub-chave para chaves v3 não respeito o OpenPGP\n" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Realmente criar? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output não funciona para este comando\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "%s' já comprimido\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: impossível abrir: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "erro na criação da frase secreta: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: AVISO: ficheiro vazio\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "no modo --pgp2 só pode cifrar com chaves RSA de 2048 bits ou menos\n" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "lendo de `%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" +"impossível utilizar a cifra IDEA para todas as chaves para que está a " +"cifrar.\n" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" -msgstr "%s/%s encriptado para: %s\n" +msgstr "%s/%s cifrado para: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 +#: g10/delkey.c:69 g10/export.c:141 #, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: utilizador não encontrado: %s\n" +msgid "key `%s' not found: %s\n" +msgstr "chave `%s' não encontrada: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "erro na leitura do bloco de chave: %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n" -#: g10/export.c:175 -#, fuzzy, c-format +#: g10/export.c:180 +#, c-format msgid "key %08lX: not protected - skipped\n" -msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n" +msgstr "chave %08lX: não está protegida - ignorada\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "chave %08lX: tipo PGP 2.x - ignorada\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "AVISO: nada exportado\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "entradas demais no cache pk - desactivado\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "entradas demais no cache unk - desactivado\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[Utilizador não encontrado]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, fuzzy, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "Chave inválida %08lX tornada válida por --always-trust\n" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "usando chave secundária %08lX ao invés de chave primária %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "chave %08lX: chave secreta sem chave pública - ignorada\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: utilizador não encontrado\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "ignorando bloco do tipo %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu chaves processadas até agora\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr "Número total processado: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " novas subchaves: %lu\n" +msgstr " ignorei novas chaves: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sem IDs de utilizadores: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " importados: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " não modificados: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " novos IDs de utilizadores: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " novas subchaves: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " novas assinaturas: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr " novas revogações de chaves: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " chaves secretas lidas: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr " chaves secretas importadas: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " chaves secretas não modificadas: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "chave %08lX: sem ID de utilizador\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "chave %08lX: aceite ID de utilizador sem auto-assinatura '" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "chave %08lX: sem IDs de utilizadores válidos\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "isto pode ser causado por falta de auto-assinatura\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "chave %08lX: chave pública não encontrada: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n" +msgstr "chave %08lX: chave nova - ignorada\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "não foi encontrada nenhum porta-chaves onde escrever: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "a escrever para `%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "erro na escrita do porta-chaves `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "chave %08lX: chave pública importada\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "chave %08lX: não corresponde à nossa cópia\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "chave %08lX: impossível localizar bloco de chaves original: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "chave %8lX: 1 novo ID de utilizador\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "chave %08lX: %d novos IDs de utilizadores\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "chave %08lX: 1 nova assinatura\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "chave %08lX: %d novas assinaturas\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "chave %08lX: 1 nova subchave\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "chave %08lX: %d novas subchaves\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "chave %08lX: não modificada\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "sem porta-chaves público por omissão: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "chave %08lX: chave secreta importada\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "chave %08lX: já está no porta-chaves secreto\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "chave %08lX: chave secreta não encontrada: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "chave %08lX: sem chave pública - impossível aplicar certificado\n" "de revogação\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "chave %08lX: certificado de revogação inválido: %s - rejeitado\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "chave %08lX: certificado de revogação importado\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "chave %08lX: nenhum ID de utilizador para assinatura\n" -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" msgstr "chave %08lX: algoritmo de chave pública não suportado\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" msgstr "chave %08lX: auto-assinatura inválida\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "chave %08lX: sem subchave para ligação de chaves\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "chave %08lX: algoritmo de chave pública não suportado\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "chave %08lX: ligação de subchave inválida\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "chave %08lX: aceite ID de utilizador sem auto-assinatura '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "chave %08lX: ignorado ID de utilizador '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "chave %08lX: subchave ignorada\n" @@ -1940,93 +2184,189 @@ msgstr "chave %08lX: subchave ignorada\n" #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "chave %08lX: assinatura não exportável (classe %02x) - ignorada\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "chave %08lX: certificado de revogação no local errado - ignorado\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "chave %08lX: certificado de revogação inválido: %s - ignorado\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "chave %08lX: detectado ID de utilizador duplicado - fundido\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "chave %08lX: certificado de revogação adicionado\n" -#: g10/import.c:1130 g10/import.c:1183 +#: g10/import.c:1231 #, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "chave %08lX: a nossa cópia não tem auto-assinatura\n" +msgid "key %08lX: direct key signature added\n" +msgstr "chave %08lX: assinatura directa de chave adicionada\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[revogação]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[auto-assinatura]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 assinatura incorrecta\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d assinaturas incorrectas\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 assinatura não verificada por falta de chave\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d assinaturas não verificadas por falta de chaves\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 assinatura não verificada devido a um erro\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d assinaturas não verificadas devido a erros\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "1 ID de utilizador sem auto-assinatura válida detectado\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d IDs de utilizadores sem auto-assinaturas válidas detectados\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 -#, c-format -msgid "Already signed by key %08lX\n" -msgstr "Já assinado pela chave %08lX\n" +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Identificador do utilizador \"%s\" está revocado.\n" -#: g10/keyedit.c:319 +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Você tem certeza de que quer adicioná-la de qualquer forma? (y/N) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr "" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"A sua assinatura actual em \"%s\"\n" +"é uma assinatura local.\n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "Quer promovê-la a uma assinatura exportável? " + +#: g10/keyedit.c:388 +#, fuzzy, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" já foi %sassinado pela chave %08lX\n" + +#: g10/keyedit.c:393 +#, fuzzy, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" já foi %sassinado pela chave %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nada para assinar com a chave %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Esta chave expirou!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Esta chave vai expirar em %s.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Quer que a sua assinatura expire na mesma altura? (S/n) " + +#: g10/keyedit.c:477 +#, fuzzy +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "só pode assinar com chaves do tipo PGP 2.x no modo --pgp2\n" + +#: g10/keyedit.c:479 +#, fuzzy +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "esta mensagem poderá não ser utilizável pelo PGP 2.x\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Com que cuidado é que verificou que chave que está prestes a assinar " +"pertence\n" +"à pessoa correcta? Se não sabe o que responder, escolha \"0\".\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Não vou responder.%s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Não verifiquei.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Verifiquei por alto.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Verifiquei com bastante cuidado.%s\n" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2034,42 +2374,73 @@ msgstr "" "Você tem certeza de que quer assinar esta chave com\n" "a sua chave: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 msgid "" +"\n" "The signature will be marked as non-exportable.\n" -"\n" msgstr "" -"A assinatura será marcada como não-exportável.\n" "\n" +"A assinatura será marcada como não-exportável.\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"A assinatura será marcada como não-revocável.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Não verifiquei esta chave.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Verifiquei por alto esta chave.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Verifiquei esta chave com muito cuidado.\n" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Realmente assinar? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "assinatura falhou: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Esta chave não é protegida.\n" -#: g10/keyedit.c:426 -#, fuzzy +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" -msgstr "chave secreta não disponível" +msgstr "Componentes secretas da chave primária não disponíveis.\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "A chave é protegida.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossível editar esta chave: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2077,7 +2448,7 @@ msgstr "" "Digite a nova frase para esta chave secreta.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2085,422 +2456,556 @@ msgstr "" "Você não quer uma frase secreta - provavelmente isto é uma *má* idéia!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Você quer realmente fazer isso? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "a mover a assinatura da chave para o local correcto\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "sair deste menu" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "save" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "gravar e sair" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "help" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "mostra esta ajuda" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "mostra impressão digital" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "list" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "lista chave e identificadores de utilizadores" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "seleciona ID de utilizador N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "key" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "seleciona chave secundária N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "check" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "lista assinaturas" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "sign" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "assina a chave" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "assina a chave localmente" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "assina a chave de forma não-revogável" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "assinar a chave localmente e de forma não revogável" + +#: g10/keyedit.c:832 msgid "debug" msgstr "debug" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "adiciona um novo ID de utilizador" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "addphoto" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "adiciona um identificador fotográfico" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "remove ID de utilizador" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "adiciona nova chave secundária" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "remove uma chave secundária" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "delsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "remove assinaturas" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "muda a data de validade" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "primary" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "seleccionar o identificador do utilizador como primário" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "alterna entre listagem de chave secreta e pública" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "lista preferências" +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "lista preferências (perito)" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "lista preferências (detalhadamente)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "configurar lista de preferências" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "preferências actualizadas" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "muda a frase secreta" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "trust" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "muda os valores de confiança" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "revoga assinaturas" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "revoga uma chave secundária" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "disable" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "desactiva uma chave" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "enable" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "activa uma chave" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "showphoto" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "mostrar identificador fotográfico" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "impossível fazer isso em modo não-interativo\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "erro na leitura do bloco de chave secreto `%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Chave secreta disponível.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Comando> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "A chave secreta é necessária para fazer isto.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" -msgstr "" +msgstr "Por favor utilize o comando \"toggle\" primeiro.\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "A chave está revogada.\n" + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Realmente assinar todos os IDs de utilizador? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Sugestão: Selecione os IDs de utilizador para assinar\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "actualização da base de dados de confiança falhou: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "Este comando não é permitido no modo %s.\n" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Você precisa selecionar pelo menos um ID de utilizador.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Você não pode remover o último ID de utilizador!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Realmente remover todos os IDs de utilizador seleccionados? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Realmente remover este ID de utilizador? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Você deve selecionar pelo menos uma chave.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Você quer realmente remover as chaves selecionadas? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Você quer realmente remover esta chave? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Você quer realmente revogar as chaves selecionadas? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Você quer realmente revogar esta chave? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "" +"Realmente actualizar as preferências para os utilizadores seleccionados?" + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Realmente actualizar as preferências?" + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Gravar alterações? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Sair sem gravar? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "actualização falhou: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "actualização da chave secreta falhou: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "Chave não alterada, nenhuma actualização é necessária.\n" -# help ou ajuda ??? -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Comando inválido (tente \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "Esta chave pode ser revogada pela chave %s %s%s\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (sensível)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX criada: %s expira: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " confiança: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Esta chave foi desactivada" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "chave %08lX: a subchave foi revogada!\n" +msgstr "rev! subchave foi revogada: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr " novas revogações de chaves: %lu\n" +msgstr "rev- revogação falsa encontrada\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" +msgstr "rev? problema ao verificar revogação: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" msgstr "" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"AVISO: Esta chave já tem um identificador fotográfico.\n" +" Se adicionar outro pode confundir algumas versão do PGP.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Você tem certeza de que quer adicioná-la de qualquer forma? (y/n) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Só pode ter um identificador fotográfico por chave.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"AVISO: Esta chave é do tipo PGP2. Se adicionar um identificador fotográfico\n" +" algumas versão do PGP podem rejeitá-la.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" +"Não pode adicionar um identificador fotográfico a uma chave tipo PGP2.\n" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Apagar esta assinatura válida? (s/N/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Apagar esta assinatura inválida? (s/N/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Apagar esta assinatura desconhecida? (s/N/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Realmente remover esta auto-assinatura? (s/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "%d assinatura removida.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d assinaturas removidas.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Nada removido.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Por favor remova as selecções das chaves secretas.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Por favor seleccione no máximo uma chave secundária.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "A modificar a data de validade para uma chave secundária.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Modificar a data de validade para uma chave primária.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Você não pode modificar a data de validade de uma chave v3\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Nenhuma assinatura correspondente no porta-chaves secreto\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Seleccione exactamente um identificador de utilizador.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Nenhum ID de utilizador com índice %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Nenhuma chave secundária com índice %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "ID de utilizador: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2509,245 +3014,375 @@ msgstr "" "\"\n" "assinado com sua chave %08lX em %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, fuzzy, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"assinado com sua chave %08lX em %s\n" + +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "Esta chave vai expirar em %s.\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Você tem certeza de que quer adicioná-la de qualquer forma? (y/n) " + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Gerar um certificado de revogação para esta assinatura? (s/N)" #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Assinou estes identificadores de utilizadores:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 -#, c-format -msgid " signed by %08lX at %s\n" -msgstr " assinado por %08lX em %s\n" +#: g10/keyedit.c:2504 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr " assinado por %08lX em %s%s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " revogado por %08lX em %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Está prestes a revogar estas assinaturas:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " assinado por %08lX em %s%s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " msgstr "Realmente gerar os certificados de revogação? (s/N)" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "nenhuma chave secreta\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "armadura inválida" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "revkey" +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "Politica de assinatura: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "AVISO: dados de notação inválidos encontrados\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "Notação da assinatura: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "não é legível por humanos" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Porta-chaves" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 -#, fuzzy, c-format +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format msgid " [expires: %s]" -msgstr "A chave expira em %s\n" +msgstr "[expira: %s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Impressão digital:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Impressão digital:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Impressão da chave =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "dados cifrados com %s\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "cifrado com algoritmo desconhecido %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "a chave pública é %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" -msgstr "dados encriptados com chave pública: DEK válido\n" +msgstr "dados cifrados com chave pública: DEK válido\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" -msgstr "encriptado com chave %u-bit %s, ID %08lX, criada em %s\n" +msgstr "cifrado com chave %u-bit %s, ID %08lX, criada em %s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" -msgstr "encriptado com chave %s, ID %08lX\n" +msgstr "cifrado com chave %s, ID %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "nenhuma chave secreta para desencriptação disponível\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" -msgstr "desencriptação de chave pública falhou: %s\n" +msgstr "decifragem de chave pública falhou: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "a assumir dados cifrados %s\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "Cifra IDEO não disponível, a tentar utilizar %s em substituição\n" + +#: g10/mainproc.c:466 msgid "decryption okay\n" -msgstr "desencriptação correcta\n" +msgstr "decifragem correcta\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" -msgstr "CUIDADO: a mensagem encriptada foi manipulada!\n" +msgstr "CUIDADO: a mensagem cifrada foi manipulada!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" -msgstr "desencriptação falhou: %s\n" +msgstr "decifragem falhou: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: o remetente solicitou \"apenas-para-seus-olhos\"\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "nome do ficheiro original='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revocação solitária - utilize \"gpg --import\" para aplicar\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "AVISO: dados de notação inválidos encontrados\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Notação: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Política: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "verificação de assinatura suprimida\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "não consigo tratar estas assinaturas múltiplas\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Assinatura feita em %.*s usando %s, ID da chave %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "Assinatura INCORRECTA de \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 -msgid "Good signature from \"" -msgstr "Assinatura correta de \"" +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Assinatura expirada de \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1307 g10/mainproc.c:1329 +msgid "Good signature from \"" +msgstr "Assinatura correcta de \"" + +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[incerto]" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " ou \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossível verificar assinatura: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "não é uma assinatura separada\n" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "assinatura de classe 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "formato de assinatura antigo (PGP2.x)\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "pacote raiz inválido detectado em proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossível desactivar core dumps: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Algoritmos experimentais não devem ser usados!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "" -"este algoritmo de criptografia não é recomendado;\n" -"por favor use um algoritmo mais standard!\n" +"este algoritmo de criptografia está desctualizado; por favor use um " +"algoritmo mais standard!x\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, fuzzy, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Aviso: dono pouco seguro em %s \"%s\"\n" + +#: g10/misc.c:410 +#, fuzzy, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Aviso: permissões pouco seguras em %s \"%s\"\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "o 'plugin' com a cifra IDEA não está presente\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "veja http://www.gnupg.org/why-not-idea.html para mais informações\n" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossível manipular algoritmo de chave pública %d\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpacote do tipo %d tem bit crítico ligado\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" -msgstr "" +msgstr "o gpg-agent não está disponível nesta sessão\n" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "não consegui colocar o pid do cliente no agente\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "não consigo obter FD de leitura no servidor para o agente\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "não consigo obter FD de escrita no servidor para o agente\n" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "variável de ambiente GPG_AGENT_INFO inválida\n" -#: g10/hkp.c:158 g10/passphrase.c:223 -#, fuzzy, c-format +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "a versão %d do protocolo gpg-agent não é suportada\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format msgid "can't connect to `%s': %s\n" -msgstr "impossível abrir `%s': %s\n" +msgstr "impossível ligar a `%s': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "problemas na comunicação com o gpg-agent\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "problema com o agente - a desactivar a utilização deste\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (ID principal da chave %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" +"Precisa de uma frase secreta para desbloquear a chave secreta do " +"utilizador:\n" "\n" -"Você precisa de uma frase secreta para desbloquear a chave secreta do\n" -"utilizador: \"" +"\"%.*s\"\n" +"chave %u bits %s, ID %08lx, criada %s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Digite a frase secreta: " +msgstr "Insira a frase secreta\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Repita a frase secreta: " +msgstr "Repita a frase secreta\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "" +msgstr "frase secreta demasiado longa\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "resposta do agente inválida\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "cancelado pelo utilizador\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "problema com o agente: o agente returnou 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2757,20 +3392,20 @@ msgstr "" "Você precisa de uma frase secreta para desbloquear a chave secreta do\n" "utilizador: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "chave de %u-bit/%s, ID %08lX, criada em %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "impossível pedir senha em modo não-interactivo\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Digite a frase secreta: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Repita a frase secreta: " @@ -2778,147 +3413,192 @@ msgstr "Repita a frase secreta: " msgid "data not saved; use option \"--output\" to save it\n" msgstr "dados não gravados; use a opção \"--output\" para gravá-los\n" -#: g10/plaintext.c:324 -msgid "Detached signature.\n" -msgstr "Assinatura desacoplada.\n" +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "erro ao criar `%s': %s\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:337 +msgid "Detached signature.\n" +msgstr "Assinatura separada.\n" + +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Por favor digite o nome do ficheiro de dados: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "lendo do \"stdin\" ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "não há dados assinados\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossível abrir dados assinados `%s'\n" -#: g10/pubkey-enc.c:135 +#: g10/pubkey-enc.c:100 #, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "destinatário anónimo; a tentar chave secreta %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "certo, nós somos o destinatário anónimo.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "codificação antiga do DEK não suportada\n" -#: g10/pubkey-enc.c:216 -#, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "algoritmo de protecção %d não é suportado\n" +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "algoritmo de cifra %d%s é desconhecido ou foi desactivado\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "NOTA: algoritmo de cifragem %d não encontrado nas preferências\n" -#: g10/pubkey-enc.c:261 -#, fuzzy, c-format -msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "NOTA: chave de assinatura expirou %s\n" - -#: g10/hkp.c:62 +#: g10/pubkey-enc.c:242 #, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "NOTA: chave secreta %08lX expirou em %s\n" -#: g10/hkp.c:75 -#, fuzzy, c-format +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "a pedir chave %08lX do servidor de chaves HKP %s\n" + +#: g10/hkp.c:94 +#, c-format msgid "can't get key from keyserver: %s\n" -msgstr "importar chaves de um servidor" +msgstr "não consigo obter chave do servidor: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s não é um conjunto de caracteres válido\n" - -#: g10/hkp.c:182 -#, fuzzy, c-format +#: g10/hkp.c:171 +#, c-format msgid "error sending to `%s': %s\n" -msgstr "erro na leitura de `%s': %s\n" +msgstr "erro ao enviar para `%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" -msgstr "" +msgstr "sucesso ao enviar para `%s' (estado=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" -msgstr "" +msgstr "erro ao enviar para `%s': estado=%u\n" -#: g10/seckey-cert.c:89 -#, fuzzy -msgid "secret key parts are not available\n" -msgstr "chave secreta não disponível" - -#: g10/seckey-cert.c:95 +#: g10/hkp.c:471 #, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "algoritmo de protecção %d não é suportado\n" +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "a procurar por \"%s\" no servidor HKP %s\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "Frase secreta inválida; por favor tente novamente ...\n" +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "não consigo procurar no servidor de chaves: %s\n" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "partes da chave secreta não disponíveis\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "algoritmo de protecção %d%s não é suportado\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Frase secreta inválida; por favor tente novamente" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVISO: Chave fraca detectada - por favor mude a frase secreta novamente.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "esta é uma chave ElGamal gerada pelo PGP que NÃO é segura para assinaturas!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "a chave pública é %lu segundo mais nova que a assinatura\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "a chave pública é %lu segundos mais nova que a assinatura\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "NOTA: chave de assinatura expirou %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "NOTA: chave de assinatura %08lx expirou %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "assumindo assinatura incorrecta devido a um bit crítico desconhecido\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"AVISO: impossível expandir-%% a url de política (demasiado grande).\n" +"A utilizar não expandida.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "verificação da assinatura criada falhou: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "assinatura %s de: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "AVISO: `%s' é um ficheiro vazio\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "só pode assinar com chaves do tipo PGP 2.x no modo --pgp2\n" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "impossível criar %s: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "a assinar:" -#: g10/sign.c:583 +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "só pode assinar à vista com chaves do tipo PGP 2.x no modo --pgp2\n" + +#: g10/sign.c:953 #, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "AVISO: `%s' é um ficheiro vazio\n" +msgid "%s encryption will be used\n" +msgstr "será utilizada a cifragem %s\n" #: g10/textfilter.c:134 #, c-format @@ -2930,424 +3610,210 @@ msgstr "imposs msgid "input line longer than %d characters\n" msgstr "linha de entrada maior que %d caracteres\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "base de dados de confiança rec %lu: lseek falhou: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "base de dados de confiança rec %lu: escrita falhou (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "transação de base de dados de confiança muito grande\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: impossível aceder: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: diretoria inexistente!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: impossível criar: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: impossível criar tranca\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: impossível criar tranca\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: impossível criar: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: falha ao criar registo de versão: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: base de dados de confiança inválida criada\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: base de dados de confiança criada\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: base de dados de confiança inválida\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" -msgstr "%s: falha ao criar tabela de \"hash\": %s\n" +msgstr "%s: falha ao criar tabela de dispersão: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: erro a actualizar registo de versão: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: erro ao ler registo de versão: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: erro ao escrever registo de versão: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de dados de confiança: lseek falhou: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de dados de confiança: leitura falhou (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: não é um base de dados de confiança\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: registo de versão com recnum %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versão de ficheiro inválida %d\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: erro ao ler registo livre: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: erro ao escrever registo de diretório: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: falha ao zerar um registo: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: falha ao anexar um registo: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "A base de dados de confiança está danificada; por favor execute\n" "\"gpg --fix-trustdb\".\n" -#: g10/trustdb.c:169 +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' não é um identificador longo de chave válido\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "chave %08lX: aceite como chave de confiança\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "chave %08lX ocrreu mais do que uma vez na base de dados de confiança\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "" +"chave %08lX: nenhuma chave pública para chave de confiança - ignorada\n" +"\n" + +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "registo de confiança %lu, tipo req %d: falha na leitura: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "registo de confiança %lu não é do tipo pedido %d\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "registo de confiança %lu, tipo %d: escrita falhou: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "registo de confiança %lu: remoção falhou: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de dados de confiança: sincronização falhou: %s\n" -#: g10/trustdb.c:377 +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "não é necessária uma verificação da base de dados de confiança\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "erro lendo registo de directório para LID %lu: %s\n" +msgid "next trustdb check due at %s\n" +msgstr "proxima verificação da base de dados de confiança a %s\n" -#: g10/trustdb.c:384 +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "a verificar a base de dados de confiança\n" + +#: g10/trustdb.c:933 #, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: registo de directório esperado, tipo %d recebido\n" +msgid "public key %08lX not found: %s\n" +msgstr "chave pública %08lX não encontrada: %s\n" -#: g10/trustdb.c:389 +#: g10/trustdb.c:1515 #, c-format -msgid "no primary key for LID %lu\n" -msgstr "nenhuma chave primária para LID %lu\n" - -#: g10/trustdb.c:394 -#, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "erro ao ler chave primária para LID %lu: %s\n" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record falhou: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "%s não é um conjunto de caracteres válido\n" - -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "chave %08lX: impossível colocá-la na base de dados de confiança\n" - -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "chave %08lX: pedido de registo falhou\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "chave %08lX: já está na tabela de chaves confiáveis\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "chave %08lX: aceite como chave confiável.\n" - -#: g10/trustdb.c:547 -#, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n" - -#: g10/trustdb.c:566 -#, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "NOTA: a chave secreta %08lX NÃO está protegida.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "chave %08lX: chaves secreta e pública não são correspondentes\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "enumeração de chaves secretas falhou: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "chave %08lX.%lu: Ligação de subchave válida\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "chave %08lX.%lu: Ligação de subchave inválida: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "chave %08lX.%lu: Revogação de chave válida\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "chave %08lX.%lu: Revogação de chave inválida: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "chave %08lX.%lu: Revogação de subchave válida\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Auto-assinatura válida" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Auto-assinatura inválida" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" +msgid "public key of ultimately trusted key %08lX not found\n" msgstr "" -"Revogação válida de ID de utilizador ignorada devido a nova auto-assinatura" +"chave pública da chave absolutamente de confiança %08lX não encontrada\n" -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Revogação de ID de utilizador válida" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Revogação de ID de utilizador inválida" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Certificado de revogação válido" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Certificado correcto" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Certificado de revogação inválido" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Certificado inválido" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 +#: g10/trustdb.c:1593 #, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "registo de assinatura %lu[%d] aponta para registo errado.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "certificado duplicado - removido" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir falhou: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: inserção falhou: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: inserção falhou: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: inserido\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "erro ao ler registo de directório: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu chaves processadas\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu chaves com erros\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu chaves inseridas\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "enumeração de blocos de chaves falhou: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: registo de directório sem chave - ignorado\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu devido a novas chaves públicas\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu chaves ignoradas\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu chaves actualizadas\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Ooops, nenhuma chave\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Ooops, nenhum ID de utilizador\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: busca de registo de directório falhou: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "chave %08lX: inserção de registo de confiança falhou: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "chave %08lX.%lu: inserida na base de dados de confiança\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -"chave %08lX.%lu: criada no futuro (viagem no tempo ou problema no relogio)\n" +"a verificar à profundidade %d assinado=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "chave %08lX.%lu: expirou em %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "chave %08lX.%lu: verificação de confiança falhou: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "utilizador `%s' não encontrado: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "problemas na procura de `%s' na base de dados de confiança: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "" -"utilizador `%s' não encontrado na base de dados de confiança - a inserir\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "falha ao colocar `%s' na base de dados de confiança: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "AVISO: ainda é impossível manipular registos de preferências longos\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3357,45 +3823,31 @@ msgstr "" "Não se esqueça que o ficheiro com a assinatura (.sig ou .asc)\n" "deve ser o primeiro a ser dado na linha de comando.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "linha de entrada %u demasiado longa ou falta o LF\n" -#: g10/ringedit.c:296 +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"a chave não está marcada insegura - impossível usá-la com o RNG falso!\n" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: impossível criar porta-chaves: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "ignorado `%s': duplicada\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: porta-chaves criado\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "AVISO: existem 2 ficheiros com informações confidenciais.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s é o não modificado\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s é o novo\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Por favor conserte esta possível falha de segurança\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "ignorado `%s': %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "ignorado: a chave secreta já está presente\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3414,91 +3866,98 @@ msgstr "Arquivo `%s' j msgid "Overwrite (y/N)? " msgstr "Escrever por cima (s/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: sufixo desconhecido\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Digite novo nome de ficheiro" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "a escrever em \"stdout\"\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "a assumir dados assinados em `%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: novo ficheiro de opções criado\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: impossível criar directoria: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: directoria criada\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "vai ter de reiniciar o GnuPG, para poder ler as novas opções\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "encriptado com algoritmo desconhecido %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "dados encriptados com %s\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" -"AVISO: A mensagem foi encriptada com uma chave fraca na criptografia\n" -"simétrica.\n" +"AVISO: A mensagem foi cifrada com uma chave fraca na cifragem simétrica.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problema ao tratar pacote cifrado\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "chave fraca criada - tentando novamente\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "impossível evitar chave fraca para criptografia simétrica;\n" "tentei %d vezes!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "há uma chave secreta para esta chave pública!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "utilize a opção \"--delete-secret-key\" para a apagar primeiro.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "impossível fazer isso em modo não-interactivo sem utilizar \"--yes\"\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Remover esta chave do porta-chaves?" -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "Esta chave é secreta! - apagar de qualquer modo? " +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "remoção do bloco de chave falhou: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "há uma chave secreta para a chave pública \"%s\"!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "utilize a opção \"--delete-secret-keys\" para a apagar primeiro.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3510,22 +3969,36 @@ msgstr "" "nada a ver com a rede de certificados (implicitamente criada)." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Para construir a Teia-de-Confiança ('Web-of-Trust'), o GnuPG precisa de\n" +"saber quais são as chaves em que deposita confiança absoluta - normalmente\n" +"estas são as chaves a que tem acesso à chave privada. Responda \"sim\" " +"para\n" +"que esta chave seja de confiança absoluta.\n" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "Se você quiser usar esta chave revogada assim mesmo, responda \"sim\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" -"Se você quiser usar esta chave não confiável assim mesmo, responda \"sim\"." +"Se você quiser usar esta chave, não de confiança, assim mesmo, responda \"sim" +"\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Digite o ID de utilizador do destinatário para quem quer enviar a\n" "mensagem." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3551,19 +4024,19 @@ msgstr "" "para assinaturas. Este é o algoritmo recomendado porque a verificação de\n" "assinaturas DSA é muito mais rápida que a verificação de ElGamal.\n" "\n" -"ElGamal é um algoritmo que pode ser usado para assinatura e encriptação.\n" -"O OpenPGP distingue dois tipos deste algoritmo: um apenas para encriptação\n" -"e outro para assinatura+encriptação; na verdade são iguais, mas alguns\n" +"ElGamal é um algoritmo que pode ser usado para assinatura e cifragem.\n" +"O OpenPGP distingue dois tipos deste algoritmo: um apenas para cifragem\n" +"e outro para assinatura+cifragem; na verdade são iguais, mas alguns\n" "parâmetros precisam ser escolhidos de modo especial para criar uma chave\n" "segura para assinatura: este programa faz isso, mas algumas outras\n" "implementações do OpenPGP não vão necessariamente entender o tipo\n" -"assinatura+encriptação.\n" +"assinatura+cifragem.\n" "\n" "A chave primária precisa sempre ser uma chave capaz de fazer assinaturas;\n" -"este é o motivo pelo qual a chave ElGamal apenas para encriptação não está\n" +"este é o motivo pelo qual a chave ElGamal apenas para cifragem não está\n" "disponível neste menu." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3574,16 +4047,16 @@ msgstr "" "porque não são suportadas por todos os programas e assinaturas criadas com\n" "elas são grandes e sua verificação é lenta." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Insira o tamanho da chave" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Responda \"sim\" ou \"não\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3595,19 +4068,19 @@ msgstr "" "reacção a erros - o sistema tentará interpretar o valor dado como um " "intervalo." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Digite o nome do possuidor da chave" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "por favor digite um endereço de email (opcional mas recomendado)" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Por favor digite um comentário (opcional)" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3617,19 +4090,91 @@ msgid "" msgstr "" "N para mudar o nome.\n" "C para mudar o comentário.\n" -"E para mudar o endereço de correio eletrônico.\n" +"E para mudar o endereço de email\n" "O para continuar a geração da chave.\n" "S para interromper a geração da chave." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Responda \"sim\" (ou apenas \"s\") se quiser gerar a subchave." -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Quando assina uma chave de identificação de um utilizador, deve primeiro\n" +"verificar que a chave pertence realmente à pessoa em questão. É útil para\n" +"terceiros saberem com que cuidado é que efectuou esta verificação.\n" +"\n" +"\"0\" significa que não deseja declarar a forma com verificou a chave\n" +"\n" +"\"1\" significa que acredita que a chave pertence à pessoa em questão, mas\n" +" não conseguiu ou não tentou verificar. Este grau é útil para quando\n" +" assina a chave de uma utilizador pseudo-anónimo.\n" +"\n" +"\"2\" significa que efectuou uma verificação normal da chave. Por exemplo,\n" +" isto pode significar que verificou a impressão digital da chave e\n" +" verificou o identificador de utilizador da chave contra uma " +"identificação\n" +" fotográfica.\n" +"\n" +"\"3\" significa que efectuou uma verificação exaustiva da chave. Por " +"exemplo,\n" +" isto pode significar que efectuou a verificação pessoalmente, e que \n" +" utilizou um documento, com fotografia, difícil de falsificar \n" +" (como por exemplo um passaporte) que o nome do dono da chave é o\n" +" mesmo do que o identificador da chave, e que, finalmente, verificou\n" +" (através de troca de e-mail) que o endereço de email da chave pertence\n" +" ao done da chave.\n" +"\n" +"Atenção: os exemplos dados para os níveis 2 e 3 são *apenas* exemplos.\n" +"Compete-lhe a si decidir o que considera, ao assinar chaves, uma " +"verificação\n" +"\"normal\" e uma verificação \"exaustiva\".\n" +"\n" +"Se não sabe qual é a resposta correcta, responda \"0\"." + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Responda \"sim\" se quiser assinar TODOS os IDs de utilizador" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3637,11 +4182,11 @@ msgstr "" "Responda \"sim\" se quiser realmente remover este ID de utilizador.\n" "Todos os certificados também serão perdidos!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Responda \"sim\" se quiser remover a subchave" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3651,7 +4196,7 @@ msgstr "" "remover esta assinatura porque ela pode ser importante para estabelecer\n" "uma conexão de confiança à chave ou a outra chave certificada por esta." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3663,13 +4208,13 @@ msgstr "" "porque a chave desta assinatura pode estabelecer uma conexão de confiança\n" "através de outra chave já certificada." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "A assinatura não é válida. Faz sentido removê-la do seu porta-chaves." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3682,25 +4227,35 @@ msgstr "" "não consiga mais usar esta chave. Faça isto apenas se por alguma\n" "razão esta auto-assinatura não for válida e há uma segunda disponível." -#: g10/helptext.c:202 +#: g10/helptext.c:231 +#, fuzzy msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " -msgstr "Por favor digite a FRASE secreta" +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" +"Muda as preferências de todos os identificadores de utilizadores\n" +"(ou apenas dos seleccionados) para a lista actual de preferências.\n" +"O 'timestamp' de todas as auto-assinaturas afectuadas será avançado\n" +"em um segundo.\n" -#: g10/helptext.c:209 +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Por favor digite a frase secreta \n" + +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Por favor repita a frase secreta, para ter certeza do que digitou." -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "Dê o nome para o ficheiro ao qual a assinatura se aplica" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Responda \"sim\" se quiser escrever por cima do ficheiro" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3709,14 +4264,14 @@ msgstr "" "RETURN\n" "o ficheiro por omissão (que é mostrado entre parênteses) será utilizado." -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3724,81 +4279,112 @@ msgid "" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" +"Deve especificar uma razão para a emissão do certificado. Dependendo no\n" +"contexto, pode escolher as seguintes opções desta lista:\n" +" \"A chave foi comprometida\"\n" +" Utilize esta opção se tem razões para acreditar que indivíduos não\n" +" autorizados obtiveram acesso à sua chave secreta.\n" +" \"A chave foi substituida\"\n" +" Utilize esta opção se substituiu esta chave com uma mais recente.\n" +" \"A chave já não é utilizada\"\n" +" Utilize esta opção se já não utiliza a chave.\n" +" \"O identificador do utilizador já não é válido\"\n" +" Utilize esta opção para comunicar que o identificador do utilizador\n" +" não deve ser mais utilizado; normalmente utilizada para indicar\n" +" que um endereço de email é inválido.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" +"Se desejar, pode inserir uma texto descrevendo a razão pela qual criou\n" +"este certificado de revogação. Por favor mantenha este texto conciso.\n" +"Uma linha vazia termina o texto.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Nenhuma ajuda disponível" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Nenhuma ajuda disponível para `%s'" -#~ msgid "certificate read problem: %s\n" -#~ msgstr "erro de leitura do certificado: %s\n" +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "erro ao criar porta-chaves `%s': %s\n" -#~ msgid "RSA key cannot be used in this version\n" -#~ msgstr "chave RSA não pode ser usada nesta versão\n" +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "a mudança de permissões de `%s' falhou: %s\n" -#~ msgid "No key for user ID\n" -#~ msgstr "Nenhuma chave para identificador de utilizador\n" +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "porta-chaves `%s' criado\n" -#~ msgid "No user ID for key\n" -#~ msgstr "Nenhum identificador de utilizador para chave\n" +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "falha ao criar 'cache' do porta-chaves: %s\n" -#~ msgid "no default public keyring\n" -#~ msgstr "sem porta-chaves público padrão\n" +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "AVISO: existem 2 ficheiros com informações confidenciais.\n" -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "impossível trancar porta-chaves `%s': %s\n" +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s é o não modificado\n" -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n" +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s é o novo\n" -#~ msgid "%s: user not found\n" -#~ msgstr "%s: utilizador não encontrado\n" +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Por favor conserte esta possível falha de segurança\n" -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "Chaves RSA não são recomendáveis; por favor considere criar uma nova chave e " -#~ "usá-la no futuro\n" +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "a verificar o porta chaves `%s'\n" -#~ msgid "not processed" -#~ msgstr "não processado" +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu chaves verificadas até agora (%lu assinaturas)\n" -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "assumindo MDC incorrecto devido a um bit crítico desconhecido\n" +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu chave verificadas (%lu assinaturas)\n" -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "a chave não está marcada insegura - impossível usá-la com o RNG falso!\n" +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: porta-chaves criado\n" -#~ msgid "set debugging flags" -#~ msgstr "definir parâmetros de depuração" +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Você tem certeza de que quer assiná-la?\n" -#~ msgid "enable full debugging" -#~ msgstr "habilitar depuração completa" +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr " Você tem a certeza que quer mesmo assim assiná-la?\n" -#~ msgid "do not write comment packets" -#~ msgstr "não escrever pacotes de comentário" +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "Realmente assinar? " -#~ msgid "(default is 1)" -#~ msgstr "(por omissão 1)" +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "chave %08lX: a nossa cópia não tem auto-assinatura\n" -#~ msgid "(default is 3)" -#~ msgstr "(por omissão 3)" +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Você precisa realmente de uma chave tão grande? " -#~ msgid " (%d) ElGamal in a v3 packet\n" -#~ msgstr " (%d) ElGamal num pacote v3\n" - -#~ msgid "Key generation can only be used in interactive mode\n" -#~ msgstr "A geração de chaves só pode ser feita em modo interactivo\n" +#~ msgid " signed by %08lX at %s\n" +#~ msgstr " assinado por %08lX em %s\n" diff --git a/po/pt_BR.po b/po/pt_BR.po index 4f941c835..7f934a872 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,307 +1,339 @@ -# Portuguese messages for gnupg +# Portuguese (Brazilian) messages for gnupg +# Copyright (C) 1999, 2002 Free Software Foundation, Inc. # Thiago Jung Bauermann , 1999. # Revised by Rafael Caetano dos Santos . # I tried to make this one close to es_ES by Urko Lusa # +# Rafael Caetano dos Santos used to be +# the last translator but he can't continue his work. +# msgid "" msgstr "" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Date: 1998-11-20 23:46:36-0200\n" -"From: Thiago Jung Bauermann \n" -"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " -"--keyword=_ --keyword=N_ --files-from=./POTFILES.in\n" -"Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " -"cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " -"g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " -"g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c " -"g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c\n" +"Project-Id-Version: GNU gnupg 1.0\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 1998-11-20 23:46:36-0200\n" +"Last-Translator:\n" +"Language-Team: ?\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Aviso: usando memória insegura!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "a operação não é possível sem memória segura inicializada\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(você pode ter usado o programa errado para esta tarefa)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "sim" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "sS" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "não" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" # INICIO MENU -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "sair" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "qQ" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "erro geral" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "formato de pacote desconhecido" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "versão desconhecida" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "algoritmo de chave pública desconhecido" -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "algoritmo de \"digest\" desconhecido" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "chave pública incorreta" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "chave secreta incorreta" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "assinatura incorreta" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "erro de \"checksum\"" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "frase secreta incorreta" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "chave pública não encontrada" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "algoritmo de criptografia desconhecido" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "não é possível abrir o chaveiro" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "pacote inválido" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "armadura inválida" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "identificador de usuário inexistente" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "chave secreta não disponível" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "chave secreta incorreta" # suportado ??? -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "não suportado" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "chave incorreta" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "erro de leitura" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "erro de escrita" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "algoritmo de compressão desconhecido" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "erro na abertura de arquivo" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "erro na criação de arquivo" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "frase secreta inválida" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algoritmo de chave pública não implementado" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algoritmo de criptografia não implementado" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "classe de assinatura desconhecida" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "erro no banco de dados de confiabilidade" -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "MPI incorreto" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "limite de recurso" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "chaveiro inválido" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "certificado incorreto" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "identificador de usuário malformado" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "erro no fechamento de arquivo" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "erro na renomeação de arquivo" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "erro na remoção de arquivo" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "dados inesperados" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "conflito de \"timestamp\"" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "algoritmo de chave pública inutilizável" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "o arquivo já existe" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "chave fraca" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "argumento inválido" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "URI incorreto" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "URI não suportado" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "erro na rede" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "não criptografado" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "não processado(s)" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +#, fuzzy +msgid "unusable public key" +msgstr "chave pública incorreta" + +#: util/errors.c:106 +#, fuzzy +msgid "unusable secret key" +msgstr "chave secreta incorreta" + +#: util/errors.c:107 +#, fuzzy +msgid "keyserver error" +msgstr "erro geral" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... isto é um bug (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "você encontrou um bug ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "impossível abrir `%s': %s\n" -#: cipher/random.c:325 +#: cipher/random.c:324 #, fuzzy, c-format msgid "can't stat `%s': %s\n" msgstr "impossível abrir `%s': %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" msgstr "" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "" -#: cipher/random.c:349 +#: cipher/random.c:348 #, fuzzy, c-format msgid "can't read `%s': %s\n" msgstr "impossível abrir `%s': %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" msgstr "" -#: cipher/random.c:407 +#: cipher/random.c:406 #, fuzzy, c-format msgid "can't create `%s': %s\n" msgstr "impossível criar %s: %s\n" -#: cipher/random.c:414 +#: cipher/random.c:413 #, fuzzy, c-format msgid "can't write `%s': %s\n" msgstr "impossível abrir `%s': %s\n" -#: cipher/random.c:417 +#: cipher/random.c:416 #, fuzzy, c-format msgid "can't close `%s': %s\n" msgstr "impossível abrir `%s': %s\n" -#: cipher/random.c:428 -#, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" - -#: cipher/random.c:659 +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVISO: usando gerador de números aleatórios inseguro!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -315,7 +347,7 @@ msgstr "" "NÃO USE NENHUM DADO GERADO POR ESTE PROGRAMA!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -327,19 +359,7 @@ msgstr "" "para que o sistema possa coletar mais entropia!\n" "(São necessários mais %d bytes)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Aviso: usando memória insegura!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "a operação não é possível sem memória segura inicializada\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(você pode ter usado o programa errado para esta tarefa)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -347,144 +367,175 @@ msgstr "" "@Comandos:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[arquivo]|fazer uma assinatura" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[arquivo]|fazer uma assinatura em texto puro" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "fazer uma assinatura separada" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "criptografar dados" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "" "criptografar apenas com criptografia\n" "simétrica" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "apenas armazenar" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "descriptografar dados (padrão)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "verificar uma assinatura" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "listar as chaves" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "listar as chaves e as assinaturas" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "verificar as assinaturas das chaves" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "listar as chaves e as impressões digitais" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "listar as chaves secretas" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "gerar um novo par de chaves" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" +#: g10/g10.c:307 +#, fuzzy +msgid "remove keys from the public keyring" msgstr "remover a chave do chaveiro público" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" +#: g10/g10.c:309 +#, fuzzy +msgid "remove keys from the secret keyring" msgstr "remover a chave do chaveiro secreto" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "assinar uma chave" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "assinar uma chave localmente" -#: g10/gpg.c:224 +#: g10/g10.c:312 +#, fuzzy +msgid "sign a key non-revocably" +msgstr "assinar uma chave localmente" + +#: g10/g10.c:313 +#, fuzzy +msgid "sign a key locally and non-revocably" +msgstr "assinar uma chave localmente" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "assinar ou editar uma chave" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "gerar um certificado de revogação" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "exportar chaves" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "exportar chaves para um servidor" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "importar chaves de um servidor" -#: g10/gpg.c:232 +#: g10/g10.c:320 +#, fuzzy +msgid "search for keys on a key server" +msgstr "exportar chaves para um servidor" + +#: g10/g10.c:322 +#, fuzzy +msgid "update all keys from a keyserver" +msgstr "importar chaves de um servidor" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "importar/fundir chaves" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "listar apenas as seqüências de pacotes" # ownertrust ??? -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "exportar os valores de confiança" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importar os valores de confiança" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "atualizar o banco de dados de confiabilidade" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NOMES]|verificar o banco de dados de confiabilidade" +#: g10/g10.c:336 +#, fuzzy +msgid "unattended trust database update" +msgstr "atualizar o banco de dados de confiabilidade" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "" "consertar um banco de dados de confiabilidade\n" "danificado" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "retirar a armadura de um arquivo ou de \"stdin\"" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "criar armadura para um arquivo ou \"stdin\"" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [arquivos]|imprimir \"digests\" de mensagens" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -494,179 +545,230 @@ msgstr "" "Opções:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "criar saída com armadura ascii" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NOME|criptografar para NOME" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NOME|usar NOME como destinatário padrão" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "usar a chave padrão como destinatário padrão" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "" "usar este identificador de usuário para\n" "assinar ou descriptografar" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "" "|N|estabelecer nível de compressão N\n" "(0 desabilita)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "usar modo de texto canônico" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "usar como arquivo de saída" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "detalhado" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "ser mais silencioso" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "nunca usar o terminal" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "forçar assinaturas v3" -#: g10/gpg.c:275 +#: g10/g10.c:376 +#, fuzzy +msgid "do not force v3 signatures" +msgstr "forçar assinaturas v3" + +#: g10/g10.c:377 +#, fuzzy +msgid "force v4 key signatures" +msgstr "forçar assinaturas v3" + +#: g10/g10.c:378 +#, fuzzy +msgid "do not force v4 key signatures" +msgstr "forçar assinaturas v3" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "sempre usar um MDC para criptografar" -#: g10/gpg.c:276 +#: g10/g10.c:381 +#, fuzzy +msgid "never use a MDC for encryption" +msgstr "sempre usar um MDC para criptografar" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "não fazer alterações" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" msgstr "" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "modo não-interativo: nunca perguntar" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "assumir sim para a maioria das perguntas" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "assumir não para a maioria das perguntas" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "adicionar este chaveiro à lista de chaveiros" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "adicionar este chaveiro secreto à lista" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NOME|usar NOME como chave secreta padrão" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|ENDEREÇO|usar este servidor para buscar chaves" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "" "|NOME|definir mapa de caracteres do terminal como\n" "NOME" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "ler opções do arquivo" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "" "|DA|escrever informações de estado para o\n" "descritor de arquivo DA" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" +#: g10/g10.c:404 +#, fuzzy +msgid "|[file]|write status info to file" +msgstr "" +"|DA|escrever informações de estado para o\n" +"descritor de arquivo DA" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" msgstr "" -#: g10/gpg.c:297 +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|ARQUIVO|carregar módulo de extensão ARQUIVO" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "emular o modo descrito no RFC1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" "configurar todas as opções de pacote,\n" "criptografia e \"digest\" para comportamento\n" "OpenPGP" -#: g10/gpg.c:300 +#: g10/g10.c:414 +#, fuzzy +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"configurar todas as opções de pacote,\n" +"criptografia e \"digest\" para comportamento\n" +"OpenPGP" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|usar frase secreta modo N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "" "|NOME|usar algoritmo de \"digest\" de mensagens NOME\n" "para frases secretas" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "" "|NOME|usar algoritmo de criptografia NOME para\n" "frases secretas" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOME|usar algoritmo de criptografia NOME" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOME|usar algoritmo de \"digest\" de mensagens NOME" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|usar algoritmo de compressão N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "" "eliminar o campo keyid dos pacotes\n" "criptografados" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NOME=VALOR|usar estes dados de notação" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -686,15 +788,15 @@ msgstr "" " --list-keys [nomes] mostrar chaves\n" " --fingerprint [nomes] mostrar impressões digitais\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "Por favor comunique bugs para .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opções] [arquivos] (-h para ajuda)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -704,7 +806,7 @@ msgstr "" "assina, verifica, criptografa ou descriptografa\n" "a operação padrão depende dos dados de entrada\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -712,194 +814,258 @@ msgstr "" "\n" "Algoritmos suportados:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "uso: gpg [opções] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "comandos conflitantes\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: arquivo de opções padrão `%s' inexistente\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "arquivo de opções `%s': %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "lendo opções de `%s'\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s não é um conjunto de caracteres válido\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "AVISO: `%s' é um arquivo vazio\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "AVISO: O programa pode criar um arquivo core!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: %s não é para uso normal!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s não é permitido com %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s não faz sentido com %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "o algoritmo de criptografia selecionado não é válido\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "o algoritmo de \"digest\" selecionado não é válido\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" +#: g10/g10.c:1492 +#, fuzzy +msgid "the given signature policy URL is invalid\n" msgstr "a URL de política dada é inválida\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +#, fuzzy +msgid "the given certification policy URL is invalid\n" +msgstr "a URL de política dada é inválida\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "o algoritmo de compressão deve estar na faixa %d..%d\n" -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve ser maior que 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve ser maior que 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth deve estar na entre 1 e 255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: o modo S2K simples (0) não é recomendável\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K inválido: deve ser 0, 1 ou 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +#, fuzzy +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "modo S2K inválido: deve ser 0, 1 ou 3\n" + +#: g10/g10.c:1519 +#, fuzzy +msgid "invalid preferences\n" +msgstr "lista preferências" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "falha ao inicializar o banco de dados de confiabilidade: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [nome_do_arquivo]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [nome_do_arquivo]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [nome_do_arquivo]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [nome_do_arquivo]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nome_do_arquivo]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +#, fuzzy +msgid "--sign --symmetric [filename]" +msgstr "--symmetric [nome_do_arquivo]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [nome_do_arquivo]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [nome_do_arquivo]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key id-usuário" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key id-usuário" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +#, fuzzy +msgid "--nrsign-key user-id" +msgstr "--sign-key id-usuário" + +#: g10/g10.c:1754 +#, fuzzy +msgid "--nrlsign-key user-id" +msgstr "--sign-key id-usuário" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-usuário [comandos]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key id-usuário" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key id-usuário" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "impossível abrir %s: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-usuário] [chaveiro]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "retirada de armadura falhou: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "criação de armadura falhou: %s\n" # "hash" poderia ser "espalhamento", mas não fica claro -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo de hash inválido `%s'\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[nome_do_arquivo]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Vá em frente e digite sua mensagem ...\n" -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "impossível abrir `%s'\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "o primeiro caractere de um nome de notação deve ser uma letra ou um " "sublinhado\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -907,159 +1073,141 @@ msgstr "" "um nome de notação deve ter apenas letras, dígitos, pontos ou sublinhados e " "terminar com '='\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" "pontos em um nome de notação devem estar cercados por outros caracteres\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "um valor de notação não deve usar caracteres de controle\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "cabeçalho de armadura inválido: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "cabeçalho de armadura: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "cabeçalho de assinatura em texto puro inválido\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "assinaturas em texto puro aninhadas\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "linha com hífen inválida: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "armadura inesperada:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "caractere radix64 inválido %02x ignorado\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "fim de arquivo prematuro (sem CRC)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "fim de arquivo prematuro (no CRC)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "CRC malformado\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "erro de CRC; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "fim de arquivo prematuro (no \"Trailer\")\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "erro na linha \"trailer\"\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "nenhum dado OpenPGP válido encontrado.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura inválida: linha maior que %d caracteres\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caractere \"quoted printable\" na armadura - provavelmente um MTA com bugs " "foi usado\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Impressão digital:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Impressão digital:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" msgstr "" -#: g10/pkclist.c:119 +#: g10/pkclist.c:63 #, fuzzy -msgid "Key is superseeded" +msgid "Key is superseded" msgstr "A chave é protegida.\n" -#: g10/pkclist.c:121 +#: g10/pkclist.c:65 #, fuzzy msgid "Key has been compromised" msgstr "Esta chave foi desativada" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" msgstr "" -#: g10/pkclist.c:125 +#: g10/pkclist.c:69 msgid "User ID is no longer valid" msgstr "" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " msgstr "" -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " msgstr "" #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "" -#: g10/pkclist.c:308 -#, c-format +#: g10/pkclist.c:258 +#, fuzzy, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" "Nenhum valor de confiança designado para %lu:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 +#, fuzzy msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Por favor decida quanto você confia neste usuário para\n" "verificar corretamente as chaves de outros usuários\n" @@ -1072,84 +1220,91 @@ msgstr "" " 4 = Eu confio completamente\n" " s = Mostrar mais informações\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr "" + +#: g10/pkclist.c:274 +#, fuzzy, c-format +msgid " %d = I do NOT trust\n" +msgstr "%08lX: Nós NÃO confiamos nesta chave\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr "" + +#: g10/pkclist.c:276 +#, fuzzy, c-format +msgid " %d = I trust fully\n" +msgstr "%s: não é um banco de dados de confiabilidade\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr "" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr "" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = voltar ao menu principal\n" -#: g10/pkclist.c:331 +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr "" + +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = sair\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Sua decisão? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +#, fuzzy +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Você realmente quer remover esta chave? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que levam a uma chave confiada plenamente:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Não foi possível encontrar uma rota de confiança válida para a chave.\n" -"Vamos ver se é possível designar alguns valores de confiança ausentes.\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "Nenhuma rota encontrada que leve a uma de nossas chaves.\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Nenhum certificado com confiança indefinida encontrado.\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Nenhum valor de confiança modificado.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "chave %08lX: a chave foi revogada!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Usa esta chave de qualquer modo? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "chave %08lX: a subchave foi revogada!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: a chave expirou\n" -#: g10/pkclist.c:519 -#, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: sem informação para calcular probabilidade de confiança\n" +#: g10/pkclist.c:442 +#, fuzzy, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr " Não há indicação de que a assinatura pertence ao dono.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: Nós NÃO confiamos nesta chave\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1158,15 +1313,15 @@ msgstr "" "%08lX: Não se tem certeza de que esta chave realmente pertence ao dono,\n" "mas é aceita de qualquer modo\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Esta chave provavelmente pertence ao dono\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Esta chave pertence a nós\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1178,172 +1333,200 @@ msgstr "" "sim à próxima pergunta\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "AVISO: Usando chave não confiável!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Isto pode significar que a assinatura é falsificada.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVISO: Esta subchave foi revogada pelo seu dono!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +#, fuzzy +msgid "Note: This key has been disabled.\n" +msgstr "Esta chave foi desativada" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Nota: Esta chave expirou!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVISO: Esta chave não está certificada com uma assinatura confiável!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Não há indicação de que a assinatura pertence ao dono.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVISO: Nós NÃO confiamos nesta chave!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " A assinatura é provavelmente uma FALSIFICAÇÃO.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVISO: Esta chave não está certificada com assinaturas suficientemente\n" " confiáveis!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Não se tem certeza de que a assinatura pertence ao dono.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignorado: %s\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ignorado: a chave pública já está presente\n" -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" +#: g10/pkclist.c:752 +#, fuzzy +msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Você não especificou um identificador de usuário. (pode-se usar \"-r\")\n" "\n" -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Digite o identificador de usuário: " +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Identificador de usuário inexistente.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "ignorado: chave pública já marcada como destinatário padrão\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "A chave pública está desativada.\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "ignorado: chave pública já marcada com --encrypt-to\n" +#: g10/pkclist.c:806 +#, fuzzy +msgid "skipped: public key already set\n" +msgstr "%s: ignorado: a chave pública já está presente\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "destinatário padrão desconhecido `%s'\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: erro na verificação da chave: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: ignorado: a chave pública está desativada\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "nenhum endereço válido\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "" + +#: g10/keygen.c:187 +#, fuzzy, c-format +msgid "preference %c%lu duplicated\n" +msgstr "ignorado `%s': duplicado\n" + +# muitas ou demais ??? +#: g10/keygen.c:192 +#, fuzzy, c-format +msgid "too many `%c' preferences\n" +msgstr "Preferências demais" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "Caractere inválido no nome\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "escrevendo auto-assinatura\n" # key binding ??? -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "escrevendo assinatura ligada a uma chave\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 #, fuzzy, c-format msgid "keysize invalid; using %u bits\n" msgstr "O tamanho de chave pedido é %u bits\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 #, fuzzy, c-format msgid "keysize rounded up to %u bits\n" msgstr "arredondado para %u bits\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Por favor selecione o tipo de chave desejado:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA e ElGamal (padrão)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (apenas assinatura)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (apenas criptografia)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (assinatura e criptografia)\n" -#: g10/keygen.c:643 +#: g10/keygen.c:784 #, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (assinatura e criptografia)\n" +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) DSA (apenas assinatura)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, fuzzy, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) ElGamal (apenas criptografia)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Sua opção? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Você realmente quer criar uma chave para assinatura e criptografia? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "" -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Opção inválida.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1356,23 +1539,23 @@ msgstr "" " tamanho padrão é 1024 bits\n" " tamanho máximo sugerido é 2048 bits\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Que tamanho de chave você quer? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permite apenas tamanhos de 512 a 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "tamanho muito pequeno; 768 é o valor mínimo permitido.\n" - -#: g10/keygen.c:708 +#: g10/keygen.c:852 #, fuzzy msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" msgstr "tamanho muito pequeno; 768 é o valor mínimo permitido.\n" +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "tamanho muito pequeno; 768 é o valor mínimo permitido.\n" + #. It is ridiculous and an annoyance to use larger key sizes! #. * GnuPG can handle much larger sizes; but it takes an eternity #. * to create such a key (but less than the time the Sirius @@ -1381,12 +1564,12 @@ msgstr "tamanho muito pequeno; 768 #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "tamanho muito grande; %d é o valor máximo permitido.\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1394,11 +1577,11 @@ msgstr "" "Tamanhos de chave maiores que 2048 não são recomendados\n" "porque o tempo de computação é REALMENTE longo!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Você tem certeza de que quer este tamanho de chave? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1406,21 +1589,17 @@ msgstr "" "Tudo bem, mas tenha em mente que a radiação de seu monitor e teclado também " "é vulnerável a ataques!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Você realmente precisa de uma chave tão grande? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "O tamanho de chave pedido é %u bits\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "arredondado para %u bits\n" -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1436,25 +1615,48 @@ msgstr "" " m = chave expira em n meses\n" " y = chave expira em n anos\n" -#: g10/keygen.c:812 +#: g10/keygen.c:951 +#, fuzzy +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Por favor especifique por quanto tempo a chave deve ser válida.\n" +" 0 = chave não expira\n" +" = chave expira em n dias\n" +" w = chave expira em n semanas\n" +" m = chave expira em n meses\n" +" y = chave expira em n anos\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "A chave é valida por? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +#, fuzzy +msgid "Signature is valid for? (0) " +msgstr "A chave é valida por? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "valor inválido\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" +#: g10/keygen.c:985 +#, fuzzy, c-format +msgid "%s does not expire at all\n" msgstr "A chave não expira nunca\n" #. print the date when the key expires -#: g10/keygen.c:828 -#, c-format -msgid "Key expires at %s\n" +#: g10/keygen.c:992 +#, fuzzy, c-format +msgid "%s expires at %s\n" msgstr "A chave expira em %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1462,11 +1664,11 @@ msgstr "" "Seu sistema não consegue mostrar datas além de 2038.\n" "Apesar disso, elas serão corretamente manipuladas até 2106.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Está correto (s/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1482,44 +1684,44 @@ msgstr "" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Nome completo: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Caractere inválido no nome\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "O nome não pode começar com um dígito\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "O nome deve ter pelo menos 5 caracteres\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Endereço de correio eletrônico: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Endereço eletrônico inválido\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Comentário: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Caractere inválido no comentário\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Você está usando o conjunto de caracteres `%s'.\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1530,28 +1732,28 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnCcEeOoSs" -#: g10/keygen.c:986 +#: g10/keygen.c:1151 #, fuzzy msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Muda (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Muda (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" msgstr "" -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1559,11 +1761,17 @@ msgstr "" "Você precisa de uma frase secreta para proteger sua chave.\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +#, fuzzy +msgid "passphrase not correctly repeated; try again" msgstr "A frase secreta não foi repetida corretamente; tente outra vez.\n" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1575,7 +1783,7 @@ msgstr "" "qualquer hora, usando este programa com a opção \"--edit-key\".\n" "\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1587,29 +1795,54 @@ msgstr "" "geração dos números primos; isso dá ao gerador de números aleatórios\n" "uma chance melhor de conseguir entropia suficiente.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "O par de chaves DSA terá 1024 bits.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Geração de chave cancelada.\n" -#: g10/keygen.c:1668 +#: g10/keygen.c:1883 g10/keygen.c:1963 #, fuzzy, c-format msgid "writing public key to `%s'\n" msgstr "escrevendo certificado público para `%s'\n" -#: g10/keygen.c:1669 +#: g10/keygen.c:1884 g10/keygen.c:1965 #, fuzzy, c-format msgid "writing secret key to `%s'\n" msgstr "escrevendo certificado privado para `%s'\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, fuzzy, c-format +msgid "no writable public keyring found: %s\n" +msgstr "chave %08lX: chave pública não encontrada: %s\n" + +#: g10/keygen.c:1958 +#, fuzzy, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "impossível bloquear chaveiro secreto: %s\n" + +#: g10/keygen.c:1972 +#, fuzzy, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "erro na escrita do chaveiro `%s': %s\n" + +#: g10/keygen.c:1979 +#, fuzzy, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "erro na escrita do chaveiro `%s': %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "chaves pública e privada criadas e assinadas.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +#, fuzzy +msgid "key marked as ultimately trusted.\n" +msgstr "Certificados que levam a uma chave confiada plenamente:\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" @@ -1617,12 +1850,12 @@ msgstr "" "Note que esta chave não pode ser usada para criptografia. Você pode usar\n" "o comando \"--edit-key\" para gerar uma chave secundária para esse fim.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "A geração de chaves falhou: %s\n" -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1630,7 +1863,7 @@ msgstr "" "a chave foi criada %lu segundo no futuro\n" "(viagem no tempo ou problema no relógio)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1638,306 +1871,361 @@ msgstr "" "a chave foi criada %lu segundos no futuro\n" "(viagem no tempo ou problema no relógio)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Realmente criar? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "" + +#: g10/encode.c:92 g10/encode.c:296 +#, fuzzy, c-format +msgid "`%s' already compressed\n" +msgstr "%lu chaves processadas\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: impossível abrir: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "erro na criação da frase secreta: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: AVISO: arquivo vazio\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "lendo de `%s'\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s criptografado para: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 -#, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: usuário não encontrado: %s\n" +#: g10/delkey.c:69 g10/export.c:141 +#, fuzzy, c-format +msgid "key `%s' not found: %s\n" +msgstr "usuário `%s' não encontrado: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, fuzzy, c-format +msgid "error reading keyblock: %s\n" +msgstr "erro na leitura de `%s': %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n" -#: g10/export.c:175 +#: g10/export.c:180 #, fuzzy, c-format msgid "key %08lX: not protected - skipped\n" msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, fuzzy, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "AVISO: nada exportado\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "entradas demais no cache pk - desativado\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "entradas demais no cache unk - desativado\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +#, fuzzy +msgid "[User id not found]" +msgstr "[usuário não encontrado]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "usando chave secundária %08lX ao invés de chave primária %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "chave %08lX: chave secreta sem chave pública - ignorada\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: usuário não encontrado\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "ignorando bloco do tipo %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu chaves processadas até agora\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr "Número total processado: %lu\n" -#: g10/import.c:206 +#: g10/import.c:232 #, fuzzy, c-format msgid " skipped new keys: %lu\n" msgstr " novas subchaves: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sem IDs de usuários: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " importados: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " não modificados: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " novos IDs de usuários: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " novas subchaves: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " novas assinaturas: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr " novas revogações de chaves: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " chaves secretas lidas: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr " chaves secretas importadas: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " chaves secretas não modificadas: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "chave %08lX: sem ID de usuário\n" -#: g10/import.c:403 +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "chave %08lX: aceito ID de usuário sem auto-assinatura '" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "chave %08lX: sem IDs de usuários válidos\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "isto pode ser causado por falta de auto-assinatura\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "chave %08lX: chave pública não encontrada: %s\n" -#: g10/import.c:421 +#: g10/import.c:479 #, fuzzy, c-format msgid "key %08lX: new key - skipped\n" msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, fuzzy, c-format +msgid "no writable keyring found: %s\n" +msgstr "impossível escrever chaveiro: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "escrevendo para `%s'\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" -msgstr "erro na escrita do chaveiro `%': %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "erro na escrita do chaveiro `%s': %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "chave %08lX: chave pública importada\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "chave %08lX: não corresponde à nossa cópia\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "chave %08lX: impossível localizar bloco de chaves original: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "chave %8lX: 1 novo ID de usuário\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "chave %08lX: %d novos IDs de usuários\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "chave %08lX: 1 nova assinatura\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "chave %08lX: %d novas assinaturas\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "chave %08lX: 1 nova subchave\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "chave %08lX: %d novas subchaves\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "chave %08lX: não modificada\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, fuzzy, c-format +msgid "no default secret keyring: %s\n" +msgstr "impossível bloquear chaveiro secreto: %s\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "chave %08lX: chave secreta importada\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "chave %08lX: já está no chaveiro secreto\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "chave %08lX: chave secreta não encontrada: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "chave %08lX: sem chave pública - impossível aplicar certificado\n" "de revogação\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "chave %08lX: certificado de revogação inválido: %s - rejeitado\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "chave %08lX: certificado de revogação importado\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "chave %08lX: nenhum ID de usuário para assinatura\n" -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" msgstr "chave %08lX: algoritmo de chave pública não suportado\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" msgstr "chave %08lX: auto-assinatura inválida\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "chave %08lX: sem subchave para ligação de chaves\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "chave %08lX: algoritmo de chave pública não suportado\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "chave %08lX: ligação de subchave inválida\n" -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "chave %08lX: aceito ID de usuário sem auto-assinatura '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "chave %08lX: ignorado ID de usuário '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "chave %08lX: subchave ignorada\n" @@ -1946,93 +2234,184 @@ msgstr "chave %08lX: subchave ignorada\n" #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "chave %08lX: assinatura não exportável (classe %02x) - ignorada\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "chave %08lX: certificado de revogação no local errado - ignorada\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "chave %08lX: certificado de revogação inválido: %s - ignorada\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "chave %08lX: detectado ID de usuário duplicado - unido\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "chave %08lX: certificado de revogação adicionado\n" -#: g10/import.c:1130 g10/import.c:1183 -#, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "chave %08lX: nossa cópia não tem auto-assinatura\n" +#: g10/import.c:1231 +#, fuzzy, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "chave %08lX: %d novas assinaturas\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[revogação]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[auto-assinatura]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 assinatura incorreta\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d assinaturas incorretas\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 assinatura não verificada por falta de chave\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d assinaturas não verificadas por falta de chaves\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 assinatura não verificada devido a um erro\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d assinaturas não verificadas devido a erros\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "1 ID de usuário sem auto-assinatura válida detectado\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d IDs de usuários sem auto-assinaturas válidas detectados\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "A chave é protegida.\n" + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +#, fuzzy +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Você tem certeza de que quer este tamanho de chave? " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr "" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 #, c-format -msgid "Already signed by key %08lX\n" +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" + +#: g10/keyedit.c:388 +#, fuzzy, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" msgstr "Já assinado pela chave %08lX\n" -#: g10/keyedit.c:319 +#: g10/keyedit.c:393 +#, fuzzy, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "Já assinado pela chave %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nada para assinar com a chave %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +#, fuzzy +msgid "This key has expired!" +msgstr "Nota: Esta chave expirou!\n" + +#: g10/keyedit.c:440 +#, fuzzy, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Esta chave não é protegida.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "" + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr "" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr "" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr "" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr "" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2040,42 +2419,70 @@ msgstr "" "Você tem certeza de que quer assinar esta chave com\n" "sua chave: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 +#, fuzzy msgid "" -"The signature will be marked as non-exportable.\n" "\n" +"The signature will be marked as non-exportable.\n" msgstr "" "A assinatura será marcada como não-exportável.\n" "\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +#, fuzzy +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"A assinatura será marcada como não-exportável.\n" +"\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Realmente assinar? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "assinatura falhou: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Esta chave não é protegida.\n" -#: g10/keyedit.c:426 +#: g10/keyedit.c:662 #, fuzzy msgid "Secret parts of primary key are not available.\n" msgstr "chave secreta não disponível" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "A chave é protegida.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossível editar esta chave: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2083,7 +2490,7 @@ msgstr "" "Digite a nova frase para esta chave secreta.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2091,422 +2498,567 @@ msgstr "" "Você não quer uma frase secreta - provavelmente isto é uma *má* idéia!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Você realmente quer fazer isso? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "movendo a assinatura da chave para o local correto\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "sair deste menu" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "save" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "gravar e sair" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "help" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "mostra esta ajuda" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "mostra impressão digital" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "list" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "lista chave e identificadores de usuários" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "seleciona ID de usuário N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "key" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "seleciona chave secundária N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "check" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "lista assinaturas" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "sign" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "assina a chave" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "assina a chave localmente" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +#, fuzzy +msgid "nrsign" +msgstr "sign" + +#: g10/keyedit.c:830 +#, fuzzy +msgid "sign the key non-revocably" +msgstr "assina a chave localmente" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "nrlsign" +msgstr "sign" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "sign the key locally and non-revocably" +msgstr "assina a chave localmente" + +#: g10/keyedit.c:832 msgid "debug" msgstr "debug" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "adiciona um novo ID de usuário" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "" + +#: g10/keyedit.c:834 +#, fuzzy +msgid "add a photo ID" +msgstr "adiciona um novo ID de usuário" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "remove ID de usuário" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "adiciona nova chave secundária" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "remove uma chave secundária" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "delsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "remove assinaturas" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "muda a data de validade" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "alterna entre listagem de chave secreta e pública" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" +#: g10/keyedit.c:846 +#, fuzzy +msgid "list preferences (expert)" msgstr "lista preferências" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +#, fuzzy +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +#, fuzzy +msgid "list preferences (verbose)" +msgstr "lista preferências" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "setpref" +msgstr "pref" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "set preference list" +msgstr "lista preferências" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updpref" +msgstr "pref" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updated preferences" +msgstr "lista preferências" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "muda a frase secreta" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "trust" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "muda os valores de confiança" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "revoga assinaturas" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "revoga uma chave secundária" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "disable" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "desativa uma chave" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "enable" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "ativa uma chave" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "impossível fazer isso em modo não-interativo\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, fuzzy, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "erro na leitura de `%s': %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Chave secreta disponível.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Comando> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "A chave secreta é necessária para fazer isto.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" msgstr "" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "A chave é protegida.\n" + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Realmente assinar todos os IDs de usuário? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Sugestão: Selecione os IDs de usuário para assinar\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "atualização do banco de dados de confiabilidade falhou: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Você precisa selecionar pelo menos um ID de usuário.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Você não pode remover o último ID de usuário!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Realmente remover todos os IDs de usuário selecionados? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Realmente remover este ID de usuário? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Você deve selecionar pelo menos uma chave.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Você realmente quer remover as chaves selecionadas? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Você realmente quer remover esta chave? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Você realmente quer revogar as chaves selecionadas? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Você realmente quer revogar esta chave? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +#, fuzzy +msgid "Really update the preferences for the selected user IDs? " +msgstr "Realmente remover todos os IDs de usuário selecionados? " + +#: g10/keyedit.c:1254 +#, fuzzy +msgid "Really update the preferences? " +msgstr "Realmente gerar os certificados de revogação? (s/N)" + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Salvar alterações? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Sair sem salvar? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "atualização falhou: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "atualização da chave secreta falhou: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "Chave não alterada, nenhuma atualização é necessária.\n" # help ou ajuda ??? -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Comando inválido (tente \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, fuzzy, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr "" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" msgstr "" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" msgstr "" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Esta chave foi desativada" -#: g10/keyedit.c:1116 +#: g10/keyedit.c:1539 #, fuzzy, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "chave %08lX: a subchave foi revogada!\n" +msgstr "rev! a subchave foi revogada: %s\n" -#: g10/keyedit.c:1119 +#: g10/keyedit.c:1542 #, fuzzy msgid "rev- faked revocation found\n" -msgstr " novas revogações de chaves: %lu\n" +msgstr "rev- revogações de chaves incorreta\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" msgstr "" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Você tem certeza de que quer este tamanho de chave? " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Deletar esta assinatura válida? (s/N/q)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Deletar esta assinatura inválida? (s/N/q)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Deletar esta assinatura desconhecida? (s/N/q)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Realmente remover esta auto-assinatura? (s/N)" -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "%d assinatura removida.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d assinaturas removidas.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Nada removido.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Por favor remova as seleções das chaves secretas.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Por favor selecione no máximo uma chave secundária.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Modificando a data de validade para uma chave secundária.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Modificando a data de validade para uma chave primária.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Você não pode modificar a data de validade de uma chave v3\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Nenhuma assinatura correspondente no chaveiro secreto\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +#, fuzzy +msgid "Please select exactly one user ID.\n" +msgstr "Você precisa selecionar pelo menos um ID de usuário.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Nenhum ID de usuário com índice %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Nenhuma chave secundária com índice %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "ID de usuário: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2515,203 +3067,344 @@ msgstr "" "\"\n" "assinado com sua chave %08lX em %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, fuzzy, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"assinado com sua chave %08lX em %s\n" + +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "Esta chave não é protegida.\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Você tem certeza de que quer este tamanho de chave? " + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Gerar um certificado de revogação para esta assinatura? (s/N)" #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Você assinou estes IDs de usuário:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 -#, c-format -msgid " signed by %08lX at %s\n" +#: g10/keyedit.c:2504 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s%s\n" msgstr " assinado por %08lX em %s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " revogado por %08lX em %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Você está prestes a revogar estas assinaturas:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " assinado por %08lX em %s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " msgstr "Realmente gerar os certificados de revogação? (s/N)" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "nenhuma chave secreta\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "armadura inválida" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" -#: g10/keylist.c:178 +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 #, fuzzy -msgid "revoked" -msgstr "revkey" +msgid "Signature policy: " +msgstr "assinatura %s de: %s\n" + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "AVISO: dados de notação inválidos encontrados\n" + +#. This is UTF8 +#: g10/keylist.c:120 +#, fuzzy +msgid "Signature notation: " +msgstr "Notação: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 +#: g10/keylist.c:423 g10/mainproc.c:856 #, fuzzy, c-format msgid " [expires: %s]" msgstr "A chave expira em %s\n" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Impressão digital:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Impressão digital:" + +#: g10/keylist.c:899 +#, fuzzy +msgid " Key fingerprint =" +msgstr " Impressão digital:" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "dados criptografados com %s\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "criptografado com algoritmo desconhecido %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "a chave pública é %08lX\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "dados criptografados com chave pública: DEK válido\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "criptografado com chave %u-bit %s, ID %08lX, criada em %s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "criptografado com chave %s, ID %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "nenhuma chave secreta para descriptografia disponível\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "descriptografia de chave pública falhou: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, fuzzy, c-format +msgid "assuming %s encrypted data\n" +msgstr "dados criptografados com %s\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "descriptografia correta\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "CUIDADO: a mensagem criptografada foi manipulada!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "descriptografia falhou: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: o remetente solicitou \"apenas-para-seus-olhos\"\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "nome de arquivo original='%.*s'\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revogação isolada - use \"gpg --import\" para aplicá-la\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "AVISO: dados de notação inválidos encontrados\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Notação: " -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Política: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "verificação de assinatura suprimida\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +#, fuzzy +msgid "can't handle these multiple signatures\n" +msgstr "fazer uma assinatura separada" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Assinatura feita em %.*s usando %s, ID da chave %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "Assinatura INCORRETA de \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +#, fuzzy +msgid "Expired signature from \"" +msgstr "Assinatura correta de \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Assinatura correta de \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " ou \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossível verificar assinatura: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +#, fuzzy +msgid "not a detached signature\n" +msgstr "fazer uma assinatura separada" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "assinatura isolada da classe 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "formato de assinatura antigo (PGP2.x)\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "pacote raiz inválido detectado em proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossível desativar core dumps: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Algoritmos experimentais não devem ser usados!\n" -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +#, fuzzy +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "" "este algoritmo de criptografia é depreciado; por favor use algum\n" "algoritmo padrão!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossível manipular algoritmo de chave pública %d\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpacote do tipo %d tem bit crítico ligado\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" msgstr "" -#: g10/passphrase.c:204 +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "" -#: g10/hkp.c:158 g10/passphrase.c:223 +#: g10/passphrase.c:511 +#, fuzzy, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "algoritmo de proteção %d não é suportado\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 #, fuzzy, c-format msgid "can't connect to `%s': %s\n" msgstr "impossível abrir `%s': %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (ID principal da chave %08lX)" -#: g10/passphrase.c:294 +#: g10/passphrase.c:641 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" @@ -2720,41 +3413,38 @@ msgid "" msgstr "" "\n" "Você precisa de uma frase secreta para desbloquear a chave secreta do\n" -"usuário: \"" +"usuário: \"%.*s\"\n" +"%u-bit %s chave, ID %08lX, criada %s%s\n" -#: g10/passphrase.c:315 +#: g10/passphrase.c:662 #, fuzzy msgid "Enter passphrase\n" msgstr "Digite a frase secreta: " -#: g10/passphrase.c:317 +#: g10/passphrase.c:664 #, fuzzy msgid "Repeat passphrase\n" msgstr "Repita a frase secreta: " -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 #, fuzzy msgid "passphrase too long\n" msgstr "linha muito longa\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" msgstr "" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" msgstr "" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" msgstr "" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2764,20 +3454,20 @@ msgstr "" "Você precisa de uma frase secreta para desbloquear a chave secreta do\n" "usuário: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "chave de %u-bit/%s, ID %08lX, criada em %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "impossível pedir senha em modo não-interativo\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Digite a frase secreta: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Repita a frase secreta: " @@ -2785,147 +3475,193 @@ msgstr "Repita a frase secreta: " msgid "data not saved; use option \"--output\" to save it\n" msgstr "dados não salvos; use a opção \"--output\" para salvá-los\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, fuzzy, c-format +msgid "error creating `%s': %s\n" +msgstr "erro na leitura de `%s': %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" msgstr "Assinatura separada.\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Por favor digite o nome do arquivo de dados: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "lendo de \"stdin\" ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +#, fuzzy +msgid "no signed data\n" +msgstr "no dados assinados\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossível abrir dados assinados `%s'\n" -#: g10/pubkey-enc.c:135 -#, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +#: g10/pubkey-enc.c:100 +#, fuzzy, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "destinatário anônimo; tentando chave secreta %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "certo, nós somos o destinatário anônimo.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "codificação antiga do DEK não suportada\n" -#: g10/pubkey-enc.c:216 +#: g10/pubkey-enc.c:177 #, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" +msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "algoritmo de proteção %d não é suportado\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "NOTA: algoritmo de criptografia %d não encontrado nas preferências\n" -#: g10/pubkey-enc.c:261 +#: g10/pubkey-enc.c:242 #, fuzzy, c-format msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "NOTA: chave de assinatura expirou %s\n" +msgstr "NOTA: chave secreta %08lX expirou %s\n" -#: g10/hkp.c:62 -#, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, fuzzy, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "impossível escrever para o chaveiro: %s\n" -#: g10/hkp.c:75 +#: g10/hkp.c:94 #, fuzzy, c-format msgid "can't get key from keyserver: %s\n" msgstr "impossível escrever para o chaveiro: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s não é um mapa de caracteres válido\n" - -#: g10/hkp.c:182 +#: g10/hkp.c:171 #, fuzzy, c-format msgid "error sending to `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" msgstr "" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" msgstr "" -#: g10/seckey-cert.c:89 +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "" + +#: g10/hkp.c:521 +#, fuzzy, c-format +msgid "can't search keyserver: %s\n" +msgstr "impossível escrever para o chaveiro: %s\n" + +#: g10/seckey-cert.c:53 #, fuzzy msgid "secret key parts are not available\n" msgstr "chave secreta não disponível" -#: g10/seckey-cert.c:95 -#, c-format -msgid "protection algorithm %d is not supported\n" +#: g10/seckey-cert.c:59 +#, fuzzy, c-format +msgid "protection algorithm %d%s is not supported\n" msgstr "algoritmo de proteção %d não é suportado\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" +#: g10/seckey-cert.c:215 +#, fuzzy +msgid "Invalid passphrase; please try again" msgstr "Frase secreta inválida; por favor tente novamente ...\n" -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "" + +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVISO: Chave fraca detectada - por favor mude a frase secreta novamente.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "esta é uma chave ElGamal gerada pelo PGP que NÃO é segura para assinaturas!\n" -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "a chave pública é %lu segundo mais nova que a assinatura\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "a chave pública é %lu segundos mais nova que a assinatura\n" -#: g10/sig-check.c:306 -#, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "NOTA: chave de assinatura expirou %s\n" +#: g10/sig-check.c:237 +#, fuzzy, c-format +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "NOTA: chave de assinatura %08lX expirou %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "assumindo assinatura incorreta devido a um bit crítico desconhecido\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" + +#: g10/sign.c:274 +#, fuzzy, c-format +msgid "checking created signature failed: %s\n" +msgstr "leitura de registro de assinatura falhou: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "assinatura %s de: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "AVISO: `%s' é um arquivo vazio\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "impossível criar %s: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "assinando:" -#: g10/sign.c:583 -#, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "AVISO: `%s' é um arquivo vazio\n" +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:953 +#, fuzzy, c-format +msgid "%s encryption will be used\n" +msgstr "descriptografia falhou: %s\n" #: g10/textfilter.c:134 #, c-format @@ -2937,425 +3673,209 @@ msgstr "imposs msgid "input line longer than %d characters\n" msgstr "linha de entrada maior que %d caracteres\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "banco de dados de confiabilidade rec %lu: lseek falhou: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "banco de dados de confiabilidade rec %lu: escrita falhou (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "transação de banco de dados de confiabilidade muito grande\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: impossível acessar: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: diretório inexistente!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: impossível criar: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: impossível criar trava\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, fuzzy, c-format +msgid "%s: can't make lock\n" +msgstr "%s: impossível criar trava\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: impossível criar: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: falha ao criar registro de versão: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: banco de dados de confiabilidade inválido criado\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: banco de dados de confiabilidade criado\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: banco de dados de confiabilidade inválido\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: falha ao criar tabela de \"hash\": %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: erro atualizando registro de versão: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: erro lendo registro de versão: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: erro escrevendo registro de versão: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "banco de dados de confiabilidade: lseek falhou: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "banco de dados de confiabilidade: leitura falhou (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: não é um banco de dados de confiabilidade\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: registro de versão com recnum %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versão de arquivo inválida %d\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: erro lendo registro livre: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: erro escrevendo registro de diretório: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: falha ao zerar um registro: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: falha ao anexar um registro: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "O banco de dados de confiabilidade está danificado; por favor rode\n" "\"gpg --fix-trust-db\".\n" -#: g10/trustdb.c:169 -#, c-format -msgid "trust record %lu, req type %d: read failed: %s\n" -msgstr "registro de confiança %lu, tipo req %d: falha na leitura: %s\n" - -#: g10/trustdb.c:184 -#, c-format -msgid "trust record %lu, type %d: write failed: %s\n" -msgstr "registro de confiança %lu, tipo %d: escrita falhou: %s\n" - -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "registro de confiança %lu: remoção falhou: %s\n" - -#: g10/trustdb.c:212 -#, c-format -msgid "trustdb: sync failed: %s\n" -msgstr "banco de dados de confiabilidade: sincronização falhou: %s\n" - -#: g10/trustdb.c:377 -#, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "erro lendo registro de diretório para LID %lu: %s\n" - -#: g10/trustdb.c:384 -#, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lid %lu: registro de diretório esperado, tipo %d recebido\n" - -#: g10/trustdb.c:389 -#, c-format -msgid "no primary key for LID %lu\n" -msgstr "nenhuma chave primária para LID %lu\n" - -#: g10/trustdb.c:394 -#, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "erro lendo chave primária para LID %lu: %s\n" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record falhou: %s\n" - -#: g10/trustdb.c:474 +#: g10/trustdb.c:200 #, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" +msgid "`%s' is not a valid long keyID\n" msgstr "%s não é um mapa de caracteres válido\n" -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" +#: g10/trustdb.c:235 +#, fuzzy, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "chave %08lX: aceita como chave confiável.\n" + +#: g10/trustdb.c:274 +#, fuzzy, c-format +msgid "key %08lX occurs more than once in the trustdb\n" msgstr "" "chave %08lX: impossível colocá-la no banco de dados de confiabilidade\n" -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "chave %08lX: pedido de registro falhou\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "chave %08lX: já está na tabela de chaves confiáveis\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "chave %08lX: aceita como chave confiável.\n" - -#: g10/trustdb.c:547 +#: g10/trustdb.c:290 #, fuzzy, c-format msgid "key %08lX: no public key for trusted key - skipped\n" msgstr "chave %08lX: chave secreta sem chave pública - ignorada\n" -#: g10/trustdb.c:566 +#: g10/trustdb.c:332 #, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "NOTA: a chave secreta %08lX NÃO está protegida.\n" +msgid "trust record %lu, req type %d: read failed: %s\n" +msgstr "registro de confiança %lu, tipo req %d: falha na leitura: %s\n" -#: g10/trustdb.c:585 +#: g10/trustdb.c:338 +#, fuzzy, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "registro de confiança %lu: remoção falhou: %s\n" + +#: g10/trustdb.c:353 #, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "chave %08lX: chaves secreta e pública não são correspondentes\n" +msgid "trust record %lu, type %d: write failed: %s\n" +msgstr "registro de confiança %lu, tipo %d: escrita falhou: %s\n" -#: g10/trustdb.c:598 +#: g10/trustdb.c:368 #, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "enumeração de chaves secretas falhou: %s\n" +msgid "trustdb: sync failed: %s\n" +msgstr "banco de dados de confiabilidade: sincronização falhou: %s\n" -#: g10/trustdb.c:994 +#: g10/trustdb.c:468 +#, fuzzy +msgid "no need for a trustdb check\n" +msgstr "%s: não é um banco de dados de confiabilidade\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 +#, fuzzy, c-format +msgid "next trustdb check due at %s\n" +msgstr "inserção de registro de confiança falhou: %s\n" + +#: g10/trustdb.c:779 +#, fuzzy +msgid "checking the trustdb\n" +msgstr "muda os valores de confiança" + +#: g10/trustdb.c:933 +#, fuzzy, c-format +msgid "public key %08lX not found: %s\n" +msgstr "chave pública não encontrada" + +#: g10/trustdb.c:1515 #, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "chave %08lX.%lu: Ligação de subchave válida\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "chave %08lX.%lu: Ligação de subchave inválida: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "chave %08lX.%lu: Revogação de chave válida\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "chave %08lX.%lu: Revogação de chave inválida: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "chave %08lX.%lu: Revogação de subchave válida\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Auto-assinatura válida" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Auto-assinatura inválida" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" +msgid "public key of ultimately trusted key %08lX not found\n" msgstr "" -"Revogação válida de ID de usuário ignorada devido a nova auto-assinatura" -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Revogação de ID de usuário válida" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Revogação de ID de usuário inválida" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Certificado de revogação válido" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Certificado correto" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Certificado de revogação inválido" - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Certificado inválido" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 +#: g10/trustdb.c:1593 #, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "registro de assinatura %lu[%d] aponta para registro errado.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "certificado duplicado - removido" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir falhou: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lid ?: inserção falhou: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lid %lu: inserção falhou: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lid %lu: inserido\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "erro lendo registro de diretório: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu chaves processadas\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu chaves com erros\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu chaves inseridas\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "enumeração de blocos de chaves falhou: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lid %lu: registro de diretório sem chave - ignorado\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu devido a novas chaves públicas\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu chaves ignoradas\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu chaves atualizadas\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Ooops, nenhuma chave\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Ooops, nenhum ID de usuário\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: busca de registro de diretório falhou: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "chave %08lX: inserção de registro de confiança falhou: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "chave %08lX.%lu: inserida no banco de dados de confiabilidade\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -"chave %08lX.%lu: criada no futuro (viagem no tempo ou problema no relogio)\n" -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "chave %08lX.%lu: expirou em %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "chave %08lX.%lu: verificação de confiança falhou: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "usuário `%s' não encontrado: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "problemas na procura de `%s' no banco de dados de confiabilidade: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "" -"usuário `%s' não encontrado no banco de dados de confiabilidade - inserindo\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "falha ao colocar `%s' no banco de dados de confiabilidade: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "AVISO: ainda é impossível manipular registros de preferências longos\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3365,45 +3885,33 @@ msgstr "" "Por favor lembre-se de que o arquivo com a assinatura (.sig ou .asc)\n" "deve ser o primeiro arquivo dado na linha de comando.\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "linha %u muito longa ou sem LF\n" -#: g10/ringedit.c:296 -#, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: impossível criar chaveiro: %s\n" +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"a chave não está marcada como insegura - impossível usá-la com o pseudo " +"RNG!\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: chaveiro criado\n" +#: g10/skclist.c:138 +#, fuzzy, c-format +msgid "skipped `%s': duplicated\n" +msgstr "ignorado `%s': duplicado\n" -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "AVISO: existem 2 arquivos com informações confidenciais.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s é o não modificado\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s é o novo\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Por favor conserte este possível furo de segurança\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "ignorado `%s': %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +#, fuzzy +msgid "skipped: secret key already present\n" +msgstr "ignorado: a chave secreta já está presente\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3422,93 +3930,103 @@ msgstr "Arquivo `%s' j msgid "Overwrite (y/N)? " msgstr "Sobrescrever (s/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: sufixo desconhecido\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Digite novo nome de arquivo" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "escrevendo em \"stdout\"\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "assumindo dados assinados em `%s'\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: novo arquivo de opções criado\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: impossível criar diretório: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: diretório criado\n" -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "" "você deve reiniciar o GnuPG, para que ele possa ler o novo arquivo\n" "de opções\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "criptografado com algoritmo desconhecido %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "dados criptografados com %s\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "AVISO: A mensagem foi criptografada com uma chave fraca na criptografia\n" "simétrica.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +#, fuzzy +msgid "problem handling encrypted packet\n" +msgstr "eliminar o campo keyid dos pacotes criptografados\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "chave fraca criada - tentando novamente\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "impossível evitar chave fraca para criptografia simétrica;\n" "%d tentativas!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "há uma chave secreta para esta chave pública!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "use a opção \"--delete-secret-key\" para deletá-la antes.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "impossível fazer isso em modo não-interativo sem \"--yes\"\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Deletar esta chave do chaveiro? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "Esta é uma chave secreta! - realmente deletar? " +#: g10/delkey.c:156 +#, fuzzy, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "enumeração de blocos de chaves falhou: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, fuzzy, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "há uma chave secreta para esta chave pública!\n" + +#: g10/delkey.c:196 +#, fuzzy +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "use a opção \"--delete-secret-key\" para deletá-la antes.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3520,22 +4038,30 @@ msgstr "" "nada a ver com a rede de certificados (implicitamente criada)." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "Se você quiser usar esta chave revogada assim mesmo, responda \"sim\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Se você quiser usar esta chave não confiável assim mesmo, responda \"sim\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Digite o ID de usuário do destinatário para o qual você quer enviar a\n" "mensagem." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3573,7 +4099,7 @@ msgstr "" "este é o motivo pelo qual a chave ElGamal apenas para criptografia não está\n" "disponível neste menu." -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3584,16 +4110,16 @@ msgstr "" "porque não são suportadas por todos os programas e assinaturas criadas com\n" "elas são grandes e sua verificação é lenta." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Digite o tamanho da chave" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Responda \"sim\" ou \"não\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3605,19 +4131,19 @@ msgstr "" "reação a erros - o sistema tentará interpretar o valor dado como um " "intervalo." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Digite o nome do possuidor da chave" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "por favor digite um endereço de email (opcional mas recomendado)" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Por favor digite um comentário (opcional)" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3631,15 +4157,56 @@ msgstr "" "O para continuar a geração da chave.\n" "S para interromper a geração da chave." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Responda \"sim\" (ou apenas \"s\") se quiser gerar a subchave." -#: g10/helptext.c:164 +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" + +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Responda \"sim\" se quiser assinar TODOS os IDs de usuário" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3647,11 +4214,11 @@ msgstr "" "Responda \"sim\" se quiser realmente remover este ID de usuário.\n" "Todos os certificados também serão perdidos!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Responda \"sim\" se quiser remover a subchave" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3661,7 +4228,7 @@ msgstr "" "remover esta assinatura porque ela pode ser importante para estabelecer\n" "uma conexão de confiança à chave ou a outra chave certificada por esta." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3673,13 +4240,13 @@ msgstr "" "porque a chave desta assinatura pode estabelecer uma conexão de confiança\n" "através de outra chave já certificada." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "A assinatura não é válida. Faz sentido removê-la de seu chaveiro." -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3692,27 +4259,33 @@ msgstr "" "não consiga mais usar esta chave. Faça isto apenas se por alguma\n" "razão esta auto-assinatura não for válida e há uma segunda disponível." -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" + +#: g10/helptext.c:238 +#, fuzzy +msgid "Please enter the passhrase; this is a secret sentence \n" msgstr "Por favor digite a frase secreta" -#: g10/helptext.c:209 +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Por favor repita a última frase secreta, para ter certeza do que você " "digitou." -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "Dê o nome para o arquivo ao qual a assinatura se aplica" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Responda \"sim\" se quiser sobrescrever o arquivo" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3720,14 +4293,14 @@ msgstr "" "Por favor digite um novo nome de arquivo. Se você apenas apertar RETURN o\n" "arquivo padrão (que é mostrado em colchetes) será usado." -#: g10/helptext.c:229 +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3736,25 +4309,375 @@ msgid "" " this is normally used to mark an email address invalid.\n" msgstr "" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Nenhuma ajuda disponível" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Nenhuma ajuda disponível para `%s'" +#: g10/keydb.c:177 +#, fuzzy, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "erro na escrita do chaveiro `%s': %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "" + +#: g10/keydb.c:197 +#, fuzzy, c-format +msgid "keyring `%s' created\n" +msgstr "%s: chaveiro criado\n" + +#: g10/keydb.c:587 +#, fuzzy, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "%s: falha ao criar tabela de \"hash\": %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "AVISO: existem 2 arquivos com informações confidenciais.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s é o não modificado\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s é o novo\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Por favor conserte este possível furo de segurança\n" + +#: g10/keyring.c:1337 +#, fuzzy, c-format +msgid "checking keyring `%s'\n" +msgstr "erro na escrita do chaveiro `%s': %s\n" + +#: g10/keyring.c:1368 +#, fuzzy, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "%lu chaves processadas até agora\n" + +#: g10/keyring.c:1379 +#, fuzzy, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "listar as chaves e as assinaturas" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: chaveiro criado\n" + +#, fuzzy +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Você tem certeza de que quer este tamanho de chave? " + +#, fuzzy +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr "Você tem certeza de que quer este tamanho de chave? " + +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "Realmente assinar? " + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "chave %08lX: nossa cópia não tem auto-assinatura\n" + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Você realmente precisa de uma chave tão grande? " + +#~ msgid " signed by %08lX at %s\n" +#~ msgstr " assinado por %08lX em %s\n" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key id-usuário" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key id-usuário" + +#, fuzzy +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key id-usuário" + +#~ msgid "Enter the user ID: " +#~ msgstr "Digite o identificador de usuário: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "ignorado: chave pública já marcada com --encrypt-to\n" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "WARNING: This is a PGP2-style key\n" +#~ msgstr "AVISO: `%s' é um arquivo vazio\n" + +#~ msgid "sSmMqQ" +#~ msgstr "sSmMqQ" + +#, fuzzy +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s não é um mapa de caracteres válido\n" + +#, fuzzy +#~ msgid "duplicate (short) key ID %08lX\n" +#~ msgstr "a chave pública é %08lX\n" + +#, fuzzy +#~ msgid "%lu key(s) to refresh\n" +#~ msgstr "\t%lu chaves com erros\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NOMES]|verificar o banco de dados de confiabilidade" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Não foi possível encontrar uma rota de confiança válida para a chave.\n" +#~ "Vamos ver se é possível designar alguns valores de confiança ausentes.\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "Nenhuma rota encontrada que leve a uma de nossas chaves.\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "Nenhum certificado com confiança indefinida encontrado.\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Nenhum valor de confiança modificado.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "%08lX: sem informação para calcular probabilidade de confiança\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: erro na verificação da chave: %s\n" + +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "entradas demais no cache unk - desativado\n" + +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "atualização do banco de dados de confiabilidade falhou: %s\n" + +#~ msgid "assuming bad MDC due to an unknown critical bit\n" +#~ msgstr "assumindo MDC incorreto devido a um bit crítico desconhecido\n" + +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "erro lendo registro de diretório para LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lid %lu: registro de diretório esperado, tipo %d recebido\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "nenhuma chave primária para LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "erro lendo chave primária para LID %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record falhou: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "chave %08lX: pedido de registro falhou\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "chave %08lX: já está na tabela de chaves confiáveis\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "NOTA: a chave secreta %08lX NÃO está protegida.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "chave %08lX: chaves secreta e pública não são correspondentes\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "enumeração de chaves secretas falhou: %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "chave %08lX.%lu: Ligação de subchave válida\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "chave %08lX.%lu: Ligação de subchave inválida: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "chave %08lX.%lu: Revogação de chave válida\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "chave %08lX.%lu: Revogação de chave inválida: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "chave %08lX.%lu: Revogação de subchave válida\n" + +#~ msgid "Good self-signature" +#~ msgstr "Auto-assinatura válida" + +#~ msgid "Invalid self-signature" +#~ msgstr "Auto-assinatura inválida" + +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "" +#~ "Revogação válida de ID de usuário ignorada devido a nova auto-assinatura" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Revogação de ID de usuário válida" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Revogação de ID de usuário inválida" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Certificado de revogação válido" + +#~ msgid "Good certificate" +#~ msgstr "Certificado correto" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Certificado de revogação inválido" + +#~ msgid "Invalid certificate" +#~ msgstr "Certificado inválido" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "registro de assinatura %lu[%d] aponta para registro errado.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "certificado duplicado - removido" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir falhou: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: inserção falhou: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: inserção falhou: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: inserido\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "erro lendo registro de diretório: %s\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu chaves inseridas\n" + +#~ msgid "enumerate keyblocks failed: %s\n" +#~ msgstr "enumeração de blocos de chaves falhou: %s\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: registro de diretório sem chave - ignorado\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr "\t%lu devido a novas chaves públicas\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu chaves ignoradas\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu chaves atualizadas\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Ooops, nenhuma chave\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Ooops, nenhum ID de usuário\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: busca de registro de diretório falhou: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "chave %08lX: inserção de registro de confiança falhou: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "chave %08lX.%lu: inserida no banco de dados de confiabilidade\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "chave %08lX.%lu: criada no futuro (viagem no tempo ou problema no " +#~ "relogio)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "chave %08lX.%lu: expirou em %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "chave %08lX.%lu: verificação de confiança falhou: %s\n" + +#~ msgid "user '%s' not found: %s\n" +#~ msgstr "usuário `%s' não encontrado: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "" +#~ "problemas na procura de `%s' no banco de dados de confiabilidade: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "" +#~ "usuário `%s' não encontrado no banco de dados de confiabilidade - " +#~ "inserindo\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "falha ao colocar `%s' no banco de dados de confiabilidade: %s\n" + +#, fuzzy +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) ElGamal (assinatura e criptografia)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "" +#~ "Você realmente quer criar uma chave para assinatura e criptografia? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: usuário não encontrado: %s\n" + #~ msgid "certificate read problem: %s\n" #~ msgstr "erro de leitura do certificado: %s\n" +#~ msgid "no default public keyring\n" +#~ msgstr "sem chaveiro público padrão\n" + +#~ msgid "can't lock keyring `%s': %s\n" +#~ msgstr "impossível bloquear chaveiro `%s': %s\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: usuário não encontrado\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "" +#~ "AVISO: ainda é impossível manipular registros de preferências longos\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: impossível criar chaveiro: %s\n" + +#, fuzzy +#~ msgid "invalid" +#~ msgstr "armadura inválida" + +#, fuzzy +#~ msgid "revoked" +#~ msgstr "revkey" + #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "chave RSA não pode ser usada nesta versão\n" @@ -3764,38 +4687,15 @@ msgstr "Nenhuma ajuda dispon #~ msgid "No user ID for key\n" #~ msgstr "Nenhum identificador de usuário para chave\n" -#~ msgid "no default public keyring\n" -#~ msgstr "sem chaveiro público padrão\n" - -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "impossível bloquear chaveiro `%s': %s\n" - -#~ msgid "error writing keyring `%s': %s\n" -#~ msgstr "erro na escrita do chaveiro `%s': %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n" - -#~ msgid "%s: user not found\n" -#~ msgstr "%s: usuário não encontrado\n" +#~ msgid "no secret key for decryption available\n" +#~ msgstr "nenhuma chave secreta para descriptografia disponível\n" #~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" +#~ "RSA keys are deprecated; please consider creating a new key and use this " +#~ "key in the future\n" #~ msgstr "" -#~ "Chaves RSA não são recomendáveis; por favor considere criar uma nova chave e " -#~ "usá-la no futuro\n" - -#~ msgid "not processed" -#~ msgstr "não processado(s)" - -#~ msgid "assuming bad MDC due to an unknown critical bit\n" -#~ msgstr "assumindo MDC incorreto devido a um bit crítico desconhecido\n" - -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" -#~ msgstr "" -#~ "a chave não está marcada como insegura - impossível usá-la com o pseudo " -#~ "RNG!\n" +#~ "Chaves RSA não são recomendáveis; por favor considere criar uma nova " +#~ "chave e usá-la no futuro\n" #~ msgid "set debugging flags" #~ msgstr "definir parâmetros de depuração" @@ -3832,7 +4732,8 @@ msgstr "Nenhuma ajuda dispon #~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" #~ msgstr "" -#~ "NOTA: assinatura rec %lu[%d] está na lista de sugestões de %lu mas não está\n" +#~ "NOTA: assinatura rec %lu[%d] está na lista de sugestões de %lu mas não " +#~ "está\n" #~ " marcada\n" #~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" @@ -3865,10 +4766,6 @@ msgstr "Nenhuma ajuda dispon #~ msgid "lid %lu: can't get keyblock: %s\n" #~ msgstr "lid %lu: impossível pegar bloco de chaves: %s\n" -# muitas ou demais ??? -#~ msgid "Too many preferences" -#~ msgstr "Preferências demais" - #~ msgid "Too many preference items" #~ msgstr "Muitos itens de preferência" @@ -3911,6 +4808,9 @@ msgstr "Nenhuma ajuda dispon #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "impossível bloquear chaveiro `%': %s\n" +#~ msgid "error writing keyring `%': %s\n" +#~ msgstr "erro na escrita do chaveiro `%': %s\n" + #~ msgid "can't open file: %s\n" #~ msgstr "impossível abrir arquivo: %s\n" @@ -3923,12 +4823,6 @@ msgstr "Nenhuma ajuda dispon #~ msgid "can't write keyblock: %s\n" #~ msgstr "impossível escrever bloco de chaves: %s\n" -#~ msgid "can't lock secret keyring: %s\n" -#~ msgstr "impossível bloquear chaveiro secreto: %s\n" - -#~ msgid "can't write keyring: %s\n" -#~ msgstr "impossível escrever chaveiro: %s\n" - #, fuzzy #~ msgid "encrypted message is valid\n" #~ msgstr "algoritmo de \"digest\" selecionado não é válido\n" @@ -3968,9 +4862,6 @@ msgstr "Nenhuma ajuda dispon #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: leitura de registro de preferências falhou: %s\n" -#~ msgid "lid %lu: read sig record failed: %s\n" -#~ msgstr "lid %lu: leitura de registro de assinatura falhou: %s\n" - #, fuzzy #~ msgid "user '%s' read problem: %s\n" #~ msgstr "erro de leitura do usuário `%s': %s\n" @@ -4013,9 +4904,6 @@ msgstr "Nenhuma ajuda dispon #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Oops: agora a chave está no banco de dados de confiabilidade???\n" -#~ msgid "insert trust record failed: %s\n" -#~ msgstr "inserção de registro de confiança falhou: %s\n" - #~ msgid "Hmmm, public key lost?" #~ msgstr "Hmmm, chave pública perdida?" diff --git a/po/ru.po b/po/ru.po deleted file mode 100644 index 283973593..000000000 --- a/po/ru.po +++ /dev/null @@ -1,4097 +0,0 @@ -# I finished the translation without looking at the contrib directory of -# GPG site. Werner enlightened me about two previous translations and I -# dared to look in them to correct my translation of questionable phrases. -# So I'd like to thank: -# Artem Belevich -# Alexey Morozov -# Michael Sobolev , 1998 -# Alexey Vyskubov , 1998 -# QingLong (couldn't send an email to let you know) -msgid "" -msgstr "" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"Content-Type: text/plain; charset=\n" -"Date: 1998-01-26 22:08:36+0100\n" -"From: Gregory Steuck \n" -"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " -"--keyword=_ --keyword=N_ --files-from=./POTFILES.in\n" -"Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " -"cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " -"g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " -"g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c " -"g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c\n" - -#: util/miscutil.c:278 util/miscutil.c:307 -msgid "yes" -msgstr "ÄÁ(y)" - -#: util/miscutil.c:279 util/miscutil.c:310 -msgid "yY" -msgstr "yY" - -#: util/miscutil.c:280 util/miscutil.c:308 -msgid "no" -msgstr "" - -#: util/miscutil.c:281 util/miscutil.c:311 -msgid "nN" -msgstr "" - -#: g10/keyedit.c:575 util/miscutil.c:309 -msgid "quit" -msgstr "×ÙÈÏÄ" - -#: util/miscutil.c:312 -msgid "qQ" -msgstr "" - -#: util/errors.c:55 -#, fuzzy -msgid "general error" -msgstr "ïÂÝÁÑ ÏÛÉÂËÁ" - -#: util/errors.c:56 -#, fuzzy -msgid "unknown packet type" -msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÐÁËÅÔÁ" - -#: util/errors.c:57 -#, fuzzy -msgid "unknown version" -msgstr "îÅÉÚ×ÅÓÔÎÁÑ ×ÅÒÓÉÑ" - -#: util/errors.c:58 -#, fuzzy -msgid "unknown pubkey algorithm" -msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÁÌÇÏÒÉÔÍ ÛÉÆÒÏ×ÁÎÉÑ Ó ÏÔËÒÙÔÙÍ ËÌÀÞÏÍ" - -#: util/errors.c:59 -#, fuzzy -msgid "unknown digest algorithm" -msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÁÌÇÏÒÉÔÍ ÇÅÎÅÒÁÃÉÉ ÄÁÊÄÖÅÓÔÁ" - -#: util/errors.c:60 -#, fuzzy -msgid "bad public key" -msgstr "ðÌÏÈÏÊ ÏÔËÒÙÔÙÊ ËÌÀÞ" - -#: util/errors.c:61 -#, fuzzy -msgid "bad secret key" -msgstr "ðÌÏÈÏÊ ÓÅËÒÅÔÎÙÊ ËÌÀÞ" - -#: util/errors.c:62 -#, fuzzy -msgid "bad signature" -msgstr "ðÌÏÈÁÑ ÐÏÄÐÉÓØ" - -#: util/errors.c:63 -#, fuzzy -msgid "checksum error" -msgstr "îÅÓÏ×ÐÁÄÅÎÉÅ ËÏÎÔÒÏÌØÎÏÊ ÓÕÍÍÙ" - -#: util/errors.c:64 -#, fuzzy -msgid "bad passphrase" -msgstr "îÅ×ÅÒÎÁÑ \"ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ\"" - -#: util/errors.c:65 -#, fuzzy -msgid "public key not found" -msgstr "ïÔËÒÙÔÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ" - -#: util/errors.c:66 -#, fuzzy -msgid "unknown cipher algorithm" -msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÁÌÇÏÒÉÔÍ ÛÉÆÒÏ×ÁÎÉÑ" - -#: util/errors.c:67 -#, fuzzy -msgid "can't open the keyring" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ \"Ó×ÑÚËÕ ËÌÀÞÅÊ\"" - -#: util/errors.c:68 -#, fuzzy -msgid "invalid packet" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÐÁËÅÔ" - -#: util/errors.c:69 -#, fuzzy -msgid "invalid armor" -msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ASCII-ËÏÄÉÒÏ×ËÁ" - -#: util/errors.c:70 -#, fuzzy -msgid "no such user id" -msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: util/errors.c:71 -#, fuzzy -msgid "secret key not available" -msgstr "óÅËÒÅÔÎÙÊ ËÌÀÞ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ" - -#: util/errors.c:72 -#, fuzzy -msgid "wrong secret key used" -msgstr "éÓÐÏÌØÚÏ×ÁÎ ÎÅÐÒÁ×ÉÌØÎÙÊ ÓÅËÒÅÔÎÙÊ ËÌÀÞ" - -#: util/errors.c:73 -#, fuzzy -msgid "not supported" -msgstr "îÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" - -#: util/errors.c:74 -#, fuzzy -msgid "bad key" -msgstr "ðÌÏÈÏÊ ËÌÀÞ" - -#: util/errors.c:75 -#, fuzzy -msgid "file read error" -msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ" - -#: util/errors.c:76 -#, fuzzy -msgid "file write error" -msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÆÁÊÌÁ" - -#: util/errors.c:77 -#, fuzzy -msgid "unknown compress algorithm" -msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÁÌÇÏÒÉÔÍ ÕÐÁËÏ×ËÉ" - -#: util/errors.c:78 -#, fuzzy -msgid "file open error" -msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ" - -#: util/errors.c:79 -#, fuzzy -msgid "file create error" -msgstr "ïÛÉÂËÁ ÓÏÚÄÁÎÉÑ ÆÁÊÌÁ" - -#: util/errors.c:80 -#, fuzzy -msgid "invalid passphrase" -msgstr "îÅ×ÅÒÎÁÑ \"ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ\"" - -#: util/errors.c:81 -#, fuzzy -msgid "unimplemented pubkey algorithm" -msgstr "îÅÒÅÁÌÉÚÏ×ÁÎÎÙÊ ÁÌÇÏÒÉÔÍ ÛÉÆÒÏ×ÁÎÉÑ Ó ÏÔËÒÙÔÙÍ ËÌÀÞÏÍ" - -#: util/errors.c:82 -#, fuzzy -msgid "unimplemented cipher algorithm" -msgstr "îÅÒÅÁÌÉÚÏ×ÁÎÎÙÊ ÁÌÇÏÒÉÔÍ ÛÉÆÒÏ×ÁÎÉÑ" - -#: util/errors.c:83 -#, fuzzy -msgid "unknown signature class" -msgstr "ðÏÄÐÉÓØ ÎÅÉÚ×ÅÓÔÎÏÇÏ ÔÉÐÁ" - -#: util/errors.c:84 -#, fuzzy -msgid "trust database error" -msgstr "ïÛÉÂËÁ × Trust-DB (ÂÁÚÁ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ)" - -#: util/errors.c:85 -msgid "bad MPI" -msgstr "" - -#: util/errors.c:86 -#, fuzzy -msgid "resource limit" -msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÒÅÓÕÒÓÏ×" - -#: util/errors.c:87 -#, fuzzy -msgid "invalid keyring" -msgstr "îÅÄÏÐÕÓÔÉÍÁÑ \"Ó×ÑÚËÁ ËÌÀÞÅÊ\"" - -#: util/errors.c:88 -#, fuzzy -msgid "bad certificate" -msgstr "ðÌÏÈÏÊ ÓÅÒÔÉÆÉËÁÔ" - -#: util/errors.c:89 -#, fuzzy -msgid "malformed user id" -msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ÆÏÒÍÁ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: util/errors.c:90 -#, fuzzy -msgid "file close error" -msgstr "ïÛÉÂËÁ ÚÁËÒÙÔÉÑ ÆÁÊÌÁ" - -#: util/errors.c:91 -#, fuzzy -msgid "file rename error" -msgstr "ïÛÉÂËÁ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ÆÁÊÌÁ" - -#: util/errors.c:92 -#, fuzzy -msgid "file delete error" -msgstr "ïÛÉÂËÁ ÕÄÁÌÅÎÉÑ ÆÁÊÌÁ" - -#: util/errors.c:93 -#, fuzzy -msgid "unexpected data" -msgstr "îÅÏÖÉÄÁÎÎÙÅ ÄÁÎÎÙÅ" - -#: util/errors.c:94 -#, fuzzy -msgid "timestamp conflict" -msgstr "ëÏÎÆÌÉËÔ ×ÒÅÍÅÎÎÙÈ ÏÔÐÅÞÁÔËÏ× (timestamp)" - -#: util/errors.c:95 -#, fuzzy -msgid "unusable pubkey algorithm" -msgstr "îÅÐÒÉÇÏÄÎÙÊ ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÁÌÇÏÒÉÔÍ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ" - -#: util/errors.c:96 -#, fuzzy -msgid "file exists" -msgstr "æÁÊÌ ÓÕÝÅÓÔ×ÕÅÔ" - -#: util/errors.c:97 -#, fuzzy -msgid "weak key" -msgstr "óÌÁÂÙÊ ËÌÀÞ" - -#: util/errors.c:98 -#, fuzzy -msgid "invalid argument" -msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ASCII-ËÏÄÉÒÏ×ËÁ" - -#: util/errors.c:99 -msgid "bad URI" -msgstr "" - -#: util/errors.c:100 -#, fuzzy -msgid "unsupported URI" -msgstr "îÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" - -#: util/errors.c:101 -#, fuzzy -msgid "network error" -msgstr "ïÂÝÁÑ ÏÛÉÂËÁ" - -#: util/errors.c:103 -#, fuzzy -msgid "not encrypted" -msgstr "ÚÁÛÉÆÒÏ×ÁÔØ ÄÁÎÎÙÅ" - -#: util/logger.c:227 -#, fuzzy, c-format -msgid "... this is a bug (%s:%d:%s)\n" -msgstr "ïÊ-ÊÏ ... ÏÛÉÂËÁ × ÐÒÏÇÒÁÍÍÅ (%s:%d:%s)\n" - -#: util/logger.c:233 -#, c-format -msgid "you found a bug ... (%s:%d)\n" -msgstr "÷Ù ÎÁÛÌÉ ÏÛÉÂËÕ × ÐÒÏÇÒÁÍÍÅ ... (%s:%d)\n" - -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 -#, fuzzy, c-format -msgid "can't open `%s': %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s': %s\n" - -#: cipher/random.c:325 -#, fuzzy, c-format -msgid "can't stat `%s': %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s': %s\n" - -#: cipher/random.c:330 -#, c-format -msgid "`%s' is not a regular file - ignored\n" -msgstr "" - -#: cipher/random.c:335 -msgid "note: random_seed file is empty\n" -msgstr "" - -#: cipher/random.c:341 -msgid "warning: invalid size of random_seed file - not used\n" -msgstr "" - -#: cipher/random.c:349 -#, fuzzy, c-format -msgid "can't read `%s': %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s': %s\n" - -#: cipher/random.c:387 -msgid "note: random_seed file not updated\n" -msgstr "" - -#: cipher/random.c:407 -#, fuzzy, c-format -msgid "can't create `%s': %s\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: cipher/random.c:414 -#, fuzzy, c-format -msgid "can't write `%s': %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s': %s\n" - -#: cipher/random.c:417 -#, fuzzy, c-format -msgid "can't close `%s': %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s': %s\n" - -#: cipher/random.c:428 -#, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "" - -#: cipher/random.c:659 -#, fuzzy -msgid "WARNING: using insecure random number generator!!\n" -msgstr "÷ÎÉÍÁÎÉÅ: ÉÓÐÏÌØÚÕÅÔÓÑ ÎÅÎÁÄÅÖÎÙÊ ÇÅÎÅÒÁÔÏÒ ÓÌÕÞÁÊÎÙÈ ÞÉÓÅÌ!\n" - -#: cipher/random.c:665 -msgid "" -"The random number generator is only a kludge to let\n" -"it run - it is in no way a strong RNG!\n" -"\n" -"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" -"\n" -msgstr "" -"éÓÐÏÌØÚÕÅÍÙÊ ÇÅÎÅÒÁÔÏÒ ÓÌÕÞÁÊÎÙÈ ÞÉÓÅÌ -- ÔÏÌØËÏ ÚÁÇÌÕÛËÁ,\n" -"ÞÔÏÂÙ ÓËÏÍÐÉÌÉÒÏ×ÁÔØ ÐÒÏÇÒÁÍÍÕ, ÎÉËÁË ÎÅ ÎÁÄÅÖÎÙÊ çóþ!\n" -"\n" -"îå ðïìøúõêôåóø äáîîùíé óïúäáîîùíé üôïê ðòïçòáííïê!\n" -"\n" - -#: cipher/rndlinux.c:126 -#, c-format -msgid "" -"\n" -"Not enough random bytes available. Please do some other work to give\n" -"the OS a chance to collect more entropy! (Need %d more bytes)\n" -msgstr "" -"\n" -"îÅÄÏÓÔÁÔÏÞÎÏ ÓÌÕÞÁÊÎÙÈ ÄÁÎÎÙÈ. ðÏÖÁÌÕÊÓÔÁ, ÐÏÄÅÌÁÊÔÅ ÞÔÏ-ÎÉÂÕÄØ, ÞÔÏÂÙ\n" -"ïó ÍÏÇÌÁ ÎÁÂÒÁÔØ ÄÏÐÏÌÎÉÔÅÌØÎÙÅ ÓÌÕÞÁÊÎÙÅ ÞÉÓÌÁ! (ÎÕÖÎÏ ÅÝÅ %d ÂÁÊÔ)\n" - -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "" -"÷ÎÉÍÁÎÉÅ, ×ÏÚÍÏÖÎÁ ÕÔÅÞËÁ ÓÅËÒÅÔÎÙÈ ÄÁÎÎÙÈ!\n" -"üÔÕ ÐÒÏÂÌÅÍÕ ÍÏÖÎÏ ÒÅÛÉÔØ, ÕÓÔÁÎÏ×É× ÐÒÏÇÒÁÍÍÕ suid(root).\n" -"ïÂÒÁÔÉÔÅÓØ ÄÌÑ ÜÔÏÇÏ Ë ÁÄÍÉÎÉÓÔÒÁÔÏÒÕ ÷ÁÛÅÊ ÓÉÓÔÅÍÙ.\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "" - -#: g10/gpg.c:201 -msgid "" -"@Commands:\n" -" " -msgstr "" -"@ëÏÍÁÎÄÙ:\n" -" " - -#: g10/gpg.c:203 -#, fuzzy -msgid "|[file]|make a signature" -msgstr "|[ÆÁÊÌ]|ÓÏÚÄÁÔØ ÐÏÄÐÉÓØ" - -#: g10/gpg.c:204 -#, fuzzy -msgid "|[file]|make a clear text signature" -msgstr "|[ÆÁÊÌ]|ÓÏÚÄÁÔØ ÔÅËÓÔÏ×ÕÀ ÐÏÄÐÉÓØ" - -#: g10/gpg.c:205 -msgid "make a detached signature" -msgstr "ÓÏÚÄÁÔØ ÏÔÄÅÌØÎÕÀ ÐÏÄÐÉÓØ" - -#: g10/gpg.c:206 -msgid "encrypt data" -msgstr "ÚÁÛÉÆÒÏ×ÁÔØ ÄÁÎÎÙÅ" - -#: g10/gpg.c:207 -msgid "encryption only with symmetric cipher" -msgstr "ÚÁÛÉÆÒÏ×ÁÔØ ÓÉÍÍÅÔÒÉÞÎÙÍ ÁÌÇÏÒÉÔÍÏÍ" - -#: g10/gpg.c:208 -msgid "store only" -msgstr "ÔÏÌØËÏ ÓÏÈÒÁÎÉÔØ" - -#: g10/gpg.c:209 -msgid "decrypt data (default)" -msgstr "ÒÁÓÛÉÆÒÏ×ÁÔØ ÄÁÎÎÙÅ (ÐÏ ÕÍÏÌÞÁÎÉÀ)" - -#: g10/gpg.c:210 -msgid "verify a signature" -msgstr "ÐÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ" - -#: g10/gpg.c:212 -msgid "list keys" -msgstr "ÓÐÉÓÏË ËÌÀÞÅÊ" - -#: g10/gpg.c:214 -msgid "list keys and signatures" -msgstr "ÓÐÉÓÏË ËÌÀÞÅÊ É ÐÏÄÐÉÓÅÊ" - -#: g10/gpg.c:215 -msgid "check key signatures" -msgstr "ÐÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ ÎÁ ËÌÀÞÅ" - -#: g10/gpg.c:216 -msgid "list keys and fingerprints" -msgstr "ÓÐÉÓÏË ËÌÀÞÅÊ Ó ÉÈ \"ÏÔÐÅÞÁÔËÁÍÉ ÐÁÌØÃÅ×\"" - -#: g10/gpg.c:217 -msgid "list secret keys" -msgstr "ÓÐÉÓÏË ÓÅËÒÅÔÎÙÈ ËÌÀÞÅÊ" - -#: g10/gpg.c:218 -msgid "generate a new key pair" -msgstr "ÓÇÅÎÅÒÉÒÏ×ÁÔØ ÎÏ×ÕÀ ÐÁÒÕ ËÌÀÞÅÊ (ÏÔËÒÙÔÙÊ É ÓÅËÒÅÔÎÙÊ)" - -#: g10/gpg.c:219 -msgid "remove key from the public keyring" -msgstr "ÕÄÁÌÉÔØ ËÌÀÞ ÓÏ Ó×ÑÚËÉ" - -#: g10/gpg.c:221 -#, fuzzy -msgid "remove key from the secret keyring" -msgstr "ÕÄÁÌÉÔØ ËÌÀÞ ÓÏ Ó×ÑÚËÉ" - -#: g10/gpg.c:222 -#, fuzzy -msgid "sign a key" -msgstr "ÐÏÄÐÉÓÁÔØ ËÌÀÞ" - -#: g10/gpg.c:223 -#, fuzzy -msgid "sign a key locally" -msgstr "ÐÏÄÐÉÓÁÔØ ËÌÀÞ" - -#: g10/gpg.c:224 -msgid "sign or edit a key" -msgstr "ÐÏÄÐÉÓÁÔØ ÉÌÉ ÒÅÄÁËÔÉÒÏ×ÁÔØ ËÌÀÞ" - -#: g10/gpg.c:225 -msgid "generate a revocation certificate" -msgstr "ÓÇÅÎÅÒÉÒÏ×ÁÔØ ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/gpg.c:226 -msgid "export keys" -msgstr "ÜËÓÐÏÒÔÉÒÏ×ÁÔØ ËÌÀÞÉ" - -#: g10/gpg.c:227 -msgid "export keys to a key server" -msgstr "" - -#: g10/gpg.c:228 -msgid "import keys from a key server" -msgstr "" - -#: g10/gpg.c:232 -msgid "import/merge keys" -msgstr "ÉÍÐÏÒÔÉÒÏ×ÁÔØ/ÄÏÂÁ×ÉÔØ ËÌÀÞÉ" - -#: g10/gpg.c:234 -msgid "list only the sequence of packets" -msgstr "ÎÁÐÅÞÁÔÁÔØ ÔÏÌØËÏ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÐÁËÅÔÏ×" - -#: g10/gpg.c:236 -#, fuzzy -msgid "export the ownertrust values" -msgstr "ÜËÓÐÏÒÔÉÒÏ×ÁÔØ ÐÁÒÁÍÅÔÒÙ ÄÏ×ÅÒÉÑ\n" - -#: g10/gpg.c:238 -#, fuzzy -msgid "import ownertrust values" -msgstr "ÉÍÐÏÒÔÉÒÏ×ÁÔØ ÐÁÒÁÍÅÔÒÙ ÄÏ×ÅÒÉÑ\n" - -#: g10/gpg.c:240 -#, fuzzy -msgid "update the trust database" -msgstr "|[éíåîá]|ÐÒÏ×ÅÒÉÔØ ÂÁÚÕ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ" - -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[éíåîá]|ÐÒÏ×ÅÒÉÔØ ÂÁÚÕ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ" - -#: g10/gpg.c:243 -msgid "fix a corrupted trust database" -msgstr "ÉÓÐÒÁ×ÉÔØ ÒÁÚÒÕÛÅÎÎÕÀ ÂÁÚÕ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ" - -#: g10/gpg.c:244 -msgid "De-Armor a file or stdin" -msgstr "äÅËÏÄÉÒÏ×ÁÔØ stdin ÉÌÉ ÆÁÊÌ ÉÚ ASCII-ÐÒÅÄÓÔÁ×ÌÅÎÉÑ" - -#: g10/gpg.c:246 -msgid "En-Armor a file or stdin" -msgstr "úÁËÏÄÉÒÏ×ÁÔØ stdin ÉÌÉ ÆÁÊÌ × ASCII-ÐÒÅÄÓÔÁ×ÌÅÎÉÅ" - -#: g10/gpg.c:248 -msgid "|algo [files]|print message digests" -msgstr "|algo [files]|ÎÁÐÅÞÁÔÁÔØ ÄÁÊÄÖÅÓÔ ÓÏÏÂÝÅÎÉÑ" - -#: g10/gpg.c:253 -msgid "" -"@\n" -"Options:\n" -" " -msgstr "" -"@\n" -"ðÁÒÁÍÅÔÒÙ:\n" -" " - -#: g10/gpg.c:255 -msgid "create ascii armored output" -msgstr "×Ù×ÏÄ × ASCII-ÐÒÅÄÓÔÁ×ÌÅÎÉÉ" - -#: g10/gpg.c:257 -#, fuzzy -msgid "|NAME|encrypt for NAME" -msgstr "|éíñ|ÉÓÐÏÌØÚÏ×ÁÔØ ÛÉÆÒÏ×ÁÌØÎÙÊ ÁÌÇÏÒÉÔÍÏÍ éíñ" - -#: g10/gpg.c:260 -#, fuzzy -msgid "|NAME|use NAME as default recipient" -msgstr "|éíñ|ÉÓÐÏÌØÚÏ×ÁÔØ éíñ × ËÁÞÅÓÔ×Å ÓÅËÒÅÔÎÏÇÏ ËÌÀÞÁ ÐÏ ÕÍÏÌÞÁÎÉÀ" - -#: g10/gpg.c:262 -msgid "use the default key as default recipient" -msgstr "" - -#: g10/gpg.c:266 -msgid "use this user-id to sign or decrypt" -msgstr "" -"ÉÓÐÏÌØÚÏ×ÁÔØ ÕËÁÚÁÎÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÐÏÄÐÉÓÉ ÉÌÉ ÒÁÓÛÉÆÒÏ×ËÉ" - -#: g10/gpg.c:267 -msgid "|N|set compress level N (0 disables)" -msgstr "|N|ÕÓÔÁÎÏ×ÉÔØ ÕÒÏ×ÅÎØ ÓÖÁÔÉÑ (0 - ÎÅ ÓÖÉÍÁÔØ)" - -#: g10/gpg.c:269 -msgid "use canonical text mode" -msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ ËÁÎÏÎÉÞÅÓËÉÊ ÔÅËÓÔÏ×ÙÊ ÒÅÖÉÍ" - -#: g10/gpg.c:270 -msgid "use as output file" -msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ × ËÁÞÅÓÔ×Å ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ" - -#: g10/gpg.c:271 -msgid "verbose" -msgstr "ÍÎÏÇÏÓÌÏ×ÎÙÊ" - -#: g10/gpg.c:272 -msgid "be somewhat more quiet" -msgstr "" - -#: g10/gpg.c:273 -msgid "don't use the terminal at all" -msgstr "" - -#: g10/gpg.c:274 -#, fuzzy -msgid "force v3 signatures" -msgstr "ÐÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ ÎÁ ËÌÀÞÅ" - -#: g10/gpg.c:275 -#, fuzzy -msgid "always use a MDC for encryption" -msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ ÕËÁÚÁÎÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÛÉÆÒÏ×ÁÎÉÑ" - -#: g10/gpg.c:276 -msgid "do not make any changes" -msgstr "Keine wirklichen Änderungen durchführen" - -#. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 -msgid "use the gpg-agent" -msgstr "" - -#: g10/gpg.c:279 -msgid "batch mode: never ask" -msgstr "ÐÁËÅÔÎÙÊ ÒÅÖÉÍ: ÎÉÞÅÇÏ ÎÅ ÓÐÒÁÛÉ×ÁÔØ" - -#: g10/gpg.c:280 -msgid "assume yes on most questions" -msgstr "ÏÔ×ÅÞÁÔØ \"ÄÁ\" ÎÁ ÂÏÌØÛÉÎÓÔ×Ï ×ÏÐÒÏÓÏ×" - -#: g10/gpg.c:281 -msgid "assume no on most questions" -msgstr "ÏÔ×ÅÞÁÔØ \"ÎÅÔ\" ÎÁ ÂÏÌØÛÉÎÓÔ×Ï ×ÏÐÒÏÓÏ×" - -#: g10/gpg.c:282 -msgid "add this keyring to the list of keyrings" -msgstr "ÄÏÂÁ×ÉÔØ ÜÔÕ Ó×ÑÚËÕ Ë ÓÐÉÓËÕ Ó×ÑÚÏË ËÌÀÞÅÊ" - -#: g10/gpg.c:283 -msgid "add this secret keyring to the list" -msgstr "ÄÏÂÁ×ÉÔØ ÜÔÕ ÓÅËÒÅÔÎÕÀ Ó×ÑÚËÕ Ë ÓÐÉÓËÕ Ó×ÑÚÏË ËÌÀÞÅÊ" - -#: g10/gpg.c:284 -msgid "|NAME|use NAME as default secret key" -msgstr "|éíñ|ÉÓÐÏÌØÚÏ×ÁÔØ éíñ × ËÁÞÅÓÔ×Å ÓÅËÒÅÔÎÏÇÏ ËÌÀÞÁ ÐÏ ÕÍÏÌÞÁÎÉÀ" - -#: g10/gpg.c:285 -msgid "|HOST|use this keyserver to lookup keys" -msgstr "" - -#: g10/gpg.c:286 -#, fuzzy -msgid "|NAME|set terminal charset to NAME" -msgstr "|éíñ|ÉÓÐÏÌØÚÏ×ÁÔØ ÛÉÆÒÏ×ÁÌØÎÙÊ ÁÌÇÏÒÉÔÍÏÍ éíñ" - -#: g10/gpg.c:287 -msgid "read options from file" -msgstr "ÞÉÔÁÔØ ÐÁÒÁÍÅÔÒÙ ÉÚ ÆÁÊÌÁ" - -#: g10/gpg.c:291 -msgid "|FD|write status info to this FD" -msgstr "|FD| ÚÁÐÉÓÙ×ÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÓÏÓÔÏÑÎÉÉ × ÄÅÓËÒÉÐÔÏÒ (FD)" - -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "" - -#: g10/gpg.c:297 -#, fuzzy -msgid "|FILE|load extension module FILE" -msgstr "|æáêì|ÚÁÇÒÕÚÉÔØ æáêì Ó ÒÁÓÛÉÒÑÀÝÉÍÉ ÍÏÄÕÌÑÍÉ" - -#: g10/gpg.c:298 -msgid "emulate the mode described in RFC1991" -msgstr "ÜÍÕÌÉÒÏ×ÁÔØ ÒÅÖÉÍ ÏÐÉÓÁÎÎÙÊ × RFC1991" - -#: g10/gpg.c:299 -msgid "set all packet, cipher and digest options to OpenPGP behavior" -msgstr "" - -#: g10/gpg.c:300 -#, fuzzy -msgid "|N|use passphrase mode N" -msgstr "|N|ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ ÒÅÖÉÍÁ N\n" - -#: g10/gpg.c:302 -#, fuzzy -msgid "|NAME|use message digest algorithm NAME for passphrases" -msgstr "|éíñ|ÉÓÐÏÌØÚÏ×ÁÔØ ÈÜÛ-ÁÌÇÏÒÉÔÍ éíñ ÄÌÑ ËÌÀÞÅ×ÙÈ ÆÒÁÚ" - -#: g10/gpg.c:304 -#, fuzzy -msgid "|NAME|use cipher algorithm NAME for passphrases" -msgstr "|éíñ|ÉÓÐÏÌØÚÏ×ÁÔØ ÛÉÆÒÏ×ÁÌØÎÙÊ ÁÌÇÏÒÉÔÍÏÍ éíñ ÄÌÑ ËÌÀÞÅ×ÙÈ ÆÒÁÚ" - -#: g10/gpg.c:305 -msgid "|NAME|use cipher algorithm NAME" -msgstr "|éíñ|ÉÓÐÏÌØÚÏ×ÁÔØ ÛÉÆÒÏ×ÁÌØÎÙÊ ÁÌÇÏÒÉÔÍÏÍ éíñ" - -#: g10/gpg.c:306 -msgid "|NAME|use message digest algorithm NAME" -msgstr "|éíñ|ÉÓÐÏÌØÚÏ×ÁÔØ ÈÜÛ-ÁÌÇÏÒÉÔÍ éíñ" - -#: g10/gpg.c:307 -msgid "|N|use compress algorithm N" -msgstr "|N|ÉÓÐÏÌØÚÏ×ÁÔØ ÁÌÇÏÒÉÔÍ ÓÖÁÔÉÑ N" - -#: g10/gpg.c:308 -msgid "throw keyid field of encrypted packets" -msgstr "×ÙÂÒÁÓÙ×ÁÔØ ÐÏÌÅ keyid Õ ÚÁÛÉÆÒÏ×ÁÎÎÙÈ ÐÁËÅÔÏ×" - -#: g10/gpg.c:309 -msgid "|NAME=VALUE|use this notation data" -msgstr "" - -#: g10/gpg.c:312 -msgid "" -"@\n" -"(See the man page for a complete listing of all commands and options)\n" -msgstr "" - -#: g10/gpg.c:315 -#, fuzzy -msgid "" -"@\n" -"Examples:\n" -"\n" -" -se -r Bob [file] sign and encrypt for user Bob\n" -" --clearsign [file] make a clear text signature\n" -" --detach-sign [file] make a detached signature\n" -" --list-keys [names] show keys\n" -" --fingerprint [names] show fingerprints\n" -msgstr "" -"@\n" -"ðÒÉÍÅÒÙ:\n" -"\n" -" -se -r Bob [file] ÐÏÄÐÉÓÁÔØ É ÚÁÛÉÆÒÏ×ÁÔØ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ Bob\n" -" --clearsign [file] ÓÄÅÌÁÔØ ÔÅËÓÔÏ×ÕÀ ÐÏÄÐÉÓØ\n" -" --detach-sign [file] ÓÄÅÌÁÔØ ÏÔÄÅÌØÎÕÀ ÐÏÄÐÉÓØ\n" -" --list-keys [names] ÐÏËÁÚÁÔØ ÓÐÉÓÏË ËÌÀÞÅÊ\n" -" --fingerprint [names] ÐÏËÁÚÁÔØ \"ÏÔÐÅÞÁÔËÉ ÐÁÌØÃÅ×\" ËÌÀÞÅÊ\n" - -#: g10/gpg.c:417 -msgid "Please report bugs to .\n" -msgstr "" -"ðÏÖÁÌÕÊÓÔÁ, ÏÔÐÒÁ×ÌÑÊÔÅ ÓÏÏÂÝÅÎÉÑ Ï ÏÛÉÂËÁÈ ÐÏ ÁÄÒÅÓÕ " -".\n" - -#: g10/gpg.c:421 -msgid "Usage: gpg [options] [files] (-h for help)" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: gpg [ÐÁÒÁÍÅÔÒÙ] [ÆÁÊÌÙ] (-h ÄÌÑ ÐÏÍÏÝÉ)" - -#: g10/gpg.c:424 -msgid "" -"Syntax: gpg [options] [files]\n" -"sign, check, encrypt or decrypt\n" -"default operation depends on the input data\n" -msgstr "" -"óÉÎÔÁËÓÉÓ: gpg [ÐÁÒÁÍÅÔÒÙ] [ÆÁÊÌÙ]\n" -"ÐÏÄÐÉÓÙ×ÁÅÔ, ÐÒÏ×ÅÒÑÅÔ ÐÏÄÐÉÓÉ, ÛÉÆÒÕÅÔ ÉÌÉ ÒÁÓÛÉÆÒÏ×Ù×ÁÅÔ\n" -"ÒÅÖÉÍ ÒÁÂÏÔÙ ÚÁ×ÉÓÉÔ ÏÔ ×ÈÏÄÎÙÈ ÄÁÎÎÙÈ\n" - -#: g10/gpg.c:431 -msgid "" -"\n" -"Supported algorithms:\n" -msgstr "" -"\n" -"ðÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÁÌÇÏÒÉÔÍÙ:\n" - -#: g10/gpg.c:537 -msgid "usage: gpg [options] " -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: gpg [ÐÁÒÁÍÅÔÒÙ] " - -#: g10/gpg.c:595 -msgid "conflicting commands\n" -msgstr "Widersprüchliche Kommandos\n" - -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 -#, fuzzy, c-format -msgid "NOTE: no default option file `%s'\n" -msgstr "ÚÁÍÅÞÁÎÉÅ: ÆÁÊÌ ÐÁÒÁÍÅÔÒÏ× ÐÏ ÕÍÏÌÞÁÎÉÀ `%s' ÏÔÓÕÔÓÔ×ÕÅÔ\n" - -#: g10/gpg.c:747 -#, c-format -msgid "option file `%s': %s\n" -msgstr "ÆÁÊÌ ÐÁÒÁÍÅÔÒÏ× `%s': %s\n" - -#: g10/gpg.c:754 -#, c-format -msgid "reading options from `%s'\n" -msgstr "ÞÉÔÁÀÔÓÑ ÐÁÒÁÍÅÔÒÙ ÉÚ `%s'\n" - -#: g10/gpg.c:946 -#, fuzzy, c-format -msgid "%s is not a valid character set\n" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ × ËÏÍÍÅÎÔÁÒÉÉ.\n" - -#: g10/gpg.c:1016 -msgid "WARNING: program may create a core file!\n" -msgstr "" - -#: g10/gpg.c:1019 g10/gpg.c:1028 -#, c-format -msgid "NOTE: %s is not for normal use!\n" -msgstr "" - -#: g10/gpg.c:1021 -#, c-format -msgid "%s not allowed with %s!\n" -msgstr "" - -#: g10/gpg.c:1024 -#, c-format -msgid "%s makes no sense with %s!\n" -msgstr "" - -#: g10/gpg.c:1044 g10/gpg.c:1056 -msgid "selected cipher algorithm is invalid\n" -msgstr "×ÙÂÒÁÎ ÎÅÄÏÐÕÓÔÉÍÙÊ ÁÌÇÏÒÉÔÍ ÛÉÆÒÏ×ÁÎÉÑ\n" - -#: g10/gpg.c:1050 g10/gpg.c:1062 -msgid "selected digest algorithm is invalid\n" -msgstr "×ÙÂÒÁÎ ÎÅÄÏÐÕÓÔÉÍÙÊ ÄÁÊÄÖÅÓÔ-ÁÌÇÏÒÉÔÍ\n" - -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" -msgstr "" - -#: g10/gpg.c:1069 -#, c-format -msgid "compress algorithm must be in range %d..%d\n" -msgstr "ÁÌÇÏÒÉÔÍ ÕÐÁËÏ×ËÉ ÍÏÖÅÔ ÉÍÅÔØ ÚÎÁÞÅÎÉÑ ÏÔ %d ÄÏ %d\n" - -#: g10/gpg.c:1071 -msgid "completes-needed must be greater than 0\n" -msgstr "completes-needed ÄÏÌÖÅÎ ÂÙÔØ ÂÏÌØÛÅ 0\n" - -#: g10/gpg.c:1073 -msgid "marginals-needed must be greater than 1\n" -msgstr "marginals-needed ÄÏÌÖÅÎ ÂÙÔØ ÂÏÌØÛÅ 1\n" - -#: g10/gpg.c:1075 -msgid "max-cert-depth must be in range 1 to 255\n" -msgstr "" - -#: g10/gpg.c:1078 -#, fuzzy -msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" -msgstr "ÚÁÍÅÞÁÎÉÅ: ÐÒÏÓÔÏÊ S2K ÒÅÖÉÍ (0) ÏÞÅÎØ ÎÅ ÒÅËÏÍÅÎÄÕÅÔÓÑ\n" - -#: g10/gpg.c:1082 -msgid "invalid S2K mode; must be 0, 1 or 3\n" -msgstr "ÎÅÄÏÐÕÓÔÉÍÙÊ ÒÅÖÉÍ S2K: ÄÏÌÖÅÎ ÂÙÔØ 0, 1 ÉÌÉ 3\n" - -#: g10/gpg.c:1171 -#, c-format -msgid "failed to initialize the TrustDB: %s\n" -msgstr "ïÛÉÂËÁ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ: %s\n" - -#: g10/gpg.c:1177 -msgid "--store [filename]" -msgstr "--store [ÉÍÑ ÆÁÊÌÁ]" - -#: g10/gpg.c:1184 -msgid "--symmetric [filename]" -msgstr "--symmetric [ÉÍÑ ÆÁÊÌÁ]" - -#: g10/gpg.c:1192 -msgid "--encrypt [filename]" -msgstr "--encrypt [ÉÍÑ ÆÁÊÌÁ]" - -#: g10/gpg.c:1205 -msgid "--sign [filename]" -msgstr "--sign [ÉÍÑ ÆÁÊÌÁ]" - -#: g10/gpg.c:1218 -msgid "--sign --encrypt [filename]" -msgstr "--sign --encrypt [ÉÍÑ ÆÁÊÌÁ]" - -#: g10/gpg.c:1232 -msgid "--clearsign [filename]" -msgstr "--clearsign [ÉÍÑ ÆÁÊÌÁ]" - -#: g10/gpg.c:1249 -msgid "--decrypt [filename]" -msgstr "--decrypt [ÉÍÑ ÆÁÊÌÁ]" - -#: g10/gpg.c:1257 -msgid "--sign-key user-id" -msgstr "" - -#: g10/gpg.c:1265 -#, fuzzy -msgid "--lsign-key user-id" -msgstr "--delete-key ÉÍÑ-ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: g10/gpg.c:1273 -#, fuzzy -msgid "--edit-key user-id [commands]" -msgstr "--edit-key ÉÍÑ-ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: g10/gpg.c:1289 -#, fuzzy -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key ÉÍÑ-ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: g10/gpg.c:1292 -#, fuzzy -msgid "--delete-key user-id" -msgstr "--delete-key ÉÍÑ-ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 -#, c-format -msgid "can't open %s: %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s': %s\n" - -#: g10/gpg.c:1344 -#, fuzzy -msgid "-k[v][v][v][c] [user-id] [keyring]" -msgstr "-k[v][v][v][c] [ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ] [Ó×ÑÚËÁ ËÌÀÞÅÊ]" - -#: g10/gpg.c:1410 -#, c-format -msgid "dearmoring failed: %s\n" -msgstr "ÏÛÉÂËÁ ÄÅËÏÄÉÒÏ×ÁÎÉÑ: %s\n" - -#: g10/gpg.c:1418 -#, c-format -msgid "enarmoring failed: %s\n" -msgstr "ÏÛÉÂËÁ ËÏÄÉÒÏ×ÁÎÉÑ: %s\n" - -#: g10/gpg.c:1495 g10/gpg.c:1516 -#, c-format -msgid "invalid hash algorithm `%s'\n" -msgstr "ÎÅÄÏÐÕÓÔÉÍÙÊ ÈÜÛ-ÁÌÇÏÒÉÔÍ `%s'\n" - -#: g10/gpg.c:1601 -msgid "[filename]" -msgstr "[ÉÍÑ ÆÁÊÌÁ]" - -#: g10/gpg.c:1605 -msgid "Go ahead and type your message ...\n" -msgstr "" - -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 -#, c-format -msgid "can't open `%s'\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s'\n" - -#: g10/gpg.c:1786 -msgid "" -"the first character of a notation name must be a letter or an underscore\n" -msgstr "" - -#: g10/gpg.c:1792 -msgid "" -"a notation name must have only letters, digits, dots or underscores and end " -"with an '='\n" -msgstr "" - -#: g10/gpg.c:1798 -msgid "dots in a notation name must be surrounded by other characters\n" -msgstr "" - -#: g10/gpg.c:1806 -msgid "a notation value must not use any control characters\n" -msgstr "" - -#: g10/armor.c:302 -#, fuzzy, c-format -msgid "armor: %s\n" -msgstr "ëÏÄÉÒÏ×ËÁ: %s\n" - -#: g10/armor.c:331 -msgid "invalid armor header: " -msgstr "" - -#: g10/armor.c:338 -msgid "armor header: " -msgstr "" - -#: g10/armor.c:349 -#, fuzzy -msgid "invalid clearsig header\n" -msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÎÁÞÁÌÏ ÔÅËÓÔÏ×ÏÊ ÐÏÄÐÉÓÉ\n" - -#: g10/armor.c:401 -#, fuzzy -msgid "nested clear text signatures\n" -msgstr "|[ÆÁÊÌ]|ÓÏÚÄÁÔØ ÔÅËÓÔÏ×ÕÀ ÐÏÄÐÉÓØ" - -#: g10/armor.c:525 -msgid "invalid dash escaped line: " -msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ÓÔÒÏËÁ ÎÁÞÉÎÁÀÝÁÑÓÑ Ó ÍÉÎÕÓÏ×: " - -#: g10/armor.c:537 -#, fuzzy -msgid "unexpected armor:" -msgstr "îÅÏÖÉÄÁÎÎÙÅ ÄÁÎÎÙÅ" - -#: g10/armor.c:654 -#, fuzzy, c-format -msgid "invalid radix64 character %02x skipped\n" -msgstr "ÎÅÄÏÐÕÓÔÉÍÙÊ ÄÌÑ ËÏÄÉÒÏ×ËÉ radix64 ÓÉÍ×ÏÌ %02x ÐÒÏÐÕÝÅÎ\n" - -#: g10/armor.c:697 -msgid "premature eof (no CRC)\n" -msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅà ÆÁÊÌÁ (ÎÅÔ CRC)\n" - -#: g10/armor.c:731 -msgid "premature eof (in CRC)\n" -msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅà ÆÁÊÌÁ (× CRC)\n" - -#: g10/armor.c:735 -msgid "malformed CRC\n" -msgstr "ÎÅÐÒÁ×ÉÌØÎÁÑ ÆÏÒÍÁ CRC\n" - -#: g10/armor.c:739 -#, c-format -msgid "CRC error; %06lx - %06lx\n" -msgstr "ÏÛÉÂËÁ CRC; %06lx - %06lx\n" - -#: g10/armor.c:756 -msgid "premature eof (in Trailer)\n" -msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅà ÆÁÊÌÁ (× È×ÏÓÔÅ)\n" - -#: g10/armor.c:760 -msgid "error in trailer line\n" -msgstr "ÏÛÉÂËÁ × ÚÁ×ÅÒÛÁÀÝÅÊ ÓÔÒÏËÅ\n" - -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "" - -#: g10/armor.c:1033 -#, fuzzy -msgid "no valid OpenPGP data found.\n" -msgstr "ÎÅ ÎÁÊÄÅÎÏ ÄÏÐÕÓÔÉÍÙÈ RFC1991 ÉÌÉ OpenPGP ÄÁÎÎÙÈ.\n" - -#: g10/armor.c:1038 -#, c-format -msgid "invalid armor: line longer than %d characters\n" -msgstr "" - -#: g10/armor.c:1042 -msgid "" -"quoted printable character in armor - probably a buggy MTA has been used\n" -msgstr "" - -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr "" - -#: g10/pkclist.c:81 -#, fuzzy -msgid "Fingerprint:" -msgstr "ÐÏËÁÚÁÔØ \"ÏÔÐÅÞÁÔÏË ÐÁÌØÃÁ\"" - -#: g10/pkclist.c:117 -msgid "No reason specified" -msgstr "" - -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" -msgstr "üÔÏÔ ËÌÀÞ ÚÁÝÉÝÅÎ.\n" - -#: g10/pkclist.c:121 -#, fuzzy -msgid "Key has been compromised" -msgstr "úÁÍÅÞÁÎÉÅ: óÒÏË ÄÅÊÓÔ×ÉÑ ËÌÀÞÁ ÕÖÅ ÉÓÔÅË!\n" - -#: g10/pkclist.c:123 -msgid "Key is no longer used" -msgstr "" - -#: g10/pkclist.c:125 -msgid "User ID is no longer valid" -msgstr "" - -#: g10/pkclist.c:129 -msgid "Reason for revocation: " -msgstr "" - -#: g10/pkclist.c:146 -msgid "Revocation comment: " -msgstr "" - -# valid user replies (not including 1..4) -#. a string with valid answers -#: g10/pkclist.c:304 -#, fuzzy -msgid "sSmMqQ" -msgstr "sSmMqQ" - -#: g10/pkclist.c:308 -#, fuzzy, c-format -msgid "" -"No trust value assigned to %lu:\n" -"%4u%c/%08lX %s \"" -msgstr "" -"îÅ ÏÐÒÅÄÅÌÅÎÙ ÐÁÒÁÍÅÔÒÙ ÄÏ×ÅÒÉÑ ÄÌÑ %lu:\n" -"%4u%c/%08lX %s \"" - -#: g10/pkclist.c:320 -#, fuzzy -msgid "" -"Please decide how far you trust this user to correctly\n" -"verify other users' keys (by looking at passports,\n" -"checking fingerprints from different sources...)?\n" -"\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" -msgstr "" -"\"\n" -"\n" -"ðÏÖÁÌÕÊÓÔÁ ÒÅÛÉÔÅ, ÎÁÓËÏÌØËÏ ×Ù ÄÏ×ÅÒÑÅÔÅ ÜÔÏÍÕ ÐÏÌØÚÏ×ÁÔÅÌÀ ÐÒÏ×ÅÒÑÔØ\n" -"ÞÕÖÉÅ ËÌÀÞÉ (ÇÌÑÄÑ × ÐÁÓÐÏÒÔÁ, ÐÒÏ×ÅÒÑÑ \"ÏÔÐÅÞÁÔËÉ ÐÁÌØÃÅ×\" ÐÏ ÄÒÕÇÉÍ\n" -"ÉÓÔÏÞÎÉËÁÍ)?\n" -"\n" -" 1 = îÅ ÚÎÁÀ\n" -" 2 = îÅÔ, ÎÅ ÄÏ×ÅÒÑÀ\n" -" 3 = ÷ÅÒÀ ÏÔÞÁÓÔÉ\n" -" 4 = ÷ÅÒÀ ÐÏÌÎÏÓÔØÀ\n" -" s = ðÏÖÁÌÕÊÓÔÁ, ÐÏËÁÖÉÔÅ ÄÏÐÏÌÎÉÔÅÌØÎÕÀ ÉÎÆÏÒÍÁÃÉÀ\n" - -#: g10/pkclist.c:329 -msgid " m = back to the main menu\n" -msgstr " m = ÏÂÒÁÔÎÏ × ÇÌÁ×ÎÏÅ ÍÅÎÀ\n" - -#: g10/pkclist.c:331 -msgid " q = quit\n" -msgstr "" - -#: g10/pkclist.c:337 -msgid "Your decision? " -msgstr "÷ÁÛÅ ÒÅÛÅÎÉÅ? " - -#: g10/pkclist.c:359 -msgid "Certificates leading to an ultimately trusted key:\n" -msgstr "" - -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"îÅ ÐÏÌÕÞÉÌÏÓØ ÎÁÊÔÉ ÃÅÐÏÞËÕ ÄÏ×ÅÒÉÑ ÄÌÑ ËÌÀÞÁ. ðÏÓÍÏÔÒÉÍ, ÍÏÖÎÏ ÌÉ " -"ÐÒÉÓ×ÏÉÔØ\n" -"ÎÅËÏÔÏÒÙÅ ÎÅÄÏÓÔÁÀÝÉÅ ÚÎÁÞÅÎÉÑ \"ÄÏ×ÅÒÉÑ ×ÌÁÄÅÌØÃÕ\"\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" - -#: g10/pkclist.c:440 -#, fuzzy -msgid "" -"No trust values changed.\n" -"\n" -msgstr "úÎÁÞÅÎÉÑ ÐÁÒÁÍÅÔÒÏ× ÄÏ×ÅÒÉÑ ÎÅ ÉÚÍÅÎÅÎÙ.\n" - -#: g10/pkclist.c:458 -#, fuzzy, c-format -msgid "key %08lX: key has been revoked!\n" -msgstr "build_sigrecs: ËÌÀÞ ist widerrufen\n" - -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 -msgid "Use this key anyway? " -msgstr "÷ÓÅ ÒÁ×ÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ?" - -#: g10/pkclist.c:470 -#, fuzzy, c-format -msgid "key %08lX: subkey has been revoked!\n" -msgstr "build_sigrecs: ËÌÀÞ ist widerrufen\n" - -#: g10/pkclist.c:513 -#, fuzzy, c-format -msgid "%08lX: key has expired\n" -msgstr "úÁÍÅÞÁÎÉÅ: óÒÏË ÄÅÊÓÔ×ÉÑ ËÌÀÞÁ ÕÖÅ ÉÓÔÅË!\n" - -#: g10/pkclist.c:519 -#, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "" - -#: g10/pkclist.c:534 -#, fuzzy, c-format -msgid "%08lX: We do NOT trust this key\n" -msgstr "÷îéíáîéå: íÙ îå ÄÏ×ÅÒÑÅÍ ÜÔÏÍÕ ËÌÀÞÕ!\n" - -#: g10/pkclist.c:540 -#, c-format -msgid "" -"%08lX: It is not sure that this key really belongs to the owner\n" -"but it is accepted anyway\n" -msgstr "" - -#: g10/pkclist.c:546 -msgid "This key probably belongs to the owner\n" -msgstr "" - -#: g10/pkclist.c:551 -msgid "This key belongs to us\n" -msgstr "" - -#: g10/pkclist.c:594 -msgid "" -"It is NOT certain that the key belongs to its owner.\n" -"If you *really* know what you are doing, you may answer\n" -"the next question with yes\n" -"\n" -msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ÄÏÓÔÏ×ÅÒÎÏ, ÞÔÏ ËÌÀÞ ÐÒÉÎÁÄÌÅÖÉÔ ÔÏÍÕ,\n" -"ËÔÏ ÕËÁÚÁÎ ÅÇÏ ×ÌÁÄÅÌØÃÅÍ. ïÔ×ÅÞÁÊÔÅ \"ÄÁ\" ÎÁ ÓÌÅÄÕÀÝÉÊ ×ÏÐÒÏÓ,\n" -"ÔÏÌØËÏ ÅÓÌÉ ×Ù *ÄÅÊÓÔ×ÉÔÅÌØÎÏ* ÐÏÎÉÍÁÅÔÅ ÞÔÏ ÄÅÌÁÅÔÅ.\n" - -#: g10/pkclist.c:608 g10/pkclist.c:631 -msgid "WARNING: Using untrusted key!\n" -msgstr "÷îéíáîéå: éÓÐÏÌØÚÕÅÔÓÑ ËÌÀÞ Ë ËÏÔÏÒÏÍÕ ÎÅÔ ÄÏ×ÅÒÉÑ!\n" - -#: g10/pkclist.c:652 -msgid "WARNING: This key has been revoked by its owner!\n" -msgstr "÷îéíáîéå: ÷ÌÁÄÅÌÅà ËÌÀÞÁ ÕÖÅ ÏÔÏÚ×ÁÌ ÅÇÏ!\n" - -#: g10/pkclist.c:653 -msgid " This could mean that the signature is forgery.\n" -msgstr " üÔÏ ÍÏÖÅÔ ÏÚÎÁÞÁÔØ, ÞÔÏ ÐÏÄÐÉÓØ ÐÏÄÄÅÌØÎÁÑ.\n" - -#: g10/pkclist.c:658 -#, fuzzy -msgid "WARNING: This subkey has been revoked by its owner!\n" -msgstr "÷îéíáîéå: ÷ÌÁÄÅÌÅà ËÌÀÞÁ ÕÖÅ ÏÔÏÚ×ÁÌ ÅÇÏ!\n" - -#: g10/pkclist.c:680 -msgid "Note: This key has expired!\n" -msgstr "úÁÍÅÞÁÎÉÅ: óÒÏË ÄÅÊÓÔ×ÉÑ ËÌÀÞÁ ÕÖÅ ÉÓÔÅË!\n" - -#: g10/pkclist.c:688 -msgid "WARNING: This key is not certified with a trusted signature!\n" -msgstr "÷îéíáîéå: üÔÏÔ ËÌÀÞ ÎÅ ÚÁ×ÅÒÅÎ ÄÏ×ÅÒÅÎÎÏÊ ÐÏÄÐÉÓØÀ!\n" - -#: g10/pkclist.c:690 -msgid "" -" There is no indication that the signature belongs to the owner.\n" -msgstr "" -" îÅÔ ÎÉËÁËÉÈ ÕËÁÚÁÎÉÑ ÎÁ ÔÏ, ÞÔÏ ËÌÀÞ ÐÒÉÎÁÄÌÅÖÉÔ ÅÇÏ ×ÌÁÄÅÌØÃÕ.\n" - -#: g10/pkclist.c:707 -msgid "WARNING: We do NOT trust this key!\n" -msgstr "÷îéíáîéå: íÙ îå ÄÏ×ÅÒÑÅÍ ÜÔÏÍÕ ËÌÀÞÕ!\n" - -#: g10/pkclist.c:708 -msgid " The signature is probably a FORGERY.\n" -msgstr " ðÏÄÐÉÓØ ×ÅÒÏÑÔÎÏ -- ðïääåìëá.\n" - -#: g10/pkclist.c:715 -msgid "" -"WARNING: This key is not certified with sufficiently trusted signatures!\n" -msgstr "÷îéíáîéå: üÔÏÔ ËÌÀÞ ÎÅ ÚÁ×ÅÒÅÎ ÄÏÓÔÁÔÏÞÎÏ ÄÏ×ÅÒÅÎÎÙÍÉ ÐÏÄÐÉÓÑÍÉ!\n" - -#: g10/pkclist.c:718 -msgid " It is not certain that the signature belongs to the owner.\n" -msgstr " îÅÔ Õ×ÅÒÅÎÎÏÓÔÉ, ÞÔÏ ÐÏÄÐÉÓØ ÐÒÉÎÁÄÌÅÖÉÔ ×ÌÁÄÅÌØÃÕ.\n" - -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 -#, c-format -msgid "%s: skipped: %s\n" -msgstr "%s: ÐÒÏÐÕÝÅÎ: %s\n" - -#: g10/pkclist.c:828 g10/pkclist.c:998 -#, c-format -msgid "%s: skipped: public key already present\n" -msgstr "" - -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" -msgstr "" -"÷Ù ÎÅ ÕËÁÚÁÌÉ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ (×ÏÓÐÏÌØÚÕÊÔÅÓØ ÐÁÒÁÍÅÔÒÏÍ " -"\"-r\").\n" -"\n" - -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "÷×ÅÄÉÔÅ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ: " - -#: g10/pkclist.c:877 -msgid "No such user ID.\n" -msgstr "îÅÔ ÔÁËÏÇÏ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ.\n" - -#: g10/pkclist.c:883 -msgid "skipped: public key already set as default recipient\n" -msgstr "" - -#: g10/pkclist.c:906 -#, fuzzy -msgid "Public key is disabled.\n" -msgstr "ïÔËÒÙÔÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ" - -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "" - -#: g10/pkclist.c:944 -#, fuzzy, c-format -msgid "unknown default recipient `%s'\n" -msgstr "ÚÁÍÅÞÁÎÉÅ: ÆÁÊÌ ÐÁÒÁÍÅÔÒÏ× ÐÏ ÕÍÏÌÞÁÎÉÀ `%s' ÏÔÓÕÔÓÔ×ÕÅÔ\n" - -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: ÏÛÉÂËÁ ÐÒÉ ÐÒÏ×ÅÒËÅ ËÌÀÞÁ: %s\n" - -#: g10/pkclist.c:984 -#, c-format -msgid "%s: skipped: public key is disabled\n" -msgstr "" - -#: g10/pkclist.c:1022 -msgid "no valid addressees\n" -msgstr "ÎÅÔ ÄÏÐÕÓÔÉÍÙÈ ÁÄÒÅÓÏ×\n" - -#: g10/keygen.c:179 -msgid "writing self signature\n" -msgstr "ÐÉÛÅÔÓÑ ÓÁÍÏ-ÐÏÄÐÉÓØ\n" - -#: g10/keygen.c:217 -msgid "writing key binding signature\n" -msgstr "ÐÉÛÅÔÓÑ \"key-binding\" ÐÏÄÐÉÓØ\n" - -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 -#, fuzzy, c-format -msgid "keysize invalid; using %u bits\n" -msgstr "úÁÐÒÏÛÅÎÎÙÊ ËÌÀÞ ÉÍÅÅÔ ÄÌÉÎÕ %u ÂÉÔ\n" - -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 -#, fuzzy, c-format -msgid "keysize rounded up to %u bits\n" -msgstr "ÏËÒÕÇÌÅÎÏ ÄÏ %u ÂÉÔ\n" - -#: g10/keygen.c:635 -msgid "Please select what kind of key you want:\n" -msgstr "÷ÙÂÅÒÉÔÅ ÖÅÌÁÅÍÙÊ ÔÉÐ ËÌÀÞÁ:\n" - -#: g10/keygen.c:637 -#, c-format -msgid " (%d) DSA and ElGamal (default)\n" -msgstr " (%d) DSA É ElGamal (ÐÏ ÕÍÏÌÞÁÎÉÀ)\n" - -#: g10/keygen.c:638 -#, c-format -msgid " (%d) DSA (sign only)\n" -msgstr " (%d) DSA (ÔÏÌØËÏ ÐÏÄÐÉÓØ)\n" - -#: g10/keygen.c:640 -#, c-format -msgid " (%d) ElGamal (encrypt only)\n" -msgstr " (%d) ElGamal (ÔÏÌØËÏ ÛÉÆÒÏ×ÁÎÉÅ)\n" - -#: g10/keygen.c:641 -#, c-format -msgid " (%d) ElGamal (sign and encrypt)\n" -msgstr " (%d) ElGamal (ÐÏÄÐÉÓØ É ÛÉÆÒÏ×ÁÎÉÅ)\n" - -#: g10/keygen.c:643 -#, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (ÐÏÄÐÉÓØ É ÛÉÆÒÏ×ÁÎÉÅ)\n" - -#: g10/keygen.c:647 -msgid "Your selection? " -msgstr "÷ÁÛ ×ÙÂÏÒ? " - -#: g10/keygen.c:658 g10/keygen.c:666 -#, fuzzy -msgid "Do you really want to create a sign and encrypt key? " -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ×ÙÂÒÁÎÎÙÅ ËÌÀÞÉ? " - -#: g10/keygen.c:680 -msgid "Invalid selection.\n" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ×ÙÂÏÒ.\n" - -#: g10/keygen.c:692 -#, c-format -msgid "" -"About to generate a new %s keypair.\n" -" minimum keysize is 768 bits\n" -" default keysize is 1024 bits\n" -" highest suggested keysize is 2048 bits\n" -msgstr "" -"óÏÂÉÒÁÅÍÓÑ ÓÇÅÎÅÒÉÒÏ×ÁÔØ %s ËÌÀÞÅ×ÕÀ ÐÁÒÕ.\n" -" ÍÉÎÉÍÁÌØÎÁÑ ÄÌÉÎÁ ËÌÀÞÁ: 768 ÂÉÔ\n" -" ÄÌÉÎÁ ËÌÀÞÁ ÐÏ ÕÍÏÌÞÁÎÉÀ: 1024 ÂÉÔÁ\n" -" ÍÁËÓÉÍÁÌØÎÁÑ ÒÅËÏÍÅÎÄÕÅÍÁÑ ÄÌÉÎÁ ËÌÀÞÁ: 2048 ÂÉÔ\n" - -#: g10/keygen.c:699 -msgid "What keysize do you want? (1024) " -msgstr "ëÁËÏÇÏ ÒÁÚÍÅÒÁ ËÌÀÞ ×Ù ÖÅÌÁÅÔÅ? (1024)" - -#: g10/keygen.c:704 -msgid "DSA only allows keysizes from 512 to 1024\n" -msgstr "äÏÐÕÓÔÉÍÙÊ ÒÁÚÍÅÒ DSA ËÌÀÞÅÊ - ÏÔ 512 ÄÏ 1024 ÂÉÔ\n" - -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "ÓÌÉÛËÏÍ ÍÁÌÅÎØËÁÑ ÄÌÉÎÁ ËÌÀÞÁ, ÎÁÉÍÅÎØÛÅÅ ÚÎÁÞÅÎÉÅ - 768.\n" - -#: g10/keygen.c:708 -#, fuzzy -msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" -msgstr "ÓÌÉÛËÏÍ ÍÁÌÅÎØËÁÑ ÄÌÉÎÁ ËÌÀÞÁ, ÎÁÉÍÅÎØÛÅÅ ÚÎÁÞÅÎÉÅ - 768.\n" - -#. It is ridiculous and an annoyance to use larger key sizes! -#. * GnuPG can handle much larger sizes; but it takes an eternity -#. * to create such a key (but less than the time the Sirius -#. * Computer Corporation needs to process one of the usual -#. * complaints) and {de,en}cryption although needs some time. -#. * So, before you complain about this limitation, I suggest that -#. * you start a discussion with Marvin about this theme and then -#. * do whatever you want. -#: g10/keygen.c:719 -#, fuzzy, c-format -msgid "keysize too large; %d is largest value allowed.\n" -msgstr "ÓÌÉÛËÏÍ ÍÁÌÅÎØËÁÑ ÄÌÉÎÁ ËÌÀÞÁ, ÎÁÉÍÅÎØÛÅÅ ÚÎÁÞÅÎÉÅ - 768.\n" - -#: g10/keygen.c:724 -#, fuzzy -msgid "" -"Keysizes larger than 2048 are not suggested because\n" -"computations take REALLY long!\n" -msgstr "" -"ëÌÀÞÉ ÄÌÉÎÏÊ ÂÏÌØÛÅ 2048 ÎÅ ÒÅËÏÍÅÎÄÕÀÔÓÑ, ÐÏÔÏÍÕ ÞÔÏ ×ÙÞÉÓÌÅÎÉÑÚÁÎÉÍÁÀÔ " -"ïþåîø ÍÎÏÇÏ ×ÒÅÍÅÎÉ!\n" - -#: g10/keygen.c:727 -msgid "Are you sure that you want this keysize? " -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ËÌÀÞ ÔÁËÏÊ ÄÌÉÎÙ? " - -#: g10/keygen.c:728 -msgid "" -"Okay, but keep in mind that your monitor and keyboard radiation is also very " -"vulnerable to attacks!\n" -msgstr "" -"ïË, ÔÏÌØËÏ ÎÅ ÚÁÂÙ×ÁÊÔÅ, ÞÔÏ ÉÚÌÕÞÅÎÉÅ ×ÁÛÉÈ ËÌÁ×ÉÁÔÕÒÙ É ÍÏÎÉÔÏÒÁ ÔÏÖÅ\n" -"ÄÅÌÁÀÔ ×ÁÓ ÕÑÚ×ÉÍÙÍ ÄÌÑ ÁÔÁË.\n" - -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "÷ÁÍ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÎÕÖÅÎ ÔÁËÏÊ ÄÌÉÎÎÙÊ ËÌÀÞ? " - -#: g10/keygen.c:742 -#, c-format -msgid "Requested keysize is %u bits\n" -msgstr "úÁÐÒÏÛÅÎÎÙÊ ËÌÀÞ ÉÍÅÅÔ ÄÌÉÎÕ %u ÂÉÔ\n" - -#: g10/keygen.c:745 g10/keygen.c:749 -#, c-format -msgid "rounded up to %u bits\n" -msgstr "ÏËÒÕÇÌÅÎÏ ÄÏ %u ÂÉÔ\n" - -#: g10/keygen.c:797 -msgid "" -"Please specify how long the key should be valid.\n" -" 0 = key does not expire\n" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"ðÏÖÁÌÕÊÓÔÁ, ÕËÁÖÉÔÅ ÐÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ ÄÅÊÓÔ×ÉÑ ×ÁÛÅÇÏ ËÌÀÞÁ.\n" -" 0 = ÂÅÓÓÒÏÞÎÙÊ ËÌÀÞ\n" -" = ÓÒÏË ÄÅÊÓÔ×ÉÑ ËÌÀÞÁ n ÄÎÅÊ\n" -" w = ÓÒÏË ÄÅÊÓÔ×ÉÑ ËÌÀÞÁ n ÎÅÄÅÌØ\n" -" m = ÓÒÏË ÄÅÊÓÔ×ÉÑ ËÌÀÞÁ n ÍÅÓÑÃÅ×\n" -" y = ÓÒÏË ÄÅÊÓÔ×ÉÑ ËÌÀÞÁ n ÌÅÔ\n" - -#: g10/keygen.c:812 -msgid "Key is valid for? (0) " -msgstr "ëÌÀÞ ÄÅÊÓÔ×ÉÔÅÌÅÎ × ÔÅÞÅÎÉÅ? (0) " - -#: g10/keygen.c:817 -msgid "invalid value\n" -msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ.\n" - -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" -msgstr "âÅÓÓÒÏÞÎÙÊ ËÌÀÞ.\n" - -#. print the date when the key expires -#: g10/keygen.c:828 -#, c-format -msgid "Key expires at %s\n" -msgstr "ëÌÀÞ ÄÅÊÓÔ×ÕÅÔ ÄÏ %s\n" - -#: g10/keygen.c:831 -msgid "" -"Your system can't display dates beyond 2038.\n" -"However, it will be correctly handled up to 2106.\n" -msgstr "" - -#: g10/keygen.c:836 -msgid "Is this correct (y/n)? " -msgstr "üÔÏ ×ÅÒÎÏ? (y/n) " - -#: g10/keygen.c:879 -msgid "" -"\n" -"You need a User-ID to identify your key; the software constructs the user " -"id\n" -"from Real Name, Comment and Email Address in this form:\n" -" \"Heinrich Heine (Der Dichter) \"\n" -"\n" -msgstr "" -"\n" -"äÌÑ ÉÄÅÎÔÉÆÉËÁÃÉÉ ËÌÀÞÁ ÎÅÏÂÈÏÄÉÍ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ; ÐÒÏÇÒÁÍÍÁ\n" -"ËÏÎÓÔÒÕÉÒÕÅÔ ÅÇÏ ÉÚ ÐÏÌÎÏÇÏ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ, ËÏÍÍÅÎÔÁÒÉÑ É ÁÄÒÅÓÁ email× " -"×ÉÄÅ:\n" -" \"Vasya Pupkin (KRUTOI) \"\n" -"\n" - -#: g10/keygen.c:891 -msgid "Real name: " -msgstr "÷ÁÛÅ ÉÍÑ (\"éÍÑ æÁÍÉÌÉÑ\"): " - -#: g10/keygen.c:899 -msgid "Invalid character in name\n" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ × ÉÍÅÎÉ\n" - -#: g10/keygen.c:901 -msgid "Name may not start with a digit\n" -msgstr "ðÏÌÎÏÅ ÉÍÑ ÎÅ ÍÏÖÅÔ ÎÁÞÉÎÁÔØÓÑ Ó ÃÉÆÒÙ.\n" - -#: g10/keygen.c:903 -msgid "Name must be at least 5 characters long\n" -msgstr "ðÏÌÎÏÅ ÉÍÑ ÄÏÌÖÎÏ ÓÏÓÔÏÑÔØ ÎÅ ÍÅÎÅÅ ÞÅÍ ÉÚ 5ÔÉ ÓÉÍ×ÏÌÏ×.\n" - -#: g10/keygen.c:911 -msgid "Email address: " -msgstr "E-Mail: " - -#: g10/keygen.c:922 -msgid "Not a valid email address\n" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ E-Mail\n" - -#: g10/keygen.c:930 -msgid "Comment: " -msgstr "ëÏÍÍÅÎÔÁÒÉÊ: " - -#: g10/keygen.c:936 -msgid "Invalid character in comment\n" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ × ËÏÍÍÅÎÔÁÒÉÉ.\n" - -#: g10/keygen.c:961 -#, c-format -msgid "You are using the `%s' character set.\n" -msgstr "" - -#: g10/keygen.c:967 -#, c-format -msgid "" -"You selected this USER-ID:\n" -" \"%s\"\n" -"\n" -msgstr "" -"÷Ù ×ÙÂÒÁÌÉ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ:\n" -" \"%s\"\n" -"\n" - -#: g10/keygen.c:971 -msgid "Please don't put the email address into the real name or the comment\n" -msgstr "" - -#: g10/keygen.c:976 -msgid "NnCcEeOoQq" -msgstr "" - -#: g10/keygen.c:986 -#, fuzzy -msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " -msgstr "éÚÍÅÎÉÔØ: N=éÍÑ, C=ëÏÍÍÅÎÔÁÒÉÊ, E=E-Mail, O=Okay/Q=÷ÙÈÏÄ? " - -#: g10/keygen.c:987 -#, fuzzy -msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " -msgstr "éÚÍÅÎÉÔØ: N=éÍÑ, C=ëÏÍÍÅÎÔÁÒÉÊ, E=E-Mail, O=Okay/Q=÷ÙÈÏÄ? " - -#: g10/keygen.c:1006 -msgid "Please correct the error first\n" -msgstr "" - -#: g10/keygen.c:1044 -msgid "" -"You need a Passphrase to protect your secret key.\n" -"\n" -msgstr "" -"äÌÑ ÚÁÝÉÔÙ ×ÁÛÅÇÏ ËÌÀÞÁ ÎÕÖÎÁ ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ.\n" -"\n" - -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" -msgstr "ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ ÎÅ ÂÙÌÁ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÁ, ÐÏÐÒÏÂÕÊÔÅ ÓÎÏ×Á.\n" - -#: g10/keygen.c:1058 -msgid "" -"You don't want a passphrase - this is probably a *bad* idea!\n" -"I will do it anyway. You can change your passphrase at any time,\n" -"using this program with the option \"--edit-key\".\n" -"\n" -msgstr "" -"÷Ù ÎÅ ÈÏÔÉÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ - ÜÔÏ, ÓËÏÒÅÅ ×ÓÅÇÏ, *ÐÌÏÈÁÑ*\n" -"ÉÄÅÑ. îÏ Ñ ÓÄÅÌÁÀ, ÞÔÏ ÷Ù ÈÏÔÉÔÅ. ëÌÀÞÅ×ÕÀ ÆÒÁÚÕ ÍÏÖÎÏ ÓÍÅÎÉÔØ × ÌÀÂÏÅ\n" -"×ÒÅÍÑ, ÚÁÐÕÓÔÉ× ÜÔÕ ÐÒÏÇÒÁÍÍÕ Ó ÐÁÒÁÍÅÔÒÏÍ \"--edit-key\".\n" -"\n" - -#: g10/keygen.c:1079 -#, fuzzy -msgid "" -"We need to generate a lot of random bytes. It is a good idea to perform\n" -"some other action (type on the keyboard, move the mouse, utilize the\n" -"disks) during the prime generation; this gives the random number\n" -"generator a better chance to gain enough entropy.\n" -msgstr "" -"îÁÍ ÎÕÖÎÏ ÓÇÅÎÅÒÉÒÏ×ÁÔØ ÍÎÏÇÏ ÓÌÕÞÁÊÎÙÈ ÂÁÊÔÏ×. óÅÊÞÁÓ ÏÞÅÎØ ÈÏÒÏÛÏ ÂÙÌÏ ÂÙ\n" -"ÞÔÏ-ÔÏ ÐÏÄÅÌÁÔØ ÎÁ ÍÁÛÉÎÅ (ÐÏÒÁÂÏÔÁÔØ × ÄÒÕÇÏÍ ÏËÎÅ, ÐÏÄ×ÉÇÁÔØ ÍÙÛØ,\n" -"ÎÁÇÒÕÚÉÔØ ÓÅÔÅ×ÕÀ ÉÌÉ ÄÉÓËÏ×ÕÀ ÐÏÄÓÉÓÔÅÍÕ). üÔÏ ÄÁÓÔ ÇÅÎÅÒÁÔÏÒÕ ÓÌÕÞÁÊÎÙÈ\n" -"ÞÉÓÅÌ ×ÏÚÍÏÖÎÏÓÔØ ÎÁÂÒÁÔØ ÄÏÓÔÁÔÏÞÎÏ ÜÎÔÒÏÐÉÉ.\n" - -#: g10/keygen.c:1528 -msgid "DSA keypair will have 1024 bits.\n" -msgstr "ëÌÀÞÅ×ÁÑ ÐÁÒÁ DSA ÂÕÄÅÔ ÉÍÅÔØ ÄÌÉÎÕ 1024 ÂÉÔÁ.\n" - -#: g10/keygen.c:1571 -#, fuzzy -msgid "Key generation canceled.\n" -msgstr "çÅÎÅÒÁÃÉÑ ËÌÀÞÁ ÏÔÍÅÎÅÎÁ: %s\n" - -#: g10/keygen.c:1668 -#, fuzzy, c-format -msgid "writing public key to `%s'\n" -msgstr "ÏÔËÒÙÔÙÊ ÓÅÒÔÉÆÉËÁÔ ÚÁÐÉÓÙ×ÁÅÔÓÑ × `%s'\n" - -#: g10/keygen.c:1669 -#, fuzzy, c-format -msgid "writing secret key to `%s'\n" -msgstr "ÓÅËÒÅÔÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÚÁÐÉÓÙ×ÁÅÔÓÑ × `%s'\n" - -#: g10/keygen.c:1761 -msgid "public and secret key created and signed.\n" -msgstr "ÏÔËÒÙÔÙÊ É ÓÅËÒÅÔÎÙÊ ËÌÀÞÉ ÓÏÚÄÁÎÙ É ÐÏÄÐÉÓÁÎÙ.\n" - -#: g10/keygen.c:1766 -#, fuzzy -msgid "" -"Note that this key cannot be used for encryption. You may want to use\n" -"the command \"--edit-key\" to generate a secondary key for this purpose.\n" -msgstr "" -"ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÜÔÏÔ ËÌÀÞ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ ÄÌÑ ÛÉÆÒÏ×ÁÎÉÑ.\n" -"÷Ù ÍÏÖÅÔÅ ×ÏÓÐÏÌØÚÏ×ÁÔØÓÑ ÐÁÒÁÍÅÔÒÏÍ --add-key ÄÌÑ ÇÅÎÅÒÁÃÉÉ " -"ÄÏÐÏÌÎÉÔÅÌØÎÏÇÏ\n" -"ËÌÀÞÁ ÄÌÑ ÛÉÆÒÏ×ÁÎÉÑ.\n" - -#: g10/keygen.c:1779 g10/keygen.c:1880 -#, c-format -msgid "Key generation failed: %s\n" -msgstr "çÅÎÅÒÁÃÉÑ ËÌÀÞÁ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 -#, fuzzy, c-format -msgid "" -"key has been created %lu second in future (time warp or clock problem)\n" -msgstr "" -"ÏÔËÒÙÔÙÊ ËÌÀÞ ÓÇÅÎÅÒÉÒÏ×ÁÎ × ÂÕÄÕÝÅÍ (ÉÓËÒÉ×ÌÅÎÉÅ ×ÒÅÍÅÎÉ ÉÌÉ ÎÅÐÒÁ×ÉÌØÎÏ " -"ÕÓÔÁÎÏ×ÌÅÎÙ ÞÁÓÙ)\n" - -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 -#, fuzzy, c-format -msgid "" -"key has been created %lu seconds in future (time warp or clock problem)\n" -msgstr "" -"ÏÔËÒÙÔÙÊ ËÌÀÞ ÓÇÅÎÅÒÉÒÏ×ÁÎ × ÂÕÄÕÝÅÍ (ÉÓËÒÉ×ÌÅÎÉÅ ×ÒÅÍÅÎÉ ÉÌÉ ÎÅÐÒÁ×ÉÌØÎÏ " -"ÕÓÔÁÎÏ×ÌÅÎÙ ÞÁÓÙ)\n" - -#: g10/keygen.c:1858 -#, fuzzy -msgid "Really create? " -msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÓÏÚÄÁÔØ? " - -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 -#, c-format -msgid "%s: can't open: %s\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/encode.c:164 -#, c-format -msgid "error creating passphrase: %s\n" -msgstr "ÏÛÉÂËÁ ÐÒÉ ÓÏÚÄÁÎÉÉ ËÌÀÞÅ×ÏÊ ÆÒÁÚÙ: %s\n" - -#: g10/encode.c:222 g10/encode.c:354 -#, fuzzy, c-format -msgid "%s: WARNING: empty file\n" -msgstr "%s: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÕÓÔÏÊ ÆÁÊÌ.\n" - -#: g10/encode.c:320 -#, c-format -msgid "reading from `%s'\n" -msgstr "þÉÔÁÅÔÓÑ ÉÚ `%s'\n" - -#: g10/encode.c:527 -#, fuzzy, c-format -msgid "%s/%s encrypted for: %s\n" -msgstr "%s ÚÁÛÉÆÒÏ×ÁÎÏ ÄÌÑ: %s\n" - -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 -#, fuzzy, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÎÁÊÄÅÎ\n" - -#: g10/export.c:164 -#, fuzzy, c-format -msgid "key %08lX: not a rfc2440 key - skipped\n" -msgstr "ÓÅËÒÅÔÎÙÊ ËÌÀÞ %08lX: ÎÅ ÉÍÅÅÔ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ.\n" - -#: g10/export.c:175 -#, fuzzy, c-format -msgid "key %08lX: not protected - skipped\n" -msgstr "ÓÅËÒÅÔÎÙÊ ËÌÀÞ %08lX: ÎÅ ÉÍÅÅÔ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ.\n" - -#: g10/export.c:225 -#, fuzzy -msgid "WARNING: nothing exported\n" -msgstr "÷îéíáîéå: éÓÐÏÌØÚÕÅÔÓÑ ËÌÀÞ Ë ËÏÔÏÒÏÍÕ ÎÅÔ ÄÏ×ÅÒÉÑ!\n" - -#: g10/getkey.c:212 -msgid "too many entries in pk cache - disabled\n" -msgstr "" - -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "" - -#: g10/getkey.c:2189 -#, c-format -msgid "using secondary key %08lX instead of primary key %08lX\n" -msgstr "ÉÓÐÏÌØÚÕÅÔÓÑ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ËÌÀÞ %09lX ×ÍÅÓÔÏ ÏÓÎÏ×ÎÏÇÏ %08lX%\n" - -#: g10/getkey.c:2230 g10/trustdb.c:578 -#, fuzzy, c-format -msgid "key %08lX: secret key without public key - skipped\n" -msgstr "ÓÅËÒÅÔÎÙÊ ËÌÀÞ %08lX: ÎÅ ÉÍÅÅÔ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ.\n" - -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÎÁÊÄÅÎ\n" - -#: g10/import.c:182 -#, c-format -msgid "skipping block of type %d\n" -msgstr "ÐÒÏÐÕÓËÁÅÍ ÂÌÏË ÔÉÐÁ %d\n" - -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 -#, c-format -msgid "%lu keys so far processed\n" -msgstr "" - -#: g10/import.c:194 -#, fuzzy, c-format -msgid "error reading `%s': %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/import.c:204 -#, c-format -msgid "Total number processed: %lu\n" -msgstr "" - -#: g10/import.c:206 -#, fuzzy, c-format -msgid " skipped new keys: %lu\n" -msgstr "ËÌÀÞ %08lX: %d ÎÏ×ÙÈ ÐÏÄÐÉÓÅÊ\n" - -#: g10/import.c:209 -#, c-format -msgid " w/o user IDs: %lu\n" -msgstr "" - -#: g10/import.c:211 -#, c-format -msgid " imported: %lu" -msgstr "" - -#: g10/import.c:217 -#, c-format -msgid " unchanged: %lu\n" -msgstr "" - -#: g10/import.c:219 -#, c-format -msgid " new user IDs: %lu\n" -msgstr "" - -#: g10/import.c:221 -#, c-format -msgid " new subkeys: %lu\n" -msgstr "" - -#: g10/import.c:223 -#, fuzzy, c-format -msgid " new signatures: %lu\n" -msgstr "ËÌÀÞ %08lX: %d ÎÏ×ÙÈ ÐÏÄÐÉÓÅÊ\n" - -#: g10/import.c:225 -#, c-format -msgid " new key revocations: %lu\n" -msgstr "" - -#: g10/import.c:227 -#, c-format -msgid " secret keys read: %lu\n" -msgstr "" - -#: g10/import.c:229 -#, fuzzy, c-format -msgid " secret keys imported: %lu\n" -msgstr "ËÌÀÞ %08lX: ÓÅËÒÅÔÎÙÊ ËÌÀÞ ÉÍÐÏÒÔÉÒÏ×ÁÎ\n" - -#: g10/import.c:231 -#, fuzzy, c-format -msgid " secret keys unchanged: %lu\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎ ÎÅÐÒÁ×ÉÌØÎÙÊ ÓÅËÒÅÔÎÙÊ ËÌÀÞ" - -#: g10/import.c:389 g10/import.c:568 -#, fuzzy, c-format -msgid "key %08lX: no user ID\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ\n" - -#: g10/import.c:403 -#, fuzzy, c-format -msgid "key %08lX: no valid user IDs\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÄÏÐÕÓÔÉÍÙÈ ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ\n" - -#: g10/import.c:405 -msgid "this may be caused by a missing self-signature\n" -msgstr "ÜÔÏ ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎÏ ÏÔÓÕÔÓÔ×ÉÅÍ ÓÁÍÏ-ÐÏÄÐÉÓÉ\n" - -#: g10/import.c:416 g10/import.c:624 -#, c-format -msgid "key %08lX: public key not found: %s\n" -msgstr "ËÌÀÞ %08lX: ÏÔËÒÙÔÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ: %s\n" - -#: g10/import.c:421 -#, fuzzy, c-format -msgid "key %08lX: new key - skipped\n" -msgstr "ÓÅËÒÅÔÎÙÊ ËÌÀÞ %08lX: ÎÅ ÉÍÅÅÔ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ.\n" - -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 -#, c-format -msgid "writing to `%s'\n" -msgstr "ÚÁÐÉÓÙ×ÁÅÔÓÑ × `%s'\n" - -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/import.c:436 -#, c-format -msgid "key %08lX: public key imported\n" -msgstr "ËÌÀÞ %08lX: ÏÔËÒÙÔÙÊ ËÌÀÞ ÉÍÐÏÒÔÉÒÏ×ÁÎ\n" - -#: g10/import.c:453 -#, c-format -msgid "key %08lX: doesn't match our copy\n" -msgstr "ËÌÀÞ %08lX: ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ÎÁÛÅÊ ËÏÐÉÅÊ\n" - -#: g10/import.c:462 g10/import.c:632 -#, c-format -msgid "key %08lX: can't locate original keyblock: %s\n" -msgstr "ËÌÀÞ %08lX: ÎÅ×ÏÚÍÏÖÎÏ ÏÂÎÁÒÕÖÉÔØ original keyblock: %s\n" - -#: g10/import.c:484 -#, fuzzy, c-format -msgid "key %08lX: 1 new user ID\n" -msgstr "ËÌÀÞ %08lX: 1 ÎÏ×ÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ\n" - -#: g10/import.c:487 -#, fuzzy, c-format -msgid "key %08lX: %d new user IDs\n" -msgstr "ËÌÀÞ %08lX: %d ÎÏ×ÙÈ ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ\n" - -#: g10/import.c:490 -#, c-format -msgid "key %08lX: 1 new signature\n" -msgstr "ËÌÀÞ %08lX: 1 ÎÏ×ÁÑ ÐÏÄÐÉÓØ\n" - -#: g10/import.c:493 -#, c-format -msgid "key %08lX: %d new signatures\n" -msgstr "ËÌÀÞ %08lX: %d ÎÏ×ÙÈ ÐÏÄÐÉÓÅÊ\n" - -#: g10/import.c:496 -#, c-format -msgid "key %08lX: 1 new subkey\n" -msgstr "ËÌÀÞ %08lX: 1 ÎÏ×ÙÊ ÐÏÄ-ËÌÀÞ\n" - -#: g10/import.c:499 -#, c-format -msgid "key %08lX: %d new subkeys\n" -msgstr "ËÌÀÞ %08lX: %d ÎÏ×ÙÈ ÐÏÄ-ËÌÀÞÅÊ\n" - -#: g10/import.c:509 -#, c-format -msgid "key %08lX: not changed\n" -msgstr "ËÌÀÞ %08lX: ÎÅ ÉÚÍÅÎÅÎ\n" - -#: g10/import.c:581 -#, c-format -msgid "key %08lX: secret key imported\n" -msgstr "ËÌÀÞ %08lX: ÓÅËÒÅÔÎÙÊ ËÌÀÞ ÉÍÐÏÒÔÉÒÏ×ÁÎ\n" - -#. we can't merge secret keys -#: g10/import.c:585 -#, c-format -msgid "key %08lX: already in secret keyring\n" -msgstr "ËÌÀÞ %08lX: ÕÖÅ ÎÁ Ó×ÑÚËÅ ÓÅËÒÅÔÎÙÈ ËÌÀÞÅÊ\n" - -#: g10/import.c:590 -#, c-format -msgid "key %08lX: secret key not found: %s\n" -msgstr "ËÌÀÞ %08lX: ÓÅËÒÅÔÎÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ: %s\n" - -#: g10/import.c:618 -#, c-format -msgid "key %08lX: no public key - can't apply revocation certificate\n" -msgstr "" -"ËÌÀÞ %08lX: ÎÅÔ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ - ÎÅ×ÏÚÍÏÖÎÏ ÐÒÉÍÅÎÉÔØ ÏÔÚÙ×ÁÀÝÉÊ " -"ÓÅÒÔÉÆÉËÁÔ\n" - -#: g10/import.c:643 -#, c-format -msgid "key %08lX: invalid revocation certificate: %s - rejected\n" -msgstr "ËÌÀÞ %08lX: ÎÅÄÏÐÕÓÔÉÍÙÊ ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ: %s - ÏÔ×ÅÒÇÎÕÔ\n" - -#: g10/import.c:670 -#, c-format -msgid "key %08lX: revocation certificate imported\n" -msgstr "ËÌÀÞ %08lX: ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ ÉÍÐÏÒÔÉÒÏ×ÁÎ\n" - -#: g10/import.c:712 -#, fuzzy, c-format -msgid "key %08lX: no user ID for signature\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÐÏÄÐÉÓÉ\n" - -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" -msgstr "ËÌÀÞ %08lX: ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÁÌÇÏÒÉÔÍ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ\n" - -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" -msgstr "ËÌÀÞ %08lX: ÎÅÄÏÐÕÓÔÉÍÁÑ ÓÁÍÏ-ÐÏÄÐÉÓØ\n" - -#: g10/import.c:735 -#, fuzzy, c-format -msgid "key %08lX: no subkey for key binding\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ\n" - -#: g10/import.c:744 -#, fuzzy, c-format -msgid "key %08lX: invalid subkey binding\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÄÏÐÕÓÔÉÍÙÈ ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ\n" - -#: g10/import.c:771 -#, fuzzy, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "ËÌÀÞ %08lX: ÐÒÏÐÕÝÅÎ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ '" - -#: g10/import.c:800 -#, fuzzy, c-format -msgid "key %08lX: skipped user ID '" -msgstr "ËÌÀÞ %08lX: ÐÒÏÐÕÝÅÎ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ '" - -#: g10/import.c:823 -#, fuzzy, c-format -msgid "key %08lX: skipped subkey\n" -msgstr "ËÌÀÞ %08lX: 1 ÎÏ×ÙÊ ÐÏÄ-ËÌÀÞ\n" - -#. here we violate the rfc a bit by still allowing -#. * to import non-exportable signature when we have the -#. * the secret key used to create this signature - it -#. * seems that this makes sense -#: g10/import.c:848 -#, fuzzy, c-format -msgid "key %08lX: non exportable signature (class %02x) - skipped\n" -msgstr "ËÌÀÞ %08lX: ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ × ÎÅÐÒÁ×ÉÌØÎÏÍ ÍÅÓÔÅ - ÐÒÏÐÕÝÅÎ\n" - -#: g10/import.c:857 -#, c-format -msgid "key %08lX: revocation certificate at wrong place - skipped\n" -msgstr "ËÌÀÞ %08lX: ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ × ÎÅÐÒÁ×ÉÌØÎÏÍ ÍÅÓÔÅ - ÐÒÏÐÕÝÅÎ\n" - -#: g10/import.c:865 -#, c-format -msgid "key %08lX: invalid revocation certificate: %s - skipped\n" -msgstr "ËÌÀÞ %08lX: ÎÅÄÏÐÕÓÔÉÍÙÊ ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ: %s - ÐÒÏÐÕÝÅÎ\n" - -#: g10/import.c:965 -#, c-format -msgid "key %08lX: duplicated user ID detected - merged\n" -msgstr "" - -#: g10/import.c:1016 -#, c-format -msgid "key %08lX: revocation certificate added\n" -msgstr "ËÌÀÞ %08lX: ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ ÄÏÂÁ×ÌÅÎ\n" - -#: g10/import.c:1130 g10/import.c:1183 -#, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "ËÌÀÞ %08lX: ÎÁÛÁ ËÏÐÉÑ ÎÅ ÉÍÅÅÔ ÓÁÍÏ-ÐÏÄÐÉÓÉ\n" - -#: g10/keyedit.c:150 -msgid "[revocation]" -msgstr "" - -#: g10/keyedit.c:151 -#, fuzzy -msgid "[self-signature]" -msgstr "[ÓÁÍÏ-ÐÏÄÐÉÓØ]\n" - -#: g10/keyedit.c:215 -#, fuzzy -msgid "1 bad signature\n" -msgstr "1 ÐÌÏÈÁÑ ÐÏÄÐÉÓØ\n" - -#: g10/keyedit.c:217 -#, c-format -msgid "%d bad signatures\n" -msgstr "%d ÐÌÏÈÉÈ ÐÏÄÐÉÓÅÊ\n" - -#: g10/keyedit.c:219 -#, fuzzy -msgid "1 signature not checked due to a missing key\n" -msgstr "1 ÐÏÄÐÉÓØ ÎÅ ÐÒÏ×ÅÒÅÎÁ ÉÚ-ÚÁ ÏÔÓÕÔÓÔ×ÉÑ ËÌÀÞÁ\n" - -#: g10/keyedit.c:221 -#, fuzzy, c-format -msgid "%d signatures not checked due to missing keys\n" -msgstr "%s ÐÏÄÐÉÓÅÊ ÎÅ ÐÒÏ×ÅÒÅÎÏ ÉÚ-ÚÁ ÏÔÓÕÔÓÔ×ÉÑ ËÌÀÞÅÊ\n" - -#: g10/keyedit.c:223 -#, fuzzy -msgid "1 signature not checked due to an error\n" -msgstr "1 ÐÏÄÐÉÓØ ÎÅ ÐÒÏ×ÅÒÅÎÁ ÉÚ-ÚÁ ÏÛÉÂËÉ\n" - -#: g10/keyedit.c:225 -#, c-format -msgid "%d signatures not checked due to errors\n" -msgstr "%s ÐÏÄÐÉÓÅÊ ÎÅ ÐÒÏ×ÅÒÅÎÏ ÉÚ-ÚÁ ÏÛÉÂÏË\n" - -#: g10/keyedit.c:227 -#, fuzzy -msgid "1 user ID without valid self-signature detected\n" -msgstr "ÏÂÎÁÒÕÖÅÎ 1 ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ ÂÅÚ ÄÏÐÕÓÔÉÍÏÊ ÓÁÍÏ-ÐÏÄÐÉÓÉ\n" - -#: g10/keyedit.c:229 -#, fuzzy, c-format -msgid "%d user IDs without valid self-signatures detected\n" -msgstr "" -"ÏÂÎÁÒÕÖÅÎÏ %d ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ ÂÅÚ ÄÏÐÕÓÔÉÍÙÈ ÓÁÍÏ-ÐÏÄÐÉÓÅÊ\n" - -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 -#, fuzzy, c-format -msgid "Already signed by key %08lX\n" -msgstr "õÖÅ ÐÏÄÐÉÓÁÎÏ ËÌÀÞÏÍ %08lX.\n" - -#: g10/keyedit.c:319 -#, fuzzy, c-format -msgid "Nothing to sign with key %08lX\n" -msgstr "îÅÞÅÇÏ ÐÏÄÐÉÓÙ×ÁÔØ ËÌÀÞÁÍ %08lX\n" - -#: g10/keyedit.c:328 -#, fuzzy -msgid "" -"Are you really sure that you want to sign this key\n" -"with your key: \"" -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÐÏÄÐÉÓÁÔØ ÜÔÏÔ ËÌÀÞ Ó×ÏÉÍ:\n" - -#: g10/keyedit.c:337 -msgid "" -"The signature will be marked as non-exportable.\n" -"\n" -msgstr "" - -#: g10/keyedit.c:342 -msgid "Really sign? " -msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÐÏÄÐÉÓÁÔØ? " - -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 -#, fuzzy, c-format -msgid "signing failed: %s\n" -msgstr "ÏÛÉÂËÁ ÐÏÄÐÉÓÙ×ÁÎÉÑ: %s\n" - -#: g10/keyedit.c:422 -msgid "This key is not protected.\n" -msgstr "üÔÏÔ ËÌÀÞ ÎÅ ÚÁÝÉÝÅÎ.\n" - -#: g10/keyedit.c:426 -#, fuzzy -msgid "Secret parts of primary key are not available.\n" -msgstr "óÅËÒÅÔÎÙÊ ËÌÀÞ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ" - -#: g10/keyedit.c:430 -msgid "Key is protected.\n" -msgstr "üÔÏÔ ËÌÀÞ ÚÁÝÉÝÅÎ.\n" - -#: g10/keyedit.c:450 -#, c-format -msgid "Can't edit this key: %s\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ: %s\n" - -#: g10/keyedit.c:455 -msgid "" -"Enter the new passphrase for this secret key.\n" -"\n" -msgstr "" -"÷×ÅÄÉÔÅ ÎÏ×ÕÀ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ ÄÌÑ ÜÔÏÇÏ ÓÅËÒÅÔÎÏÇÏ ËÌÀÞÁ.\n" -"\n" - -#: g10/keyedit.c:467 -msgid "" -"You don't want a passphrase - this is probably a *bad* idea!\n" -"\n" -msgstr "" -"÷Ù ÎÅ ÈÏÔÉÔÅ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ - ÜÔÏ ÓËÏÒÅÅ ×ÓÅÇÏ *ÐÌÏÈÁÑ* ÉÄÅÑ!\n" -"\n" - -#: g10/keyedit.c:470 -msgid "Do you really want to do this? " -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÜÔÏÇÏ ÈÏÔÉÔÅ? " - -#: g10/keyedit.c:534 -msgid "moving a key signature to the correct place\n" -msgstr "" - -#: g10/keyedit.c:575 -msgid "quit this menu" -msgstr "×ÙÊÔÉ ÉÚ ÍÅÎÀ" - -#: g10/keyedit.c:576 -msgid "q" -msgstr "" - -#: g10/keyedit.c:577 -msgid "save" -msgstr "ÚÁÐÉÓÁÔØ" - -#: g10/keyedit.c:577 -msgid "save and quit" -msgstr "ÚÁÐÉÓÁÔØ É ×ÙÊÔÉ" - -#: g10/keyedit.c:578 -msgid "help" -msgstr "ÐÏÍÏÝØ" - -#: g10/keyedit.c:578 -msgid "show this help" -msgstr "ÐÏËÁÚÁÔØ ÐÏÍÏÝØ" - -#: g10/keyedit.c:580 -msgid "fpr" -msgstr "" - -#: g10/keyedit.c:580 -#, fuzzy -msgid "show fingerprint" -msgstr "ÐÏËÁÚÁÔØ \"ÏÔÐÅÞÁÔÏË ÐÁÌØÃÁ\"" - -#: g10/keyedit.c:581 -#, fuzzy -msgid "list" -msgstr "ÓÐÉÓÏË" - -#: g10/keyedit.c:581 -#, fuzzy -msgid "list key and user IDs" -msgstr "ÓÐÉÓÏË ËÌÀÞÅÊ É ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ" - -#: g10/keyedit.c:582 -msgid "l" -msgstr "" - -#: g10/keyedit.c:583 -msgid "uid" -msgstr "" - -#: g10/keyedit.c:583 -#, fuzzy -msgid "select user ID N" -msgstr "×ÙÂÒÁÔØ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ N" - -#: g10/keyedit.c:584 -msgid "key" -msgstr "ËÌÀÞ" - -#: g10/keyedit.c:584 -msgid "select secondary key N" -msgstr "×ÙÂÒÁÔØ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ËÌÀÞ N" - -#: g10/keyedit.c:585 -msgid "check" -msgstr "ÐÒÏ×ÅÒËÁ" - -#: g10/keyedit.c:585 -#, fuzzy -msgid "list signatures" -msgstr "ÓÐÉÓÏË ËÌÀÞÅÊ É ÉÈ ÐÏÄÐÉÓÅÊ" - -#: g10/keyedit.c:586 -msgid "c" -msgstr "" - -#: g10/keyedit.c:587 -msgid "sign" -msgstr "ÐÏÄÐÉÓÁÔØ" - -#: g10/keyedit.c:587 -#, fuzzy -msgid "sign the key" -msgstr "ÐÏÄÐÉÓÁÔØ ËÌÀÞ" - -#: g10/keyedit.c:588 -msgid "s" -msgstr "" - -#: g10/keyedit.c:589 -#, fuzzy -msgid "lsign" -msgstr "ÐÏÄÐÉÓÁÔØ" - -#: g10/keyedit.c:589 -#, fuzzy -msgid "sign the key locally" -msgstr "ÐÏÄÐÉÓÁÔØ ËÌÀÞ" - -#: g10/keyedit.c:590 -msgid "debug" -msgstr "ÏÔÌÁÄËÁ" - -#: g10/keyedit.c:591 -msgid "adduid" -msgstr "" - -#: g10/keyedit.c:591 -#, fuzzy -msgid "add a user ID" -msgstr "ÄÏÂÁ×ÉÔØ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: g10/keyedit.c:592 -msgid "deluid" -msgstr "" - -#: g10/keyedit.c:592 -#, fuzzy -msgid "delete user ID" -msgstr "ÕÄÁÌÉÔØ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: g10/keyedit.c:593 -msgid "addkey" -msgstr "" - -#: g10/keyedit.c:593 -#, fuzzy -msgid "add a secondary key" -msgstr "ÄÏÂÁ×ÉÔØ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ËÌÀÞ" - -#: g10/keyedit.c:594 -msgid "delkey" -msgstr "" - -#: g10/keyedit.c:594 -msgid "delete a secondary key" -msgstr "ÕÄÁÌÉÔØ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ËÌÀÞ" - -#: g10/keyedit.c:595 -#, fuzzy -msgid "delsig" -msgstr "ÐÏÄÐÉÓÁÔØ" - -#: g10/keyedit.c:595 -#, fuzzy -msgid "delete signatures" -msgstr "ÓÐÉÓÏË ËÌÀÞÅÊ É ÉÈ ÐÏÄÐÉÓÅÊ" - -#: g10/keyedit.c:596 -msgid "expire" -msgstr "" - -#: g10/keyedit.c:596 -#, fuzzy -msgid "change the expire date" -msgstr "ÉÚÍÅÎÉÔØ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ" - -#: g10/keyedit.c:597 -msgid "toggle" -msgstr "" - -#: g10/keyedit.c:597 -msgid "toggle between secret and public key listing" -msgstr "ÐÅÒÅËÌÀÞÉÔØ ÍÅÖÄÕ ÓÐÉÓËÏÍ ÓÅËÒÅÔÎÙÈ É ÏÔËÒÙÔÙÈ ËÌÀÞÅÊ" - -#: g10/keyedit.c:599 -msgid "t" -msgstr "" - -#: g10/keyedit.c:600 -msgid "pref" -msgstr "" - -#: g10/keyedit.c:600 -msgid "list preferences" -msgstr "" - -#: g10/keyedit.c:601 -msgid "passwd" -msgstr "" - -#: g10/keyedit.c:601 -#, fuzzy -msgid "change the passphrase" -msgstr "ÉÚÍÅÎÉÔØ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ" - -#: g10/keyedit.c:602 -msgid "trust" -msgstr "" - -#: g10/keyedit.c:602 -msgid "change the ownertrust" -msgstr "ÉÚÍÅÎÉÔØ ÐÁÒÁÍÅÔÒÙ ÄÏ×ÅÒÉÑ" - -#: g10/keyedit.c:603 -#, fuzzy -msgid "revsig" -msgstr "ÐÏÄÐÉÓÁÔØ" - -#: g10/keyedit.c:603 -#, fuzzy -msgid "revoke signatures" -msgstr "ÐÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ ÎÁ ËÌÀÞÅ" - -#: g10/keyedit.c:604 -#, fuzzy -msgid "revkey" -msgstr "ËÌÀÞ" - -#: g10/keyedit.c:604 -#, fuzzy -msgid "revoke a secondary key" -msgstr "ÕÄÁÌÉÔØ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ËÌÀÞ" - -#: g10/keyedit.c:605 -msgid "disable" -msgstr "" - -#: g10/keyedit.c:605 -#, fuzzy -msgid "disable a key" -msgstr "ðÌÏÈÏÊ ËÌÀÞ" - -#: g10/keyedit.c:606 -msgid "enable" -msgstr "" - -#: g10/keyedit.c:606 -#, fuzzy -msgid "enable a key" -msgstr "ðÌÏÈÏÊ ËÌÀÞ" - -#: g10/delkey.c:103 g10/keyedit.c:624 -msgid "can't do that in batchmode\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÜÔÏ × ÐÁËÅÔÎÏÍ ÒÅÖÉÍÅ.\n" - -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 -#, fuzzy -msgid "Secret key is available.\n" -msgstr "éÍÅÅÔÓÑ ÓÅËÒÅÔÎÙÊ ËÌÀÞ.\n" - -#: g10/keyedit.c:688 -#, fuzzy -msgid "Command> " -msgstr "ëÏÍÁÎÄÁ> " - -#: g10/keyedit.c:718 -#, fuzzy -msgid "Need the secret key to do this.\n" -msgstr "þÔÏÂÙ ÜÔÏ ÓÄÅÌÁÔØ, ÎÕÖÅÎ ÓÅËÒÅÔÎÙÊ ËÌÀÞ.\n" - -#: g10/keyedit.c:722 -msgid "Please use the command \"toggle\" first.\n" -msgstr "" - -#: g10/keyedit.c:769 -#, fuzzy -msgid "Really sign all user IDs? " -msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÐÏÄÐÉÓÁÔØ ×ÓÅ ÉÄÅÎÔÉÆÉËÁÔÏÒÙ ÐÏÌØÚÏ×ÁÔÅÌÑ? " - -#: g10/keyedit.c:770 -#, fuzzy -msgid "Hint: Select the user IDs to sign\n" -msgstr "" -"ðÏÄÓËÁÚËÁ: ×ÙÂÅÒÉÔÅ ÉÄÅÎÔÉÆÉËÁÔÏÒÙ ÐÏÌØÚÏ×ÁÔÅÌÑ ËÏÔÏÒÙÅ ÈÏÔÉÔÅ ÐÏÄÐÉÓÁÔØ\n" - -#: g10/keyedit.c:802 g10/keyedit.c:984 -#, fuzzy, c-format -msgid "update of trustdb failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/keyedit.c:813 g10/keyedit.c:834 -#, fuzzy -msgid "You must select at least one user ID.\n" -msgstr "÷Ù ÄÏÌÖÎÙ ×ÙÂÒÁÔØ ÈÏÔÑ ÂÙ ÏÄÉÎ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ.\n" - -#: g10/keyedit.c:815 -#, fuzzy -msgid "You can't delete the last user ID!\n" -msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÕÄÁÌÉÔØ ÐÏÓÌÅÄÎÉÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ!\n" - -#: g10/keyedit.c:818 -#, fuzzy -msgid "Really remove all selected user IDs? " -msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÕÄÁÌÉÔØ ×ÓÅ ×ÙÂÒÁÎÎÙÅ ÉÄÅÎÔÉÆÉËÁÔÏÒÙ ÐÏÌØÚÏ×ÁÔÅÌÑ? " - -#: g10/keyedit.c:819 -#, fuzzy -msgid "Really remove this user ID? " -msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÕÄÁÌÉÔØ ÜÔÏÔ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ? " - -#: g10/keyedit.c:855 g10/keyedit.c:877 -msgid "You must select at least one key.\n" -msgstr "÷Ù ÄÏÌÖÎÙ ×ÙÂÒÁÔØ ÈÏÔÑ ÂÙ ÏÄÉÎ ËÌÀÞ.\n" - -#: g10/keyedit.c:859 -#, fuzzy -msgid "Do you really want to delete the selected keys? " -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ×ÙÂÒÁÎÎÙÅ ËÌÀÞÉ? " - -#: g10/keyedit.c:860 -#, fuzzy -msgid "Do you really want to delete this key? " -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÜÔÏÔ ËÌÀÞ? " - -#: g10/keyedit.c:881 -#, fuzzy -msgid "Do you really want to revoke the selected keys? " -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ×ÙÂÒÁÎÎÙÅ ËÌÀÞÉ? " - -#: g10/keyedit.c:882 -#, fuzzy -msgid "Do you really want to revoke this key? " -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÜÔÏÔ ËÌÀÞ? " - -#: g10/keyedit.c:948 -msgid "Save changes? " -msgstr "óÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ? " - -#: g10/keyedit.c:951 -msgid "Quit without saving? " -msgstr "÷ÙÊÔÉ ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ? " - -#: g10/keyedit.c:962 -#, fuzzy, c-format -msgid "update failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/keyedit.c:969 -#, fuzzy, c-format -msgid "update secret failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/keyedit.c:976 -msgid "Key not changed so no update needed.\n" -msgstr "ëÌÀÞ ÎÅ ÉÚÍÅÎÉÌÓÑ, ÏÂÎÏ×ÌÅÎÉÅ ÎÅ ÎÕÖÎÏ.\n" - -#: g10/keyedit.c:991 -msgid "Invalid command (try \"help\")\n" -msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ËÏÍÁÎÄÁ (ÐÏÐÒÏÂÕÊÔÅ \"help\")\n" - -#: g10/keyedit.c:1074 g10/keyedit.c:1100 -#, c-format -msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" - -#: g10/keyedit.c:1083 -#, c-format -msgid " trust: %c/%c" -msgstr "" - -#: g10/keyedit.c:1087 -#, fuzzy -msgid "This key has been disabled" -msgstr "úÁÍÅÞÁÎÉÅ: óÒÏË ÄÅÊÓÔ×ÉÑ ËÌÀÞÁ ÕÖÅ ÉÓÔÅË!\n" - -#: g10/keyedit.c:1116 -#, fuzzy, c-format -msgid "rev! subkey has been revoked: %s\n" -msgstr "build_sigrecs: ËÌÀÞ ist widerrufen\n" - -#: g10/keyedit.c:1119 -msgid "rev- faked revocation found\n" -msgstr "" - -#: g10/keyedit.c:1121 -#, c-format -msgid "rev? problem checking revocation: %s\n" -msgstr "" - -#: g10/keyedit.c:1359 -msgid "Delete this good signature? (y/N/q)" -msgstr "" - -#: g10/keyedit.c:1363 -msgid "Delete this invalid signature? (y/N/q)" -msgstr "" - -#: g10/keyedit.c:1367 -#, fuzzy -msgid "Delete this unknown signature? (y/N/q)" -msgstr "ÓÇÅÎÅÒÉÒÏ×ÁÔØ ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/keyedit.c:1373 -#, fuzzy -msgid "Really delete this self-signature? (y/N)" -msgstr "ÓÇÅÎÅÒÉÒÏ×ÁÔØ ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/keyedit.c:1387 -#, fuzzy, c-format -msgid "Deleted %d signature.\n" -msgstr "%d ÐÌÏÈÉÈ ÐÏÄÐÉÓÅÊ\n" - -#: g10/keyedit.c:1388 -#, fuzzy, c-format -msgid "Deleted %d signatures.\n" -msgstr "%d ÐÌÏÈÉÈ ÐÏÄÐÉÓÅÊ\n" - -#: g10/keyedit.c:1391 -#, fuzzy -msgid "Nothing deleted.\n" -msgstr "÷îéíáîéå: éÓÐÏÌØÚÕÅÔÓÑ ËÌÀÞ Ë ËÏÔÏÒÏÍÕ ÎÅÔ ÄÏ×ÅÒÉÑ!\n" - -#: g10/keyedit.c:1460 -msgid "Please remove selections from the secret keys.\n" -msgstr "" - -#: g10/keyedit.c:1466 -#, fuzzy -msgid "Please select at most one secondary key.\n" -msgstr "÷Ù ÄÏÌÖÎÙ ×ÙÂÒÁÔØ ÈÏÔÑ ÂÙ ÏÄÉÎ ËÌÀÞ.\n" - -#: g10/keyedit.c:1470 -msgid "Changing expiration time for a secondary key.\n" -msgstr "" - -#: g10/keyedit.c:1472 -msgid "Changing expiration time for the primary key.\n" -msgstr "" - -#: g10/keyedit.c:1514 -msgid "You can't change the expiration date of a v3 key\n" -msgstr "" - -#: g10/keyedit.c:1530 -msgid "No corresponding signature in secret ring\n" -msgstr "" - -#: g10/keyedit.c:1591 -#, fuzzy, c-format -msgid "No user ID with index %d\n" -msgstr "îÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ Ó ÉÎÄÅËÓÏÍ %d\n" - -#: g10/keyedit.c:1637 -#, c-format -msgid "No secondary key with index %d\n" -msgstr "îÅÔ ÄÏÐÏÌÎÉÔÅÌØÎÏÇÏ ËÌÀÞÁ Ó ÉÎÄÅËÓÏÍ %d\n" - -#: g10/keyedit.c:1735 -#, fuzzy -msgid "user ID: \"" -msgstr "÷×ÅÄÉÔÅ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ: " - -#: g10/keyedit.c:1738 -#, fuzzy, c-format -msgid "" -"\"\n" -"signed with your key %08lX at %s\n" -msgstr "îÅÞÅÇÏ ÐÏÄÐÉÓÙ×ÁÔØ ËÌÀÞÁÍ %08lX\n" - -#: g10/keyedit.c:1742 -#, fuzzy -msgid "Create a revocation certificate for this signature? (y/N)" -msgstr "ÓÇÅÎÅÒÉÒÏ×ÁÔØ ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ" - -#. FIXME: detect duplicates here -#: g10/keyedit.c:1766 -#, fuzzy -msgid "You have signed these user IDs:\n" -msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÕÄÁÌÉÔØ ÐÏÓÌÅÄÎÉÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ!\n" - -#: g10/keyedit.c:1780 g10/keyedit.c:1815 -#, fuzzy, c-format -msgid " signed by %08lX at %s\n" -msgstr "îÅÞÅÇÏ ÐÏÄÐÉÓÙ×ÁÔØ ËÌÀÞÁÍ %08lX\n" - -#: g10/keyedit.c:1785 -#, fuzzy, c-format -msgid " revoked by %08lX at %s\n" -msgstr "îÅÞÅÇÏ ÐÏÄÐÉÓÙ×ÁÔØ ËÌÀÞÁÍ %08lX\n" - -#: g10/keyedit.c:1805 -#, fuzzy -msgid "You are about to revoke these signatures:\n" -msgstr "Möchten Sie einige der ungültigen Signaturen entfernen? " - -#: g10/keyedit.c:1823 -#, fuzzy -msgid "Really create the revocation certificates? (y/N)" -msgstr "ÓÇÅÎÅÒÉÒÏ×ÁÔØ ÏÔÚÙ×ÁÀÝÉÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/keyedit.c:1852 -#, fuzzy -msgid "no secret key\n" -msgstr "ðÌÏÈÏÊ ÓÅËÒÅÔÎÙÊ ËÌÀÞ" - -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ASCII-ËÏÄÉÒÏ×ËÁ" - -#: g10/keylist.c:178 -#, fuzzy -msgid "revoked" -msgstr "ËÌÀÞ" - -#. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 -#, fuzzy, c-format -msgid " [expires: %s]" -msgstr "ëÌÀÞ ÄÅÊÓÔ×ÕÅÔ ÄÏ %s\n" - -#: g10/mainproc.c:212 -#, fuzzy, c-format -msgid "public key is %08lX\n" -msgstr "ïÔËÒÙÔÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ" - -#: g10/mainproc.c:247 -#, fuzzy -msgid "public key encrypted data: good DEK\n" -msgstr "ÒÁÓÛÉÆÒÏ×ËÁ ÏÔËÒÙÔÙÍ ËÌÀÞÏÍ ÎÅ ÕÄÁÌÁÓØ %s\n" - -#: g10/mainproc.c:280 -#, fuzzy, c-format -msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" -msgstr "(%u-ÂÉÔ %s ËÌÀÞ, ID %08lX, ÓÏÚÄÁÎ %s)\n" - -#: g10/mainproc.c:290 -#, fuzzy, c-format -msgid "encrypted with %s key, ID %08lX\n" -msgstr "ðÏÄÐÉÓØ ÓÄÅÌÁÎÁ %.*s, ÉÓÐÏÌØÚÕÑ %s ËÌÀÞ %08lX\n" - -#: g10/mainproc.c:296 -#, fuzzy -msgid "no secret key for decryption available\n" -msgstr "óÅËÒÅÔÎÙÊ ËÌÀÞ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ" - -#: g10/mainproc.c:305 -#, c-format -msgid "public key decryption failed: %s\n" -msgstr "ÒÁÓÛÉÆÒÏ×ËÁ ÏÔËÒÙÔÙÍ ËÌÀÞÏÍ ÎÅ ÕÄÁÌÁÓØ %s\n" - -#: g10/mainproc.c:342 -#, fuzzy -msgid "decryption okay\n" -msgstr "ÒÁÓÛÉÆÒÏ×ËÁ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#: g10/mainproc.c:347 -msgid "WARNING: encrypted message has been manipulated!\n" -msgstr "" - -#: g10/mainproc.c:352 -#, c-format -msgid "decryption failed: %s\n" -msgstr "ÒÁÓÛÉÆÒÏ×ËÁ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#: g10/mainproc.c:371 -#, fuzzy -msgid "NOTE: sender requested \"for-your-eyes-only\"\n" -msgstr "ÚÁÍÅÞÁÎÉÅ: ÏÔÐÒÁ×ÉÔÅÌØ ÚÁÐÒÏÓÉÌ \"ÔÏÌØËÏ-ÄÌÑ-÷ÁÛÉÈ-ÇÌÁÚ\"\n" - -#: g10/mainproc.c:373 -#, c-format -msgid "original file name='%.*s'\n" -msgstr "" - -#: g10/mainproc.c:538 -msgid "standalone revocation - use \"gpg --import\" to apply\n" -msgstr "" - -#: g10/mainproc.c:625 g10/mainproc.c:634 -#, fuzzy -msgid "WARNING: invalid notation data found\n" -msgstr "ÎÅ ÎÁÊÄÅÎÏ ÄÏÐÕÓÔÉÍÙÈ RFC1991 ÉÌÉ OpenPGP ÄÁÎÎÙÈ.\n" - -#: g10/mainproc.c:637 -msgid "Notation: " -msgstr "" - -#: g10/mainproc.c:644 -msgid "Policy: " -msgstr "" - -#: g10/mainproc.c:1074 -msgid "signature verification suppressed\n" -msgstr "" - -#: g10/mainproc.c:1080 -#, c-format -msgid "Signature made %.*s using %s key ID %08lX\n" -msgstr "ðÏÄÐÉÓØ ÓÄÅÌÁÎÁ %.*s, ÉÓÐÏÌØÚÕÑ %s ËÌÀÞ %08lX\n" - -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 -msgid "BAD signature from \"" -msgstr "ðìïèáñ ÐÏÄÐÉÓØ ÏÔ \"" - -#: g10/mainproc.c:1107 g10/mainproc.c:1118 -msgid "Good signature from \"" -msgstr "èÏÒÏÛÁÑ ÐÏÄÐÉÓØ ÏÔ \"" - -#: g10/mainproc.c:1109 -msgid " aka \"" -msgstr "" - -#: g10/mainproc.c:1165 -#, c-format -msgid "Can't check signature: %s\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ: %s\n" - -#: g10/mainproc.c:1230 -#, fuzzy, c-format -msgid "standalone signature of class 0x%02x\n" -msgstr "ðÏÄÐÉÓØ ÎÅÉÚ×ÅÓÔÎÏÇÏ ÔÉÐÁ" - -#: g10/mainproc.c:1282 -msgid "old style (PGP 2.x) signature\n" -msgstr "" - -#: g10/mainproc.c:1287 -msgid "invalid root packet detected in proc_tree()\n" -msgstr "" - -#: g10/misc.c:86 -#, fuzzy, c-format -msgid "can't disable core dumps: %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s': %s\n" - -#: g10/misc.c:314 -msgid "Experimental algorithms should not be used!\n" -msgstr "" - -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" -msgstr "" - -#: g10/parse-packet.c:115 -#, fuzzy, c-format -msgid "can't handle public key algorithm %d\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ Ó×ÑÚËÕ ÏÔËÒÙÔÙÈ ËÌÀÞÅÊ: %s\n" - -#: g10/parse-packet.c:999 -#, c-format -msgid "subpacket of type %d has critical bit set\n" -msgstr "" - -#: g10/passphrase.c:198 -msgid "gpg-agent is not available in this session\n" -msgstr "" - -#: g10/passphrase.c:204 -msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" - -#: g10/hkp.c:158 g10/passphrase.c:223 -#, fuzzy, c-format -msgid "can't connect to `%s': %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ `%s': %s\n" - -#: g10/passphrase.c:284 g10/passphrase.c:522 -#, c-format -msgid " (main key ID %08lX)" -msgstr "" - -#: g10/passphrase.c:294 -#, fuzzy, c-format -msgid "" -"You need a passphrase to unlock the secret key for user:\n" -"\"%.*s\"\n" -"%u-bit %s key, ID %08lX, created %s%s\n" -msgstr "" -"\n" -"÷ÁÍ ÎÕÖÎÁ ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ, ÞÔÏÂÙ ÏÔÏÍËÎÕÔØ ËÌÀÞ\n" -"ÐÏÌØÚÏ×ÁÔÅÌÑ: \"" - -#: g10/passphrase.c:315 -#, fuzzy -msgid "Enter passphrase\n" -msgstr "÷×ÅÄÉÔÅ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ: %s\n" - -#: g10/passphrase.c:317 -#, fuzzy -msgid "Repeat passphrase\n" -msgstr "ðÏ×ÔÏÒÉÔÅ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ: %s\n" - -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -# ################################ -# ####### Help msgids ############ -# ################################ -#: g10/passphrase.c:355 -#, fuzzy -msgid "passphrase too long\n" -msgstr "" -"Bitte geben Sie die \"Passhrase\" ein; dies ist ein geheimer Satz der aus\n" -"beliebigen Zeichen bestehen kann. Was Sie eingegeben wird nicht angezeigt.\n" -"Zur ihrer eigenen Sicherbeit benutzen Sie biite einen Satz, den sie sich\n" -"gut merken könne, der aber nicht leicht zu raten ist; Zitate und andere\n" -"bekannte Texte sind eine SCHLECHTE Wahl, da diese mit Sicherheit online\n" -"verfügbar sind und durch entsprechende Programme zum Raten der " -"\"Passphrase\"\n" -"benutzt werden. Sätze mit persönlicher Bedeutung, die auch noch durch\n" -"falsche Groß-/Kleinschreibung und eingestreute Sonderzeichen verändert " -"werden,\n" -"sind i.d.R. eine gute Wahl" - -#: g10/passphrase.c:367 -msgid "invalid response from agent\n" -msgstr "" - -#: g10/passphrase.c:376 -msgid "cancelled by user\n" -msgstr "" - -#: g10/passphrase.c:379 g10/passphrase.c:445 -#, c-format -msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" - -#: g10/passphrase.c:508 -msgid "" -"\n" -"You need a passphrase to unlock the secret key for\n" -"user: \"" -msgstr "" -"\n" -"÷ÁÍ ÎÕÖÎÁ ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ, ÞÔÏÂÙ ÏÔÏÍËÎÕÔØ ËÌÀÞ\n" -"ÐÏÌØÚÏ×ÁÔÅÌÑ: \"" - -#: g10/passphrase.c:517 -#, fuzzy, c-format -msgid "%u-bit %s key, ID %08lX, created %s" -msgstr "(%u-ÂÉÔ %s ËÌÀÞ, ID %08lX, ÓÏÚÄÁÎ %s)\n" - -#: g10/passphrase.c:555 -#, fuzzy -msgid "can't query password in batchmode\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÜÔÏ × ÐÁËÅÔÎÏÍ ÒÅÖÉÍÅ.\n" - -#: g10/passphrase.c:559 -#, fuzzy -msgid "Enter passphrase: " -msgstr "÷×ÅÄÉÔÅ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ: %s\n" - -#: g10/passphrase.c:563 -#, fuzzy -msgid "Repeat passphrase: " -msgstr "ðÏ×ÔÏÒÉÔÅ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ: %s\n" - -#: g10/plaintext.c:67 -msgid "data not saved; use option \"--output\" to save it\n" -msgstr "ÄÁÎÎÙÅ ÎÅ ÂÙÌÉ ÓÏÈÒÁÎÅÎÙ; ×ÏÓÐÏÌØÚÕÊÔÅÓØ --\"output\" ÄÌÑ ÓÏÈÒÁÎÅÎÉÑ\n" - -#: g10/plaintext.c:324 -#, fuzzy -msgid "Detached signature.\n" -msgstr "%d ÐÌÏÈÉÈ ÐÏÄÐÉÓÅÊ\n" - -#: g10/plaintext.c:328 -msgid "Please enter name of data file: " -msgstr "ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÉÍÑ ÆÁÊÌÁ ÄÁÎÎÙÈ: " - -#: g10/plaintext.c:349 -msgid "reading stdin ...\n" -msgstr "" - -#: g10/plaintext.c:392 -#, c-format -msgid "can't open signed data `%s'\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÐÏÄÐÉÓÁÎÎÙÅ ÄÁÎÎÙÅ `%s' .\n" - -#: g10/pubkey-enc.c:135 -#, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" -msgstr "ÁÎÏÎÉÍÎÙÊ ÐÏÌÕÞÁÔÅÌØ, ÐÒÏÂÕÅÍ ÓÅËÒÅÔÎÙÊ ËÌÀÞ %08lX ...\n" - -#: g10/pubkey-enc.c:141 -#, fuzzy -msgid "okay, we are the anonymous recipient.\n" -msgstr "ïË, ÍÙ -- ÁÎÏÎÉÍÎÙÊ ÐÏÌÕÞÁÔÅÌØ.\n" - -#: g10/pubkey-enc.c:197 -#, fuzzy -msgid "old encoding of the DEK is not supported\n" -msgstr "ÁÌÇÏÒÉÔÍ ÚÁÝÉÔÙ %d ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ\n" - -#: g10/pubkey-enc.c:216 -#, fuzzy, c-format -msgid "cipher algorithm %d is unknown or disabled\n" -msgstr "ÁÌÇÏÒÉÔÍ ÚÁÝÉÔÙ %d ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ\n" - -#: g10/pubkey-enc.c:255 -#, fuzzy, c-format -msgid "NOTE: cipher algorithm %d not found in preferences\n" -msgstr "ÚÁÍÅÞÁÎÉÅ: ÛÉÆÒÏ×ÁÌØÎÙÊ ÁÌÇÏÒÉÔÍ %d ÎÅ ÎÁÊÄÅÎ × ÐÒÅÄÐÏÞÔÅÎÉÑÈ\n" - -#: g10/pubkey-enc.c:261 -#, fuzzy, c-format -msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ËÌÀÞ ÐÏÄÐÉÓÉ ÕÓÔÁÒÅÌ %s\n" - -#: g10/hkp.c:62 -#, c-format -msgid "requesting key %08lX from %s ...\n" -msgstr "" - -#: g10/hkp.c:75 -#, fuzzy, c-format -msgid "can't get key from keyserver: %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ × Ó×ÑÚËÕ ËÌÀÞÅÊ: %s\n" - -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "" - -#: g10/hkp.c:106 -#, fuzzy, c-format -msgid "%s: not a valid key ID\n" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ × ËÏÍÍÅÎÔÁÒÉÉ.\n" - -#: g10/hkp.c:182 -#, fuzzy, c-format -msgid "error sending to `%s': %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/hkp.c:194 -#, c-format -msgid "success sending to `%s' (status=%u)\n" -msgstr "" - -#: g10/hkp.c:197 -#, c-format -msgid "failed sending to `%s': status=%u\n" -msgstr "" - -#: g10/seckey-cert.c:89 -#, fuzzy -msgid "secret key parts are not available\n" -msgstr "óÅËÒÅÔÎÙÊ ËÌÀÞ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ" - -#: g10/seckey-cert.c:95 -#, fuzzy, c-format -msgid "protection algorithm %d is not supported\n" -msgstr "ÁÌÇÏÒÉÔÍ ÚÁÝÉÔÙ %d ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ\n" - -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" -msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ, ÐÏÐÒÏÂÕÊÔÅ ÓÎÏ×Á ...\n" - -#: g10/seckey-cert.c:308 -#, fuzzy -msgid "WARNING: Weak key detected - please change passphrase again.\n" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÏÂÎÁÒÕÖÅÎ ÓÌÁÂÙÊ ËÌÀÞ - ÓÍÅÎÉÔÅ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ.\n" - -#: g10/sig-check.c:279 -msgid "" -"this is a PGP generated ElGamal key which is NOT secure for signatures!\n" -msgstr "ÜÔÏÔ ElGamal ËÌÀÞ, ÓÏÚÄÁÎÎÙÊ PGP, ÎÅ ÎÁÄÅÖÅÎ ÄÌÑ ÓÏÚÄÁÎÉÑ ÐÏÄÐÉÓÅÊ!\n" - -#: g10/sig-check.c:287 -#, fuzzy, c-format -msgid "public key is %lu second newer than the signature\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÐÏÄÐÉÓÉ\n" - -#: g10/sig-check.c:288 -#, fuzzy, c-format -msgid "public key is %lu seconds newer than the signature\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÐÏÄÐÉÓÉ\n" - -#: g10/sig-check.c:306 -#, fuzzy, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ËÌÀÞ ÐÏÄÐÉÓÉ ÕÓÔÁÒÅÌ %s\n" - -#: g10/sig-check.c:375 -msgid "assuming bad signature due to an unknown critical bit\n" -msgstr "" - -#: g10/sign.c:197 -#, fuzzy, c-format -msgid "%s signature from: %s\n" -msgstr "ðìïèáñ ÐÏÄÐÉÓØ ÏÔ \"" - -#: g10/sign.c:435 g10/sign.c:690 -#, fuzzy, c-format -msgid "can't create %s: %s\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/sign.c:538 -#, fuzzy -msgid "signing:" -msgstr "ÐÏÄÐÉÓÁÔØ" - -#: g10/sign.c:583 -#, fuzzy, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "%s: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÕÓÔÏÊ ÆÁÊÌ.\n" - -#: g10/textfilter.c:134 -#, c-format -msgid "can't handle text lines longer than %d characters\n" -msgstr "" - -#: g10/textfilter.c:231 -#, c-format -msgid "input line longer than %d characters\n" -msgstr "" - -#: g10/tdbio.c:116 g10/tdbio.c:1623 -#, fuzzy, c-format -msgid "trustdb rec %lu: lseek failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/tdbio.c:122 g10/tdbio.c:1630 -#, c-format -msgid "trustdb rec %lu: write failed (n=%d): %s\n" -msgstr "" - -#: g10/tdbio.c:232 -msgid "trustdb transaction too large\n" -msgstr "" - -#: g10/tdbio.c:424 -#, fuzzy, c-format -msgid "%s: can't access: %s\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/tdbio.c:438 -#, c-format -msgid "%s: directory does not exist!\n" -msgstr "" - -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, fuzzy, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 -#, fuzzy, c-format -msgid "%s: can't create lock\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/tdbio.c:473 -#, c-format -msgid "%s: failed to create version record: %s" -msgstr "" - -#: g10/tdbio.c:477 -#, fuzzy, c-format -msgid "%s: invalid trustdb created\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/tdbio.c:480 -#, fuzzy, c-format -msgid "%s: trustdb created\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/tdbio.c:517 -#, fuzzy, c-format -msgid "%s: invalid trustdb\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/tdbio.c:550 -#, fuzzy, c-format -msgid "%s: failed to create hashtable: %s\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/tdbio.c:558 -#, fuzzy, c-format -msgid "%s: error updating version record: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 -#, fuzzy, c-format -msgid "%s: error reading version record: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/tdbio.c:587 g10/tdbio.c:646 -#, fuzzy, c-format -msgid "%s: error writing version record: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/tdbio.c:1235 -#, fuzzy, c-format -msgid "trustdb: lseek failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/tdbio.c:1243 -#, fuzzy, c-format -msgid "trustdb: read failed (n=%d): %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/tdbio.c:1264 -#, fuzzy, c-format -msgid "%s: not a trustdb file\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/tdbio.c:1280 -#, c-format -msgid "%s: version record with recnum %lu\n" -msgstr "" - -#: g10/tdbio.c:1285 -#, fuzzy, c-format -msgid "%s: invalid file version %d\n" -msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÎÁÞÁÌÏ ÔÅËÓÔÏ×ÏÊ ÐÏÄÐÉÓÉ\n" - -#: g10/tdbio.c:1589 -#, fuzzy, c-format -msgid "%s: error reading free record: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/tdbio.c:1597 -#, fuzzy, c-format -msgid "%s: error writing dir record: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/tdbio.c:1607 -#, c-format -msgid "%s: failed to zero a record: %s\n" -msgstr "" - -#: g10/tdbio.c:1637 -#, c-format -msgid "%s: failed to append a record: %s\n" -msgstr "" - -#: g10/tdbio.c:1748 -#, fuzzy -msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" -msgstr "âÁÚÁ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ ÒÁÚÒÕÛÅÎÁ: ÚÁÐÕÓÔÉÔÅ \"gpgm --fix-trust-db\".\n" - -#: g10/trustdb.c:169 -#, c-format -msgid "trust record %lu, req type %d: read failed: %s\n" -msgstr "" - -#: g10/trustdb.c:184 -#, c-format -msgid "trust record %lu, type %d: write failed: %s\n" -msgstr "" - -#: g10/trustdb.c:198 -#, fuzzy, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/trustdb.c:212 -#, fuzzy, c-format -msgid "trustdb: sync failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/trustdb.c:377 -#, fuzzy, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/trustdb.c:384 -#, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "" - -#: g10/trustdb.c:389 -#, c-format -msgid "no primary key for LID %lu\n" -msgstr "" - -#: g10/trustdb.c:394 -#, fuzzy, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/trustdb.c:433 -#, fuzzy, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/trustdb.c:474 -#, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ × ËÏÍÍÅÎÔÁÒÉÉ.\n" - -#: g10/trustdb.c:502 -#, fuzzy, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "ËÌÀÞ %08lX.%lu: ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÏÖÉÔØ × ÂÁÚÕ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ\n" - -#: g10/trustdb.c:508 -#, fuzzy, c-format -msgid "key %08lX: query record failed\n" -msgstr "ËÌÀÞ %08lX: ÚÁÐÒÏÓ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÓÑ\n" - -#: g10/trustdb.c:517 -#, fuzzy, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "ËÌÀÞ %08lX: ÕÖÅ ÎÁ Ó×ÑÚËÅ ÓÅËÒÅÔÎÙÈ ËÌÀÞÅÊ\n" - -#: g10/trustdb.c:520 -#, fuzzy, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "ËÌÀÞ %08lX: ÕÖÅ ÎÁ Ó×ÑÚËÅ ÓÅËÒÅÔÎÙÈ ËÌÀÞÅÊ\n" - -#: g10/trustdb.c:547 -#, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "ÓÅËÒÅÔÎÙÊ ËÌÀÞ %08lX: ÎÅ ÉÍÅÅÔ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ.\n" - -#: g10/trustdb.c:566 -#, fuzzy, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "üÔÏÔ ËÌÀÞ ÎÅ ÚÁÝÉÝÅÎ.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "ËÌÀÞ %08lX: ÓÅËÒÅÔÎÙÊ É ÏÔËÒÙÔÏÇÏ ËÌÀÞÉ ÎÅ ÓÏ×ÐÁÄÁÀÔ.\n" - -#: g10/trustdb.c:598 -#, fuzzy, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/trustdb.c:994 -#, fuzzy, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, fuzzy, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÄÏÐÕÓÔÉÍÙÈ ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ\n" - -#: g10/trustdb.c:1012 -#, fuzzy, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "ËÌÀÞ %08lX.%lu: ÓÒÏË ÄÅÊÓÔ×ÉÑ ÉÓÔÅË %s\n" - -#: g10/trustdb.c:1018 -#, fuzzy, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "ËÌÀÞ %08lX: ÏÔËÒÙÔÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ: %s\n" - -#: g10/trustdb.c:1029 -#, fuzzy, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "ËÌÀÞ %08lX: ÎÅÔ ÄÏÐÕÓÔÉÍÙÈ ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ\n" - -#: g10/trustdb.c:1140 -#, fuzzy -msgid "Good self-signature" -msgstr "[ÓÁÍÏ-ÐÏÄÐÉÓØ]\n" - -#: g10/trustdb.c:1150 -#, fuzzy -msgid "Invalid self-signature" -msgstr "ËÌÀÞ %08lX: ÎÅÄÏÐÕÓÔÉÍÁÑ ÓÁÍÏ-ÐÏÄÐÉÓØ\n" - -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" -msgstr "" - -#: g10/trustdb.c:1183 -#, fuzzy -msgid "Valid user ID revocation" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ×ÙÂÏÒ.\n" - -#: g10/trustdb.c:1188 -#, fuzzy -msgid "Invalid user ID revocation" -msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ×ÙÂÏÒ.\n" - -#: g10/trustdb.c:1230 -#, fuzzy -msgid "Valid certificate revocation" -msgstr "ðÌÏÈÏÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/trustdb.c:1231 -#, fuzzy -msgid "Good certificate" -msgstr "ðÌÏÈÏÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/trustdb.c:1259 -#, fuzzy -msgid "Invalid certificate revocation" -msgstr "ðÌÏÈÏÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/trustdb.c:1260 -#, fuzzy -msgid "Invalid certificate" -msgstr "ðÌÏÈÏÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 -#, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "" - -#: g10/trustdb.c:1340 -#, fuzzy -msgid "duplicated certificate - deleted" -msgstr "ðÌÏÈÏÊ ÓÅÒÔÉÆÉËÁÔ" - -#: g10/trustdb.c:1661 -#, fuzzy, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "ÏÛÉÂËÁ ÄÅËÏÄÉÒÏ×ÁÎÉÑ: %s\n" - -#: g10/trustdb.c:1795 -#, fuzzy, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/trustdb.c:1800 -#, fuzzy, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "" - -#: g10/trustdb.c:1811 -#, fuzzy, c-format -msgid "error reading dir record: %s\n" -msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, fuzzy, c-format -msgid "\t%lu keys with errors\n" -msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÆÁÊÌÁ" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "" - -#: g10/trustdb.c:1826 -#, fuzzy, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÓÅËÒÅÔÁ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "" - -#: g10/trustdb.c:1884 -#, fuzzy, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "ËÌÀÞ %08lX: %d ÎÏ×ÙÈ ÐÏÄ-ËÌÀÞÅÊ\n" - -#: g10/trustdb.c:1886 -#, fuzzy, c-format -msgid "\t%lu keys skipped\n" -msgstr "%s: ÐÒÏÐÕÝÅÎ: %s\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "" - -#: g10/trustdb.c:2239 -#, fuzzy -msgid "Ooops, no user IDs\n" -msgstr "ÓÐÉÓÏË ËÌÀÞÅÊ É ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ" - -#: g10/trustdb.c:2397 -#, fuzzy, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ËÁ ÄÏ×ÅÒÉÔÅÌØÎÏÊ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#: g10/trustdb.c:2406 -#, fuzzy, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ËÁ ÄÏ×ÅÒÉÔÅÌØÎÏÊ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ÌÅÎ × ÂÁÚÕ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" -msgstr "" -"ËÌÀÞ %08lX.%lu: ÓÇÅÎÅÒÉÒÏ×ÁÎ × ÂÕÄÕÝÅÍ (ÎÅÐÒÁ×ÉÌØÎÏ ÕÓÔÁÎÏ×ÌÅÎÙ ÞÁÓÙ)\n" - -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "ËÌÀÞ %08lX.%lu: ÓÒÏË ÄÅÊÓÔ×ÉÑ ÉÓÔÅË %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "ËÌÀÞ %08lX.%lu: ÐÒÏ×ÅÒËÁ ÄÏ×ÅÒÉÑ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#: g10/trustdb.c:2592 -#, fuzzy, c-format -msgid "user '%s' not found: %s\n" -msgstr "%s: ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÎÁÊÄÅÎ\n" - -#: g10/trustdb.c:2594 -#, fuzzy, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "ïÛÉÂËÁ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ: %s\n" - -#: g10/trustdb.c:2597 -#, fuzzy, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#: g10/trustdb.c:2600 -#, fuzzy, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "ïÛÉÂËÁ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ÂÁÚÙ ÄÁÎÎÙÈ ÄÏ×ÅÒÉÑ: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "" - -#: g10/verify.c:82 -msgid "" -"the signature could not be verified.\n" -"Please remember that the signature file (.sig or .asc)\n" -"should be the first file given on the command line.\n" -msgstr "" - -#: g10/verify.c:147 -#, c-format -msgid "input line %u too long or missing LF\n" -msgstr "" - -#: g10/ringedit.c:296 -#, fuzzy, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, fuzzy, c-format -msgid "%s: keyring created\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, fuzzy, c-format -msgid "%s is the unchanged one\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎ ÎÅÐÒÁ×ÉÌØÎÙÊ ÓÅËÒÅÔÎÙÊ ËÌÀÞ" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "" - -#: g10/skclist.c:98 -#, fuzzy, c-format -msgid "skipped `%s': %s\n" -msgstr "%s: ÐÒÏÐÕÝÅÎ: %s\n" - -#: g10/skclist.c:105 -#, fuzzy, c-format -msgid "" -"skipped `%s': this is a PGP generated ElGamal key which is not secure for " -"signatures!\n" -msgstr "ÜÔÏÔ ElGamal ËÌÀÞ, ÓÏÚÄÁÎÎÙÊ PGP, ÎÅ ÎÁÄÅÖÅÎ ÄÌÑ ÓÏÚÄÁÎÉÑ ÐÏÄÐÉÓÅÊ!\n" - -#. do not overwrite -#: g10/openfile.c:84 -#, c-format -msgid "File `%s' exists. " -msgstr "æÁÊÌ `%s' ÓÕÝÅÓÔ×ÕÅÔ. " - -#: g10/openfile.c:86 -msgid "Overwrite (y/N)? " -msgstr "ðÅÒÅÐÉÓÁÔØ (y/N)? " - -#: g10/openfile.c:120 -#, c-format -msgid "%s: unknown suffix\n" -msgstr "" - -#: g10/openfile.c:142 -#, fuzzy -msgid "Enter new filename" -msgstr "--store [ÉÍÑ ÆÁÊÌÁ]" - -#: g10/openfile.c:183 -#, fuzzy -msgid "writing to stdout\n" -msgstr "ÚÁÐÉÓÙ×ÁÅÔÓÑ × `%s'\n" - -#: g10/openfile.c:262 -#, fuzzy, c-format -msgid "assuming signed data in `%s'\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÐÏÄÐÉÓÁÎÎÙÅ ÄÁÎÎÙÅ `%s' .\n" - -#: g10/openfile.c:312 -#, c-format -msgid "%s: new options file created\n" -msgstr "" - -#: g10/openfile.c:339 -#, fuzzy, c-format -msgid "%s: can't create directory: %s\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/openfile.c:342 -#, fuzzy, c-format -msgid "%s: directory created\n" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s\n" - -#: g10/openfile.c:344 -msgid "you have to start GnuPG again, so it can read the new options file\n" -msgstr "" - -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "" - -#: g10/encr-data.c:69 -#, fuzzy, c-format -msgid "%s encrypted data\n" -msgstr "ÚÁÛÉÆÒÏ×ÁÔØ ÄÁÎÎÙÅ" - -#: g10/encr-data.c:99 -#, fuzzy -msgid "" -"WARNING: message was encrypted with a weak key in the symmetric cipher.\n" -msgstr "" -"ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÓÏÏÂÝÅÎÉÅ ÂÙÌÏ ÚÁÛÉÆÒÏ×ÁÎÏ, ÉÓÐÏÌØÚÕÑ ÓÌÁÂÙÊ ËÌÀÞ, × " -"ÓÉÍÍÅÔÒÉÞÎÏÍ ÁÌÇÏÒÉÔÍÅ ÛÉÆÒÏ×ÁÎÉÑ.\n" - -#: g10/seskey.c:61 -msgid "weak key created - retrying\n" -msgstr "ÐÏÌÕÞÉÌÓÑ ÓÌÁÂÙÊ ËÌÀÞ, ÐÒÏÂÕÅÍ ÅÝÅ ÒÁÚ\n" - -#: g10/seskey.c:66 -#, c-format -msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" -msgstr "" -"ÎÅ ÐÏÌÕÞÁÅÔÓÑ ÉÚÂÅÖÁÔØ ÓÌÁÂÏÇÏ ËÌÀÞÁ × ÓÉÍÍÅÔÒÉÞÎÏÍ ÁÌÇÏÒÉÔÍÅ; ÐÒÏÂÏ×ÁÌÉ %d " -"ÒÁÚ!\n" - -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "Es gibt einen privaten ËÌÀÞ zu diesem öffentlichen ËÌÀÞ!\n" - -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "" -"Benutzen Sie das Kommando \"--delete-secret-key\", um ihn vorab zu " -"entfernen.\n" - -#: g10/delkey.c:107 -msgid "can't do that in batchmode without \"--yes\"\n" -msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgeführt werden.\n" - -#: g10/delkey.c:129 -msgid "Delete this key from the keyring? " -msgstr "Diesen ËÌÀÞ aus dem ËÌÀÞring löschen? " - -#: g10/delkey.c:137 -msgid "This is a secret key! - really delete? " -msgstr "Dies ist ein privater ËÌÀÞ! - Wirklich löschen? " - -#: g10/helptext.c:47 -#, fuzzy -msgid "" -"It's up to you to assign a value here; this value will never be exported\n" -"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" -"to do with the (implicitly created) web-of-certificates." -msgstr "" -"Sie müssen selbt entscheiden, welchen Wert Sie hier eintragen; dieser Wert\n" -"wird niemals an eine dritte Seite weitergegeben. Wir brauchen diesen Wert,\n" -"um das \"Netz des Vertrauens\" aufzubauen. Dieses hat nichts mit dem " -"(implizit\n" -"erzeugten) \"Netz der Zertifikate\" zu tun.\n" - -#: g10/helptext.c:53 -msgid "If you want to use this revoked key anyway, answer \"yes\"." -msgstr "" - -#: g10/helptext.c:57 -msgid "If you want to use this untrusted key anyway, answer \"yes\"." -msgstr "" - -#: g10/helptext.c:61 -msgid "" -"Enter the user ID of the addressee to whom you want to send the message." -msgstr "" - -#: g10/helptext.c:65 -msgid "" -"Select the algorithm to use.\n" -"\n" -"DSA (aka DSS) is the digital signature algorithm which can only be used\n" -"for signatures. This is the suggested algorithm because verification of\n" -"DSA signatures are much faster than those of ElGamal.\n" -"\n" -"ElGamal is an algorithm which can be used for signatures and encryption.\n" -"OpenPGP distinguishs between two flavors of this algorithms: an encrypt " -"only\n" -"and a sign+encrypt; actually it is the same, but some parameters must be\n" -"selected in a special way to create a safe key for signatures: this program\n" -"does this but other OpenPGP implementations are not required to understand\n" -"the signature+encryption flavor.\n" -"\n" -"The first (primary) key must always be a key which is capable of signing;\n" -"this is the reason why the encryption only ElGamal key is not available in\n" -"this menu." -msgstr "" - -#: g10/helptext.c:85 -msgid "" -"Although these keys are defined in RFC2440 they are not suggested\n" -"because they are not supported by all programs and signatures created\n" -"with them are quite large and very slow to verify." -msgstr "" - -#: g10/helptext.c:92 -#, fuzzy -msgid "Enter the size of the key" -msgstr "÷×ÅÄÉÔÅ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ: " - -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 -msgid "Answer \"yes\" or \"no\"" -msgstr "" - -#: g10/helptext.c:106 -msgid "" -"Enter the required value as shown in the prompt.\n" -"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" -"get a good error response - instead the system tries to interpret\n" -"the given value as an interval." -msgstr "" - -#: g10/helptext.c:118 -msgid "Enter the name of the key holder" -msgstr "" - -#: g10/helptext.c:123 -msgid "please enter an optional but highly suggested email address" -msgstr "" - -#: g10/helptext.c:127 -#, fuzzy -msgid "Please enter an optional comment" -msgstr "ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÉÍÑ ÆÁÊÌÁ ÄÁÎÎÙÈ: " - -#: g10/helptext.c:132 -msgid "" -"N to change the name.\n" -"C to change the comment.\n" -"E to change the email address.\n" -"O to continue with key generation.\n" -"Q to to quit the key generation." -msgstr "" - -#: g10/helptext.c:141 -msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." -msgstr "" - -#: g10/helptext.c:164 -msgid "Answer \"yes\" is you want to sign ALL the user IDs" -msgstr "" - -#: g10/helptext.c:168 -msgid "" -"Answer \"yes\" if you really want to delete this user ID.\n" -"All certificates are then also lost!" -msgstr "" - -#: g10/helptext.c:173 -msgid "Answer \"yes\" if it is okay to delete the subkey" -msgstr "" - -#: g10/helptext.c:178 -msgid "" -"This is a valid signature on the key; you normally don't want\n" -"to delete this signature because it may be important to establish a\n" -"trust connection to the key or another key certified by this key." -msgstr "" - -#: g10/helptext.c:183 -msgid "" -"This signature can't be checked because you don't have the\n" -"corresponding key. You should postpone its deletion until you\n" -"know which key was used because this signing key might establish\n" -"a trust connection through another already certified key." -msgstr "" - -#: g10/helptext.c:189 -msgid "" -"The signature is not valid. It does make sense to remove it from\n" -"your keyring." -msgstr "" - -#: g10/helptext.c:193 -msgid "" -"This is a signature which binds the user ID to the key. It is\n" -"usually not a good idea to remove such a signature. Actually\n" -"GnuPG might not be able to use this key anymore. So do this\n" -"only if this self-signature is for some reason not valid and\n" -"a second one is available." -msgstr "" - -#: g10/helptext.c:202 -msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " -msgstr "" - -#: g10/helptext.c:209 -msgid "Please repeat the last passphrase, so you are sure what you typed in." -msgstr "" - -#: g10/helptext.c:213 -msgid "Give the name of the file to which the signature applies" -msgstr "" - -#: g10/helptext.c:218 -msgid "Answer \"yes\" if it is okay to overwrite the file" -msgstr "" - -#: g10/helptext.c:223 -msgid "" -"Please enter a new filename. If you just hit RETURN the default\n" -"file (which is shown in brackets) will be used." -msgstr "" - -#: g10/helptext.c:229 -msgid "" -"You should specify a reason for the certification. Depending on the\n" -"context you have the ability to choose from this list:\n" -" \"Key has been compromised\"\n" -" Use this if you have a reason to believe that unauthorized persons\n" -" got access to your secret key.\n" -" \"Key is superseeded\"\n" -" Use this if you have replaced this key with a newer one.\n" -" \"Key is no longer used\"\n" -" Use this if you have retired this key.\n" -" \"User ID is no longer valid\"\n" -" Use this to state that the user ID should not longer be used;\n" -" this is normally used to mark an email address invalid.\n" -msgstr "" - -#: g10/helptext.c:245 -msgid "" -"If you like, you can enter a text describing why you issue this\n" -"revocation certificate. Please keep this text concise.\n" -"An empty line ends the text.\n" -msgstr "" - -#: g10/helptext.c:260 -msgid "No help available" -msgstr "ðÏÍÏÝØ ÏÔÓÕÔÓÔ×ÕÅÔ." - -#: g10/helptext.c:268 -#, c-format -msgid "No help available for `%s'" -msgstr "ðÏÍÏÝØ ÄÌÑ `%s' ÏÔÓÕÔÓÔ×ÕÅÔ." - -#, fuzzy -#~ msgid "No key for user ID\n" -#~ msgstr "ËÌÀÞ %08lX: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ\n" - -#, fuzzy -#~ msgid "No user ID for key\n" -#~ msgstr "ðÌÏÈÏÊ ÓÅËÒÅÔÎÙÊ ËÌÀÞ" - -#~ msgid "no default public keyring\n" -#~ msgstr "ÎÅÔ Ó×ÑÚËÉ ÏÔËÒÙÔÙÈ ËÌÀÞÅÊ ÐÏ ÕÍÏÌÞÁÎÉÀ\n" - -#, fuzzy -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ Ó×ÑÚËÕ ÏÔËÒÙÔÙÈ ËÌÀÞÅÊ: %s\n" - -#, fuzzy -#~ msgid "error writing keyring `%s': %s\n" -#~ msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "ËÌÀÞ %08lX: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ original keyblock: %s\n" - -#~ msgid "%s: user not found\n" -#~ msgstr "%s: ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÎÁÊÄÅÎ\n" - -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "ðÏÌØÚÏ×ÁÎÉÅ RSA ËÌÀÞÁÍÉ ÎÅ ÒÅËÏÍÅÎÄÕÅÔÓÑ, ÐÏÖÁÌÕÊÓÔÁ, ÐÏÄÕÍÁÊÔÅ Ï ÓÏÚÄÁÎÉÉ\n" -#~ "ÎÏ×ÏÇÏ ËÌÀÞÁ ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × ÂÕÄÕÝÅÍ\n" - -#, fuzzy -#~ msgid "not processed" -#~ msgstr "îÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" - -#~ msgid "set debugging flags" -#~ msgstr "ÕÓÔÁÎÏ×ÉÔØ ÏÔÌÁÄÏÞÎÙÅ ÆÌÁÇÉ" - -#~ msgid "enable full debugging" -#~ msgstr "ÒÁÚÒÅÛÉÔØ ×ÓÀ ÏÔÌÁÄËÕ" - -#~ msgid "do not write comment packets" -#~ msgstr "ÎÅ ÐÉÓÁÔØ ÐÁËÅÔÙ Ó ËÏÍÍÅÎÔÁÒÉÑÍÉ" - -#~ msgid "(default is 1)" -#~ msgstr "(ÐÏ ÕÍÏÌÞÁÎÉÀ 1)" - -#~ msgid "(default is 3)" -#~ msgstr "(ÐÏ ÕÍÏÌÞÁÎÉÀ 3)" - -#~ msgid " (%d) ElGamal in a v3 packet\n" -#~ msgstr " (%d) ElGamal × v3-ÐÁËÅÔÅ\n" - -#~ msgid "Key generation can only be used in interactive mode\n" -#~ msgstr "" -#~ "çÅÎÅÒÁÃÉÑ ËÌÀÞÁ ÍÏÖÅÔ ÂÙÔØ ×ÙÐÏÌÎÅÎÁ ÔÏÌØËÏ × ÉÎÔÅÒÁËÔÉ×ÎÏÍ ÒÅÖÉÍÅ.\n" - -#~ msgid "passphrase.repeat" -#~ msgstr "" -#~ "Um sicher zu gehen, daß Sie sich bei der Eingabe der \"Passphrase\" nicht\n" -#~ "vertippt haben, geben Sie diese bitte nochmal ein. Nur wenn beide Eingaben\n" -#~ "übereinstimmen, wird die \"Passphrase\" akzeptiert." - -#, fuzzy -#~ msgid "detached_signature.filename" -#~ msgstr "ÉÍÑ ÆÁÊÌÁ ÄÌÑ ÏÔÄÅÌØÎÏÊ ÐÏÄÐÉÓÉ" - -#~ msgid "openfile.overwrite.okay" -#~ msgstr "÷Ù ÖÅÌÁÅÔÅ ÐÅÒÅÚÁÐÉÓÁÔØ ÆÁÊÌ (×ÏÚÍÏÖÎÁ ÐÏÔÅÒÑ ÄÁÎÎÙÈ)" - -#, fuzzy -#~ msgid "tdbio_search_sdir failed: %s\n" -#~ msgstr "ÏÛÉÂËÁ ÄÅËÏÄÉÒÏ×ÁÎÉÑ: %s\n" - -#~ msgid "print all message digests" -#~ msgstr "ÎÁÐÅÞÁÔÁÔØ ×ÓÅ ÄÁÊÄÖÅÓÔÙ ÓÏÏÂÝÅÎÉÑ" - -#, fuzzy -#~ msgid "lid %lu: user id not found in keyblock\n" -#~ msgstr "%s: ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÎÁÊÄÅÎ\n" - -#, fuzzy -#~ msgid "lid %lu: user id without signature\n" -#~ msgstr "ËÌÀÞ %08lX: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÐÏÄÐÉÓÉ\n" - -#, fuzzy -#~ msgid "lid %lu: self-signature in hintlist\n" -#~ msgstr "build_sigrecs: Selbst-Signatur fehlt\n" - -#, fuzzy -#~ msgid "lid %lu: can't get keyblock: %s\n" -#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÂÌÏË ËÌÀÞÁ: %s\n" - -#, fuzzy -#~ msgid "public key not anymore available" -#~ msgstr "óÅËÒÅÔÎÙÊ ËÌÀÞ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ" - -#, fuzzy -#~ msgid "insert_trust_record: keyblock not found: %s\n" -#~ msgstr "ËÌÀÞ %08lX: ÓÅËÒÅÔÎÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ: %s\n" - -#, fuzzy -#~ msgid "lid %lu: update failed: %s\n" -#~ msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#, fuzzy -#~ msgid "%s: update failed: %s\n" -#~ msgstr "ÏÂÎÏ×ÌÅÎÉÅ ÎÅ ÕÄÁÌÏÓØ: %s\n" - -#, fuzzy -#~ msgid "lid %lu: keyblock not found: %s\n" -#~ msgstr "ËÌÀÞ %08lX: ÏÔËÒÙÔÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ: %s\n" - -#, fuzzy -#~ msgid "can't lock keyring `%': %s\n" -#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ Ó×ÑÚËÕ ÏÔËÒÙÔÙÈ ËÌÀÞÅÊ: %s\n" - -#~ msgid "can't open file: %s\n" -#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ: %s\n" - -#~ msgid "read error: %s\n" -#~ msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ: %s\n" - -#~ msgid "writing keyblock\n" -#~ msgstr "ÚÁÐÉÓÙ×ÁÅÔÓÑ ÂÌÏË ËÌÀÞÁ\n" - -#~ msgid "can't write keyblock: %s\n" -#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÂÌÏË ËÌÀÞÁ: %s\n" - -#~ msgid "can't lock secret keyring: %s\n" -#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ Ó×ÑÚËÕ ÓÅËÒÅÔÎÙÈ ËÌÀÞÅÊ: %s\n" - -#, fuzzy -#~ msgid "can't write keyring: %s\n" -#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ Ó×ÑÚËÕ ËÌÀÞÅÊ: %s\n" - -#, fuzzy -#~ msgid "encrypted message is valid\n" -#~ msgstr "×ÙÂÒÁÎ ÎÅÄÏÐÕÓÔÉÍÙÊ ÄÁÊÄÖÅÓÔ-ÁÌÇÏÒÉÔÍ\n" - -#, fuzzy -#~ msgid "Can't check MDC: %s\n" -#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ: %s\n" - -#~ msgid "Usage: gpgm [options] [files] (-h for help)" -#~ msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: gpgm [ÐÁÒÁÍÅÔÒÙ] [ÆÁÊÌÙ] (-h ÄÌÑ ÐÏÍÏÝÉ)" - -#, fuzzy -#~ msgid "" -#~ "Syntax: gpgm [options] [files]\n" -#~ "GnuPG maintenance utility\n" -#~ msgstr "" -#~ "óÉÎÔÁËÓÉÓ: gpgm [ÐÁÒÁÍÅÔÒÙ] [ÆÁÊÌÙ]\n" -#~ "ðÒÏÇÒÁÍÍÁ ÓÏÐÒÏ×ÏÖÄÅÎÉÑ GNUPG\n" - -#~ msgid "usage: gpgm [options] " -#~ msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: gpgm [ÐÁÒÁÍÅÔÒÙ] " - -#, fuzzy -#~ msgid "lid %lu: read dir record failed: %s\n" -#~ msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ËÁ ÄÏ×ÅÒÉÔÅÌØÎÏÊ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#, fuzzy -#~ msgid "lid %lu: read key record failed: %s\n" -#~ msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ËÁ ÄÏ×ÅÒÉÔÅÌØÎÏÊ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#, fuzzy -#~ msgid "lid %lu: read uid record failed: %s\n" -#~ msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ËÁ ÄÏ×ÅÒÉÔÅÌØÎÏÊ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#, fuzzy -#~ msgid "lid %lu: read pref record failed: %s\n" -#~ msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ËÁ ÄÏ×ÅÒÉÔÅÌØÎÏÊ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#, fuzzy -#~ msgid "lid %lu: read sig record failed: %s\n" -#~ msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ËÁ ÄÏ×ÅÒÉÔÅÌØÎÏÊ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#, fuzzy -#~ msgid "user '%s' read problem: %s\n" -#~ msgstr "%s: ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÎÁÊÄÅÎ\n" - -#, fuzzy -#~ msgid "user '%s' list problem: %s\n" -#~ msgstr "%s: ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÎÁÊÄÅÎ\n" - -#, fuzzy -#~ msgid "user '%s' not in trustdb\n" -#~ msgstr "%s: ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÎÁÊÄÅÎ\n" - -#, fuzzy -#~ msgid "error: invalid fingerprint\n" -#~ msgstr "ÏÛÉÂËÁ × ÚÁ×ÅÒÛÁÀÝÅÊ ÓÔÒÏËÅ\n" - -#, fuzzy -#~ msgid "error: no ownertrust value\n" -#~ msgstr "ÜËÓÐÏÒÔÉÒÏ×ÁÔØ ÐÁÒÁÍÅÔÒÙ ÄÏ×ÅÒÉÑ\n" - -#, fuzzy -#~ msgid "key not in ring: %s\n" -#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ Ó×ÑÚËÕ ËÌÀÞÅÊ: %s\n" - -#, fuzzy -#~ msgid "insert trust record failed: %s\n" -#~ msgstr "ËÌÀÞ %08lX.%lu: ×ÓÔÁ×ËÁ ÄÏ×ÅÒÉÔÅÌØÎÏÊ ÚÁÐÉÓÉ ÎÅ ÕÄÁÌÁÓØ: %s\n" - -#, fuzzy -#~ msgid "Hmmm, public key lost?" -#~ msgstr "ðÌÏÈÏÊ ÏÔËÒÙÔÙÊ ËÌÀÞ" - -#~ msgid "invalid clear text header: " -#~ msgstr "ÎÅÄÏÐÕÓÔÉÍÙÊ ÔÅËÓÔÏ×ÙÊ ÚÁÇÏÌÏ×ÏË: " - -#~ msgid "You will see a list of signators etc. here\n" -#~ msgstr "úÄÅÓØ ×Ù Õ×ÉÄÉÔÅ ÓÐÉÓÏË ÐÏÄÐÉÓÁ×ÛÉÈ É Ô.Ä.\n" - -#~ msgid "key %08lX: already in ultikey_table\n" -#~ msgstr "ËÌÀÞ %08lX: ÕÖÅ × ultikey_table\n" - -#, fuzzy -#~ msgid "key %08lX.%lu, uid %02X%02X: no public key for signature %08lX\n" -#~ msgstr "" -#~ "ËÌÀÞ %08lX.%lu, uid %02X%02X: ÎÅÔ ÏÔËÒÙÔÏÇÏ ËÌÀÞÁ ÄÌÑ ÐÏÄÐÉÓÉ %08lX\n" - -#, fuzzy -#~ msgid "key %08lX.%lu, uid %02X%02X: invalid %ssignature: %s\n" -#~ msgstr "ËÌÀÞ %08lX: ÎÅÄÏÐÕÓÔÉÍÁÑ ÓÁÍÏ-ÐÏÄÐÉÓØ\n" - -#~ msgid "can't write keyring\n" -#~ msgstr "kann ËÌÀÞring nicht schreiben\n" - -#~ msgid "make a signature on a key in the keyring" -#~ msgstr "ËÌÀÞ signieren" - -#~ msgid "edit a key signature" -#~ msgstr "Bearbeiten der Signaturen eines ËÌÀÞs" - -#~ msgid "public and secret subkey created.\n" -#~ msgstr "Öffentlicher und privater ËÌÀÞ erzeugt.\n" - -#~ msgid "No public key for %d signatures\n" -#~ msgstr "Kein öffentlicher ËÌÀÞ für %d Signaturen\n" - -#~ msgid "[User name not available] " -#~ msgstr "[Benuzername nicht verfügbar] " - -#~ msgid "This is a BAD signature!\n" -#~ msgstr "Dies ist eine FALSCHE Signatur!\n" - -#~ msgid "The signature could not be checked!\n" -#~ msgstr "Die Signatur konnte nicht geprüft werden!\n" - -#~ msgid "Checking signatures of this public key certificate:\n" -#~ msgstr "Die Signaturen dieses Zertifikats werden überprüft:\n" diff --git a/po/sv.po b/po/sv.po index 7a6804f69..0e2bc65bd 100644 --- a/po/sv.po +++ b/po/sv.po @@ -12,52 +12,68 @@ # msgid "" msgstr "" -"Project-Id-Version: gnupg 1.0.1e\n" -"POT-Creation-Date: 2000-11-13 21:38+0100\n" -"PO-Revision-Date: 2000-04-23 16:43+02:00\n" +"Project-Id-Version: gnupg 1.0.6\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2001-08-23 10:32+02:00\n" "Last-Translator: Daniel Resare \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -#: util/miscutil.c:278 util/miscutil.c:307 +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Varning: använder osäkert minne!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "operationen är ej möjlig utan tillgång till säkert minne\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(du kan ha använt fel program för denna uppgift)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 msgid "yes" msgstr "ja" -#: util/miscutil.c:279 util/miscutil.c:310 +#: util/miscutil.c:297 util/miscutil.c:334 msgid "yY" msgstr "jJ" -#: util/miscutil.c:280 util/miscutil.c:308 +#: util/miscutil.c:298 util/miscutil.c:332 msgid "no" msgstr "nej" -#: util/miscutil.c:281 util/miscutil.c:311 +#: util/miscutil.c:299 util/miscutil.c:335 msgid "nN" msgstr "nN" -#: g10/keyedit.c:575 util/miscutil.c:309 +#: g10/keyedit.c:815 util/miscutil.c:333 msgid "quit" msgstr "avsluta" -#: util/miscutil.c:312 +#: util/miscutil.c:336 msgid "qQ" msgstr "aA" -#: util/errors.c:55 +#: util/errors.c:54 msgid "general error" msgstr "allmänt fel" -#: util/errors.c:56 +#: util/errors.c:55 msgid "unknown packet type" msgstr "okänd pakettyp" -#: util/errors.c:57 +#: util/errors.c:56 msgid "unknown version" msgstr "okänd version" -#: util/errors.c:58 +#: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "okänd algoritm för publik nyckel" @@ -65,250 +81,263 @@ msgstr "ok # om du har ett bättre förslag kontakta mig gärna på # daniel@resare.com. Andra förslag jag sågat är digest (oöversatt), # fingeravtryck, indatakarakteristik, sammandrag och sammanfattning -#: util/errors.c:59 +#: util/errors.c:58 msgid "unknown digest algorithm" msgstr "okänd algoritm för beräkning av kontrollsumma" -#: util/errors.c:60 +#: util/errors.c:59 msgid "bad public key" msgstr "felaktig publik nyckel" -#: util/errors.c:61 +#: util/errors.c:60 msgid "bad secret key" msgstr "felaktig hemlig nyckel" -#: util/errors.c:62 +#: util/errors.c:61 msgid "bad signature" msgstr "felaktig signatur" -#: util/errors.c:63 +#: util/errors.c:62 msgid "checksum error" msgstr "fel vid beräkning av kontrollsumma" -#: util/errors.c:64 +#: util/errors.c:63 msgid "bad passphrase" msgstr "felaktig lösenordsfras" -#: util/errors.c:65 +#: util/errors.c:64 msgid "public key not found" msgstr "hittade inte publik nyckel" -#: util/errors.c:66 +#: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "okänd chifferalgoritm" -#: util/errors.c:67 +#: util/errors.c:66 msgid "can't open the keyring" msgstr "kan inte öppna nyckelringen" -#: util/errors.c:68 +#: util/errors.c:67 msgid "invalid packet" msgstr "felaktigt paket" -#: util/errors.c:69 +#: util/errors.c:68 msgid "invalid armor" msgstr "felaktigt skal" -#: util/errors.c:70 +#: util/errors.c:69 msgid "no such user id" msgstr "okänd användaridentitet" -#: util/errors.c:71 +#: util/errors.c:70 msgid "secret key not available" msgstr "den hemliga nyckeln är inte tillgänglig" -#: util/errors.c:72 +#: util/errors.c:71 msgid "wrong secret key used" msgstr "fel hemlig nyckel har använts" -#: util/errors.c:73 +#: util/errors.c:72 msgid "not supported" msgstr "ej stödd" -#: util/errors.c:74 +#: util/errors.c:73 msgid "bad key" msgstr "felaktig nyckel" -#: util/errors.c:75 +#: util/errors.c:74 msgid "file read error" msgstr "fel vid läsning av fil" -#: util/errors.c:76 +#: util/errors.c:75 msgid "file write error" msgstr "fel vid skrivning av fil" -#: util/errors.c:77 +#: util/errors.c:76 msgid "unknown compress algorithm" msgstr "okänd komprimeringsalgoritm" -#: util/errors.c:78 +#: util/errors.c:77 msgid "file open error" msgstr "fel vid öppnande av fil" -#: util/errors.c:79 +#: util/errors.c:78 msgid "file create error" msgstr "fel vid skapande av fil" -#: util/errors.c:80 +#: util/errors.c:79 msgid "invalid passphrase" msgstr "felaktig lösenordsfras" -#: util/errors.c:81 +#: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algoritmen för publik nyckel är ej implementerad" -#: util/errors.c:82 +#: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "chifferalgorimten är ej implementerad" -#: util/errors.c:83 +#: util/errors.c:82 msgid "unknown signature class" msgstr "okänd signaturklass" -#: util/errors.c:84 +#: util/errors.c:83 msgid "trust database error" msgstr "fel i tillitsdatabasen" # MPI står för Multiple Precision Integer (tror jag) -#: util/errors.c:85 +#: util/errors.c:84 msgid "bad MPI" msgstr "felaktig MPI" -#: util/errors.c:86 +#: util/errors.c:85 msgid "resource limit" msgstr "resursbegränsning" -#: util/errors.c:87 +#: util/errors.c:86 msgid "invalid keyring" msgstr "felaktig nyckelring" -#: util/errors.c:88 +#: util/errors.c:87 msgid "bad certificate" msgstr "felaktigt certifikat" -#: util/errors.c:89 +#: util/errors.c:88 msgid "malformed user id" msgstr "felformaterad användaridentitet" -#: util/errors.c:90 +#: util/errors.c:89 msgid "file close error" msgstr "fel vid stängning av fil" -#: util/errors.c:91 +#: util/errors.c:90 msgid "file rename error" msgstr "fel vid namnbyte av fil" -#: util/errors.c:92 +#: util/errors.c:91 msgid "file delete error" msgstr "fel vid borttagande av fil" -#: util/errors.c:93 +#: util/errors.c:92 msgid "unexpected data" msgstr "oväntad data" -#: util/errors.c:94 +#: util/errors.c:93 msgid "timestamp conflict" msgstr "konflikt mellan tidsstämplar" -#: util/errors.c:95 +#: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "oanvändbar algoritm för publika nycklar" -#: util/errors.c:96 +#: util/errors.c:95 msgid "file exists" msgstr "filen finns" -#: util/errors.c:97 +#: util/errors.c:96 msgid "weak key" msgstr "svag nyckel" -#: util/errors.c:98 +#: util/errors.c:97 msgid "invalid argument" msgstr "felaktigt argument" -#: util/errors.c:99 +#: util/errors.c:98 msgid "bad URI" msgstr "felaktig URI" -#: util/errors.c:100 +#: util/errors.c:99 msgid "unsupported URI" msgstr "ej stödd URI" -#: util/errors.c:101 +#: util/errors.c:100 msgid "network error" msgstr "nätverksfel" -#: util/errors.c:103 +#: util/errors.c:102 msgid "not encrypted" msgstr "ej krypterad" -#: util/logger.c:227 +#: util/errors.c:103 +msgid "not processed" +msgstr "inte behandlade" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "oanvändbar publik nyckel" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "oanvändbar hemlig nyckel" + +#: util/errors.c:107 +#, fuzzy +msgid "keyserver error" +msgstr "allmänt fel" + +#: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" -msgstr "... detta är en bugg (%s:%d:%s)\n" +msgstr "... detta är ett fel i programmet (%s:%d:%s)\n" -#: util/logger.c:233 +#: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" -msgstr "du har hittat en bugg ... (%s:%d)\\n\n" +msgstr "du har hittat ett fel i programmet ... (%s:%d)\n" -#: cipher/random.c:321 g10/import.c:128 g10/keygen.c:1353 +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 #, c-format msgid "can't open `%s': %s\n" msgstr "kan inte öppna \"%s\": %s\n" -#: cipher/random.c:325 +#: cipher/random.c:324 #, c-format msgid "can't stat `%s': %s\n" msgstr "kan inte ta status på \"%s\": %s\n" -#: cipher/random.c:330 +#: cipher/random.c:329 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "\"%s\" är inte än vanlig fil - ignorerad\n" -#: cipher/random.c:335 +#: cipher/random.c:334 msgid "note: random_seed file is empty\n" msgstr "notera: filen random_seed är tom\n" -#: cipher/random.c:341 +#: cipher/random.c:340 msgid "warning: invalid size of random_seed file - not used\n" msgstr "varning: random_seed har en felaktig storlek och används därför inte\n" -#: cipher/random.c:349 +#: cipher/random.c:348 #, c-format msgid "can't read `%s': %s\n" msgstr "kan inte läsa \"%s\": %s\n" -#: cipher/random.c:387 +#: cipher/random.c:386 msgid "note: random_seed file not updated\n" msgstr "notera: random_seed uppdaterades inte\n" -#: cipher/random.c:407 +#: cipher/random.c:406 #, c-format msgid "can't create `%s': %s\n" msgstr "kan inte skapa \"%s\": %s\n" -#: cipher/random.c:414 +#: cipher/random.c:413 #, c-format msgid "can't write `%s': %s\n" msgstr "kan inte skriva till \"%s\": %s\n" -#: cipher/random.c:417 +#: cipher/random.c:416 #, c-format msgid "can't close `%s': %s\n" msgstr "kan inte stänga \"%s\": %s\n" -#: cipher/random.c:428 -#, c-format -msgid "too many random bits requested; the limit is %d\n" -msgstr "för många slumpmässiga bitar efterfrågades; maximalt antal är %d\n" - -#: cipher/random.c:659 +#: cipher/random.c:662 msgid "WARNING: using insecure random number generator!!\n" msgstr "VARNING: använder en osäker slumptalsgenerator!!\n" -#: cipher/random.c:665 +#: cipher/random.c:663 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" @@ -323,7 +352,7 @@ msgstr "" "ANVÄND INGEN DATA GENERERAD AV DETTA PROGRAM!!\n" "\n" -#: cipher/rndlinux.c:126 +#: cipher/rndlinux.c:142 #, c-format msgid "" "\n" @@ -335,19 +364,7 @@ msgstr "" "en stund för att ge operativsystemet en chans att samla mer entropi!\n" "(Behöver %d fler byte)\n" -#: gcrypt/secmem.c:77 -msgid "Warning: using insecure memory!\n" -msgstr "Varning: använder osäkert minne!\n" - -#: gcrypt/secmem.c:287 -msgid "operation is not possible without initialized secure memory\n" -msgstr "operationen är ej möjlig utan tillgång till säkert minne\n" - -#: gcrypt/secmem.c:288 -msgid "(you may have used the wrong program for this task)\n" -msgstr "(du kan ha använt fel program för denna uppgift)\n" - -#: g10/gpg.c:201 +#: g10/g10.c:287 msgid "" "@Commands:\n" " " @@ -355,139 +372,170 @@ msgstr "" "@Kommandon:\n" " " -#: g10/gpg.c:203 +#: g10/g10.c:289 msgid "|[file]|make a signature" msgstr "|[fil]|skapa en signatur" -#: g10/gpg.c:204 +#: g10/g10.c:290 msgid "|[file]|make a clear text signature" msgstr "|[fil]|skapa en klartext-signatur" -#: g10/gpg.c:205 +#: g10/g10.c:291 msgid "make a detached signature" msgstr "skapa en signatur i en separat fil" -#: g10/gpg.c:206 +#: g10/g10.c:292 msgid "encrypt data" msgstr "kryptera data" -#: g10/gpg.c:207 +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "" + +#: g10/g10.c:294 msgid "encryption only with symmetric cipher" msgstr "endast kryptering med symmetriskt chiffer" -#: g10/gpg.c:208 +#: g10/g10.c:295 msgid "store only" msgstr "endast lagring" -#: g10/gpg.c:209 +#: g10/g10.c:296 msgid "decrypt data (default)" msgstr "dekryptera data (normalläge)" -#: g10/gpg.c:210 +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "" + +#: g10/g10.c:298 msgid "verify a signature" msgstr "verifiera en signatur" -#: g10/gpg.c:212 +#: g10/g10.c:300 msgid "list keys" msgstr "räkna upp nycklar" -#: g10/gpg.c:214 +#: g10/g10.c:302 msgid "list keys and signatures" msgstr "räkna upp nycklar och signaturer" -#: g10/gpg.c:215 +#: g10/g10.c:303 msgid "check key signatures" msgstr "verifiera nyckelsignaturer" -#: g10/gpg.c:216 +#: g10/g10.c:304 msgid "list keys and fingerprints" msgstr "räkna upp nycklar och fingeravtryck" -#: g10/gpg.c:217 +#: g10/g10.c:305 msgid "list secret keys" msgstr "räkna upp hemliga nycklar" -#: g10/gpg.c:218 +#: g10/g10.c:306 msgid "generate a new key pair" msgstr "generera ett nytt nyckelpar" -#: g10/gpg.c:219 -msgid "remove key from the public keyring" +#: g10/g10.c:307 +#, fuzzy +msgid "remove keys from the public keyring" msgstr "ta bort en nyckel från den publika nyckelringen" -#: g10/gpg.c:221 -msgid "remove key from the secret keyring" +#: g10/g10.c:309 +#, fuzzy +msgid "remove keys from the secret keyring" msgstr "ta bort en nyckel från den hemliga nyckelringen" -#: g10/gpg.c:222 +#: g10/g10.c:310 msgid "sign a key" msgstr "signera en nyckel" -#: g10/gpg.c:223 +#: g10/g10.c:311 msgid "sign a key locally" msgstr "signera en nyckel lokalt" -#: g10/gpg.c:224 +#: g10/g10.c:312 +#, fuzzy +msgid "sign a key non-revocably" +msgstr "signera en nyckel lokalt" + +#: g10/g10.c:313 +#, fuzzy +msgid "sign a key locally and non-revocably" +msgstr "signera en nyckel lokalt" + +#: g10/g10.c:314 msgid "sign or edit a key" msgstr "signera eller redigera en nyckel" -#: g10/gpg.c:225 +#: g10/g10.c:315 msgid "generate a revocation certificate" msgstr "generera ett återkallelesecertifikat" -#: g10/gpg.c:226 +#: g10/g10.c:316 msgid "export keys" msgstr "exportera nycklar" -#: g10/gpg.c:227 +#: g10/g10.c:317 msgid "export keys to a key server" msgstr "exportera nycklar till en nyckelserver" -#: g10/gpg.c:228 +#: g10/g10.c:318 msgid "import keys from a key server" msgstr "importera nycklar från en nyckelserver" -#: g10/gpg.c:232 +#: g10/g10.c:320 +#, fuzzy +msgid "search for keys on a key server" +msgstr "exportera nycklar till en nyckelserver" + +#: g10/g10.c:322 +#, fuzzy +msgid "update all keys from a keyserver" +msgstr "importera nycklar från en nyckelserver" + +#: g10/g10.c:326 msgid "import/merge keys" msgstr "importera/slå ihop nycklar" -#: g10/gpg.c:234 +#: g10/g10.c:328 msgid "list only the sequence of packets" msgstr "skriv endast ut paketsekvensen" -#: g10/gpg.c:236 +#: g10/g10.c:330 msgid "export the ownertrust values" msgstr "exportera de värden som representerar ägartillit" -#: g10/gpg.c:238 +#: g10/g10.c:332 msgid "import ownertrust values" msgstr "importera värden som representerar ägartillit" -#: g10/gpg.c:240 +#: g10/g10.c:334 msgid "update the trust database" msgstr "uppdatera tillitsdatabasen" -#: g10/gpg.c:242 -msgid "|[NAMES]|check the trust database" -msgstr "|[NAMN]|kontrollera tillitsdatabasen" +#: g10/g10.c:336 +#, fuzzy +msgid "unattended trust database update" +msgstr "uppdatera tillitsdatabasen" -#: g10/gpg.c:243 +#: g10/g10.c:337 msgid "fix a corrupted trust database" msgstr "reparera en korrupt tillitsdatabas" -#: g10/gpg.c:244 +#: g10/g10.c:338 msgid "De-Armor a file or stdin" msgstr "Skala av en fil eller standard in" -#: g10/gpg.c:246 +#: g10/g10.c:340 msgid "En-Armor a file or stdin" msgstr "Skapa ett skal för en fil eller standard in" -#: g10/gpg.c:248 +#: g10/g10.c:342 msgid "|algo [files]|print message digests" msgstr "|algo [filer]|skriv ut kontrollsummor" -#: g10/gpg.c:253 +#: g10/g10.c:346 msgid "" "@\n" "Options:\n" @@ -497,156 +545,203 @@ msgstr "" "Flaggor:\n" " " -#: g10/gpg.c:255 +#: g10/g10.c:348 msgid "create ascii armored output" msgstr "skapa utdata med ett ascii-skal" -#: g10/gpg.c:257 +#: g10/g10.c:350 msgid "|NAME|encrypt for NAME" msgstr "|NAMN|kryptera för NAMN" -#: g10/gpg.c:260 +#: g10/g10.c:353 msgid "|NAME|use NAME as default recipient" msgstr "|NAMN|använd NAMN som standardvärdet för mottagare" -#: g10/gpg.c:262 +#: g10/g10.c:355 msgid "use the default key as default recipient" msgstr "använd standardnyckeln som standardmottagare" -#: g10/gpg.c:266 +#: g10/g10.c:361 msgid "use this user-id to sign or decrypt" msgstr "använd denna användaridentitet för att signera eller dekryptera" -#: g10/gpg.c:267 +#: g10/g10.c:362 msgid "|N|set compress level N (0 disables)" msgstr "|N|sätt kompressionsnivån till N (0 för att slå av kompression)" -#: g10/gpg.c:269 +#: g10/g10.c:364 msgid "use canonical text mode" msgstr "använd \"ursprunglig text\"-läget" -#: g10/gpg.c:270 +#: g10/g10.c:371 msgid "use as output file" msgstr "använd som fil för utdata" -#: g10/gpg.c:271 +#: g10/g10.c:372 msgid "verbose" msgstr "utförlig" -#: g10/gpg.c:272 +#: g10/g10.c:373 msgid "be somewhat more quiet" msgstr "var något tystare" -#: g10/gpg.c:273 +#: g10/g10.c:374 msgid "don't use the terminal at all" msgstr "använd inte terminalen alls" -#: g10/gpg.c:274 +#: g10/g10.c:375 msgid "force v3 signatures" msgstr "använd v3-signaturer" -#: g10/gpg.c:275 +#: g10/g10.c:376 +#, fuzzy +msgid "do not force v3 signatures" +msgstr "använd v3-signaturer" + +#: g10/g10.c:377 +#, fuzzy +msgid "force v4 key signatures" +msgstr "använd v3-signaturer" + +#: g10/g10.c:378 +#, fuzzy +msgid "do not force v4 key signatures" +msgstr "använd v3-signaturer" + +#: g10/g10.c:379 msgid "always use a MDC for encryption" msgstr "använd alltid en MDC för kryptering" -#: g10/gpg.c:276 +#: g10/g10.c:381 +#, fuzzy +msgid "never use a MDC for encryption" +msgstr "använd alltid en MDC för kryptering" + +#: g10/g10.c:383 msgid "do not make any changes" msgstr "gör inga ändringar" +# syftar på ett användargränsnitt i ett separat program, till exempel gpa #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/gpg.c:278 +#: g10/g10.c:385 msgid "use the gpg-agent" -msgstr "" +msgstr "använd gpg-agenten" -#: g10/gpg.c:279 +#: g10/g10.c:388 msgid "batch mode: never ask" msgstr "batch-läge: fråga aldrig" -#: g10/gpg.c:280 +#: g10/g10.c:389 msgid "assume yes on most questions" msgstr "anta att svaret är ja på de flesta frågor" -#: g10/gpg.c:281 +#: g10/g10.c:390 msgid "assume no on most questions" msgstr "anta att svaret är nej på de flesta frågor" -#: g10/gpg.c:282 +#: g10/g10.c:391 msgid "add this keyring to the list of keyrings" msgstr "lägg till denna nyckelring till listan av nyckelringar" -#: g10/gpg.c:283 +#: g10/g10.c:392 msgid "add this secret keyring to the list" msgstr "lägg till denna hemliga nyckelring till listan" -#: g10/gpg.c:284 +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "" + +#: g10/g10.c:394 msgid "|NAME|use NAME as default secret key" msgstr "|NAMN|använd NAMN som förvald hemlig nyckel" -#: g10/gpg.c:285 +#: g10/g10.c:395 msgid "|HOST|use this keyserver to lookup keys" msgstr "|VÄRD|använd denna nyckelserver för att slå upp nycklar" -#: g10/gpg.c:286 +#: g10/g10.c:397 msgid "|NAME|set terminal charset to NAME" msgstr "|NAMN|sätt teckentabellen för terminalen till NAMN" -#: g10/gpg.c:287 +#: g10/g10.c:398 msgid "read options from file" msgstr "läs flaggor från fil" -#: g10/gpg.c:291 +#: g10/g10.c:402 msgid "|FD|write status info to this FD" msgstr "|FD|skriv statusinformation till denna FD" -#: g10/gpg.c:296 -msgid "|KEYID|ulimately trust this key" -msgstr "" +#: g10/g10.c:404 +#, fuzzy +msgid "|[file]|write status info to file" +msgstr "|FD|skriv statusinformation till denna FD" -#: g10/gpg.c:297 +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|NYCKELID|lita ovillkorligen på denna nyckel" + +#: g10/g10.c:411 msgid "|FILE|load extension module FILE" msgstr "|FIL|ladda tilläggsmodul FIL" -#: g10/gpg.c:298 +#: g10/g10.c:412 msgid "emulate the mode described in RFC1991" msgstr "imitera läget som beskrivs i RFC1991" -#: g10/gpg.c:299 +#: g10/g10.c:413 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "ställ om alla flaggor så att gpg följer OpenPGP-standarden" -#: g10/gpg.c:300 +#: g10/g10.c:414 +#, fuzzy +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "ställ om alla flaggor så att gpg följer OpenPGP-standarden" + +#: g10/g10.c:418 msgid "|N|use passphrase mode N" msgstr "|N|använd lösenordsläget N" -#: g10/gpg.c:302 +#: g10/g10.c:420 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NAMN|använd kontrollsummealgoritmen NAMN för lösenordsfraser" -#: g10/gpg.c:304 +#: g10/g10.c:422 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NAMN|använd chifferalgoritmen NAMN för lösenordsfraser" -#: g10/gpg.c:305 +#: g10/g10.c:424 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAMN|använd chifferalgoritmen NAMN" -#: g10/gpg.c:306 +#: g10/g10.c:425 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAMN|använd kontrollsummealgoritmen NAMN" -#: g10/gpg.c:307 +#: g10/g10.c:426 msgid "|N|use compress algorithm N" msgstr "|N|använd komprimeringsalgoritmen N" -#: g10/gpg.c:308 +#: g10/g10.c:427 msgid "throw keyid field of encrypted packets" msgstr "släng bort nyckelidentitetsfältet från krypterade paket" -#: g10/gpg.c:309 +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "" + +#: g10/g10.c:431 msgid "|NAME=VALUE|use this notation data" msgstr "|NAMN=VÄRDE|använd detta sätt för att beskriva data" -#: g10/gpg.c:312 +#: g10/g10.c:434 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" @@ -654,7 +749,7 @@ msgstr "" "@\n" "(Se manualsidan för en komplett lista på alla kommandon och flaggor)\n" -#: g10/gpg.c:315 +#: g10/g10.c:437 msgid "" "@\n" "Examples:\n" @@ -674,17 +769,17 @@ msgstr "" "--list-keys [namn] visa nycklar\n" "--fingerprint [namn] visa fingeravtryck\n" -#: g10/gpg.c:417 +#: g10/g10.c:579 msgid "Please report bugs to .\n" msgstr "" "Rapportera gärna fel till .\n" "Rapportera gärna fel eller synpunkter på översättningen till .\n" -#: g10/gpg.c:421 +#: g10/g10.c:583 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Användning: gpg [flaggor] [filer] (-h för hjälp)" -#: g10/gpg.c:424 +#: g10/g10.c:586 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -694,7 +789,7 @@ msgstr "" "signera, kontrollera, kryptera eller dekryptera\n" "vilken operation som utförs beror på programmets indata\n" -#: g10/gpg.c:431 +#: g10/g10.c:597 msgid "" "\n" "Supported algorithms:\n" @@ -702,71 +797,117 @@ msgstr "" "\n" "Stödda algoritmer:\n" -#: g10/gpg.c:537 +#: g10/g10.c:671 msgid "usage: gpg [options] " msgstr "användning: gpg [flaggor] " -#: g10/gpg.c:595 +#: g10/g10.c:728 msgid "conflicting commands\n" msgstr "motstridiga kommandon\n" -#: g10/gpg.c:651 -#, c-format -msgid "libgcrypt is too old (need %s, have %s)\n" -msgstr "" - -#: g10/gpg.c:743 +#: g10/g10.c:903 #, c-format msgid "NOTE: no default option file `%s'\n" -msgstr "NOTERA: inställningsfilen \"%s\" saknas\n" +msgstr "OBSERVERA: inställningsfilen \"%s\" saknas\n" -#: g10/gpg.c:747 +#: g10/g10.c:907 #, c-format msgid "option file `%s': %s\n" msgstr "inställningsfil \"%s\": %s\n" -#: g10/gpg.c:754 +#: g10/g10.c:914 #, c-format msgid "reading options from `%s'\n" msgstr "läser flaggor från \"%s\"\n" -#: g10/gpg.c:946 +#: g10/g10.c:1197 #, c-format msgid "%s is not a valid character set\n" msgstr "%s är ingen giltig teckentabell\n" -#: g10/gpg.c:1016 +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, fuzzy, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "VARNING: \"%s\" är en tom fil\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "" + +#: g10/g10.c:1347 msgid "WARNING: program may create a core file!\n" msgstr "VARNING: programmet kan komma att skapa en minnesutskrift!\n" -#: g10/gpg.c:1019 g10/gpg.c:1028 +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "" + +#: g10/g10.c:1358 g10/g10.c:1369 #, c-format msgid "NOTE: %s is not for normal use!\n" -msgstr "NOTERA: %s är inte för normal användning!\n" +msgstr "OBSERVERA: %s är inte för normal användning!\n" -#: g10/gpg.c:1021 +#: g10/g10.c:1360 g10/g10.c:1380 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s är inte tillåten tillsammans med %s!\n" -#: g10/gpg.c:1024 +#: g10/g10.c:1363 #, c-format msgid "%s makes no sense with %s!\n" msgstr "det är ingen poäng att använda %s tillsammans med %s!\n" -#: g10/gpg.c:1044 g10/gpg.c:1056 +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "" + +#: g10/g10.c:1470 g10/g10.c:1482 msgid "selected cipher algorithm is invalid\n" msgstr "den valda chifferalgoritmen är ogiltig\n" -#: g10/gpg.c:1050 g10/gpg.c:1062 +#: g10/g10.c:1476 g10/g10.c:1488 msgid "selected digest algorithm is invalid\n" msgstr "den valda kontrollsummealgoritmen är ogiltig\n" -#: g10/gpg.c:1066 -msgid "the given policy URL is invalid\n" +#: g10/g10.c:1492 +#, fuzzy +msgid "the given signature policy URL is invalid\n" msgstr "angiven URL är ogiltig\n" -#: g10/gpg.c:1069 +#: g10/g10.c:1496 +#, fuzzy +msgid "the given certification policy URL is invalid\n" +msgstr "angiven URL är ogiltig\n" + +#: g10/g10.c:1499 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "kompressionsalgoritmen måste vara i intervallet %d..%d\n" @@ -777,127 +918,145 @@ msgstr "kompressionsalgoritmen m # är ändå litet. Eventuellt borde meddelandena inte alls # översättas för att göra eventuell felsökning lättare # för internationella felsökare -#: g10/gpg.c:1071 +#: g10/g10.c:1501 msgid "completes-needed must be greater than 0\n" msgstr "variabeln \"completes-needed\" måste ha ett värde som är större än 0\n" -#: g10/gpg.c:1073 +#: g10/g10.c:1503 msgid "marginals-needed must be greater than 1\n" msgstr "variabeln \"marginals-needed\" måste vara större än 1\n" -#: g10/gpg.c:1075 +#: g10/g10.c:1505 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "variabeln \"max-cert-depth\" måste ha ett värde mellan 1 och 255\n" -#: g10/gpg.c:1078 +#: g10/g10.c:1508 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" -msgstr "NOTERA: enkelt S2K-läge (0) rekommenderas inte\n" +msgstr "OBSERVERA: enkelt S2K-läge (0) rekommenderas inte\n" -#: g10/gpg.c:1082 +#: g10/g10.c:1512 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ogiltigt S2K-läge; måste vara 0, 1 eller 3\n" -#: g10/gpg.c:1171 +#: g10/g10.c:1516 +#, fuzzy +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "ogiltigt S2K-läge; måste vara 0, 1 eller 3\n" + +#: g10/g10.c:1519 +#, fuzzy +msgid "invalid preferences\n" +msgstr "skriv ut inställningar" + +#: g10/g10.c:1613 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "misslyckades med att initialisera tillitsdatabasen: %s\n" -#: g10/gpg.c:1177 +#: g10/g10.c:1633 msgid "--store [filename]" msgstr "--store [filnamn]" -#: g10/gpg.c:1184 +#: g10/g10.c:1640 msgid "--symmetric [filename]" msgstr "--symmetric [filnamn]" -#: g10/gpg.c:1192 +#: g10/g10.c:1648 msgid "--encrypt [filename]" msgstr "--encrypt [filnamn]" -#: g10/gpg.c:1205 +#: g10/g10.c:1665 msgid "--sign [filename]" msgstr "--sign [filnamn]" -#: g10/gpg.c:1218 +#: g10/g10.c:1678 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [filnamn]" -#: g10/gpg.c:1232 +#: g10/g10.c:1692 +#, fuzzy +msgid "--sign --symmetric [filename]" +msgstr "--symmetric [filnamn]" + +#: g10/g10.c:1701 msgid "--clearsign [filename]" msgstr "--clearsign [filnamn]" -#: g10/gpg.c:1249 +#: g10/g10.c:1719 msgid "--decrypt [filename]" msgstr "--decrypt [filnamn]" -#: g10/gpg.c:1257 +#: g10/g10.c:1730 msgid "--sign-key user-id" msgstr "--sign-key användaridentitet" -#: g10/gpg.c:1265 +#: g10/g10.c:1738 msgid "--lsign-key user-id" msgstr "--lsign-key användaridentitet" -#: g10/gpg.c:1273 +#: g10/g10.c:1746 +#, fuzzy +msgid "--nrsign-key user-id" +msgstr "--sign-key användaridentitet" + +#: g10/g10.c:1754 +#, fuzzy +msgid "--nrlsign-key user-id" +msgstr "--lsign-key användaridentitet" + +#: g10/g10.c:1762 msgid "--edit-key user-id [commands]" msgstr "--edit-key användaridentitet [kommandon]" -#: g10/gpg.c:1289 -msgid "--delete-secret-key user-id" -msgstr "--delete-secret-key användaridentitet" - -#: g10/gpg.c:1292 -msgid "--delete-key user-id" -msgstr "--delete-key användaridentitet" - # Filnamn både med och utan fnuttar finns. lite ologiskt. Vill någon # fixa en patch? -#: g10/encode.c:314 g10/gpg.c:1329 g10/sign.c:543 +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 #, c-format msgid "can't open %s: %s\n" msgstr "kan inte öppna %s: %s\n" -#: g10/gpg.c:1344 +#: g10/g10.c:1833 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [användaridentitet] [nyckelring]" -#: g10/gpg.c:1410 +#: g10/g10.c:1916 #, c-format msgid "dearmoring failed: %s\n" msgstr "misslyckades med att ta bort skalet: %s\n" -#: g10/gpg.c:1418 +#: g10/g10.c:1924 #, c-format msgid "enarmoring failed: %s\n" msgstr "misslyckades med att skapa skal: %s\n" -#: g10/gpg.c:1495 g10/gpg.c:1516 +#: g10/g10.c:2011 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "felaktig hash-algoritm \"%s\"\n" -#: g10/gpg.c:1601 +#: g10/g10.c:2097 msgid "[filename]" msgstr "[filnamn]" -#: g10/gpg.c:1605 +#: g10/g10.c:2101 msgid "Go ahead and type your message ...\n" msgstr "Skriv ditt meddelande här ...\n" # se förra kommentaren -#: g10/decrypt.c:59 g10/gpg.c:1608 g10/verify.c:68 g10/verify.c:113 +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 #, c-format msgid "can't open `%s'\n" msgstr "kan inte öppna \"%s\"\n" -#: g10/gpg.c:1786 +#: g10/g10.c:2313 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "det första tecknet i ett notationsnamn måste vara en bokstav eller\n" "ett understrykningstecken (_)\n" -#: g10/gpg.c:1792 +#: g10/g10.c:2319 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" @@ -905,87 +1064,83 @@ msgstr "" "ett notationsnamn kan bara innehålla bokstäver, siffror, punkter eller\n" "understrykningstecken och sluta med ett likhetstecken\n" -#: g10/gpg.c:1798 +#: g10/g10.c:2325 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "punkter i ett notationsnamn måste vara omgivna av andra tecken\n" -#: g10/gpg.c:1806 +#: g10/g10.c:2333 msgid "a notation value must not use any control characters\n" msgstr "ett notationsvärde får inte inehålla några kontrolltecken\n" -#: g10/armor.c:302 +#: g10/armor.c:314 #, c-format msgid "armor: %s\n" msgstr "skal: %s\n" -#: g10/armor.c:331 +#: g10/armor.c:343 msgid "invalid armor header: " msgstr "felaktig rubrikrad i skalet: " -#: g10/armor.c:338 +#: g10/armor.c:350 msgid "armor header: " msgstr "rad i skalet: " -#: g10/armor.c:349 +#: g10/armor.c:361 msgid "invalid clearsig header\n" msgstr "felaktig rubrikrad i klartextsignatur\n" -#: g10/armor.c:401 +#: g10/armor.c:413 msgid "nested clear text signatures\n" msgstr "flera klartextsignaturer går in i varandra\n" -#: g10/armor.c:525 +#: g10/armor.c:537 msgid "invalid dash escaped line: " msgstr "felaktig bindestreck-kodad rad: " -#: g10/armor.c:537 +#: g10/armor.c:549 msgid "unexpected armor:" msgstr "oväntat skal:" -#: g10/armor.c:654 +#: g10/armor.c:675 g10/armor.c:1242 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "ogiltigt radix64-tecken %02x hoppades över\n" -#: g10/armor.c:697 +#: g10/armor.c:718 msgid "premature eof (no CRC)\n" msgstr "för tidigt filslut (ingen CRC-summa)\n" -#: g10/armor.c:731 +#: g10/armor.c:752 msgid "premature eof (in CRC)\n" msgstr "för tidigt filslut (i CRC-summan)\n" -#: g10/armor.c:735 +#: g10/armor.c:756 msgid "malformed CRC\n" msgstr "felformaterad CRC-summa\n" -#: g10/armor.c:739 +#: g10/armor.c:760 g10/armor.c:1279 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "CRC-fel; %06lx - %06lx\n" -#: g10/armor.c:756 +#: g10/armor.c:780 msgid "premature eof (in Trailer)\n" msgstr "för tidigt filslut (i den avslutande raden)\n" -#: g10/armor.c:760 +#: g10/armor.c:784 msgid "error in trailer line\n" msgstr "fel i avslutande rad\n" -#: g10/armor.c:912 -msgid "For info see http://www.gnupg.org" -msgstr "För information se http://www.gnupg.org/" - -#: g10/armor.c:1033 +#: g10/armor.c:1057 msgid "no valid OpenPGP data found.\n" msgstr "hittade ingen giltig OpenPGP-data.\n" -#: g10/armor.c:1038 +#: g10/armor.c:1062 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "felaktigt skal: raden är längre än %d tecken\n" -#: g10/armor.c:1042 +#: g10/armor.c:1066 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" @@ -993,75 +1148,57 @@ msgstr "" "beror sannolikt på att en felaktig epostserver eller epostklient har " "använts\n" -#. Translators: this shoud fit into 24 bytes to that the fingerprint -#. * data is properly aligned with the user ID -#: g10/keyedit.c:1182 g10/pkclist.c:54 -msgid " Fingerprint:" -msgstr " Fingeravtryck:" - -#: g10/pkclist.c:81 -msgid "Fingerprint:" -msgstr "Fingeravtryck:" - -#: g10/pkclist.c:117 +#: g10/pkclist.c:61 msgid "No reason specified" msgstr "Ingen anledning har angivits" # tveksam översättning. funderar på "ersatt av något bättre" men det # känns inte heller bra -#: g10/pkclist.c:119 -#, fuzzy -msgid "Key is superseeded" +#: g10/pkclist.c:63 +msgid "Key is superseded" msgstr "Nyckeln är ersatt" -#: g10/pkclist.c:121 +#: g10/pkclist.c:65 msgid "Key has been compromised" msgstr "Nyckeln har tappat sin säkerhet" -#: g10/pkclist.c:123 +#: g10/pkclist.c:67 msgid "Key is no longer used" msgstr "Nyckeln används inte längre" -#: g10/pkclist.c:125 -#, fuzzy +#: g10/pkclist.c:69 msgid "User ID is no longer valid" msgstr "Användaridentiteten är inte längre giltig" -#: g10/pkclist.c:129 +#: g10/pkclist.c:73 msgid "Reason for revocation: " msgstr "Anledning till återkallelsen: " -#: g10/pkclist.c:146 +#: g10/pkclist.c:90 msgid "Revocation comment: " msgstr "Återkallelsekommentar: " -# värdena står för s = show me more info, m = back to menu, q = quit -# hur skall sådant internationaliseras på ett bra sätt? #. a string with valid answers -#: g10/pkclist.c:304 -msgid "sSmMqQ" -msgstr "sSmMqQ" +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "" -#: g10/pkclist.c:308 -#, c-format +#: g10/pkclist.c:258 +#, fuzzy, c-format msgid "" -"No trust value assigned to %lu:\n" +"No trust value assigned to:\n" "%4u%c/%08lX %s \"" msgstr "" "%lu har inte tilldelats något tillitsvärde:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:320 +#: g10/pkclist.c:270 +#, fuzzy msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" -" 1 = Don't know\n" -" 2 = I do NOT trust\n" -" 3 = I trust marginally\n" -" 4 = I trust fully\n" -" s = please show me more information\n" msgstr "" "Var god bestäm hur mycket du litar på denna användare\n" "när det gäller att korrekt verifiera andra användares nycklar\n" @@ -1074,87 +1211,93 @@ msgstr "" " 4 = Jag litar fullständigt på denna användare\n" " s = visa mig mer information\n" -#: g10/pkclist.c:329 +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr "" + +#: g10/pkclist.c:274 +#, fuzzy, c-format +msgid " %d = I do NOT trust\n" +msgstr "%08lX: Vi litar INTE på denna nyckel\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr "" + +#: g10/pkclist.c:276 +#, fuzzy, c-format +msgid " %d = I trust fully\n" +msgstr "%s: ej en tillitsdatabasfil\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr "" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr "" + +#: g10/pkclist.c:281 msgid " m = back to the main menu\n" msgstr " m = gå tillbaka till huvudmenyn\n" +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr "" + # q skall bytas ut mot a såfort det kollas upp så att q också funkar. -#: g10/pkclist.c:331 +#: g10/pkclist.c:285 msgid " q = quit\n" msgstr " q = avsluta\n" -#: g10/pkclist.c:337 +#: g10/pkclist.c:292 msgid "Your decision? " msgstr "Vad väljer du? " -#: g10/pkclist.c:359 +#: g10/pkclist.c:313 +#, fuzzy +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Vill du verkligen ta bort denna nyckel? " + +#: g10/pkclist.c:325 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certifikat som leder till en pålitlig nyckel:\n" -#: g10/pkclist.c:430 -msgid "" -"Could not find a valid trust path to the key. Let's see whether we\n" -"can assign some missing owner trust values.\n" -"\n" -msgstr "" -"Kunde inte hitta någon giltig tillitsväg till nyckeln. Låt oss se om vi kan\n" -"tilldela några av de ägartillitsvärden som saknas\n" -"\n" - -#: g10/pkclist.c:436 -msgid "" -"No path leading to one of our keys found.\n" -"\n" -msgstr "" -"En av de funna nycklarna saknar tillitsväg.\n" -"\n" - -#: g10/pkclist.c:438 -msgid "" -"No certificates with undefined trust found.\n" -"\n" -msgstr "" -"Hittade inga certifikat med odefinierat tillitvärde\n" -"\n" - -#: g10/pkclist.c:440 -msgid "" -"No trust values changed.\n" -"\n" -msgstr "" -"Inga tillitsvärden ändrade.\n" -"\n" - -#: g10/pkclist.c:458 +#: g10/pkclist.c:399 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "nyckeln %08lX: nyckeln har återkallats!\n" -#: g10/pkclist.c:465 g10/pkclist.c:477 g10/pkclist.c:599 +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 msgid "Use this key anyway? " msgstr "Vill du använda nyckeln trots det? " -#: g10/pkclist.c:470 +#: g10/pkclist.c:411 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "nyckeln %08lX: en undernyckel har återkallats!\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:432 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: nyckeln har blivit för gammal\n" -#: g10/pkclist.c:519 -#, c-format -msgid "%08lX: no info to calculate a trust probability\n" -msgstr "%08lX: det finns ingen information för att beräkna ett tillitvärde\n" +#: g10/pkclist.c:442 +#, fuzzy, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +" Det finns inget som indikerar att signaturen tillhör ägaren.\n" -#: g10/pkclist.c:534 +#: g10/pkclist.c:448 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: Vi litar INTE på denna nyckel\n" -#: g10/pkclist.c:540 +#: g10/pkclist.c:454 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" @@ -1163,15 +1306,15 @@ msgstr "" "%08lX: Det är inte säkert att denna nyckel verkligen tillhör ägaren\n" "men den accepteras trots detta\n" -#: g10/pkclist.c:546 +#: g10/pkclist.c:460 msgid "This key probably belongs to the owner\n" msgstr "Denna nyckel tillhör sannolikt ägaren\n" -#: g10/pkclist.c:551 +#: g10/pkclist.c:465 msgid "This key belongs to us\n" msgstr "Denna nyckel tillhör oss\n" -#: g10/pkclist.c:594 +#: g10/pkclist.c:507 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" @@ -1182,171 +1325,198 @@ msgstr "" "*verkligen* vet vad du gör, kan du svara ja på nästa fråga\n" "\n" -#: g10/pkclist.c:608 g10/pkclist.c:631 +#: g10/pkclist.c:521 g10/pkclist.c:543 msgid "WARNING: Using untrusted key!\n" msgstr "VARNING: Använder en nyckel som inte är betrodd!\n" -#: g10/pkclist.c:652 +#: g10/pkclist.c:562 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "VARNING: Denna nyckel har återkallats av sin ägare!\n" -#: g10/pkclist.c:653 +#: g10/pkclist.c:563 msgid " This could mean that the signature is forgery.\n" msgstr " Detta kan betyda att signaturen är en förfalskning.\n" -#: g10/pkclist.c:658 +#: g10/pkclist.c:569 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "VARNING: Denna undernyckel har återkallats av sin ägare!\n" -#: g10/pkclist.c:680 +#: g10/pkclist.c:574 +#, fuzzy +msgid "Note: This key has been disabled.\n" +msgstr "Denna nyckel har deaktiverats" + +#: g10/pkclist.c:579 msgid "Note: This key has expired!\n" msgstr "Notera: Denna nyckel har gått ut!\n" -#: g10/pkclist.c:688 +#: g10/pkclist.c:590 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "VARNING: Denna nyckel är inte certifierad med en pålitlig signatur!\n" -#: g10/pkclist.c:690 +#: g10/pkclist.c:592 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Det finns inget som indikerar att signaturen tillhör ägaren.\n" -#: g10/pkclist.c:707 +#: g10/pkclist.c:600 msgid "WARNING: We do NOT trust this key!\n" msgstr "VARNING: Vi litar INTE på denna nyckel!\n" -#: g10/pkclist.c:708 +#: g10/pkclist.c:601 msgid " The signature is probably a FORGERY.\n" msgstr " Signaturen är sannolikt en FÖRFALSKNING.\n" -#: g10/pkclist.c:715 +#: g10/pkclist.c:609 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "VARNING: Denna nyckel är inte certifierad med signaturer med ett\n" "tillräckligt högt tillitsvärde!\n" -#: g10/pkclist.c:718 +#: g10/pkclist.c:611 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Det är inte säkert att signaturen tillhör ägaren.\n" -#: g10/pkclist.c:820 g10/pkclist.c:842 g10/pkclist.c:970 g10/pkclist.c:1016 +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: %s överhoppad\n" -#: g10/pkclist.c:828 g10/pkclist.c:998 +#: g10/pkclist.c:723 g10/pkclist.c:911 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: hoppade över: publik nyckel finns redan\n" -#: g10/pkclist.c:855 -msgid "" -"You did not specify a user ID. (you may use \"-r\")\n" -"\n" +#: g10/pkclist.c:752 +#, fuzzy +msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Du specificerade ingen användaridentitet. (du kan använda \"-r\")\n" -#: g10/pkclist.c:865 -msgid "Enter the user ID: " -msgstr "Ange användaridentiteten: " +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" -#: g10/pkclist.c:877 +#: g10/pkclist.c:776 msgid "No such user ID.\n" msgstr "Hittade inte användaridentiteten.\n" -#: g10/pkclist.c:883 +#: g10/pkclist.c:781 g10/pkclist.c:857 msgid "skipped: public key already set as default recipient\n" msgstr "" "hoppade över: den publika nyckeln är redan satt som förvald mottagare\n" -#: g10/pkclist.c:906 +#: g10/pkclist.c:799 msgid "Public key is disabled.\n" msgstr "Den publika nyckeln är deaktiverad\n" -#: g10/pkclist.c:913 -msgid "skipped: public key already set with --encrypt-to\n" -msgstr "hoppade över: publik nyckel är redan angiven med --encrypt-to\n" +#: g10/pkclist.c:806 +#, fuzzy +msgid "skipped: public key already set\n" +msgstr "%s: hoppade över: publik nyckel finns redan\n" -#: g10/pkclist.c:944 +#: g10/pkclist.c:849 #, c-format msgid "unknown default recipient `%s'\n" msgstr "den förvalda mottagaren \"%s\" är okänd\n" -#: g10/pkclist.c:979 -#, c-format -msgid "%s: error checking key: %s\n" -msgstr "%s: fel vid kontroll av nyckeln: %s\n" - -#: g10/pkclist.c:984 +#: g10/pkclist.c:893 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: hoppade över: den publika nyckeln är deaktiverad\n" -#: g10/pkclist.c:1022 +#: g10/pkclist.c:943 msgid "no valid addressees\n" msgstr "inga giltiga adresser\n" -#: g10/keygen.c:179 +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "" + +#: g10/keygen.c:187 +#, fuzzy, c-format +msgid "preference %c%lu duplicated\n" +msgstr "hoppade över \"%s\": kopia\n" + +#: g10/keygen.c:192 +#, fuzzy, c-format +msgid "too many `%c' preferences\n" +msgstr "skriv ut inställningar" + +#: g10/keygen.c:257 +#, fuzzy +msgid "invalid character in preference string\n" +msgstr "Ogiltigt tecken i namnet\n" + +#: g10/keygen.c:399 msgid "writing self signature\n" msgstr "skriver självsignatur\n" -#: g10/keygen.c:217 +#: g10/keygen.c:443 msgid "writing key binding signature\n" msgstr "skriver signatur knuten till nyckeln\n" -#: g10/keygen.c:311 g10/keygen.c:421 g10/keygen.c:531 +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "ogiltig nyckelstorlek; använder %u bitar\n" -#: g10/keygen.c:316 g10/keygen.c:426 g10/keygen.c:536 +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "nyckelstorleken avrundad uppåt till %u bitar\n" -#: g10/keygen.c:635 +#: g10/keygen.c:777 msgid "Please select what kind of key you want:\n" msgstr "Välj vilken typ av nyckel du vill ha:\n" -#: g10/keygen.c:637 +#: g10/keygen.c:779 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA och ElGamal (standardvalet)\n" -#: g10/keygen.c:638 +#: g10/keygen.c:780 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (endast signering)\n" -#: g10/keygen.c:640 +#: g10/keygen.c:782 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (endast kryptering)\n" -#: g10/keygen.c:641 +#: g10/keygen.c:783 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (signering och kryptering)\n" -#: g10/keygen.c:643 +#: g10/keygen.c:784 #, fuzzy, c-format -msgid " (%d) RSA (sign and encrypt)\n" -msgstr " (%d) ElGamal (signering och kryptering)\n" +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) DSA (endast signering)\n" -#: g10/keygen.c:647 +#: g10/keygen.c:786 +#, fuzzy, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) ElGamal (endast kryptering)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 msgid "Your selection? " msgstr "Vad väljer du? " -#: g10/keygen.c:658 g10/keygen.c:666 -msgid "Do you really want to create a sign and encrypt key? " -msgstr "Vill du verkligen skapa en nyckel för signering och kryptering? " +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "Användanadet av denna algoritm är förlegat - skapa ändå? " -#: g10/keygen.c:680 +#: g10/keyedit.c:529 g10/keygen.c:823 msgid "Invalid selection.\n" msgstr "Felaktigt val.\n" -#: g10/keygen.c:692 +#: g10/keygen.c:836 #, c-format msgid "" "About to generate a new %s keypair.\n" @@ -1359,22 +1529,22 @@ msgstr "" " den förvalda nyckelstorleken är 1024 bitar\n" " den största föreslagna nyckelstorleken är 2048 bitar\n" -#: g10/keygen.c:699 +#: g10/keygen.c:845 msgid "What keysize do you want? (1024) " msgstr "Vilken nyckelstorlek vill du ha? (1024) " -#: g10/keygen.c:704 +#: g10/keygen.c:850 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA tillåter bara nyckelstorlekar från 512 till 1024\n" -#: g10/keygen.c:706 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "nyckelstorleken är för liten; 768 är det minst tillåtna värdet.\n" - -#: g10/keygen.c:708 -#, fuzzy +#: g10/keygen.c:852 msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" -msgstr "nyckelstorleken är för liten; 768 är det minst tillåtna värdet.\n" +msgstr "" +"nyckelstorleken är för liten; 1024 är det minsta tillåtna värdet för RSA.\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "nyckelstorleken är för liten; 768 är det minsta tillåtna värdet.\n" #. It is ridiculous and an annoyance to use larger key sizes! #. * GnuPG can handle much larger sizes; but it takes an eternity @@ -1384,12 +1554,12 @@ msgstr "nyckelstorleken #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. -#: g10/keygen.c:719 +#: g10/keygen.c:866 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "nyckelstorleken är för stor; %d är det största tillåtna värdet\n" -#: g10/keygen.c:724 +#: g10/keygen.c:871 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" @@ -1397,11 +1567,11 @@ msgstr "" "Nyckelstorlekar större än 2048 är inte att rekommendera\n" "eftersom beräkningar tar MYCKET lång tid!\n" -#: g10/keygen.c:727 +#: g10/keygen.c:874 msgid "Are you sure that you want this keysize? " msgstr "Är du säker på att du vill ha denna nyckelstorlek? " -#: g10/keygen.c:728 +#: g10/keygen.c:875 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" @@ -1409,22 +1579,18 @@ msgstr "" "Ok, men kom ihåg att din bildskärm och ditt tangentbord också sänder\n" "avslöjande strålning som kan avlyssnas!\n" -#: g10/keygen.c:736 -msgid "Do you really need such a large keysize? " -msgstr "Behöver du verkligen en så stor nyckelstorlek? " - -#: g10/keygen.c:742 +#: g10/keygen.c:884 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Den efterfrågade nyckelstorleken är %u bitar\n" -#: g10/keygen.c:745 g10/keygen.c:749 +#: g10/keygen.c:887 g10/keygen.c:891 #, c-format msgid "rounded up to %u bits\n" msgstr "avrundade uppåt till %u bitar\n" # borde kolla upp möjligheterna i källkoden att använda v m å istället för wmy -#: g10/keygen.c:797 +#: g10/keygen.c:942 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -1440,25 +1606,49 @@ msgstr "" " m = nyckeln blir ogiltig efter n månader\n" " y = nyckeln blir ogiltig efter n år\n" -#: g10/keygen.c:812 +# borde kolla upp möjligheterna i källkoden att använda v m å istället för wmy +#: g10/keygen.c:951 +#, fuzzy +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Specificera hur länge nyckeln skall vara giltig.\n" +" 0 = nyckeln blir aldrig ogiltig\n" +" = nyckeln blir ogiltig efter n dagar\n" +" w = nyckeln blir ogiltig efter n veckor\n" +" m = nyckeln blir ogiltig efter n månader\n" +" y = nyckeln blir ogiltig efter n år\n" + +#: g10/keygen.c:973 msgid "Key is valid for? (0) " msgstr "För hur lång tid är nyckeln giltig? (0) " -#: g10/keygen.c:817 +#: g10/keygen.c:975 +#, fuzzy +msgid "Signature is valid for? (0) " +msgstr "För hur lång tid är nyckeln giltig? (0) " + +#: g10/keygen.c:980 msgid "invalid value\n" msgstr "ogiltigt värde\n" -#: g10/keygen.c:822 -msgid "Key does not expire at all\n" +#: g10/keygen.c:985 +#, fuzzy, c-format +msgid "%s does not expire at all\n" msgstr "Nyckeln går aldrig ut\n" #. print the date when the key expires -#: g10/keygen.c:828 -#, c-format -msgid "Key expires at %s\n" +#: g10/keygen.c:992 +#, fuzzy, c-format +msgid "%s expires at %s\n" msgstr "Nyckeln går ut vid följande tidpunkt: %s\n" -#: g10/keygen.c:831 +#: g10/keygen.c:998 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" @@ -1466,11 +1656,11 @@ msgstr "" "Ditt system kan inte visa datum senare än år 2038.\n" "Datum fram till år 2106 kommer dock att hanteras korrekt.\n" -#: g10/keygen.c:836 +#: g10/keygen.c:1003 msgid "Is this correct (y/n)? " msgstr "Stämmer detta (j/n)? " -#: g10/keygen.c:879 +#: g10/keygen.c:1046 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " @@ -1486,44 +1676,44 @@ msgstr "" " \"Gustav Vasa (Brutal kung) \"\n" "\n" -#: g10/keygen.c:891 +#: g10/keygen.c:1058 msgid "Real name: " msgstr "Namn: " -#: g10/keygen.c:899 +#: g10/keygen.c:1066 msgid "Invalid character in name\n" msgstr "Ogiltigt tecken i namnet\n" -#: g10/keygen.c:901 +#: g10/keygen.c:1068 msgid "Name may not start with a digit\n" msgstr "Namnet får inte börja med en siffra\n" -#: g10/keygen.c:903 +#: g10/keygen.c:1070 msgid "Name must be at least 5 characters long\n" msgstr "Namnet måste vara åtminstone 5 tecken långt\n" -#: g10/keygen.c:911 +#: g10/keygen.c:1078 msgid "Email address: " msgstr "Epostadress: " -#: g10/keygen.c:922 +#: g10/keygen.c:1089 msgid "Not a valid email address\n" msgstr "Epostadressen är ogiltig\n" -#: g10/keygen.c:930 +#: g10/keygen.c:1097 msgid "Comment: " msgstr "Kommentar: " -#: g10/keygen.c:936 +#: g10/keygen.c:1103 msgid "Invalid character in comment\n" msgstr "Ogiltigt tecken i kommentaren\n" -#: g10/keygen.c:961 +#: g10/keygen.c:1126 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Du använder teckenuppsättningen \"%s\"\n" -#: g10/keygen.c:967 +#: g10/keygen.c:1132 #, c-format msgid "" "You selected this USER-ID:\n" @@ -1534,28 +1724,28 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:971 +#: g10/keygen.c:1136 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Ange inte epostadressen som namn eller kommentar\n" -#: g10/keygen.c:976 +#: g10/keygen.c:1141 msgid "NnCcEeOoQq" msgstr "NnKkEeOoAa" -#: g10/keygen.c:986 +#: g10/keygen.c:1151 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Ändra (N)amn, (K)ommentar, (E)post eller (A)vsluta? " -#: g10/keygen.c:987 +#: g10/keygen.c:1152 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Ändra (N)amn, (K)ommentar, (E)post eller (O)k/(A)vsluta? " -#: g10/keygen.c:1006 +#: g10/keygen.c:1171 msgid "Please correct the error first\n" msgstr "Rätta först felet\n" # fel kapitalisering i originalet? -#: g10/keygen.c:1044 +#: g10/keygen.c:1210 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -1563,11 +1753,17 @@ msgstr "" "Du behöver en lösenordsfras för att skydda din hemliga nyckel\n" "\n" -#: g10/keyedit.c:463 g10/keygen.c:1052 -msgid "passphrase not correctly repeated; try again.\n" +#: g10/keyedit.c:701 g10/keygen.c:1218 +#, fuzzy +msgid "passphrase not correctly repeated; try again" msgstr "lösenordsfrasen upprepades ej korrekt; försök igen.\n" -#: g10/keygen.c:1058 +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "" + +#: g10/keygen.c:1225 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" @@ -1578,7 +1774,7 @@ msgstr "" "Jag kommer att göra det ändå. Du kan ändra din lösenordsfras närsomhelst\n" "om du använder detta program med flaggan \"--edit-key\".\n" -#: g10/keygen.c:1079 +#: g10/keygen.c:1246 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" @@ -1590,29 +1786,54 @@ msgstr "" "hårddisken) under primtalsgenereringen; detta ger slumptalsgeneratorn\n" "en större chans att samla ihop en tillräcklig mängd entropi.\n" -#: g10/keygen.c:1528 +#: g10/keygen.c:1741 msgid "DSA keypair will have 1024 bits.\n" msgstr "DSA-nyckelparet kommer att ha 1024 bitar.\n" -#: g10/keygen.c:1571 +#: g10/keygen.c:1795 msgid "Key generation canceled.\n" msgstr "Skapandet av nycklar avbröts.\n" -#: g10/keygen.c:1668 +#: g10/keygen.c:1883 g10/keygen.c:1963 #, c-format msgid "writing public key to `%s'\n" msgstr "skriver publik nyckel till \"%s\"\n" -#: g10/keygen.c:1669 +#: g10/keygen.c:1884 g10/keygen.c:1965 #, c-format msgid "writing secret key to `%s'\n" msgstr "skriver hemlig nyckel till \"%s\"\n" -#: g10/keygen.c:1761 +#: g10/keygen.c:1952 +#, fuzzy, c-format +msgid "no writable public keyring found: %s\n" +msgstr "nyckel %08lX: hittade ingen publik nyckel: %s\n" + +#: g10/keygen.c:1958 +#, fuzzy, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "nyckel %08lX: hittade inte den hemliga nyckeln: %s\n" + +#: g10/keygen.c:1972 +#, fuzzy, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n" + +#: g10/keygen.c:1979 +#, fuzzy, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n" + +#: g10/keygen.c:1999 msgid "public and secret key created and signed.\n" msgstr "publik och hemlig nyckel skapad och signerad.\n" -#: g10/keygen.c:1766 +#: g10/keygen.c:2000 +#, fuzzy +msgid "key marked as ultimately trusted.\n" +msgstr "Certifikat som leder till en pålitlig nyckel:\n" + +#: g10/keygen.c:2011 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" @@ -1621,13 +1842,13 @@ msgstr "" "att vilja använda kommandot \"--edit-key\" för att generera en sekundär\n" "nyckel för detta syfte.\n" -#: g10/keygen.c:1779 g10/keygen.c:1880 +#: g10/keygen.c:2023 g10/keygen.c:2131 #, c-format msgid "Key generation failed: %s\n" msgstr "Nyckelgenereringen misslyckades: %s\n" # c-format behövs inte i singularis -#: g10/keygen.c:1823 g10/sig-check.c:297 g10/sign.c:169 +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" @@ -1635,7 +1856,7 @@ msgstr "" "nyckeln är skapad %lu sekund in i framtiden (problemet är\n" "relaterat till tidsresande eller en felställd klocka)\n" -#: g10/keygen.c:1825 g10/sig-check.c:299 g10/sign.c:171 +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" @@ -1643,307 +1864,361 @@ msgstr "" "nyckeln är skapad %lu sekunder in i framtiden (problemet är\n" "relaterat till tidsresande eller en felställd klocka)\n" -#: g10/keygen.c:1858 +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "OSERVERA: att skapa undernycklar till v3-nycklar bryter mot OpenPGP\n" + +#: g10/keygen.c:2107 msgid "Really create? " msgstr "Vill du verkligen skapa? " -#: g10/encode.c:142 g10/openfile.c:179 g10/openfile.c:289 g10/tdbio.c:454 -#: g10/tdbio.c:515 +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "" + +#: g10/encode.c:92 g10/encode.c:296 +#, fuzzy, c-format +msgid "`%s' already compressed\n" +msgstr "%lu nycklar behandlade\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: kan inte öppna: %s\n" -#: g10/encode.c:164 +#: g10/encode.c:122 g10/sign.c:959 #, c-format msgid "error creating passphrase: %s\n" msgstr "fel vid skapandet av lösenordsfras: %s\n" -#: g10/encode.c:222 g10/encode.c:354 +#: g10/encode.c:185 g10/encode.c:383 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: VARNING: tom fil\n" -#: g10/encode.c:320 +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" + +#: g10/encode.c:313 #, c-format msgid "reading from `%s'\n" msgstr "läser från \"%s\"\n" -#: g10/encode.c:527 +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" + +#: g10/encode.c:563 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s krypterad för: %s\n" -#: g10/delkey.c:64 g10/export.c:153 g10/keyedit.c:94 -#, c-format -msgid "%s: user not found: %s\n" -msgstr "%s: hittade inte användaren: %s\n" +#: g10/delkey.c:69 g10/export.c:141 +#, fuzzy, c-format +msgid "key `%s' not found: %s\n" +msgstr "användaren \"%s\" hittades inte: %s\n" -#: g10/export.c:164 +#: g10/delkey.c:77 g10/export.c:161 +#, fuzzy, c-format +msgid "error reading keyblock: %s\n" +msgstr "fel vid läsning av \"%s\": %s\n" + +#: g10/export.c:169 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "nyckeln %08lX följer inte standarden RFC2440 - överhoppad\n" -#: g10/export.c:175 +#: g10/export.c:180 #, c-format msgid "key %08lX: not protected - skipped\n" msgstr "nyckeln %08lX är inte skyddad - överhoppad\n" -#: g10/export.c:225 +#: g10/export.c:188 +#, fuzzy, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "nyckeln %08lX: ny nyckel - överhoppad\n" + +#: g10/export.c:255 msgid "WARNING: nothing exported\n" msgstr "VARNING: exporterade ingenting\n" -#: g10/getkey.c:212 +#: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "för många poster i pk-cachen - inaktiverad\n" -#: g10/getkey.c:445 -msgid "too many entries in unk cache - disabled\n" -msgstr "för många poster i unk-cachen - inaktiverad\n" +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[Hittade inte användaridentiteten]" -#: g10/getkey.c:2189 +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" + +#: g10/getkey.c:1989 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "använder sekundära nyckeln %08lX istället för primärnyckeln %08lX\n" -#: g10/getkey.c:2230 g10/trustdb.c:578 +#: g10/getkey.c:2036 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "nyckel %08lX: hemlig nyckel utan publik nyckel - hoppade över\n" -#: g10/getkey.c:2513 -#, fuzzy -msgid "[User id not found]" -msgstr "%s: hittade inte användaren\n" - -#: g10/import.c:182 +#: g10/import.c:206 #, c-format msgid "skipping block of type %d\n" msgstr "hoppar över block av typen %d\n" -#: g10/import.c:189 g10/trustdb.c:1817 g10/trustdb.c:1858 +#: g10/import.c:213 #, c-format msgid "%lu keys so far processed\n" msgstr "har behandlat %lu nycklar hittills\n" -#: g10/import.c:194 +#: g10/import.c:218 #, c-format msgid "error reading `%s': %s\n" msgstr "fel vid läsning av \"%s\": %s\n" -#: g10/import.c:204 +#: g10/import.c:230 #, c-format msgid "Total number processed: %lu\n" msgstr " Totalt antal behandlade enheter: %lu\n" -#: g10/import.c:206 -#, fuzzy, c-format +#: g10/import.c:232 +#, c-format msgid " skipped new keys: %lu\n" -msgstr " nya undernycklar: %lu\n" +msgstr " överhoppade nya nycklar: %lu\n" -#: g10/import.c:209 +#: g10/import.c:235 #, c-format msgid " w/o user IDs: %lu\n" msgstr " utan användaridentiteter: %lu\n" -#: g10/import.c:211 +#: g10/import.c:237 #, c-format msgid " imported: %lu" msgstr " importerade: %lu" -#: g10/import.c:217 +#: g10/import.c:243 #, c-format msgid " unchanged: %lu\n" msgstr " oförändrade: %lu\n" -#: g10/import.c:219 +#: g10/import.c:245 #, c-format msgid " new user IDs: %lu\n" msgstr " nya användaridentiteter: %lu\n" -#: g10/import.c:221 +#: g10/import.c:247 #, c-format msgid " new subkeys: %lu\n" msgstr " nya undernycklar: %lu\n" -#: g10/import.c:223 +#: g10/import.c:249 #, c-format msgid " new signatures: %lu\n" msgstr " nya signaturer: %lu\n" -#: g10/import.c:225 +#: g10/import.c:251 #, c-format msgid " new key revocations: %lu\n" msgstr " nya återkallelser av nycklar: %lu\n" -#: g10/import.c:227 +#: g10/import.c:253 #, c-format msgid " secret keys read: %lu\n" msgstr " antal lästa hemliga nycklar: %lu\n" -#: g10/import.c:229 +#: g10/import.c:255 #, c-format msgid " secret keys imported: %lu\n" msgstr "antal importerade hemliga nycklar: %lu\n" -#: g10/import.c:231 +#: g10/import.c:257 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "antal oförändrade hemliga nycklar: %lu\n" -#: g10/import.c:389 g10/import.c:568 +#: g10/import.c:438 g10/import.c:657 #, c-format msgid "key %08lX: no user ID\n" msgstr "nyckel %08lX: ingen användaridentitet\n" -#: g10/import.c:403 +# vad innebär fnutten i slutet? +#: g10/import.c:455 +#, fuzzy, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "nyckel %08lX: accepterade icke självsignerad användaridentitet '" + +#: g10/import.c:462 #, c-format msgid "key %08lX: no valid user IDs\n" msgstr "nyckel %08lX: inga giltiga användaridentiteter\n" -#: g10/import.c:405 +#: g10/import.c:464 msgid "this may be caused by a missing self-signature\n" msgstr "detta kan bero på att det saknas en självsignatur\n" -#: g10/import.c:416 g10/import.c:624 +#: g10/import.c:474 g10/import.c:726 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "nyckel %08lX: hittade ingen publik nyckel: %s\n" -#: g10/import.c:421 -#, fuzzy, c-format +#: g10/import.c:479 +#, c-format msgid "key %08lX: new key - skipped\n" -msgstr "nyckeln %08lX följer inte standarden RFC2440 - överhoppad\n" +msgstr "nyckeln %08lX: ny nyckel - överhoppad\n" -#: g10/import.c:429 g10/openfile.c:231 g10/sign.c:440 g10/sign.c:695 +#: g10/import.c:489 +#, fuzzy, c-format +msgid "no writable keyring found: %s\n" +msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 #, c-format msgid "writing to `%s'\n" msgstr "skriver till \"%s\"\n" -#: g10/import.c:433 g10/import.c:480 g10/import.c:578 g10/import.c:667 -#, fuzzy, c-format -msgid "error writing key: %s\n" +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n" -#: g10/import.c:436 +#: g10/import.c:505 #, c-format msgid "key %08lX: public key imported\n" msgstr "nyckel %08lX: importerade publik nyckel\n" -#: g10/import.c:453 +#: g10/import.c:524 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "nyckel %08lX: matchar inte vår lokala kopia\n" -#: g10/import.c:462 g10/import.c:632 +#: g10/import.c:542 g10/import.c:743 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "nyckel %08lX: kan inte hitta det ursprungliga nyckelblocket: %s\n" -#: g10/import.c:484 +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "nyckel %08lX: kan inte läsa det ursprungliga nyckelblocket %s\n" + +#: g10/import.c:579 #, c-format msgid "key %08lX: 1 new user ID\n" msgstr "nyckel %08lX: 1 ny användaridentitet\n" -#: g10/import.c:487 +#: g10/import.c:582 #, c-format msgid "key %08lX: %d new user IDs\n" msgstr "nyckel %08lX: %d nya användaridentiteter\n" -#: g10/import.c:490 +#: g10/import.c:585 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "nyckel %08lX: 1 ny signatur\n" -#: g10/import.c:493 +#: g10/import.c:588 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "nyckel %08lX: %d nya signaturer\n" -#: g10/import.c:496 +#: g10/import.c:591 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "nyckel %08lX: 1 ny undernyckel\n" -#: g10/import.c:499 +#: g10/import.c:594 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "nyckel %08lX: %d nya undernycklar\n" -#: g10/import.c:509 +#: g10/import.c:604 #, c-format msgid "key %08lX: not changed\n" msgstr "nyckel %08lX: inte förändrad\n" -#: g10/import.c:581 +#: g10/import.c:671 +#, fuzzy, c-format +msgid "no default secret keyring: %s\n" +msgstr "ingen förvald publik nyckel\n" + +#: g10/import.c:682 #, c-format msgid "key %08lX: secret key imported\n" msgstr "nyckel %08lX: den hemliga nyckeln är importerad\n" #. we can't merge secret keys -#: g10/import.c:585 +#: g10/import.c:686 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "nyckel %08lX: finns redan i den hemliga nyckelringen\n" -#: g10/import.c:590 +#: g10/import.c:691 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "nyckel %08lX: hittade inte den hemliga nyckeln: %s\n" -#: g10/import.c:618 +#: g10/import.c:720 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "nyckel %08lX: ingen publik nyckel - kan inte tillämpa " "återkallelsecertifikatet\n" -#: g10/import.c:643 +#: g10/import.c:760 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "nyckel %08lX: ogiltigt återkallelsecertifikat: %s - avvisat\n" -#: g10/import.c:670 +#: g10/import.c:791 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "nyckel %08lX: återkallelsecertifikat importerat\n" -#: g10/import.c:712 +#: g10/import.c:826 #, c-format msgid "key %08lX: no user ID for signature\n" msgstr "nyckel %08lX: ingen användaridentitet för signaturen\n" -#: g10/import.c:719 g10/import.c:743 -#, c-format -msgid "key %08lX: unsupported public key algorithm\n" +#: g10/import.c:839 +#, fuzzy, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" msgstr "nyckel %08lX: algoritmen för publik nyckel ej stödd\n" -#: g10/import.c:720 -#, c-format -msgid "key %08lX: invalid self-signature\n" +#: g10/import.c:841 +#, fuzzy, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" msgstr "nyckel %08lX: ogiltig självsignatur\n" -#: g10/import.c:735 +#: g10/import.c:858 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "nyckel %08lX: ingen undernyckel för nyckelbindning\n" -#: g10/import.c:744 +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "nyckel %08lX: algoritmen för publik nyckel ej stödd\n" + +#: g10/import.c:869 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "nyckel %08lX: ogiltig undernyckelbindning\n" -# vad innebär fnutten i slutet? -#: g10/import.c:771 -#, c-format -msgid "key %08lX: accepted non self-signed user ID '" -msgstr "nyckel %08lX: accepterade icke självsignerad användaridentitet '" - -#: g10/import.c:800 +#: g10/import.c:899 #, c-format msgid "key %08lX: skipped user ID '" msgstr "nyckel %08lX: hoppade över användaridentitet '" -#: g10/import.c:823 +#: g10/import.c:922 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "nyckel %08lX: hoppade över undernyckel\n" @@ -1952,93 +2227,184 @@ msgstr "nyckel %08lX: hoppade #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense -#: g10/import.c:848 +#: g10/import.c:945 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "nyckel %08lX: icke exporterbar signatur (klass %02x) - hoppade över\n" -#: g10/import.c:857 +#: g10/import.c:954 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "nyckel %08lX: återkallelsecertifikat på fel plats - hoppade över\n" -#: g10/import.c:865 +#: g10/import.c:971 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "nyckel %08lX: felaktigt återkallelsecertifikat: %s - hoppade över\n" -#: g10/import.c:965 +#: g10/import.c:1072 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "nyckel %08lX: användaridentitet hittades två gånger - slog ihop\n" -#: g10/import.c:1016 +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" + +#: g10/import.c:1201 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "nyckel %08lX: lade till återkallelsecertifikat\n" -#: g10/import.c:1130 g10/import.c:1183 -#, c-format -msgid "key %08lX: our copy has no self-signature\n" -msgstr "nyckel %08lX: vår kopia har ingen självsignatur\n" +#: g10/import.c:1231 +#, fuzzy, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "nyckel %08lX: %d nya signaturer\n" -#: g10/keyedit.c:150 +#: g10/keyedit.c:142 msgid "[revocation]" msgstr "[återkallelse]" -#: g10/keyedit.c:151 +#: g10/keyedit.c:143 msgid "[self-signature]" msgstr "[självsignatur]" -#: g10/keyedit.c:215 +#: g10/keyedit.c:214 g10/keylist.c:139 msgid "1 bad signature\n" msgstr "1 felaktig signatur\n" -#: g10/keyedit.c:217 +#: g10/keyedit.c:216 g10/keylist.c:141 #, c-format msgid "%d bad signatures\n" msgstr "%d felaktiga signaturer\n" -#: g10/keyedit.c:219 +#: g10/keyedit.c:218 g10/keylist.c:143 msgid "1 signature not checked due to a missing key\n" msgstr "1 signatur verifierades inte eftersom nyckeln saknades\n" -#: g10/keyedit.c:221 +#: g10/keyedit.c:220 g10/keylist.c:145 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signaturer verifierades inte eftersom nycklar saknades\n" -#: g10/keyedit.c:223 +#: g10/keyedit.c:222 g10/keylist.c:147 msgid "1 signature not checked due to an error\n" msgstr "1 signatur verifierades inte eftersom ett fel uppstod\n" -#: g10/keyedit.c:225 +#: g10/keyedit.c:224 g10/keylist.c:149 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signaturer verifierades inte eftersom fel uppstod\n" -#: g10/keyedit.c:227 +#: g10/keyedit.c:226 msgid "1 user ID without valid self-signature detected\n" msgstr "1 användaridentitet utan giltig självsignatur hittades\n" -#: g10/keyedit.c:229 +#: g10/keyedit.c:228 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d användaridentiteter utan giltig självsignatur hittades\n" -#. Fixme: see whether there is a revocation in which -#. * case we should allow to sign it again. -#: g10/keyedit.c:311 +#: g10/keyedit.c:335 +#, fuzzy, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Nyckeln är skyddad.\n" + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +#, fuzzy +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Är du säker på att du vill ha denna nyckelstorlek? " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr "" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 #, c-format -msgid "Already signed by key %08lX\n" +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" + +#: g10/keyedit.c:388 +#, fuzzy, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" msgstr "Redan signerad av nyckeln %08lX\n" -#: g10/keyedit.c:319 +#: g10/keyedit.c:393 +#, fuzzy, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "Redan signerad av nyckeln %08lX\n" + +#: g10/keyedit.c:405 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Det finns inget att signera med nyckeln %08lX\n" -#: g10/keyedit.c:328 +#: g10/keyedit.c:420 +#, fuzzy +msgid "This key has expired!" +msgstr "Notera: Denna nyckel har gått ut!\n" + +#: g10/keyedit.c:440 +#, fuzzy, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Denna nyckel är inte skyddad.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "" + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr "" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr "" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr "" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr "" + +#: g10/keyedit.c:535 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" @@ -2046,41 +2412,69 @@ msgstr "" "Är du verkligen säker på att du vill signera denna nyckel\n" "med din nyckel: \"" -#: g10/keyedit.c:337 +#: g10/keyedit.c:544 +#, fuzzy msgid "" -"The signature will be marked as non-exportable.\n" "\n" +"The signature will be marked as non-exportable.\n" msgstr "" "Signaturen kommer att markeras som icke exporterbar.\n" "\n" -#: g10/keyedit.c:342 +#: g10/keyedit.c:548 +#, fuzzy +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"Signaturen kommer att markeras som icke exporterbar.\n" +"\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" + +#: g10/keyedit.c:569 msgid "Really sign? " msgstr "Vill du verkligen signera? " -#: g10/keyedit.c:368 g10/keyedit.c:1864 g10/keyedit.c:1926 g10/sign.c:193 +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 #, c-format msgid "signing failed: %s\n" msgstr "signeringen misslyckades: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:658 msgid "This key is not protected.\n" msgstr "Denna nyckel är inte skyddad.\n" -#: g10/keyedit.c:426 +#: g10/keyedit.c:662 msgid "Secret parts of primary key are not available.\n" msgstr "De hemliga delarna av den primära nyckeln är inte tillgängliga.\n" -#: g10/keyedit.c:430 +#: g10/keyedit.c:666 msgid "Key is protected.\n" msgstr "Nyckeln är skyddad.\n" -#: g10/keyedit.c:450 +#: g10/keyedit.c:686 #, c-format msgid "Can't edit this key: %s\n" msgstr "Kan inte redigera denna nyckel: %s\n" -#: g10/keyedit.c:455 +#: g10/keyedit.c:692 msgid "" "Enter the new passphrase for this secret key.\n" "\n" @@ -2088,7 +2482,7 @@ msgstr "" "Skriv in den nya lösenordsfrasen för denna hemliga nyckel.\n" "\n" -#: g10/keyedit.c:467 +#: g10/keyedit.c:706 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" @@ -2096,424 +2490,567 @@ msgstr "" "Du vill inte ha någon lösenordsfras - detta är sannolikt en dålig idé!\n" "\n" -#: g10/keyedit.c:470 +#: g10/keyedit.c:709 msgid "Do you really want to do this? " msgstr "Vill du verkligen göra detta? " -#: g10/keyedit.c:534 +#: g10/keyedit.c:773 msgid "moving a key signature to the correct place\n" msgstr "flyttar en nyckelsignatur till den rätta platsen\n" -#: g10/keyedit.c:575 +#: g10/keyedit.c:815 msgid "quit this menu" msgstr "avsluta denna meny" -#: g10/keyedit.c:576 +#: g10/keyedit.c:816 msgid "q" msgstr "q" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save" msgstr "save" -#: g10/keyedit.c:577 +#: g10/keyedit.c:817 msgid "save and quit" msgstr "spara och avsluta" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "help" msgstr "help" -#: g10/keyedit.c:578 +#: g10/keyedit.c:818 msgid "show this help" msgstr "visa denna hjälp" # skall dessa översättas? -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:580 +#: g10/keyedit.c:820 msgid "show fingerprint" msgstr "visa fingeravtryck" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list" msgstr "list" -#: g10/keyedit.c:581 +#: g10/keyedit.c:821 msgid "list key and user IDs" msgstr "räkna upp nycklar och användaridentiteter" -#: g10/keyedit.c:582 +#: g10/keyedit.c:822 msgid "l" msgstr "l" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "uid" msgstr "uid" -#: g10/keyedit.c:583 +#: g10/keyedit.c:823 msgid "select user ID N" msgstr "välj användaridentitet N" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "key" msgstr "key" -#: g10/keyedit.c:584 +#: g10/keyedit.c:824 msgid "select secondary key N" msgstr "välj sekundär nyckel N" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "check" msgstr "check" -#: g10/keyedit.c:585 +#: g10/keyedit.c:825 msgid "list signatures" msgstr "räkna upp signaturer" -#: g10/keyedit.c:586 +#: g10/keyedit.c:826 msgid "c" msgstr "c" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign" msgstr "sign" -#: g10/keyedit.c:587 +#: g10/keyedit.c:827 msgid "sign the key" msgstr "signera nyckeln" -#: g10/keyedit.c:588 +#: g10/keyedit.c:828 msgid "s" msgstr "s" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:589 +#: g10/keyedit.c:829 msgid "sign the key locally" msgstr "signera nyckeln lokalt" -#: g10/keyedit.c:590 +#: g10/keyedit.c:830 +#, fuzzy +msgid "nrsign" +msgstr "sign" + +#: g10/keyedit.c:830 +#, fuzzy +msgid "sign the key non-revocably" +msgstr "signera nyckeln lokalt" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "nrlsign" +msgstr "lsign" + +#: g10/keyedit.c:831 +#, fuzzy +msgid "sign the key locally and non-revocably" +msgstr "signera nyckeln lokalt" + +#: g10/keyedit.c:832 msgid "debug" msgstr "debug" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:591 +#: g10/keyedit.c:833 msgid "add a user ID" msgstr "lägg till en användaridentitet" -#: g10/keyedit.c:592 +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "" + +#: g10/keyedit.c:834 +#, fuzzy +msgid "add a photo ID" +msgstr "lägg till en användaridentitet" + +#: g10/keyedit.c:835 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:592 +#: g10/keyedit.c:835 msgid "delete user ID" msgstr "ta bort en användaridentitet" -#: g10/keyedit.c:593 +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "" + +#: g10/keyedit.c:838 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:593 +#: g10/keyedit.c:838 msgid "add a secondary key" msgstr "lägg till en sekundär nyckel" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:594 +#: g10/keyedit.c:839 msgid "delete a secondary key" msgstr "ta bort en sekundär nyckel" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delsig" msgstr "delsig" -#: g10/keyedit.c:595 +#: g10/keyedit.c:840 msgid "delete signatures" msgstr "ta bort signaturer" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "expire" msgstr "expire" -#: g10/keyedit.c:596 +#: g10/keyedit.c:841 msgid "change the expire date" msgstr "ändra utgångsdatum" -#: g10/keyedit.c:597 +#: g10/keyedit.c:842 +msgid "primary" +msgstr "" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "" + +#: g10/keyedit.c:843 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:597 +#: g10/keyedit.c:843 msgid "toggle between secret and public key listing" msgstr "hoppa mellan utskrift av hemliga och publika nycklar" -#: g10/keyedit.c:599 +#: g10/keyedit.c:845 msgid "t" msgstr "t" -#: g10/keyedit.c:600 +#: g10/keyedit.c:846 msgid "pref" msgstr "pref" -#: g10/keyedit.c:600 -msgid "list preferences" +#: g10/keyedit.c:846 +#, fuzzy +msgid "list preferences (expert)" msgstr "skriv ut inställningar" -#: g10/keyedit.c:601 +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:847 +#, fuzzy +msgid "list preferences (verbose)" +msgstr "skriv ut inställningar" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "setpref" +msgstr "pref" + +#: g10/keyedit.c:848 +#, fuzzy +msgid "set preference list" +msgstr "skriv ut inställningar" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updpref" +msgstr "pref" + +#: g10/keyedit.c:849 +#, fuzzy +msgid "updated preferences" +msgstr "skriv ut inställningar" + +#: g10/keyedit.c:850 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:601 +#: g10/keyedit.c:850 msgid "change the passphrase" msgstr "ändra lösenordsfrasen" -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "trust" msgstr "trust" # originalet borde ha ett value -#: g10/keyedit.c:602 +#: g10/keyedit.c:851 msgid "change the ownertrust" msgstr "ändra ägartillitsvärdet" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:603 +#: g10/keyedit.c:852 msgid "revoke signatures" msgstr "återkalla signaturer" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:604 +#: g10/keyedit.c:853 msgid "revoke a secondary key" msgstr "återkalla en sekundär nyckel" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable" msgstr "disable" -#: g10/keyedit.c:605 +#: g10/keyedit.c:854 msgid "disable a key" msgstr "deaktivera en nyckel" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable" msgstr "enable" -#: g10/keyedit.c:606 +#: g10/keyedit.c:855 msgid "enable a key" msgstr "aktivera en nyckel" -#: g10/delkey.c:103 g10/keyedit.c:624 +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "" + +#: g10/delkey.c:112 g10/keyedit.c:876 msgid "can't do that in batchmode\n" msgstr "kan ej göra detta i batch-läge\n" -#. check that they match -#. fixme: check that they both match -#: g10/keyedit.c:659 +#: g10/keyedit.c:913 +#, fuzzy, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "fel vid läsning av \"%s\": %s\n" + +#: g10/keyedit.c:931 msgid "Secret key is available.\n" msgstr "Den hemliga nyckeln finns tillgänglig.\n" -#: g10/keyedit.c:688 +#: g10/keyedit.c:962 msgid "Command> " msgstr "Kommando> " -#: g10/keyedit.c:718 +#: g10/keyedit.c:994 msgid "Need the secret key to do this.\n" msgstr "Den hemliga nyckeln behövs för att göra detta.\n" -#: g10/keyedit.c:722 +#: g10/keyedit.c:998 msgid "Please use the command \"toggle\" first.\n" msgstr "Använd kommandot \"toggle\" först.\n" -#: g10/keyedit.c:769 +#: g10/keyedit.c:1047 +#, fuzzy +msgid "Key is revoked." +msgstr "Nyckeln är skyddad.\n" + +#: g10/keyedit.c:1066 msgid "Really sign all user IDs? " msgstr "Vill du verkligen signera alla användaridentiteter? " -#: g10/keyedit.c:770 +#: g10/keyedit.c:1067 msgid "Hint: Select the user IDs to sign\n" msgstr "Tips: Välj det användarid du vill signera\n" -#: g10/keyedit.c:802 g10/keyedit.c:984 +#: g10/keyedit.c:1092 #, c-format -msgid "update of trustdb failed: %s\n" -msgstr "uppdateringen av tillitsdatabasen misslyckades: %s\n" +msgid "This command is not allowed while in %s mode.\n" +msgstr "" -#: g10/keyedit.c:813 g10/keyedit.c:834 +#: g10/keyedit.c:1112 g10/keyedit.c:1133 msgid "You must select at least one user ID.\n" msgstr "Du måste välja åtminstone en användaridentitet.\n" -#: g10/keyedit.c:815 +#: g10/keyedit.c:1114 msgid "You can't delete the last user ID!\n" msgstr "Du kan inte ta bort den sista användaridentiteten!\n" -#: g10/keyedit.c:818 +#: g10/keyedit.c:1117 msgid "Really remove all selected user IDs? " msgstr "Vill du verkligen ta bort alla valda användaridentiteter? " -#: g10/keyedit.c:819 +#: g10/keyedit.c:1118 msgid "Really remove this user ID? " msgstr "Vill du verkligen ta bort denna användaridentitet? " -#: g10/keyedit.c:855 g10/keyedit.c:877 +#: g10/keyedit.c:1156 g10/keyedit.c:1178 msgid "You must select at least one key.\n" msgstr "Du måste välja åtminstone en nyckel.\n" -#: g10/keyedit.c:859 +#: g10/keyedit.c:1160 msgid "Do you really want to delete the selected keys? " msgstr "Vill du verkligen ta bort valda nycklar? " -#: g10/keyedit.c:860 +#: g10/keyedit.c:1161 msgid "Do you really want to delete this key? " msgstr "Vill du verkligen ta bort denna nyckel? " -#: g10/keyedit.c:881 +#: g10/keyedit.c:1182 msgid "Do you really want to revoke the selected keys? " msgstr "Vill du verkligen återkalla de valda nycklarna? " -#: g10/keyedit.c:882 +#: g10/keyedit.c:1183 msgid "Do you really want to revoke this key? " msgstr "Vill du verkligen återkalla denna nyckel? " -#: g10/keyedit.c:948 +#: g10/keyedit.c:1252 +#, fuzzy +msgid "Really update the preferences for the selected user IDs? " +msgstr "Vill du verkligen ta bort alla valda användaridentiteter? " + +#: g10/keyedit.c:1254 +#, fuzzy +msgid "Really update the preferences? " +msgstr "Vill du verkligen skapa återkallelsecertifikaten? (j/N)" + +#: g10/keyedit.c:1292 msgid "Save changes? " msgstr "Spara ändringarna? " -#: g10/keyedit.c:951 +#: g10/keyedit.c:1295 msgid "Quit without saving? " msgstr "Avsluta utan att spara? " -#: g10/keyedit.c:962 +#: g10/keyedit.c:1306 #, c-format msgid "update failed: %s\n" msgstr "uppdateringen misslyckades: %s\n" -#: g10/keyedit.c:969 +#: g10/keyedit.c:1313 #, c-format msgid "update secret failed: %s\n" msgstr "misslyckades med att uppdatera hemligheten: %s\n" -#: g10/keyedit.c:976 +#: g10/keyedit.c:1320 msgid "Key not changed so no update needed.\n" msgstr "Nyckeln är oförändrad så det behövs ingen uppdatering.\n" -#: g10/keyedit.c:991 +#: g10/keyedit.c:1332 msgid "Invalid command (try \"help\")\n" msgstr "Ogiltigt kommando (försök med \"help\")\n" -#: g10/keyedit.c:1074 g10/keyedit.c:1100 +#: g10/keyedit.c:1489 +#, fuzzy, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "VARNING: Denna nyckel har återkallats av sin ägare!\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr "" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 #, c-format msgid "%s%c %4u%c/%08lX created: %s expires: %s" -msgstr "" +msgstr "%s%c %4u%c/%08lX skapad: %s går ut: %s" -#: g10/keyedit.c:1083 +#: g10/keyedit.c:1506 #, c-format msgid " trust: %c/%c" -msgstr "" +msgstr " tillit: %c/%c" -#: g10/keyedit.c:1087 +#: g10/keyedit.c:1510 msgid "This key has been disabled" msgstr "Denna nyckel har deaktiverats" -#: g10/keyedit.c:1116 -#, fuzzy, c-format +#: g10/keyedit.c:1539 +#, c-format msgid "rev! subkey has been revoked: %s\n" -msgstr "nyckeln %08lX: en undernyckel har återkallats!\n" +msgstr "rev! en undernyckel har återkallats: %s\n" -#: g10/keyedit.c:1119 -#, fuzzy +#: g10/keyedit.c:1542 msgid "rev- faked revocation found\n" -msgstr " nya återkallelser av nycklar: %lu\n" +msgstr "rev- hittade felaktig återkallelse\n" -#: g10/keyedit.c:1121 +#: g10/keyedit.c:1544 #, c-format msgid "rev? problem checking revocation: %s\n" +msgstr "rev? problem vid kontroll av återkallandet: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" msgstr "" -#: g10/keyedit.c:1359 +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +#, fuzzy +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Är du säker på att du vill ha denna nyckelstorlek? " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "" + +#: g10/keyedit.c:1832 msgid "Delete this good signature? (y/N/q)" msgstr "Vill du radera denna korrekta signatur? (j/N/a)" -#: g10/keyedit.c:1363 +#: g10/keyedit.c:1842 msgid "Delete this invalid signature? (y/N/q)" msgstr "Vill du radera denna ogiltiga signatur? (j/N/a)" -#: g10/keyedit.c:1367 +#: g10/keyedit.c:1846 msgid "Delete this unknown signature? (y/N/q)" msgstr "Vill du radera denna okända signatur? (j/N/a)" -#: g10/keyedit.c:1373 +#: g10/keyedit.c:1852 msgid "Really delete this self-signature? (y/N)" msgstr "Vill du radera denna självsignatur? (j/N)" # skulle lika gärna kunna heta 1 signatur va? -#: g10/keyedit.c:1387 +#: g10/keyedit.c:1866 #, c-format msgid "Deleted %d signature.\n" msgstr "Raderade %d signatur.\n" -#: g10/keyedit.c:1388 +#: g10/keyedit.c:1867 #, c-format msgid "Deleted %d signatures.\n" msgstr "Raderade %d signaturer.\n" -#: g10/keyedit.c:1391 +#: g10/keyedit.c:1870 msgid "Nothing deleted.\n" msgstr "Ingenting raderat.\n" -#: g10/keyedit.c:1460 +#: g10/keyedit.c:1943 msgid "Please remove selections from the secret keys.\n" msgstr "Tag bort markeringar från de hemliga nycklarna.\n" -#: g10/keyedit.c:1466 +#: g10/keyedit.c:1949 msgid "Please select at most one secondary key.\n" msgstr "Välj som mest en sekundär nyckel.\n" -#: g10/keyedit.c:1470 +#: g10/keyedit.c:1953 msgid "Changing expiration time for a secondary key.\n" msgstr "Ändrar giltighetstid för en sekundär nyckel.\n" -#: g10/keyedit.c:1472 +#: g10/keyedit.c:1955 msgid "Changing expiration time for the primary key.\n" msgstr "Ändrar giltighetstid för den primära nyckeln.\n" -#: g10/keyedit.c:1514 +#: g10/keyedit.c:1997 msgid "You can't change the expiration date of a v3 key\n" msgstr "Du kan inte ändra giltighetsdatum för en v3-nyckel\n" -#: g10/keyedit.c:1530 +#: g10/keyedit.c:2013 msgid "No corresponding signature in secret ring\n" msgstr "Det finns ingen motsvarande signatur i den hemliga nyckelringen\n" -#: g10/keyedit.c:1591 +#: g10/keyedit.c:2096 +#, fuzzy +msgid "Please select exactly one user ID.\n" +msgstr "Du måste välja åtminstone en användaridentitet.\n" + +#: g10/keyedit.c:2284 #, c-format msgid "No user ID with index %d\n" msgstr "Ingen användaridentitet med index %d\n" -#: g10/keyedit.c:1637 +#: g10/keyedit.c:2330 #, c-format msgid "No secondary key with index %d\n" msgstr "Ingen sekundär nyckel med index %d\n" -#: g10/keyedit.c:1735 +#: g10/keyedit.c:2444 msgid "user ID: \"" msgstr "användaridentitet: \"" -#: g10/keyedit.c:1738 +#: g10/keyedit.c:2449 #, c-format msgid "" "\"\n" @@ -2522,54 +3059,129 @@ msgstr "" "\"\n" "signerad med din nyckel %08lX %s\n" -#: g10/keyedit.c:1742 -msgid "Create a revocation certificate for this signature? (y/N)" +#: g10/keyedit.c:2452 +#, fuzzy, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"signerad med din nyckel %08lX %s\n" + +#: g10/keyedit.c:2457 +#, fuzzy, c-format +msgid "This signature expired on %s.\n" +msgstr "%s-signatur från: %s\n" + +#: g10/keyedit.c:2461 +#, fuzzy +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Vill du verkligen återkalla denna nyckel? " + +#: g10/keyedit.c:2465 +#, fuzzy +msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Vill du skapa ett återkallelsecertifikat för denna signatur? (j/N)" #. FIXME: detect duplicates here -#: g10/keyedit.c:1766 +#: g10/keyedit.c:2490 msgid "You have signed these user IDs:\n" msgstr "Du har signerat följande användaridentiteter:\n" -#: g10/keyedit.c:1780 g10/keyedit.c:1815 -#, c-format -msgid " signed by %08lX at %s\n" +#: g10/keyedit.c:2504 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s%s\n" msgstr " signerad av %08lX %s\n" -#: g10/keyedit.c:1785 +#: g10/keyedit.c:2512 #, c-format msgid " revoked by %08lX at %s\n" msgstr " återkallad av %08lX %s\n" -#: g10/keyedit.c:1805 +#: g10/keyedit.c:2532 msgid "You are about to revoke these signatures:\n" msgstr "Du står i begrepp att återkalla dessa signaturer:\n" -#: g10/keyedit.c:1823 -msgid "Really create the revocation certificates? (y/N)" +#: g10/keyedit.c:2542 +#, fuzzy, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " signerad av %08lX %s\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr "" + +#: g10/keyedit.c:2551 +#, fuzzy +msgid "Really create the revocation certificates? (y/N) " msgstr "Vill du verkligen skapa återkallelsecertifikaten? (j/N)" -#: g10/keyedit.c:1852 +#: g10/keyedit.c:2581 msgid "no secret key\n" msgstr "ingen hemlig nyckel\n" -#: g10/keylist.c:158 -#, fuzzy -msgid "invalid" -msgstr "felaktigt skal" +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" -#: g10/keylist.c:178 +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 #, fuzzy -msgid "revoked" -msgstr "revkey" +msgid "Signature policy: " +msgstr "%s-signatur från: %s\n" + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "VARNING: ogiltig notationsdata hittades\n" + +#. This is UTF8 +#: g10/keylist.c:120 +#, fuzzy +msgid "Signature notation: " +msgstr "Notation: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "" #. of subkey -#: g10/keylist.c:401 g10/mainproc.c:754 +#: g10/keylist.c:423 g10/mainproc.c:856 #, c-format msgid " [expires: %s]" msgstr "[går ut: %s]" -#: g10/mainproc.c:212 +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr "Fingeravtryck:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Fingeravtryck:" + +#: g10/keylist.c:899 +#, fuzzy +msgid " Key fingerprint =" +msgstr " Fingeravtryck:" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s krypterad data\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "krypterad med en okänd algoritm %d\n" + +#: g10/mainproc.c:280 #, c-format msgid "public key is %08lX\n" msgstr "den publika nyckeln är %08lX\n" @@ -2581,196 +3193,254 @@ msgstr "den publika nyckeln # rätt publik nyckel att kryptera datat med. Jag tycker # inte att svenska översättningen är mycket obskyrare än engelska # originalet iallafall. -#: g10/mainproc.c:247 +#: g10/mainproc.c:326 msgid "public key encrypted data: good DEK\n" msgstr "data krypterad med publik nyckel: korrekt krypteringsnyckel\n" -#: g10/mainproc.c:280 +#: g10/mainproc.c:378 #, c-format msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" msgstr "krypterad med %u-bitars %s-nyckel, ID %08lX, skapad %s\n" -#: g10/mainproc.c:290 +#: g10/mainproc.c:388 #, c-format msgid "encrypted with %s key, ID %08lX\n" msgstr "krypterad med %s-nyckel, ID %08lX\n" -#: g10/mainproc.c:296 -msgid "no secret key for decryption available\n" -msgstr "det finns ingen hemlig nyckel tillgänglig för dekryptering\n" - -#: g10/mainproc.c:305 +#: g10/mainproc.c:402 #, c-format msgid "public key decryption failed: %s\n" msgstr "dekryptering med publik nyckel misslyckades: %s\n" -#: g10/mainproc.c:342 +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, fuzzy, c-format +msgid "assuming %s encrypted data\n" +msgstr "%s krypterad data\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" + +#: g10/mainproc.c:466 msgid "decryption okay\n" msgstr "dekrypteringen lyckades\n" -#: g10/mainproc.c:347 +#: g10/mainproc.c:471 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "VARNING: det krypterade meddelandet har ändrats!\n" -#: g10/mainproc.c:352 +#: g10/mainproc.c:476 #, c-format msgid "decryption failed: %s\n" msgstr "dekrypteringen misslyckades: %s\n" -#: g10/mainproc.c:371 +#: g10/mainproc.c:495 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" -msgstr "NOTERA: avsändaren efterfrågade \"endast-för-dina-ögon\"\n" +msgstr "OBSERVERA: avsändaren efterfrågade \"endast-för-dina-ögon\"\n" -#: g10/mainproc.c:373 +#: g10/mainproc.c:497 #, c-format msgid "original file name='%.*s'\n" msgstr "ursprungligt filnamn=\"%.*s\"\n" -#: g10/mainproc.c:538 +#: g10/mainproc.c:672 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "fristående återkallelsecertifikat - använd \"gpg --import\" för\n" "att applicera\n" -#: g10/mainproc.c:625 g10/mainproc.c:634 -msgid "WARNING: invalid notation data found\n" -msgstr "VARNING: ogiltig notationsdata hittades\n" - -#: g10/mainproc.c:637 +#: g10/mainproc.c:733 msgid "Notation: " msgstr "Notation: " # finns det någon bra svensk översättning av policy? -#: g10/mainproc.c:644 +#: g10/mainproc.c:745 msgid "Policy: " msgstr "Policy: " -#: g10/mainproc.c:1074 +#: g10/mainproc.c:1198 msgid "signature verification suppressed\n" msgstr "signaturen verifierades inte\n" -#: g10/mainproc.c:1080 +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "kan inte hantera dessa multipla signaturer\n" + +#: g10/mainproc.c:1261 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Signerades %.*s med hjälp av %s-nyckeln med ID %08lX\n" -#. just in case that we have no userid -#: g10/mainproc.c:1106 g10/mainproc.c:1117 +#: g10/mainproc.c:1305 g10/mainproc.c:1327 msgid "BAD signature from \"" msgstr "FELAKTIG signatur från \"" -#: g10/mainproc.c:1107 g10/mainproc.c:1118 +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +#, fuzzy +msgid "Expired signature from \"" +msgstr "Korrekt signatur från \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 msgid "Good signature from \"" msgstr "Korrekt signatur från \"" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "" + +#: g10/mainproc.c:1351 msgid " aka \"" msgstr " även känd som \"" -#: g10/mainproc.c:1165 +#: g10/mainproc.c:1412 #, c-format msgid "Can't check signature: %s\n" msgstr "Kan inte verifiera signaturen: %s\n" -#: g10/mainproc.c:1230 +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "ingen frikopplad signatur\n" + +#: g10/mainproc.c:1508 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "fristående signatur av klassen 0x%02x\n" -#: g10/mainproc.c:1282 +#: g10/mainproc.c:1565 msgid "old style (PGP 2.x) signature\n" msgstr "signatur av den gamla (PGP 2.x) typen\n" -#: g10/mainproc.c:1287 +#: g10/mainproc.c:1572 msgid "invalid root packet detected in proc_tree()\n" msgstr "felaktigt rotpaket hittades i proc_tree()\n" -#: g10/misc.c:86 +#: g10/misc.c:101 #, c-format msgid "can't disable core dumps: %s\n" msgstr "kan inte deaktivera minnesutskrifter: %s\n" -#: g10/misc.c:314 +#: g10/misc.c:211 msgid "Experimental algorithms should not be used!\n" msgstr "Experimentella algoritmer bör inte användas!\n" # XXX -#: g10/misc.c:342 -msgid "this cipher algorithm is depreciated; please use a more standard one!\n" +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" msgstr "" -"avråder från denna chifferalgoritm, använd istället en mer normal algoritm!\n" +"denna chifferalgoritm är förlegad, använd istället en mer normal algoritm!\n" -#: g10/parse-packet.c:115 +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" + +#: g10/parse-packet.c:119 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "kan inte hantera algoritm %d för publik nyckelhantering\n" -#: g10/parse-packet.c:999 +#: g10/parse-packet.c:1053 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "underpaket av typen %d har den bit satt som markerar den som kritisk\n" -#: g10/passphrase.c:198 +#: g10/passphrase.c:442 g10/passphrase.c:489 msgid "gpg-agent is not available in this session\n" +msgstr "kunde inte få tillgång till någon gpg-agent i denna session\n" + +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" msgstr "" -#: g10/passphrase.c:204 +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "" + +#: g10/passphrase.c:498 msgid "malformed GPG_AGENT_INFO environment variable\n" -msgstr "" +msgstr "miljövariabeln GPG_AGENT_INFO är felformaterad\n" -#: g10/hkp.c:158 g10/passphrase.c:223 +#: g10/passphrase.c:511 +#, fuzzy, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "skyddsalgoritmen %d stöds inte\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 #, c-format msgid "can't connect to `%s': %s\n" msgstr "kan inte ansluta till \"%s\": %s\n" -#: g10/passphrase.c:284 g10/passphrase.c:522 +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +#, fuzzy +msgid "problem with the agent - disabling agent use\n" +msgstr "problem med agenten: agenten returnerar 0x%lx\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 #, c-format msgid " (main key ID %08lX)" msgstr " (huvudnyckelns identitet %08lX)" -#: g10/passphrase.c:294 -#, fuzzy, c-format +#: g10/passphrase.c:641 +#, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, created %s%s\n" msgstr "" -"\n" "Du behöver en lösenordsfras för att låsa upp den hemliga nyckeln för\n" -"användaren: \"" +"användaren: \"%.*s\"\n" +"%u-bitars %s-nyckel, ID %08lX, skapad %s%s\n" -#: g10/passphrase.c:315 -#, fuzzy +#: g10/passphrase.c:662 msgid "Enter passphrase\n" -msgstr "Ange lösenordsfras: " +msgstr "Ange lösenordsfras\n" -#: g10/passphrase.c:317 -#, fuzzy +#: g10/passphrase.c:664 msgid "Repeat passphrase\n" -msgstr "Repetera lösenordsfrasen: " +msgstr "Repetera lösenordsfrasen\n" -#: g10/passphrase.c:338 g10/passphrase.c:348 g10/passphrase.c:439 -msgid "response from agent too short\n" -msgstr "" - -#: g10/passphrase.c:355 +#: g10/passphrase.c:705 msgid "passphrase too long\n" -msgstr "" +msgstr "lösenordsfrasen är för lång\n" -#: g10/passphrase.c:367 +#: g10/passphrase.c:718 msgid "invalid response from agent\n" -msgstr "" +msgstr "felaktigt svar från agenten\n" -#: g10/passphrase.c:376 +#: g10/passphrase.c:727 g10/passphrase.c:808 msgid "cancelled by user\n" -msgstr "" +msgstr "avbruten av användaren\n" -#: g10/passphrase.c:379 g10/passphrase.c:445 +#: g10/passphrase.c:729 g10/passphrase.c:890 #, c-format msgid "problem with the agent: agent returns 0x%lx\n" -msgstr "" +msgstr "problem med agenten: agenten returnerar 0x%lx\n" -#: g10/passphrase.c:508 +#: g10/passphrase.c:1003 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" @@ -2780,20 +3450,20 @@ msgstr "" "Du behöver en lösenordsfras för att låsa upp den hemliga nyckeln för\n" "användaren: \"" -#: g10/passphrase.c:517 +#: g10/passphrase.c:1012 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "%u-bits %s-nyckel, ID %08lX, skapad %s" -#: g10/passphrase.c:555 +#: g10/passphrase.c:1063 msgid "can't query password in batchmode\n" msgstr "kan inte fråga efter lösenord i batch-läge\n" -#: g10/passphrase.c:559 +#: g10/passphrase.c:1067 msgid "Enter passphrase: " msgstr "Ange lösenordsfras: " -#: g10/passphrase.c:563 +#: g10/passphrase.c:1071 msgid "Repeat passphrase: " msgstr "Repetera lösenordsfrasen: " @@ -2801,148 +3471,193 @@ msgstr "Repetera l msgid "data not saved; use option \"--output\" to save it\n" msgstr "data sparades inte, använd flaggan \"--output\" för att spara den\n" -#: g10/plaintext.c:324 +#: g10/plaintext.c:108 +#, fuzzy, c-format +msgid "error creating `%s': %s\n" +msgstr "fel vid läsning av \"%s\": %s\n" + +#: g10/plaintext.c:337 msgid "Detached signature.\n" msgstr "Löskopplad signatur.\n" -#: g10/plaintext.c:328 +#: g10/plaintext.c:341 msgid "Please enter name of data file: " msgstr "Ange namnet på datafilen: " -#: g10/plaintext.c:349 +#: g10/plaintext.c:362 msgid "reading stdin ...\n" msgstr "läser från standard in ...\n" -#: g10/plaintext.c:392 +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "ingen signerad data\n" + +#: g10/plaintext.c:404 #, c-format msgid "can't open signed data `%s'\n" msgstr "kan inte öppna signerad data \"%s\"\n" -#: g10/pubkey-enc.c:135 -#, c-format -msgid "anonymous receiver; trying secret key %08lX ...\n" +#: g10/pubkey-enc.c:100 +#, fuzzy, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" msgstr "anonym mottagare, försöker använda den hemliga nyckeln %08lX ...\n" -#: g10/pubkey-enc.c:141 +#: g10/pubkey-enc.c:106 msgid "okay, we are the anonymous recipient.\n" msgstr "ok, vi är den hemliga mottagaren.\n" -#: g10/pubkey-enc.c:197 +#: g10/pubkey-enc.c:158 msgid "old encoding of the DEK is not supported\n" msgstr "gammal kodning av krypteringsnyckeln stöds inte\n" -#: g10/pubkey-enc.c:216 -#, c-format -msgid "cipher algorithm %d is unknown or disabled\n" +#: g10/pubkey-enc.c:177 +#, fuzzy, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "chifferalgoritmen %d är okänd eller avslagen\n" -#: g10/pubkey-enc.c:255 +#: g10/pubkey-enc.c:220 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" -msgstr "NOTERA: chifferalgoritmen %d finns inte i inställningarna\n" +msgstr "OBSERVERA: chifferalgoritmen %d finns inte i inställningarna\n" -#: g10/pubkey-enc.c:261 +#: g10/pubkey-enc.c:242 #, c-format msgid "NOTE: secret key %08lX expired at %s\n" -msgstr "NOTERA: den hemliga nyckeln %08lX gick ut %s\n" +msgstr "OBSERVERA: den hemliga nyckeln %08lX gick ut %s\n" -#: g10/hkp.c:62 -#, c-format -msgid "requesting key %08lX from %s ...\n" +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, fuzzy, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" msgstr "fråga efter nyckeln %08lX från %s ...\n" -#: g10/hkp.c:75 +#: g10/hkp.c:94 #, c-format msgid "can't get key from keyserver: %s\n" msgstr "kan inte hämta nyckeln från en nyckelserver: %s\n" -#: g10/hkp.c:98 g10/hkp.c:136 -msgid "no keyserver known (use option --keyserver)\n" -msgstr "känner inte till någon nyckelserver (använd flaggan --keyserver)\n" - -#: g10/hkp.c:106 -#, c-format -msgid "%s: not a valid key ID\n" -msgstr "%s: ogiltig nyckelidentitet\n" - -#: g10/hkp.c:182 +#: g10/hkp.c:171 #, c-format msgid "error sending to `%s': %s\n" msgstr "fel vid sändning till \"%s\": %s\n" -#: g10/hkp.c:194 +#: g10/hkp.c:186 #, c-format msgid "success sending to `%s' (status=%u)\n" msgstr "lyckades sända till \"%s\" (status=%u)\n" -#: g10/hkp.c:197 +#: g10/hkp.c:189 #, c-format msgid "failed sending to `%s': status=%u\n" msgstr "misslyckades sända till \"%s\": status=%u\n" -#: g10/seckey-cert.c:89 +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "" + +#: g10/hkp.c:521 +#, fuzzy, c-format +msgid "can't search keyserver: %s\n" +msgstr "kan inte hämta nyckeln från en nyckelserver: %s\n" + +#: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "de hemliga nyckeldelarna är inte tillgänliga\n" -#: g10/seckey-cert.c:95 -#, c-format -msgid "protection algorithm %d is not supported\n" +#: g10/seckey-cert.c:59 +#, fuzzy, c-format +msgid "protection algorithm %d%s is not supported\n" msgstr "skyddsalgoritmen %d stöds inte\n" -#: g10/seckey-cert.c:245 -msgid "Invalid passphrase; please try again ...\n" +#: g10/seckey-cert.c:215 +#, fuzzy +msgid "Invalid passphrase; please try again" msgstr "Ogiltig lösenordsfras, försök igen ...\n" +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "" + # är det nyckeln som är svag, konstigt -#: g10/seckey-cert.c:308 +#: g10/seckey-cert.c:273 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "VARNING: Upptäckte en svag nyckel - byt lösenordsfras igen.\n" -#: g10/sig-check.c:279 +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" + +#: g10/sig-check.c:205 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "detta är en PGP-genererad ElGamal-nyckel som INTE är säker för signaturer!\n" # behövs verkligen c-format här? -#: g10/sig-check.c:287 +#: g10/sig-check.c:213 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "den publika nyckeln är %lu sekund nyare än signaturen\n" -#: g10/sig-check.c:288 +#: g10/sig-check.c:214 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "den publika nyckeln är %lu sekunder nyare än signaturen\n" -#: g10/sig-check.c:306 +#: g10/sig-check.c:237 #, c-format -msgid "NOTE: signature key expired %s\n" -msgstr "NOTERA: signaturnyckeln är för gammal, gick ut vid %s\n" +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "OBSERVERA: signaturnyckeln %08lX, gick ut vid %s\n" -#: g10/sig-check.c:375 +#: g10/sig-check.c:318 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "antar att signaturen är felaktig eftersom en okänd kritisk bit är satt\n" -#: g10/sign.c:197 +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "försök att verifiera signaturen misslyckades: %s\n" + +#: g10/sign.c:283 #, c-format msgid "%s signature from: %s\n" msgstr "%s-signatur från: %s\n" -#: g10/sign.c:435 g10/sign.c:690 +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "VARNING: \"%s\" är en tom fil\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:643 g10/sign.c:812 #, c-format msgid "can't create %s: %s\n" msgstr "kan inte skapa %s: %s\n" -#: g10/sign.c:538 +#: g10/sign.c:704 msgid "signing:" msgstr "signerar:" -#: g10/sign.c:583 -#, c-format -msgid "WARNING: `%s' is an empty file\n" -msgstr "VARNING: \"%s\" är en tom fil\n" +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" + +#: g10/sign.c:953 +#, fuzzy, c-format +msgid "%s encryption will be used\n" +msgstr "dekrypteringen misslyckades: %s\n" #: g10/textfilter.c:134 #, c-format @@ -2954,429 +3669,209 @@ msgstr "kan inte hantera text med rader l msgid "input line longer than %d characters\n" msgstr "indataraden är längre än %d tecken\n" -#: g10/tdbio.c:116 g10/tdbio.c:1623 +#: g10/tdbio.c:121 g10/tdbio.c:1382 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "tillitsdatabasposten %lu: lseek misslyckades: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1630 +#: g10/tdbio.c:127 g10/tdbio.c:1389 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "tillitsdatabasposten %lu: skrivning misslyckades (n=%d): %s\n" -#: g10/tdbio.c:232 +#: g10/tdbio.c:237 msgid "trustdb transaction too large\n" msgstr "tillitsdatabastransaktion för stor\n" -#: g10/tdbio.c:424 +#: g10/tdbio.c:454 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: ingen åtkomst: %s\n" -#: g10/tdbio.c:438 +#: g10/tdbio.c:468 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: katalogen finns inte!\n" -#: g10/openfile.c:227 g10/openfile.c:296 g10/ringedit.c:843 -#: g10/ringedit.c:1161 g10/tdbio.c:444 -#, c-format -msgid "%s: can't create: %s\n" -msgstr "%s: kan inte skapa: %s\n" - -#: g10/tdbio.c:459 g10/tdbio.c:508 +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 #, c-format msgid "%s: can't create lock\n" msgstr "%s: kan inte skapa lås\n" -#: g10/tdbio.c:473 +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, fuzzy, c-format +msgid "%s: can't make lock\n" +msgstr "%s: kan inte skapa lås\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: kan inte skapa: %s\n" + +#: g10/tdbio.c:503 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: misslyckades med att skapa versionspost: %s" -#: g10/tdbio.c:477 +#: g10/tdbio.c:507 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: felaktig tillitsdatabas skapad\n" -#: g10/tdbio.c:480 +#: g10/tdbio.c:510 #, c-format msgid "%s: trustdb created\n" msgstr "%s: tillitsdatabas skapad\n" -#: g10/tdbio.c:517 +#: g10/tdbio.c:565 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: felaktig tillitsdatabas\n" -#: g10/tdbio.c:550 +#: g10/tdbio.c:597 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: misslyckades med att skapa hash-tabell: %s\n" -#: g10/tdbio.c:558 +#: g10/tdbio.c:605 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: fel vid uppdatering av versionspost: %s\n" -#: g10/tdbio.c:574 g10/tdbio.c:613 g10/tdbio.c:635 g10/tdbio.c:665 -#: g10/tdbio.c:690 g10/tdbio.c:1556 g10/tdbio.c:1583 +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: fel vid läsning av versionspost: %s\n" -#: g10/tdbio.c:587 g10/tdbio.c:646 +#: g10/tdbio.c:634 g10/tdbio.c:680 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: fel vid skrivning av versionspost: %s\n" -#: g10/tdbio.c:1235 +#: g10/tdbio.c:1119 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "tillitsdatabas: lseek misslyckades: %s\n" -#: g10/tdbio.c:1243 +#: g10/tdbio.c:1127 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "tillitsdatabas: läsning misslyckades (n=%d): %s\n" -#: g10/tdbio.c:1264 +#: g10/tdbio.c:1148 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: ej en tillitsdatabasfil\n" -#: g10/tdbio.c:1280 +#: g10/tdbio.c:1165 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versionspost med postnummer %lu\n" -#: g10/tdbio.c:1285 +#: g10/tdbio.c:1170 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: ogiltig filversion %d\n" -#: g10/tdbio.c:1589 +#: g10/tdbio.c:1348 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: fel vid läsning av ledig post: %s\n" -#: g10/tdbio.c:1597 +#: g10/tdbio.c:1356 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: fel vid läsning av katalogpost: %s\n" -#: g10/tdbio.c:1607 +#: g10/tdbio.c:1366 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: misslyckades med att nollställa en post: %s\n" -#: g10/tdbio.c:1637 +#: g10/tdbio.c:1396 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: misslyckades med att lägga till en post: %s\n" -#: g10/tdbio.c:1748 +#: g10/tdbio.c:1441 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "tillitsdatabasen är trasig, kör \"gpg --fix-trustdb\".\n" +#: g10/trustdb.c:200 +#, fuzzy, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "\"%s\" är en ogiltig lång nyckelidentitet\n" + +#: g10/trustdb.c:235 +#, fuzzy, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "nyckel %08lX: accepterad som en pålitlig nyckel\n" + +#: g10/trustdb.c:274 +#, fuzzy, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "nyckel %08lX: kan inte lägga till i tillitsdatabasen\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "nyckel %08lX: hittade ingen motsvarande publik nyckel - överhoppad\n" + # req är nog felstavat i originalet då det syftar på record och inte # request -#: g10/trustdb.c:169 +#: g10/trustdb.c:332 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "tillitspost %lu, posttyp %d: kunde inte läsa: %s\n" -#: g10/trustdb.c:184 +#: g10/trustdb.c:338 +#, fuzzy, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "tillitspost %lu: kunde inte radera: %s\n" + +#: g10/trustdb.c:353 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "tillitspost: %lu, typ %d: kunde inte skriva: %s\n" -#: g10/trustdb.c:198 -#, c-format -msgid "trust record %lu: delete failed: %s\n" -msgstr "tillitspost %lu: kunde inte radera: %s\n" - -#: g10/trustdb.c:212 +#: g10/trustdb.c:368 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "tillitsdatabas: synkronisering misslyckades: %s\n" -# LID betyder local id och är serienumret i den lokala databasen -# för en given nyckel -#: g10/trustdb.c:377 -#, c-format -msgid "error reading dir record for LID %lu: %s\n" -msgstr "fel vid läsning av katalogpost för lokalt id %lu: %s\n" +#: g10/trustdb.c:468 +#, fuzzy +msgid "no need for a trustdb check\n" +msgstr "%s: ej en tillitsdatabasfil\n" -#: g10/trustdb.c:384 -#, c-format -msgid "lid %lu: expected dir record, got type %d\n" -msgstr "lokalt id %lu: väntade en katalogpost, fick en post av typen %d\n" - -#: g10/trustdb.c:389 -#, c-format -msgid "no primary key for LID %lu\n" -msgstr "ingen primär nyckel för lokalt id %lu\n" - -#: g10/trustdb.c:394 -#, c-format -msgid "error reading primary key for LID %lu: %s\n" -msgstr "fel vid läsning av primär nyckel för lokalt id %lu: %s\n" - -#: g10/trustdb.c:433 -#, c-format -msgid "get_dir_record: search_record failed: %s\n" -msgstr "get_dir_record: search_record misslyckades: %s\n" - -#: g10/trustdb.c:474 +#: g10/trustdb.c:474 g10/trustdb.c:1641 #, fuzzy, c-format -msgid "'%s' is not a valid long keyID\n" -msgstr "%s: ogiltig nyckelidentitet\n" +msgid "next trustdb check due at %s\n" +msgstr "tillitsdatabasposten %lu: lseek misslyckades: %s\n" -#: g10/trustdb.c:502 -#, c-format -msgid "key %08lX: can't put it into the trustdb\n" -msgstr "nyckel %08lX: kan inte lägga till i tillitsdatabasen\n" +# originalet borde ha ett value +#: g10/trustdb.c:779 +#, fuzzy +msgid "checking the trustdb\n" +msgstr "ändra ägartillitsvärdet" -#: g10/trustdb.c:508 -#, c-format -msgid "key %08lX: query record failed\n" -msgstr "nyckel %08lX: uppslagning av post misslyckades\n" - -#: g10/trustdb.c:517 -#, c-format -msgid "key %08lX: already in trusted key table\n" -msgstr "nyckel %08lX: finns redan i tabellen över pålitliga nycklar\n" - -#: g10/trustdb.c:520 -#, c-format -msgid "key %08lX: accepted as trusted key.\n" -msgstr "nyckel %08lX: accepterad som en pålitlig nyckel\n" - -#: g10/trustdb.c:547 +#: g10/trustdb.c:933 #, fuzzy, c-format -msgid "key %08lX: no public key for trusted key - skipped\n" -msgstr "nyckeln %08lX är inte skyddad - överhoppad\n" +msgid "public key %08lX not found: %s\n" +msgstr "hittade inte publik nyckel" -#: g10/trustdb.c:566 +#: g10/trustdb.c:1515 #, c-format -msgid "NOTE: secret key %08lX is NOT protected.\n" -msgstr "NOTERA: den hemliga nyckeln %08lX är INTE skyddad.\n" - -#: g10/trustdb.c:585 -#, c-format -msgid "key %08lX: secret and public key don't match\n" -msgstr "nyckel %08lX: hemlig och publik nyckel stämmer inte överens\n" - -#: g10/trustdb.c:598 -#, c-format -msgid "enumerate secret keys failed: %s\n" -msgstr "numrering av hemliga nycklar misslyckades: %s\n" - -#: g10/trustdb.c:994 -#, c-format -msgid "key %08lX.%lu: Good subkey binding\n" -msgstr "nyckel: %08lX.%lu: Korrekt bindning till undernyckel\n" - -#: g10/trustdb.c:1000 g10/trustdb.c:1035 -#, c-format -msgid "key %08lX.%lu: Invalid subkey binding: %s\n" -msgstr "nyckel %08lX.%lu: Felaktig bindning till undernyckel: %s\n" - -#: g10/trustdb.c:1012 -#, c-format -msgid "key %08lX.%lu: Valid key revocation\n" -msgstr "nyckel %08lX.%lu: Giltig återkallelse av nyckel\n" - -#: g10/trustdb.c:1018 -#, c-format -msgid "key %08lX.%lu: Invalid key revocation: %s\n" -msgstr "nyckel %08lX.%lu: Felaktig återkallelse av nyckel: %s\n" - -#: g10/trustdb.c:1029 -#, c-format -msgid "key %08lX.%lu: Valid subkey revocation\n" -msgstr "nyckel %08lX.%lu: Giltig återkallelse av undernyckel\n" - -#: g10/trustdb.c:1140 -msgid "Good self-signature" -msgstr "Korrekt självsignatur" - -#: g10/trustdb.c:1150 -msgid "Invalid self-signature" -msgstr "Felaktig självsignatur" - -# detta verkar mycket märkligt. Någon borde kanske få en förklaring från -# gnupg-utvecklarna? -#: g10/trustdb.c:1177 -msgid "Valid user ID revocation skipped due to a newer self signature" +msgid "public key of ultimately trusted key %08lX not found\n" msgstr "" -"Hoppade över en giltig återkallelse av användaridentiteten på\n" -"grund av en nyare självsignatur" -#: g10/trustdb.c:1183 -msgid "Valid user ID revocation" -msgstr "Giltig återkallelse av användaridentitet" - -#: g10/trustdb.c:1188 -msgid "Invalid user ID revocation" -msgstr "Ogiltig återkallelse av användaridentitet" - -#: g10/trustdb.c:1230 -msgid "Valid certificate revocation" -msgstr "Giltig återkallelse av certifikat" - -#: g10/trustdb.c:1231 -msgid "Good certificate" -msgstr "Korrekt certifikat" - -#: g10/trustdb.c:1259 -msgid "Invalid certificate revocation" -msgstr "Ogiltig återkallelse av certifikat " - -#: g10/trustdb.c:1260 -msgid "Invalid certificate" -msgstr "Ogiltigt certifikat" - -#: g10/trustdb.c:1277 g10/trustdb.c:1281 +#: g10/trustdb.c:1593 #, c-format -msgid "sig record %lu[%d] points to wrong record.\n" -msgstr "signaturpost %lu[%d] pekar mot fel post.\n" - -#: g10/trustdb.c:1340 -msgid "duplicated certificate - deleted" -msgstr "dubblett av certifikat - borttaget" - -#: g10/trustdb.c:1661 -#, c-format -msgid "tdbio_search_dir failed: %s\n" -msgstr "tdbio_search_dir misslyckades: %s\n" - -#: g10/trustdb.c:1795 -#, c-format -msgid "lid ?: insert failed: %s\n" -msgstr "lokalt id ?: tillägg misslyckades: %s\n" - -#: g10/trustdb.c:1800 -#, c-format -msgid "lid %lu: insert failed: %s\n" -msgstr "lokalt id %lu: tillägg misslyckades: %s\n" - -#: g10/trustdb.c:1806 -#, c-format -msgid "lid %lu: inserted\n" -msgstr "lokalt id %lu: lades till\n" - -#: g10/trustdb.c:1811 -#, c-format -msgid "error reading dir record: %s\n" -msgstr "fel vid läsning av katalogpost: %s\n" - -#: g10/trustdb.c:1819 g10/trustdb.c:1882 -#, c-format -msgid "%lu keys processed\n" -msgstr "%lu nycklar behandlade\n" - -#: g10/trustdb.c:1821 g10/trustdb.c:1888 -#, c-format -msgid "\t%lu keys with errors\n" -msgstr "\t%lu nycklar med fel\n" - -#: g10/trustdb.c:1823 -#, c-format -msgid "\t%lu keys inserted\n" -msgstr "\t%lu nycklar tillagda\n" - -#: g10/trustdb.c:1826 -#, c-format -msgid "enumerate keyblocks failed: %s\n" -msgstr "numrering av nyckelblock misslyckades: %s\n" - -#: g10/trustdb.c:1874 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" -msgstr "lokalt id %lu: katalogpost utan nyckel - hoppade över\n" - -#: g10/trustdb.c:1884 -#, c-format -msgid "\t%lu due to new pubkeys\n" -msgstr "\t%lu på grund av nya publika nycklar\n" - -#: g10/trustdb.c:1886 -#, c-format -msgid "\t%lu keys skipped\n" -msgstr "\t%lu nycklar hoppades över\n" - -#: g10/trustdb.c:1890 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu nycklar uppdaterades\n" - -#: g10/trustdb.c:2235 -msgid "Ooops, no keys\n" -msgstr "Ooops, inga nycklar\n" - -#: g10/trustdb.c:2239 -msgid "Ooops, no user IDs\n" -msgstr "Ooops, inga användaridentiteter\n" - -#: g10/trustdb.c:2397 -#, c-format -msgid "check_trust: search dir record failed: %s\n" -msgstr "check_trust: sökning av katalogpost misslyckades: %s\n" - -#: g10/trustdb.c:2406 -#, c-format -msgid "key %08lX: insert trust record failed: %s\n" -msgstr "nyckel %08lX: tillägg av tillitspost misslyckades: %s\n" - -#: g10/trustdb.c:2410 -#, c-format -msgid "key %08lX.%lu: inserted into trustdb\n" -msgstr "nyckel %08lX.%lu: lades till i tillitsdatabasen\n" - -#: g10/trustdb.c:2418 -#, c-format -msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" msgstr "" -"nyckel %08lX.%lu: skapad i framtiden (problemet är relaterat till\n" -"tidsresande eller en felställd klocka)\n" -#: g10/trustdb.c:2433 -#, c-format -msgid "key %08lX.%lu: expired at %s\n" -msgstr "nyckel %08lX.%lu: gick ut %s\n" - -#: g10/trustdb.c:2441 -#, c-format -msgid "key %08lX.%lu: trust check failed: %s\n" -msgstr "nyckel %08lX.%lu: tillitskontroll misslyckades: %s\n" - -#: g10/trustdb.c:2592 -#, c-format -msgid "user '%s' not found: %s\n" -msgstr "användaren \"%s\" hittades inte: %s\n" - -#: g10/trustdb.c:2594 -#, c-format -msgid "problem finding '%s' in trustdb: %s\n" -msgstr "problem att hitta \"%s\" i tillitsdatabasen: %s\n" - -#: g10/trustdb.c:2597 -#, c-format -msgid "user '%s' not in trustdb - inserting\n" -msgstr "användaren \"%s\" finns inte tillitsdatabasen - lägger till\n" - -#: g10/trustdb.c:2600 -#, c-format -msgid "failed to put '%s' into trustdb: %s\n" -msgstr "misslyckades med att placera \"%s\" i tillitsdatabasen: %s\n" - -#: g10/trustdb.c:2786 g10/trustdb.c:2816 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "VARNING: kan ännu inte hantera långa inställningsposter\n" - -#: g10/verify.c:82 +#: g10/verify.c:108 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" @@ -3386,46 +3881,32 @@ msgstr "" "Kom ihåg att signaturfilen (.sig eller .asc)\n" "ska vara den först angivna filen på kommandoraden\n" -#: g10/verify.c:147 +#: g10/verify.c:173 #, c-format msgid "input line %u too long or missing LF\n" msgstr "raden %u är för lång, eller saknar nyradstecken\n" -#: g10/ringedit.c:296 +# om någon kan tala om för mig vad detta betyder skulle jag bli jätteglad! +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"nyckeln är inte markerad osäker - går inte att använda med fejkad RNG!\n" + +#: g10/skclist.c:138 #, c-format -msgid "%s: can't create keyring: %s\n" -msgstr "%s: kan inte skapa nyckelring: %s\n" +msgid "skipped `%s': duplicated\n" +msgstr "hoppade över \"%s\": kopia\n" -#: g10/ringedit.c:313 g10/ringedit.c:848 g10/ringedit.c:1166 -#, c-format -msgid "%s: keyring created\n" -msgstr "%s: nyckelring skapad\n" - -# märkligt felmeddelande, kolla upp -#: g10/ringedit.c:1025 g10/ringedit.c:1343 -msgid "WARNING: 2 files with confidential information exists.\n" -msgstr "VARNING: det finns 2 filer med konfidentiell information.\n" - -#: g10/ringedit.c:1026 g10/ringedit.c:1344 -#, c-format -msgid "%s is the unchanged one\n" -msgstr "%s är den oförändrade\n" - -#: g10/ringedit.c:1027 g10/ringedit.c:1345 -#, c-format -msgid "%s is the new one\n" -msgstr "%s är den nya\n" - -#: g10/ringedit.c:1028 g10/ringedit.c:1346 -msgid "Please fix this possible security flaw\n" -msgstr "Lös detta potentiella säkerhetsproblem\n" - -#: g10/skclist.c:98 +#: g10/skclist.c:145 g10/skclist.c:153 #, c-format msgid "skipped `%s': %s\n" msgstr "hoppade över \"%s\": %s\n" -#: g10/skclist.c:105 +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "hoppade över: hemlig nyckel finns redan\n" + +#: g10/skclist.c:160 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " @@ -3444,92 +3925,101 @@ msgstr "Filen \"%s\" finns. " msgid "Overwrite (y/N)? " msgstr "Skriv över (j/N)? " -#: g10/openfile.c:120 +#: g10/openfile.c:119 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: okänt suffix\n" -#: g10/openfile.c:142 +#: g10/openfile.c:141 msgid "Enter new filename" msgstr "Ange nytt filnamn" -#: g10/openfile.c:183 +#: g10/openfile.c:184 msgid "writing to stdout\n" msgstr "skriver till standard ut\n" -#: g10/openfile.c:262 +#: g10/openfile.c:273 #, c-format msgid "assuming signed data in `%s'\n" msgstr "antar att signera data finns i filen \"%s\"\n" -#: g10/openfile.c:312 +#: g10/openfile.c:323 #, c-format msgid "%s: new options file created\n" msgstr "%s: ny inställningsfil skapad\n" -#: g10/openfile.c:339 +#: g10/openfile.c:350 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: kan inte skapa katalog: %s\n" -#: g10/openfile.c:342 +#: g10/openfile.c:353 #, c-format msgid "%s: directory created\n" msgstr "%s: katalog skapad\n" # GnuPG borde väl ersättas med %s? -#: g10/openfile.c:344 +#: g10/openfile.c:355 msgid "you have to start GnuPG again, so it can read the new options file\n" msgstr "du måste starta om GnuPG, så att den nya inställningsfilen kan läsas\n" -#: g10/encr-data.c:64 -#, c-format -msgid "encrypted with unknown algorithm %d\n" -msgstr "krypterad med en okänd algoritm %d\n" - -#: g10/encr-data.c:69 -#, c-format -msgid "%s encrypted data\n" -msgstr "%s krypterad data\n" - -#: g10/encr-data.c:99 +#: g10/encr-data.c:91 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "VARNING: meddelandet krypterades med en svag nyckel i det symmetriska\n" "chiffret.\n" -#: g10/seskey.c:61 +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "problem vid hanteringen av krypterat paket\n" + +#: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "skapade en svag nyckel - försöker igen\n" -#: g10/seskey.c:66 +#: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "kan inte undvika en svag nyckel för symmetriskt chiffer; försökte\n" "%d gånger!\n" -#: g10/delkey.c:87 -msgid "there is a secret key for this public key!\n" -msgstr "det finns en hemlig nyckel tillhörande denna publika nyckel!\n" +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "" -#: g10/delkey.c:89 -msgid "use option \"--delete-secret-key\" to delete it first.\n" -msgstr "använd flaggan \"--delete-secret-key\" för att ta bort den först.\n" - -#: g10/delkey.c:107 +#: g10/delkey.c:116 msgid "can't do that in batchmode without \"--yes\"\n" msgstr "kan inte göra så i batch-läge utan flaggan \"--yes\"\n" -#: g10/delkey.c:129 +#: g10/delkey.c:138 msgid "Delete this key from the keyring? " msgstr "Vill du ta bort denna nyckel från nyckelringen? " -#: g10/delkey.c:137 +#: g10/delkey.c:146 msgid "This is a secret key! - really delete? " msgstr "Detta är en hemlig nyckel! - vill du verkligen ta bort den? " +#: g10/delkey.c:156 +#, fuzzy, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "numrering av nyckelblock misslyckades: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "" + +#: g10/delkey.c:194 +#, fuzzy, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "det finns en hemlig nyckel tillhörande denna publika nyckel!\n" + +#: g10/delkey.c:196 +#, fuzzy +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "använd flaggan \"--delete-secret-key\" för att ta bort den först.\n" + #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" @@ -3542,19 +4032,27 @@ msgstr "" "nätet av certifikat." #: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" + +#: g10/helptext.c:60 msgid "If you want to use this revoked key anyway, answer \"yes\"." msgstr "Om du vill använda denna återkallade nyckel ändå, svara \"ja\"." -#: g10/helptext.c:57 +#: g10/helptext.c:64 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Om du vill använda denna otillförlitliga nyckel ändå, svara \"ja\"." -#: g10/helptext.c:61 +#: g10/helptext.c:68 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Ange användaridentiteten till vilken du vill skicka meddelandet." -#: g10/helptext.c:65 +#: g10/helptext.c:72 msgid "" "Select the algorithm to use.\n" "\n" @@ -3594,7 +4092,7 @@ msgstr "" "för att skapa signaturer. Detta är anledningen till att den ElGamal-variant\n" "som bara krypterar inte är tillgänglig i denna meny" -#: g10/helptext.c:85 +#: g10/helptext.c:92 msgid "" "Although these keys are defined in RFC2440 they are not suggested\n" "because they are not supported by all programs and signatures created\n" @@ -3604,16 +4102,16 @@ msgstr "" "att använda dem eftersom de inte stöds i alla program och signaturer\n" "skapade med dem är stora och mycket långsamma att verifiera." -#: g10/helptext.c:92 +#: g10/helptext.c:99 msgid "Enter the size of the key" msgstr "Ange storleken på nyckeln" -#: g10/helptext.c:96 g10/helptext.c:101 g10/helptext.c:113 g10/helptext.c:145 -#: g10/helptext.c:150 g10/helptext.c:155 g10/helptext.c:160 +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 msgid "Answer \"yes\" or \"no\"" msgstr "Svara \"ja\" eller \"nej\"" -#: g10/helptext.c:106 +#: g10/helptext.c:113 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" @@ -3625,19 +4123,19 @@ msgstr "" "inte att få något vettigt felmeddelande - istället kommer systemet\n" "att försöka tolka det angivna värdet som ett intervall." -#: g10/helptext.c:118 +#: g10/helptext.c:125 msgid "Enter the name of the key holder" msgstr "Ange namnet på nyckelns ägare" -#: g10/helptext.c:123 +#: g10/helptext.c:130 msgid "please enter an optional but highly suggested email address" msgstr "ange en epostadress. Detta är valfritt men rekommenderas varmt" -#: g10/helptext.c:127 +#: g10/helptext.c:134 msgid "Please enter an optional comment" msgstr "Ange en valfri kommentar" -#: g10/helptext.c:132 +#: g10/helptext.c:139 msgid "" "N to change the name.\n" "C to change the comment.\n" @@ -3651,16 +4149,57 @@ msgstr "" "O för att fortsätta med nyckelgenerering.\n" "Q för att avsluta nyckelgenereringen." -#: g10/helptext.c:141 +#: g10/helptext.c:148 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Svara \"ja\" (eller bara \"j\") om du vill generera denna undernyckel." +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" + # felstavat original -#: g10/helptext.c:164 +#: g10/helptext.c:194 msgid "Answer \"yes\" is you want to sign ALL the user IDs" msgstr "Svara \"ja\" om du vill signera ALLA användaridentiteter" -#: g10/helptext.c:168 +#: g10/helptext.c:198 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" @@ -3668,11 +4207,11 @@ msgstr "" "Svara \"ja\" om du verkligen vill ta bort denna användaridentitet.\n" "Alla certifikat kommer att gå förlorade!" -#: g10/helptext.c:173 +#: g10/helptext.c:203 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Svara \"ja\" om du vill ta bort denna undernyckel" -#: g10/helptext.c:178 +#: g10/helptext.c:208 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" @@ -3683,7 +4222,7 @@ msgstr "" "en tillitskoppling till nyckeln eller en annan nyckel som är\n" "certifierad av denna nyckel." -#: g10/helptext.c:183 +#: g10/helptext.c:213 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" @@ -3695,7 +4234,7 @@ msgstr "" "vet vilken nyckel som användes eftersom den nyckeln kanske upprättar\n" "en tillitskoppling genom en annan redan certifierad nyckel." -#: g10/helptext.c:189 +#: g10/helptext.c:219 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." @@ -3704,7 +4243,7 @@ msgstr "" "din nyckelring." # borde inge GnuPG bytas ut mot gpg eller ännu bättre %s? -#: g10/helptext.c:193 +#: g10/helptext.c:223 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" @@ -3718,29 +4257,35 @@ msgstr "" "mer. Så gör bara detta om denna självsignatur av någon anledning är\n" "ogiltig och det finns en andra signatur som tillgänglig." -# ej klar, eller? -#: g10/helptext.c:202 +#: g10/helptext.c:231 msgid "" -"Please enter the passhrase; this is a secret sentence \n" -" Blurb, blurb,.... " +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" + +# ej klar, eller? +#: g10/helptext.c:238 +#, fuzzy +msgid "Please enter the passhrase; this is a secret sentence \n" msgstr "" "Ange en lösenordsfras. Detta är en hemlig mening\n" "[hjälptexten ej färdigställd]" -#: g10/helptext.c:209 +#: g10/helptext.c:244 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Reptera lösenordsfrasen, så du är säker på vad du skrev in." # # felstavat/ologiskt original -#: g10/helptext.c:213 +#: g10/helptext.c:248 msgid "Give the name of the file to which the signature applies" msgstr "Ange namnet på den fil signaturen gäller" -#: g10/helptext.c:218 +#: g10/helptext.c:253 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Svara \"ja\" om det du vill skriva över filen" -#: g10/helptext.c:223 +#: g10/helptext.c:258 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." @@ -3748,15 +4293,14 @@ msgstr "" "Ange ett nytt filnamn. Om du bara trycker RETUR kommer standarfilnamnet\n" "(som anges i hakparenteser) att användas." -#: g10/helptext.c:229 -#, fuzzy +#: g10/helptext.c:264 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" -" \"Key is superseeded\"\n" +" \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" @@ -3777,9 +4321,9 @@ msgstr "" " \"Användaridentiteten är inte längre giltig\"\n" " Använd denna för att visa att denna användaridentitet inte längre\n" " skall användas. Detta används normalt för att visa att en epostadress\n" -" är ogiltig\n" +" är ogiltig.\n" -#: g10/helptext.c:245 +#: g10/helptext.c:280 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" @@ -3789,54 +4333,347 @@ msgstr "" "detta återkallelsecertifikat. Försök att hålla texten kort och koncis.\n" "En tom rad avslutar texten.\n" -#: g10/helptext.c:260 +#: g10/helptext.c:295 msgid "No help available" msgstr "Det finns ingen hjälp tillgänglig" -#: g10/helptext.c:268 +#: g10/helptext.c:303 #, c-format msgid "No help available for `%s'" msgstr "Det finns ingen hjälp tillgänglig för \"%s\"" +#: g10/keydb.c:177 +#, fuzzy, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "" + +#: g10/keydb.c:197 +#, fuzzy, c-format +msgid "keyring `%s' created\n" +msgstr "%s: nyckelring skapad\n" + +#: g10/keydb.c:587 +#, fuzzy, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "%s: misslyckades med att skapa hash-tabell: %s\n" + +# märkligt felmeddelande, kolla upp +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "VARNING: det finns 2 filer med konfidentiell information.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s är den oförändrade\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s är den nya\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Lös detta potentiella säkerhetsproblem\n" + +#: g10/keyring.c:1337 +#, fuzzy, c-format +msgid "checking keyring `%s'\n" +msgstr "kan inte låsa nyckelringen \"%s\": %s\n" + +#: g10/keyring.c:1368 +#, fuzzy, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "har behandlat %lu nycklar hittills\n" + +#: g10/keyring.c:1379 +#, fuzzy, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "räkna upp nycklar och signaturer" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: nyckelring skapad\n" + +#, fuzzy +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Är du säker på att du vill ha denna nyckelstorlek? " + +#, fuzzy +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr "Är du säker på att du vill ha denna nyckelstorlek? " + +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "Vill du verkligen signera? " + +#~ msgid "too many random bits requested; the limit is %d\n" +#~ msgstr "för många slumpmässiga bitar efterfrågades; maximalt antal är %d\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NAMN]|kontrollera tillitsdatabasen" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key användaridentitet" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key användaridentitet" + +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key användaridentitet" + +#~ msgid "For info see http://www.gnupg.org" +#~ msgstr "För information se http://www.gnupg.org/" + +# värdena står för s = show me more info, m = back to menu, q = quit +# hur skall sådant internationaliseras på ett bra sätt? +#~ msgid "sSmMqQ" +#~ msgstr "sSmMqQ" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Kunde inte hitta någon giltig tillitsväg till nyckeln. Låt oss se om vi " +#~ "kan\n" +#~ "tilldela några av de ägartillitsvärden som saknas\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "En av de funna nycklarna saknar tillitsväg.\n" +#~ "\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "Hittade inga certifikat med odefinierat tillitvärde\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Inga tillitsvärden ändrade.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "" +#~ "%08lX: det finns ingen information för att beräkna ett tillitvärde\n" + +#~ msgid "Enter the user ID: " +#~ msgstr "Ange användaridentiteten: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "hoppade över: publik nyckel är redan angiven med --encrypt-to\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: fel vid kontroll av nyckeln: %s\n" + +#~ msgid " (%d) RSA (sign and encrypt)\n" +#~ msgstr " (%d) RSA (signering och kryptering)\n" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "Vill du verkligen skapa en nyckel för signering och kryptering? " + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Behöver du verkligen en så stor nyckelstorlek? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: hittade inte användaren: %s\n" + #~ msgid "certificate read problem: %s\n" #~ msgstr "fel vid läsning av certifikat: %s\n" -#~ msgid "RSA key cannot be used in this version\n" -#~ msgstr "det går inte att använda RSA-nycklar i denna version\n" +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "för många poster i unk-cachen - inaktiverad\n" -#~ msgid "No key for user ID\n" -#~ msgstr "Ingen nyckel för användaridentiteten\n" +#~ msgid "secret key %08lX not imported (use %s to allow for it)\n" +#~ msgstr "" +#~ "den hemliga nyckeln %08lX importerades inte (använd %s för att tillåta)\n" -#~ msgid "No user ID for key\n" -#~ msgstr "Inget användarid för nyckel\n" - -#~ msgid "no default public keyring\n" -#~ msgstr "ingen förvald publik nyckel\n" - -#~ msgid "can't lock keyring `%s': %s\n" -#~ msgstr "kan inte låsa nyckelringen \"%s\": %s\n" - -#~ msgid "key %08lX: can't read original keyblock: %s\n" -#~ msgstr "nyckel %08lX: kan inte läsa det ursprungliga nyckelblocket %s\n" +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "nyckel %08lX: vår kopia har ingen självsignatur\n" #~ msgid "%s: user not found\n" #~ msgstr "%s: hittade inte användaren\n" -# maila gnupg-bugs om konstigt felmeddelande, man skapar nycklar i pluralis -#~ msgid "" -#~ "RSA keys are deprecated; please consider creating a new key and use this key " -#~ "in the future\n" -#~ msgstr "" -#~ "RSA-nycklar är förlegade; överväg att skapa nya nycklar och använd dessa i " -#~ "framtiden\n" +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "uppdateringen av tillitsdatabasen misslyckades: %s\n" -#~ msgid "not processed" -#~ msgstr "inte behandlade" +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "känner inte till någon nyckelserver (använd flaggan --keyserver)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s: ogiltig nyckelidentitet\n" #~ msgid "assuming bad MDC due to an unknown critical bit\n" #~ msgstr "antar att MDC är felaktig eftersom en okänd kritisk bit är satt\n" -# om någon kan tala om för mig vad detta betyder skulle jag bli jätteglad! -#~ msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +# LID betyder local id och är serienumret i den lokala databasen +# för en given nyckel +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "fel vid läsning av katalogpost för lokalt id %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lokalt id %lu: väntade en katalogpost, fick en post av typen %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "ingen primär nyckel för lokalt id %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "fel vid läsning av primär nyckel för lokalt id %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record misslyckades: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "nyckel %08lX: uppslagning av post misslyckades\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "nyckel %08lX: finns redan i tabellen över pålitliga nycklar\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "OBSERVERA: den hemliga nyckeln %08lX är INTE skyddad.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "nyckel %08lX: hemlig och publik nyckel stämmer inte överens\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "numrering av hemliga nycklar misslyckades: %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "nyckel: %08lX.%lu: Korrekt bindning till undernyckel\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "nyckel %08lX.%lu: Felaktig bindning till undernyckel: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "nyckel %08lX.%lu: Giltig återkallelse av nyckel\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "nyckel %08lX.%lu: Felaktig återkallelse av nyckel: %s\n" + +#~ msgid "key %08lX.%lu: Valid subkey revocation\n" +#~ msgstr "nyckel %08lX.%lu: Giltig återkallelse av undernyckel\n" + +#~ msgid "Good self-signature" +#~ msgstr "Korrekt självsignatur" + +#~ msgid "Invalid self-signature" +#~ msgstr "Felaktig självsignatur" + +# detta verkar mycket märkligt. Någon borde kanske få en förklaring från +# gnupg-utvecklarna? +#~ msgid "Valid user ID revocation skipped due to a newer self signature" #~ msgstr "" -#~ "nyckeln är inte markerad osäker - går inte att använda med fejkad RNG!\n" +#~ "Hoppade över en giltig återkallelse av användaridentiteten på\n" +#~ "grund av en nyare självsignatur" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Giltig återkallelse av användaridentitet" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Ogiltig återkallelse av användaridentitet" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Giltig återkallelse av certifikat" + +#~ msgid "Good certificate" +#~ msgstr "Korrekt certifikat" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Ogiltig återkallelse av certifikat " + +#~ msgid "Invalid certificate" +#~ msgstr "Ogiltigt certifikat" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "signaturpost %lu[%d] pekar mot fel post.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "dubblett av certifikat - borttaget" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir misslyckades: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lokalt id ?: tillägg misslyckades: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lokalt id %lu: tillägg misslyckades: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lokalt id %lu: lades till\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "fel vid läsning av katalogpost: %s\n" + +#~ msgid "\t%lu keys with errors\n" +#~ msgstr "\t%lu nycklar med fel\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu nycklar tillagda\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lokalt id %lu: katalogpost utan nyckel - hoppade över\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr "\t%lu på grund av nya publika nycklar\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu nycklar hoppades över\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu nycklar uppdaterades\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Ooops, inga nycklar\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Ooops, inga användaridentiteter\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: sökning av katalogpost misslyckades: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "nyckel %08lX: tillägg av tillitspost misslyckades: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "nyckel %08lX.%lu: lades till i tillitsdatabasen\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "nyckel %08lX.%lu: skapad i framtiden (problemet är relaterat till\n" +#~ "tidsresande eller en felställd klocka)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "nyckel %08lX.%lu: gick ut %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "nyckel %08lX.%lu: tillitskontroll misslyckades: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "problem att hitta \"%s\" i tillitsdatabasen: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "användaren \"%s\" finns inte tillitsdatabasen - lägger till\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "misslyckades med att placera \"%s\" i tillitsdatabasen: %s\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "VARNING: kan ännu inte hantera långa inställningsposter\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: kan inte skapa nyckelring: %s\n" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 000000000..bd5d658f4 --- /dev/null +++ b/po/tr.po @@ -0,0 +1,4380 @@ +# Turkish translations for GnuPG messages. +# Copyright (C) 2002 Free Software Foundation, Inc. +# Nilgün Belma Bugüner , 2001, 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: gnupg 1.0.7\n" +"POT-Creation-Date: 2002-04-29 17:09+0200\n" +"PO-Revision-Date: 2002-04-21 15:14+0300\n" +"Last-Translator: Nilgün Belma Bugüner \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.6\n" + +#: util/secmem.c:88 +msgid "Warning: using insecure memory!\n" +msgstr "Uyarı: kullanılan bellek güvenli deÄŸil!\n" + +#: util/secmem.c:89 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "" +"Daha geniÅŸ bilgi edinmek için http://www.gnupg.org/faq.html adresine " +"bakınız\n" + +#: util/secmem.c:326 +msgid "operation is not possible without initialized secure memory\n" +msgstr "güvenli bellek hazırlanmadan iÅŸlem yapmak mümkün deÄŸil\n" + +#: util/secmem.c:327 +msgid "(you may have used the wrong program for this task)\n" +msgstr "(bu görev için yanlış program kullanmış olabilirsiniz)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 +msgid "yes" +msgstr "evet" + +#: util/miscutil.c:297 util/miscutil.c:334 +msgid "yY" +msgstr "eE" + +#: util/miscutil.c:298 util/miscutil.c:332 +msgid "no" +msgstr "hayır" + +#: util/miscutil.c:299 util/miscutil.c:335 +msgid "nN" +msgstr "hH" + +#: g10/keyedit.c:815 util/miscutil.c:333 +msgid "quit" +msgstr "çıkış" + +#: util/miscutil.c:336 +msgid "qQ" +msgstr "çÇ" + +#: util/errors.c:54 +msgid "general error" +msgstr "genel hata" + +#: util/errors.c:55 +msgid "unknown packet type" +msgstr "bilinmeyen paket tipi" + +#: util/errors.c:56 +msgid "unknown version" +msgstr "bilinmeyen sürüm" + +#: util/errors.c:57 +msgid "unknown pubkey algorithm" +msgstr "bilinmeyen genel anahtar algoritması" + +#: util/errors.c:58 +msgid "unknown digest algorithm" +msgstr "bilinmeyen özümleme algoritması" + +#: util/errors.c:59 +msgid "bad public key" +msgstr "genel anahtar hatalı" + +#: util/errors.c:60 +msgid "bad secret key" +msgstr "gizli anahtar hatalı" + +#: util/errors.c:61 +msgid "bad signature" +msgstr "imza hatalı" + +#: util/errors.c:62 +msgid "checksum error" +msgstr "\"checksum\" hatası" + +#: util/errors.c:63 +msgid "bad passphrase" +msgstr "anahtar parolası hatalı" + +#: util/errors.c:64 +msgid "public key not found" +msgstr "genel anahtar bulunamadı" + +#: util/errors.c:65 +msgid "unknown cipher algorithm" +msgstr "bilinmeyen ÅŸifre algoritması" + +#: util/errors.c:66 +msgid "can't open the keyring" +msgstr "anahtar zinciri açılamadı" + +#: util/errors.c:67 +msgid "invalid packet" +msgstr "geçersiz paket" + +#: util/errors.c:68 +msgid "invalid armor" +msgstr "geçersiz zırh" + +#: util/errors.c:69 +msgid "no such user id" +msgstr "böyle bir kullanıcı kimliÄŸi yok" + +#: util/errors.c:70 +msgid "secret key not available" +msgstr "gizli anahtar kullanışsız" + +#: util/errors.c:71 +msgid "wrong secret key used" +msgstr "yanlış gizli anahtar kullanılmış" + +#: util/errors.c:72 +msgid "not supported" +msgstr "desteklenmiyor" + +#: util/errors.c:73 +msgid "bad key" +msgstr "anahtar hatalı" + +#: util/errors.c:74 +msgid "file read error" +msgstr "dosya okuma hatası" + +#: util/errors.c:75 +msgid "file write error" +msgstr "dosya yazma hatası" + +#: util/errors.c:76 +msgid "unknown compress algorithm" +msgstr "bilinmeyen sıkıştırma algoritması" + +#: util/errors.c:77 +msgid "file open error" +msgstr "dosya açma hatası" + +#: util/errors.c:78 +msgid "file create error" +msgstr "dosya oluÅŸturma hatası" + +#: util/errors.c:79 +msgid "invalid passphrase" +msgstr "anahtar parolası geçersiz" + +#: util/errors.c:80 +msgid "unimplemented pubkey algorithm" +msgstr "tamamlanmamış genel anahtar algoritması" + +#: util/errors.c:81 +msgid "unimplemented cipher algorithm" +msgstr "tamamlanmamış ÅŸifre algoritması" + +#: util/errors.c:82 +msgid "unknown signature class" +msgstr "bilinmeyen imza sınıfı" + +#: util/errors.c:83 +msgid "trust database error" +msgstr "güvence veritabanı hatası" + +#: util/errors.c:84 +msgid "bad MPI" +msgstr "MPI hatalı" + +#: util/errors.c:85 +msgid "resource limit" +msgstr "iç kaynak sınırı" + +#: util/errors.c:86 +msgid "invalid keyring" +msgstr "anahtar zinciri geçersiz" + +#: util/errors.c:87 +msgid "bad certificate" +msgstr "sertifika hatalı" + +#: util/errors.c:88 +msgid "malformed user id" +msgstr "kullanıcı kimliÄŸi bozuk" + +#: util/errors.c:89 +msgid "file close error" +msgstr "dosya kapama hatası" + +#: util/errors.c:90 +msgid "file rename error" +msgstr "dosya isim deÄŸiÅŸtirme hatası" + +#: util/errors.c:91 +msgid "file delete error" +msgstr "dosya silme hatası" + +#: util/errors.c:92 +msgid "unexpected data" +msgstr "beklenmeyen veri" + +#: util/errors.c:93 +msgid "timestamp conflict" +msgstr "zaman damgası çeliÅŸkili" + +#: util/errors.c:94 +msgid "unusable pubkey algorithm" +msgstr "genel anahtar algoritması kullanışsız" + +#: util/errors.c:95 +msgid "file exists" +msgstr "dosya mevcut" + +#: util/errors.c:96 +msgid "weak key" +msgstr "anahtar zayıf" + +#: util/errors.c:97 +msgid "invalid argument" +msgstr "geçersiz argüman" + +#: util/errors.c:98 +msgid "bad URI" +msgstr "URI hatalı" + +#: util/errors.c:99 +msgid "unsupported URI" +msgstr "desteklenmeyen URI" + +#: util/errors.c:100 +msgid "network error" +msgstr "aÄŸ hatası" + +#: util/errors.c:102 +msgid "not encrypted" +msgstr "ÅŸifrelenemedi" + +#: util/errors.c:103 +msgid "not processed" +msgstr "iÅŸlenemedi" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "genel anahtar kullanımdışı" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "gizli anahtar kullanımdışı" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "anahtar sunucusu hatası" + +#: util/logger.c:249 +#, c-format +msgid "... this is a bug (%s:%d:%s)\n" +msgstr "... bu bir yazılım hatası (%s:%d:%s)\n" + +#: util/logger.c:255 +#, c-format +msgid "you found a bug ... (%s:%d)\n" +msgstr "bir yazılım hatası buldunuz ... (%s:%d)\n" + +#: cipher/random.c:320 g10/import.c:145 g10/keygen.c:1565 +#, c-format +msgid "can't open `%s': %s\n" +msgstr "`%s' açılamıyor: %s\n" + +#: cipher/random.c:324 +#, c-format +msgid "can't stat `%s': %s\n" +msgstr "`%s' durumlanamıyor: %s\n" + +#: cipher/random.c:329 +#, c-format +msgid "`%s' is not a regular file - ignored\n" +msgstr "`%s' düzenli bir dosya deÄŸil - görülmedi\n" + +#: cipher/random.c:334 +msgid "note: random_seed file is empty\n" +msgstr "not: \"random_seed\" dosyası boÅŸ\n" + +#: cipher/random.c:340 +msgid "warning: invalid size of random_seed file - not used\n" +msgstr "uyarı: \"random_seed\" dosyasının boyu hatalı - kullanılmadı\n" + +#: cipher/random.c:348 +#, c-format +msgid "can't read `%s': %s\n" +msgstr "\"%s\" okunamıyor: %s\n" + +#: cipher/random.c:386 +msgid "note: random_seed file not updated\n" +msgstr "bilgi: \"random_seed\" dosyası güncel deÄŸil\n" + +#: cipher/random.c:406 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "\"%s\" oluÅŸturulamıyor: %s\n" + +#: cipher/random.c:413 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "\"%s\" yazılamıyor: %s\n" + +#: cipher/random.c:416 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "\"%s\" kapatılamıyor: %s\n" + +#: cipher/random.c:662 +msgid "WARNING: using insecure random number generator!!\n" +msgstr "UYARI: kullanılan rasgele sayı üreteci güvenli deÄŸil!!\n" + +#: cipher/random.c:663 +msgid "" +"The random number generator is only a kludge to let\n" +"it run - it is in no way a strong RNG!\n" +"\n" +"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" +"\n" +msgstr "" +"Rasgele sayı üreteci kendi halinde çalışan\n" +"bir kukla - güvenilir bir RSÃœ deÄŸil!\n" +"\n" +"BU PROGRAMLA ÃœRETÄ°LMÄ°Åž HİÇBÄ°R VERÄ°YÄ° KULLANMAYIN!!\n" +"\n" + +#: cipher/rndlinux.c:142 +#, c-format +msgid "" +"\n" +"Not enough random bytes available. Please do some other work to give\n" +"the OS a chance to collect more entropy! (Need %d more bytes)\n" +msgstr "" +"\n" +"Rasgele üretilen baytlar yetersiz. Lütfen bazı iÅŸlemler yaparak\n" +"daha fazla rasgele bayt toplayabilmesi için iÅŸletim sistemine\n" +"yardımcı olun! (%d bayt daha gerekiyor)\n" + +#: g10/g10.c:287 +msgid "" +"@Commands:\n" +" " +msgstr "" +"@Komutlar:\n" +" " + +#: g10/g10.c:289 +msgid "|[file]|make a signature" +msgstr "|[dosya]|bir imza yapar" + +#: g10/g10.c:290 +msgid "|[file]|make a clear text signature" +msgstr "|[dosya]|açıkça okunabilen bir imza yapar" + +#: g10/g10.c:291 +msgid "make a detached signature" +msgstr "bağımsız bir imza yapar" + +#: g10/g10.c:292 +msgid "encrypt data" +msgstr "veriyi ÅŸifreler" + +#: g10/g10.c:293 +msgid "|[files]|encrypt files" +msgstr "|[dosyalar]|dosyalar ÅŸifrelenir" + +#: g10/g10.c:294 +msgid "encryption only with symmetric cipher" +msgstr "sadece simetrik ÅŸifre ile ÅŸifreler" + +#: g10/g10.c:295 +msgid "store only" +msgstr "sadece saklar" + +#: g10/g10.c:296 +msgid "decrypt data (default)" +msgstr "veri ÅŸifresini açar (öntanımlı)" + +#: g10/g10.c:297 +msgid "|[files]|decrypt files" +msgstr "|[dosyalar]|dosyaların ÅŸifresi açılır" + +#: g10/g10.c:298 +msgid "verify a signature" +msgstr "bir imzayı doÄŸrular" + +#: g10/g10.c:300 +msgid "list keys" +msgstr "anahtarları listeler" + +#: g10/g10.c:302 +msgid "list keys and signatures" +msgstr "anahtarları ve imzaları listeler" + +#: g10/g10.c:303 +msgid "check key signatures" +msgstr "anahtar imzalarını kontrol eder" + +#: g10/g10.c:304 +msgid "list keys and fingerprints" +msgstr "anahtarları ve parmak izlerini listeler" + +#: g10/g10.c:305 +msgid "list secret keys" +msgstr "gizli anahtarları listeler" + +#: g10/g10.c:306 +msgid "generate a new key pair" +msgstr "yeni bir anahtar çifti üretir" + +#: g10/g10.c:307 +msgid "remove keys from the public keyring" +msgstr "anahtarları genel anahtar zincirinden siler" + +#: g10/g10.c:309 +msgid "remove keys from the secret keyring" +msgstr "anahtarları gizli anahtar zincirinden siler" + +#: g10/g10.c:310 +msgid "sign a key" +msgstr "bir anahtarı imzalar" + +#: g10/g10.c:311 +msgid "sign a key locally" +msgstr "bir anahtarı yerel olarak imzalar" + +#: g10/g10.c:312 +msgid "sign a key non-revocably" +msgstr "bir anahtarı iptal edilemez olarak imzalar" + +#: g10/g10.c:313 +msgid "sign a key locally and non-revocably" +msgstr "bir anahtarı yerel ve iptal edilemez olarak imzalar" + +#: g10/g10.c:314 +msgid "sign or edit a key" +msgstr "bir anahtarı düzenler ve imzalar" + +#: g10/g10.c:315 +msgid "generate a revocation certificate" +msgstr "bir yürürlükten kaldırma sertifikası üretir" + +#: g10/g10.c:316 +msgid "export keys" +msgstr "anahtarları gönderir" + +#: g10/g10.c:317 +msgid "export keys to a key server" +msgstr "anahtarları bir anahtar sunucusuna gönderir" + +#: g10/g10.c:318 +msgid "import keys from a key server" +msgstr "anahtarları bir anahtar sunucusundan indirir" + +#: g10/g10.c:320 +msgid "search for keys on a key server" +msgstr "bir anahtar sunucusunda anahtarları arar" + +#: g10/g10.c:322 +msgid "update all keys from a keyserver" +msgstr "anahtarları bir anahtar sunucusundan günceller" + +#: g10/g10.c:326 +msgid "import/merge keys" +msgstr "anahtarları indirir/katıştırır" + +#: g10/g10.c:328 +msgid "list only the sequence of packets" +msgstr "sadece paketlerin silsilesini listeler" + +#: g10/g10.c:330 +msgid "export the ownertrust values" +msgstr "sahibiningüvencesi deÄŸerlerini gönderir" + +#: g10/g10.c:332 +msgid "import ownertrust values" +msgstr "sahibiningüvencesi deÄŸerlerini indirir" + +#: g10/g10.c:334 +msgid "update the trust database" +msgstr "güvence veritabanını günceller" + +#: g10/g10.c:336 +msgid "unattended trust database update" +msgstr "bakımsız güvence veritabanının güncellemesi" + +#: g10/g10.c:337 +msgid "fix a corrupted trust database" +msgstr "bozulan güvence veritabanını onarır" + +#: g10/g10.c:338 +msgid "De-Armor a file or stdin" +msgstr "Bir dosya veya standart girdinin zırhını kaldırır" + +#: g10/g10.c:340 +msgid "En-Armor a file or stdin" +msgstr "Bir dosya veya standart girdiyi zırhlar" + +#: g10/g10.c:342 +msgid "|algo [files]|print message digests" +msgstr "|algo [dosyalar]|ileti özümlemelerini gösterir" + +#: g10/g10.c:346 +msgid "" +"@\n" +"Options:\n" +" " +msgstr "" +"@\n" +"Seçenekler:\n" +" " + +#: g10/g10.c:348 +msgid "create ascii armored output" +msgstr "ascii zırhlı çıktı oluÅŸturur" + +#: g10/g10.c:350 +msgid "|NAME|encrypt for NAME" +msgstr "|Ä°SÄ°M|Ä°SÄ°M için ÅŸifreleme yapar" + +#: g10/g10.c:353 +msgid "|NAME|use NAME as default recipient" +msgstr "|Ä°SÄ°M|öntanımlı alıcı olarak Ä°SÄ°M kullanılır" + +#: g10/g10.c:355 +msgid "use the default key as default recipient" +msgstr "öntanımlı alıcı olarak öntanımlı anahtar kullanılır" + +#: g10/g10.c:361 +msgid "use this user-id to sign or decrypt" +msgstr "imzalamak ya da ÅŸifre çözmek için bu kullanıcı kimliÄŸi kullanılır" + +#: g10/g10.c:362 +msgid "|N|set compress level N (0 disables)" +msgstr "|N|sıkıştırma seviyesi N olarak ayarlanır (0 ise sıkıştırma yapılmaz)" + +#: g10/g10.c:364 +msgid "use canonical text mode" +msgstr "kurallı metin kipini kullanır" + +#: g10/g10.c:371 +msgid "use as output file" +msgstr "çıktı dosyası olarak kullanılır" + +#: g10/g10.c:372 +msgid "verbose" +msgstr "çok detaylı" + +#: g10/g10.c:373 +msgid "be somewhat more quiet" +msgstr "daha az detaylı" + +#: g10/g10.c:374 +msgid "don't use the terminal at all" +msgstr "terminali hiç kullanma" + +#: g10/g10.c:375 +msgid "force v3 signatures" +msgstr "v3 imzalarına zorlar" + +#: g10/g10.c:376 +msgid "do not force v3 signatures" +msgstr "v3 imzalara zorlamaz" + +#: g10/g10.c:377 +msgid "force v4 key signatures" +msgstr "v4 imzalara zorlar" + +#: g10/g10.c:378 +msgid "do not force v4 key signatures" +msgstr "v4 imzalara zorlamaz" + +#: g10/g10.c:379 +msgid "always use a MDC for encryption" +msgstr "ÅŸifreleme için daima bir MDC kullanılır" + +#: g10/g10.c:381 +msgid "never use a MDC for encryption" +msgstr "ÅŸifreleme için asla bir MDC kullanılmaz" + +#: g10/g10.c:383 +msgid "do not make any changes" +msgstr "hiçbir deÄŸiÅŸiklik yapmaz" + +#. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, +#: g10/g10.c:385 +msgid "use the gpg-agent" +msgstr "gpg-agent kullan" + +#: g10/g10.c:388 +msgid "batch mode: never ask" +msgstr "önceden belirlenmiÅŸ iÅŸlemler kipi: hiç sormaz" + +#: g10/g10.c:389 +msgid "assume yes on most questions" +msgstr "soruların çoÄŸunda cevap evet farzedilir" + +#: g10/g10.c:390 +msgid "assume no on most questions" +msgstr "soruların çoÄŸunda cevap hayır farzedilir" + +#: g10/g10.c:391 +msgid "add this keyring to the list of keyrings" +msgstr "bu anahtar zincirini anahtar zincirleri listesine ekler" + +#: g10/g10.c:392 +msgid "add this secret keyring to the list" +msgstr "bu gizli anahtar zincirini listeye ekler" + +#: g10/g10.c:393 +msgid "show which keyring a listed key is on" +msgstr "listedeki bir anahtarın hangi anahtar zincirinde olduÄŸunu gösterir" + +#: g10/g10.c:394 +msgid "|NAME|use NAME as default secret key" +msgstr "|Ä°SÄ°M|öntanımlı gizli anahtar olarak Ä°SÄ°M kullanılır" + +#: g10/g10.c:395 +msgid "|HOST|use this keyserver to lookup keys" +msgstr "|MAKÄ°NA|anahtarları aramak için bu anahtar sunucusu kullanılır" + +#: g10/g10.c:397 +msgid "|NAME|set terminal charset to NAME" +msgstr "|Ä°SÄ°M|terminal karakter setini Ä°SÄ°M olarak ayarlar" + +#: g10/g10.c:398 +msgid "read options from file" +msgstr "seçenekleri dosyadan okur" + +#: g10/g10.c:402 +msgid "|FD|write status info to this FD" +msgstr "|FD|durum bilgisini bu FD'ye yazar" + +#: g10/g10.c:404 +msgid "|[file]|write status info to file" +msgstr "|[DOSYA]|durum bilgisini DOSYAya yazar" + +#: g10/g10.c:410 +msgid "|KEYID|ultimately trust this key" +msgstr "|ANHKÄ°ML|bu anahtar son derece güvenli" + +#: g10/g10.c:411 +msgid "|FILE|load extension module FILE" +msgstr "|DOSYA|geniÅŸletme modülü olarak DOSYA yüklenir" + +#: g10/g10.c:412 +msgid "emulate the mode described in RFC1991" +msgstr "RFC1991 de açıklanan kipi uygular" + +#: g10/g10.c:413 +msgid "set all packet, cipher and digest options to OpenPGP behavior" +msgstr "tüm paket, ÅŸifre ve özümleme seçeneklerini OpenPGP tarzında ayarlar" + +#: g10/g10.c:414 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "tüm paket, ÅŸifre ve özümleme seçeneklerini PGP 2.x'e göre ayarlar" + +#: g10/g10.c:418 +msgid "|N|use passphrase mode N" +msgstr "|N|anahtar parolası kipi olarak N kullanılır" + +#: g10/g10.c:420 +msgid "|NAME|use message digest algorithm NAME for passphrases" +msgstr "" +"|Ä°SÄ°M|anahtar parolaları için ileti özümleme algoritması olarak Ä°SÄ°M " +"kullanılır" + +#: g10/g10.c:422 +msgid "|NAME|use cipher algorithm NAME for passphrases" +msgstr "|Ä°SÄ°M|anahtar parolaları için ÅŸifre algoritması olarak Ä°SÄ°M kullanılır" + +#: g10/g10.c:424 +msgid "|NAME|use cipher algorithm NAME" +msgstr "|Ä°SÄ°M|ÅŸifre algoritması olarak Ä°SÄ°M kullanılır" + +#: g10/g10.c:425 +msgid "|NAME|use message digest algorithm NAME" +msgstr "|Ä°SÄ°M|özümleme algoritması olarak Ä°SÄ°M kullanılır" + +#: g10/g10.c:426 +msgid "|N|use compress algorithm N" +msgstr "|N|sıkıştırma algoritması olarak N kullanılır" + +#: g10/g10.c:427 +msgid "throw keyid field of encrypted packets" +msgstr "ÅŸifreli paketlerin anahtar-kimlik alanlarını atar" + +#: g10/g10.c:428 +msgid "Show Photo IDs" +msgstr "Foto kimliklerini gösterir" + +#: g10/g10.c:429 +msgid "Don't show Photo IDs" +msgstr "Foto kimliklerini göstermez" + +#: g10/g10.c:430 +msgid "Set command line to view Photo IDs" +msgstr "Komut satırını foto kimliklerini göstermeye ayarlar" + +#: g10/g10.c:431 +msgid "|NAME=VALUE|use this notation data" +msgstr "|Ä°SÄ°M=DEÄžER|veri bu nitelemeyle kullanılır" + +#: g10/g10.c:434 +msgid "" +"@\n" +"(See the man page for a complete listing of all commands and options)\n" +msgstr "" +"@\n" +"(Tüm komut ve seçeneklerin komple listesi için man sayfalarına bakın)\n" + +#: g10/g10.c:437 +msgid "" +"@\n" +"Examples:\n" +"\n" +" -se -r Bob [file] sign and encrypt for user Bob\n" +" --clearsign [file] make a clear text signature\n" +" --detach-sign [file] make a detached signature\n" +" --list-keys [names] show keys\n" +" --fingerprint [names] show fingerprints\n" +msgstr "" +"@\n" +"Örnekler:\n" +"\n" +" -se -r Ali [dosya] kullanıcı Ali için imzalar ve ÅŸifreler\n" +" --clearsign [dosya] açıkça okunabilir bir imza yapar\n" +" --detach-sign [dosya] bağımsız bir imza yapar\n" +" --list-keys [isimler] anahtarları listeler\n" +" --fingerprint [isimler] parmak izlerini gösterir\n" + +#: g10/g10.c:579 +msgid "Please report bugs to .\n" +msgstr "Yazılım hatalarını lütfen adresine bildirin.\n" + +#: g10/g10.c:583 +msgid "Usage: gpg [options] [files] (-h for help)" +msgstr "Kullanımı: gpg [seçenekler] [dosyalar] (yardım için -h)" + +#: g10/g10.c:586 +msgid "" +"Syntax: gpg [options] [files]\n" +"sign, check, encrypt or decrypt\n" +"default operation depends on the input data\n" +msgstr "" +"Yazılışı: gpg [seçenekler] [dosyalar]\n" +"imzalama, kontrol, ÅŸifreleme veya çözme\n" +"öntanımlı iÅŸlem girilen veriye bağımlıdır\n" + +#: g10/g10.c:597 +msgid "" +"\n" +"Supported algorithms:\n" +msgstr "" +"\n" +"Desteklenen algoritmalar:\n" + +#: g10/g10.c:671 +msgid "usage: gpg [options] " +msgstr "kullanımı: gpg [seçenekler] " + +#: g10/g10.c:728 +msgid "conflicting commands\n" +msgstr "çeliÅŸen komutlar\n" + +#: g10/g10.c:903 +#, c-format +msgid "NOTE: no default option file `%s'\n" +msgstr "BÄ°LGÄ°: \"%s\" öntanımlı seçenek dosyası yok\n" + +#: g10/g10.c:907 +#, c-format +msgid "option file `%s': %s\n" +msgstr "seçenek dosyası \"%s\": %s\n" + +#: g10/g10.c:914 +#, c-format +msgid "reading options from `%s'\n" +msgstr "\"%s\"den seçenekler okunuyor\n" + +#: g10/g10.c:1197 +#, c-format +msgid "%s is not a valid character set\n" +msgstr "%s geçerli bir karakter seti deÄŸil\n" + +#: g10/g10.c:1214 +msgid "could not parse keyserver URI\n" +msgstr "anahtar sunucusunun adresi çözümlenemedi\n" + +#: g10/g10.c:1228 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "çalıştırılabilirlerin patikası %s yapılamıyor\n" + +#: g10/g10.c:1251 g10/g10.c:1267 +#, c-format +msgid "WARNING: %s is a deprecated option.\n" +msgstr "UYARI: %s seçeneÄŸi kullanımdan kaldırılmak üzere.\n" + +#: g10/g10.c:1253 g10/g10.c:1270 +#, c-format +msgid "please use \"--keyserver-options %s\" instead\n" +msgstr "lütfen yerine \"--keyserver-options %s\" kullanınız\n" + +#: g10/g10.c:1347 +msgid "WARNING: program may create a core file!\n" +msgstr "UYARI: program bir \"core\" dosyası oluÅŸturabilir!\n" + +#: g10/g10.c:1351 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "UYARI: %s %s'i aşıyor\n" + +#: g10/g10.c:1358 g10/g10.c:1369 +#, c-format +msgid "NOTE: %s is not for normal use!\n" +msgstr "BÄ°LGÄ°: %s normal kullanım için deÄŸil!\n" + +#: g10/g10.c:1360 g10/g10.c:1380 +#, c-format +msgid "%s not allowed with %s!\n" +msgstr "%s ile %s birlikte kullanılmaz!\n" + +#: g10/g10.c:1363 +#, c-format +msgid "%s makes no sense with %s!\n" +msgstr "%s, %s ile etkisiz olur!\n" + +#: g10/g10.c:1389 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "--pgp2 kipinde sadece ayrık veya sade imzalar yapabilirsiniz\n" + +#: g10/g10.c:1395 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "--pgp2 kipinde aynı anda hem imzalama hem de ÅŸifreleme yapamazsınız\n" + +#: g10/g10.c:1401 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "--pgp2 ile çalışırken veri yolu yerine dosyaları kullanmalısınız.\n" + +#: g10/g10.c:1414 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "--pgp2 kipinde ileti ÅŸifrelemesi IDEA ÅŸifresi gerektirir\n" + +#: g10/encode.c:287 g10/encode.c:349 g10/g10.c:1428 g10/sign.c:620 +#: g10/sign.c:798 +msgid "this message may not be usable by PGP 2.x\n" +msgstr "bu ileti PGP 2.x tarafından kullanılamayabilir\n" + +#: g10/g10.c:1470 g10/g10.c:1482 +msgid "selected cipher algorithm is invalid\n" +msgstr "seçilen ÅŸifre algoritması geçersiz\n" + +#: g10/g10.c:1476 g10/g10.c:1488 +msgid "selected digest algorithm is invalid\n" +msgstr "seçilen özümleme algoritması geçersiz\n" + +#: g10/g10.c:1492 +msgid "the given signature policy URL is invalid\n" +msgstr "belirtilen imza güvence adresi geçersiz\n" + +#: g10/g10.c:1496 +msgid "the given certification policy URL is invalid\n" +msgstr "belirtilen sertifika güvence adresi geçersiz\n" + +#: g10/g10.c:1499 +#, c-format +msgid "compress algorithm must be in range %d..%d\n" +msgstr "sıkıştırma algoritması %d..%d aralığında olmalı\n" + +#: g10/g10.c:1501 +msgid "completes-needed must be greater than 0\n" +msgstr "\"completes-needed\" 0 dan büyük olmalı\n" + +#: g10/g10.c:1503 +msgid "marginals-needed must be greater than 1\n" +msgstr "\"marginals-needed\" 1 den büyük olmalı\n" + +#: g10/g10.c:1505 +msgid "max-cert-depth must be in range 1 to 255\n" +msgstr "\"max-cert-depth\" 1 ile 255 arasında olmalı\n" + +#: g10/g10.c:1508 +msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" +msgstr "BÄ°LGÄ°: basit S2K kipi (0) kesinlikle tavsiye edilmez\n" + +#: g10/g10.c:1512 +msgid "invalid S2K mode; must be 0, 1 or 3\n" +msgstr "S2K kipi geçersiz; 0, 1 veya 3 olmalı\n" + +#: g10/g10.c:1516 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "öntanımlı denetim seviyesi geçersiz; 0, 1, 2, ya da 3 olabilir\n" + +#: g10/g10.c:1519 +msgid "invalid preferences\n" +msgstr "tercihler geçersiz\n" + +#: g10/g10.c:1613 +#, c-format +msgid "failed to initialize the TrustDB: %s\n" +msgstr "\"TrustDB\" güvence veritabanı baÅŸlangıç aÅŸamasında baÅŸarısız: %s\n" + +#: g10/g10.c:1633 +msgid "--store [filename]" +msgstr "--store [dosyaismi]" + +#: g10/g10.c:1640 +msgid "--symmetric [filename]" +msgstr "--symmetric [dosyaismi]" + +#: g10/g10.c:1648 +msgid "--encrypt [filename]" +msgstr "--encrypt [dosyaismi]" + +#: g10/g10.c:1665 +msgid "--sign [filename]" +msgstr "--sign [dosyaismi]" + +#: g10/g10.c:1678 +msgid "--sign --encrypt [filename]" +msgstr "--sign --encrypt [dosyaismi]" + +#: g10/g10.c:1692 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [DOSYA]" + +#: g10/g10.c:1701 +msgid "--clearsign [filename]" +msgstr "--clearsign [dosyaismi]" + +#: g10/g10.c:1719 +msgid "--decrypt [filename]" +msgstr "--decrypt [dosyaismi]" + +#: g10/g10.c:1730 +msgid "--sign-key user-id" +msgstr "--sign-key kullanıcı-kimliÄŸi" + +#: g10/g10.c:1738 +msgid "--lsign-key user-id" +msgstr "--lsign-key kullanıcı-kimliÄŸi" + +#: g10/g10.c:1746 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key KULL-KML" + +#: g10/g10.c:1754 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key KULL-KML" + +#: g10/g10.c:1762 +msgid "--edit-key user-id [commands]" +msgstr "--edit-key kullanıcı-kimliÄŸi [komutlar]" + +#: g10/encode.c:307 g10/g10.c:1818 g10/sign.c:709 +#, c-format +msgid "can't open %s: %s\n" +msgstr "%s açılamadı: %s\n" + +#: g10/g10.c:1833 +msgid "-k[v][v][v][c] [user-id] [keyring]" +msgstr "-k[v][v][v][c] [kullanıcı-kimliÄŸi] [anahtar-zinciri]" + +#: g10/g10.c:1916 +#, c-format +msgid "dearmoring failed: %s\n" +msgstr "zırhın kaldırılması baÅŸarısız: %s\n" + +#: g10/g10.c:1924 +#, c-format +msgid "enarmoring failed: %s\n" +msgstr "zırhlama baÅŸarısız: %s\n" + +#: g10/g10.c:2011 +#, c-format +msgid "invalid hash algorithm `%s'\n" +msgstr "`%s' hash algoritması geçersiz\n" + +#: g10/g10.c:2097 +msgid "[filename]" +msgstr "[dosyaismi]" + +#: g10/g10.c:2101 +msgid "Go ahead and type your message ...\n" +msgstr "Ä°letinizi yazın ...\n" + +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2104 g10/verify.c:94 +#: g10/verify.c:139 +#, c-format +msgid "can't open `%s'\n" +msgstr "`%s' açılamadı\n" + +#: g10/g10.c:2313 +msgid "" +"the first character of a notation name must be a letter or an underscore\n" +msgstr "bir niteleme isminin ilk karakteri bir harf ya da altçizgi olmalı\n" + +#: g10/g10.c:2319 +msgid "" +"a notation name must have only letters, digits, dots or underscores and end " +"with an '='\n" +msgstr "" +"bir niteleme ismi sadece harfler, rakamlar ve altçizgiler içerebilir ve " +"sonuna bir '=' gelir.\n" + +#: g10/g10.c:2325 +msgid "dots in a notation name must be surrounded by other characters\n" +msgstr "" +"bir niteleme isminde noktalar diÄŸer karakterler tarafından kuÅŸatılmış " +"olmalıdır\n" + +#: g10/g10.c:2333 +msgid "a notation value must not use any control characters\n" +msgstr "bir niteleme deÄŸerinde kontrol karakterleri kullanılamaz\n" + +#: g10/armor.c:314 +#, c-format +msgid "armor: %s\n" +msgstr "zırh: %s\n" + +#: g10/armor.c:343 +msgid "invalid armor header: " +msgstr "zırh baÅŸlığı geçersiz: " + +#: g10/armor.c:350 +msgid "armor header: " +msgstr "zırh baÅŸlığı: " + +#: g10/armor.c:361 +msgid "invalid clearsig header\n" +msgstr "açıkça okunabilen imza baÅŸlığı geçersiz\n" + +#: g10/armor.c:413 +msgid "nested clear text signatures\n" +msgstr "açıkça okunabilen imzalar dahil edildi\n" + +#: g10/armor.c:537 +msgid "invalid dash escaped line: " +msgstr "araçizgisi escape'lı satır geçersiz: " + +#: g10/armor.c:549 +msgid "unexpected armor:" +msgstr "beklenmeyen zırh: " + +#: g10/armor.c:675 g10/armor.c:1242 +#, c-format +msgid "invalid radix64 character %02x skipped\n" +msgstr "geçersiz radix64 karakteri %02x atlandı\n" + +#: g10/armor.c:718 +msgid "premature eof (no CRC)\n" +msgstr "dosya sonu belirsiz (CRC yok)\n" + +#: g10/armor.c:752 +msgid "premature eof (in CRC)\n" +msgstr "dosya sonu belirsiz (CRC içinde)\n" + +#: g10/armor.c:756 +msgid "malformed CRC\n" +msgstr "CRC bozulmuÅŸ\n" + +#: g10/armor.c:760 g10/armor.c:1279 +#, c-format +msgid "CRC error; %06lx - %06lx\n" +msgstr "CRC hatası; %06lx - %06lx\n" + +#: g10/armor.c:780 +msgid "premature eof (in Trailer)\n" +msgstr "dosya sonu belirsiz (kuyruk içinde)\n" + +#: g10/armor.c:784 +msgid "error in trailer line\n" +msgstr "kuyruk satırında hata\n" + +#: g10/armor.c:1057 +msgid "no valid OpenPGP data found.\n" +msgstr "geçerli OpenPGP verisi yok\n" + +#: g10/armor.c:1062 +#, c-format +msgid "invalid armor: line longer than %d characters\n" +msgstr "geçersiz zırh: satır %d karakterden uzun\n" + +#: g10/armor.c:1066 +msgid "" +"quoted printable character in armor - probably a buggy MTA has been used\n" +msgstr "" +"zırh içinde uluslararası karakterler - büyük olasılıkla hatalı bir e-posta " +"sunucusu kullanılmış\n" + +#: g10/pkclist.c:61 +msgid "No reason specified" +msgstr "BelirtilmiÅŸ bir neden yok" + +#: g10/pkclist.c:63 +msgid "Key is superseded" +msgstr "Anahtarın yerine baÅŸkası konulmuÅŸ ve iptal edilmiÅŸtir" + +#: g10/pkclist.c:65 +msgid "Key has been compromised" +msgstr "Anahtar tehlikede" + +#: g10/pkclist.c:67 +msgid "Key is no longer used" +msgstr "Anahtar artık kullanılmayacak" + +#: g10/pkclist.c:69 +msgid "User ID is no longer valid" +msgstr "Kullanıcı kimliÄŸi artık geçersiz" + +#: g10/pkclist.c:73 +msgid "Reason for revocation: " +msgstr "Yürürlükten kaldırma sebebi: " + +#: g10/pkclist.c:90 +msgid "Revocation comment: " +msgstr "Yürürlükten kaldırma açıklaması: " + +#. a string with valid answers +#: g10/pkclist.c:252 +msgid "iImMqQsS" +msgstr "bBmMaAkK" + +#: g10/pkclist.c:258 +#, c-format +msgid "" +"No trust value assigned to:\n" +"%4u%c/%08lX %s \"" +msgstr "" +"Güven derecesi belirtilmemiÅŸ:\n" +"%4u%c/%08lX %s \"" + +#: g10/pkclist.c:270 +msgid "" +"Please decide how far you trust this user to correctly\n" +"verify other users' keys (by looking at passports,\n" +"checking fingerprints from different sources...)?\n" +"\n" +msgstr "" +"DiÄŸer kullanıcıları anahtarların doÄŸrulayacak\n" +"bu kullanıcının güven derecesine lütfen karar verin.\n" +"(pasportuna mı bakarsınız yoksa farklı kaynaklardan\n" +"parmakizlerini mi kontrol edersiniz...)? kararınızı verin\n" + +#: g10/pkclist.c:273 +#, c-format +msgid " %d = Don't know\n" +msgstr " %d = bilmiyorum\n" + +#: g10/pkclist.c:274 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = güvence vermem\n" + +#: g10/pkclist.c:275 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Şöyle böyle güveniyorum\n" + +#: g10/pkclist.c:276 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Tamamen güveniyorum\n" + +#: g10/pkclist.c:278 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Son derece güveniyorum\n" + +#: g10/pkclist.c:279 +msgid " i = please show me more information\n" +msgstr " b = Daha fazla bilgi gerekli\n" + +#: g10/pkclist.c:281 +msgid " m = back to the main menu\n" +msgstr " m = ana menüye dön\n" + +#: g10/pkclist.c:284 +msgid " s = skip this key\n" +msgstr " a = bu anahtarı atla\n" + +#: g10/pkclist.c:285 +msgid " q = quit\n" +msgstr " k = çık\n" + +#: g10/pkclist.c:292 +msgid "Your decision? " +msgstr "Kararınız? " + +#: g10/pkclist.c:313 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "" +"Bu anahtara gerçekten en yüksek güven derecesini vermek istiyor musunuz?" + +#: g10/pkclist.c:325 +msgid "Certificates leading to an ultimately trusted key:\n" +msgstr "Son derece güvenli bir anahtarla sonuçlanan sertifikalar:\n" + +#: g10/pkclist.c:399 +#, c-format +msgid "key %08lX: key has been revoked!\n" +msgstr "anahtar %08lX: anahtar yürürlükten kaldırılmıştı!\n" + +#: g10/pkclist.c:406 g10/pkclist.c:418 g10/pkclist.c:512 +msgid "Use this key anyway? " +msgstr "Bu anahtar yine de kullanılsın mı? " + +#: g10/pkclist.c:411 +#, c-format +msgid "key %08lX: subkey has been revoked!\n" +msgstr "anahtar %08lX: yardımcı anahtar yürürlükten kaldırılmıştı!\n" + +#: g10/pkclist.c:432 +#, c-format +msgid "%08lX: key has expired\n" +msgstr "%08lX: anahtarın kullanım süresi dolmuÅŸ\n" + +#: g10/pkclist.c:442 +#, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +"%08lX: Bu anahtarın gerçekten sahibine ait olduÄŸuna dair bir belirti yok\n" + +#: g10/pkclist.c:448 +#, c-format +msgid "%08lX: We do NOT trust this key\n" +msgstr "%08lX: Bu anahtara güven-mi-yoruz\n" + +#: g10/pkclist.c:454 +#, c-format +msgid "" +"%08lX: It is not sure that this key really belongs to the owner\n" +"but it is accepted anyway\n" +msgstr "" +"%08lX: Bu anahtarın gerçekten sahibine ait olup olmadığından emin\n" +"olunamadı fakat yine de kabul edildi.\n" + +#: g10/pkclist.c:460 +msgid "This key probably belongs to the owner\n" +msgstr "Bu anahtarın sahibine ait olduÄŸu umuluyor\n" + +#: g10/pkclist.c:465 +msgid "This key belongs to us\n" +msgstr "Bu anahtar bizim\n" + +#: g10/pkclist.c:507 +msgid "" +"It is NOT certain that the key belongs to its owner.\n" +"If you *really* know what you are doing, you may answer\n" +"the next question with yes\n" +"\n" +msgstr "" +"Bu anahtarın sahibine ait olduÄŸu kesin DEĞİL.\n" +"*Gerçekten* ne yaptığınızı biliyorsanız, sonraki\n" +"soruya da evet cevabı verebilirsiniz.\n" + +#: g10/pkclist.c:521 g10/pkclist.c:543 +msgid "WARNING: Using untrusted key!\n" +msgstr "UYARI: Güven derecesiz anahtar kullanılıyor!\n" + +#: g10/pkclist.c:562 +msgid "WARNING: This key has been revoked by its owner!\n" +msgstr "UYARI: Bu anahtar sahibi tarafından yürürlükten kaldırılmıştı!\n" + +#: g10/pkclist.c:563 +msgid " This could mean that the signature is forgery.\n" +msgstr " Bu imza sahte anlamına gelebilir.\n" + +#: g10/pkclist.c:569 +msgid "WARNING: This subkey has been revoked by its owner!\n" +msgstr "" +"UYARI: Bu yardımcı anahtar sahibi tarafından yürürlükten kaldırılmıştı!\n" + +#: g10/pkclist.c:574 +msgid "Note: This key has been disabled.\n" +msgstr "Bilgi: Bu anahtar iptal edildi.\n" + +#: g10/pkclist.c:579 +msgid "Note: This key has expired!\n" +msgstr "Bilgi: Bu anahtarın kullanım süresi dolmuÅŸtu!\n" + +#: g10/pkclist.c:590 +msgid "WARNING: This key is not certified with a trusted signature!\n" +msgstr "UYARI: Bu anahtar güven dereceli bir imza ile sertifikalanmamış!\n" + +#: g10/pkclist.c:592 +msgid "" +" There is no indication that the signature belongs to the owner.\n" +msgstr " Bu imzanın sahibine ait olduÄŸuna dair bir belirti yok.\n" + +#: g10/pkclist.c:600 +msgid "WARNING: We do NOT trust this key!\n" +msgstr "UYARI: Bu anahtara güven-mi-yoruz!\n" + +#: g10/pkclist.c:601 +msgid " The signature is probably a FORGERY.\n" +msgstr " Bu imza SAHTE olabilir.\n" + +#: g10/pkclist.c:609 +msgid "" +"WARNING: This key is not certified with sufficiently trusted signatures!\n" +msgstr "" +"UYARI: Bu anahtar yeterli güven derecesine sahip imzalarla " +"sertifikalanmamış!\n" + +#: g10/pkclist.c:611 +msgid " It is not certain that the signature belongs to the owner.\n" +msgstr " Bu imzanın sahibine ait olduÄŸu kesin deÄŸil.\n" + +#: g10/pkclist.c:714 g10/pkclist.c:737 g10/pkclist.c:882 g10/pkclist.c:937 +#, c-format +msgid "%s: skipped: %s\n" +msgstr "%s: atlandı: %s\n" + +#: g10/pkclist.c:723 g10/pkclist.c:911 +#, c-format +msgid "%s: skipped: public key already present\n" +msgstr "%s: atlandı: genel anahtar zaten var\n" + +#: g10/pkclist.c:752 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "Bir kullanıcı kimliÄŸi belirtmediniz. (\"-r\" kullanabilirsiniz)\n" + +#: g10/pkclist.c:762 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" +"\n" +"Kullanıcı kimliÄŸini girin. BoÅŸ bir satır iÅŸlemi sonlandırır:" + +#: g10/pkclist.c:776 +msgid "No such user ID.\n" +msgstr "Böyle bir kullanıcı kimliÄŸi yok.\n" + +#: g10/pkclist.c:781 g10/pkclist.c:857 +msgid "skipped: public key already set as default recipient\n" +msgstr "atlandı: genel anahtar zaten öntanımlı alıcı olarak ayarlanmış\n" + +#: g10/pkclist.c:799 +msgid "Public key is disabled.\n" +msgstr "Genel anahtar iptal edildi.\n" + +#: g10/pkclist.c:806 +msgid "skipped: public key already set\n" +msgstr "atlandı: genel anahtar zaten belirtilmiÅŸ\n" + +#: g10/pkclist.c:849 +#, c-format +msgid "unknown default recipient `%s'\n" +msgstr "öntanımlı alıcı `%s' bilinmiyor\n" + +#: g10/pkclist.c:893 +#, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: atlandı: genel anahtar iptal edildi\n" + +#: g10/pkclist.c:943 +msgid "no valid addressees\n" +msgstr "geçerli adresler yok\n" + +#: g10/keygen.c:180 +#, c-format +msgid "preference %c%lu is not valid\n" +msgstr "%c%lu tercihi geçersiz\n" + +#: g10/keygen.c:187 +#, c-format +msgid "preference %c%lu duplicated\n" +msgstr "%c%lu tercihi yinelendi\n" + +#: g10/keygen.c:192 +#, c-format +msgid "too many `%c' preferences\n" +msgstr "`%c' tercih çok fazla\n" + +#: g10/keygen.c:257 +msgid "invalid character in preference string\n" +msgstr "tercih dizgesindeki karakter geçersiz\n" + +#: g10/keygen.c:399 +msgid "writing self signature\n" +msgstr "öz-imza yazılıyor\n" + +#: g10/keygen.c:443 +msgid "writing key binding signature\n" +msgstr "anahtarı garantileyen imzayı yazıyor\n" + +#: g10/keygen.c:497 g10/keygen.c:581 g10/keygen.c:672 +#, c-format +msgid "keysize invalid; using %u bits\n" +msgstr "anahtar uzunluÄŸu geçersiz; %u bit kullanılıyor\n" + +#: g10/keygen.c:502 g10/keygen.c:586 g10/keygen.c:677 +#, c-format +msgid "keysize rounded up to %u bits\n" +msgstr "anahtar uzunluÄŸu %u bite yuvarlandı\n" + +#: g10/keygen.c:777 +msgid "Please select what kind of key you want:\n" +msgstr "Lütfen istediÄŸiniz anahtarı seçiniz:\n" + +#: g10/keygen.c:779 +#, c-format +msgid " (%d) DSA and ElGamal (default)\n" +msgstr " (%d) DSA ve ElGamal (öntanımlı)\n" + +#: g10/keygen.c:780 +#, c-format +msgid " (%d) DSA (sign only)\n" +msgstr " (%d) DSA (yalnız imzalamak için)\n" + +#: g10/keygen.c:782 +#, c-format +msgid " (%d) ElGamal (encrypt only)\n" +msgstr " (%d) ElGamal (yalnız ÅŸifrelemek için)\n" + +#: g10/keygen.c:783 +#, c-format +msgid " (%d) ElGamal (sign and encrypt)\n" +msgstr " (%d) ElGamal (imzalamak ve ÅŸifrelemek için)\n" + +#: g10/keygen.c:784 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (sadece imzalamak için)\n" + +#: g10/keygen.c:786 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (sadece ÅŸifrelemek için)\n" + +#: g10/keyedit.c:516 g10/keygen.c:789 +msgid "Your selection? " +msgstr "Seçiminiz? " + +#: g10/keygen.c:809 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "Bu algoritmanın kullanımı uygun deÄŸil - Yine de oluÅŸturulsun mu?" + +#: g10/keyedit.c:529 g10/keygen.c:823 +msgid "Invalid selection.\n" +msgstr "Seçim geçersiz.\n" + +#: g10/keygen.c:836 +#, c-format +msgid "" +"About to generate a new %s keypair.\n" +" minimum keysize is 768 bits\n" +" default keysize is 1024 bits\n" +" highest suggested keysize is 2048 bits\n" +msgstr "" +"Yeni bir %s anahtar çifti üretmek üzeresiniz.\n" +" en küçük anahtar uzunluÄŸu: 768 bit\n" +" öntanımlı anahtar uzunluÄŸu: 1024 bit\n" +" önerilebilecek en büyük anahtar uzunluÄŸu: 2048 bit\n" + +#: g10/keygen.c:845 +msgid "What keysize do you want? (1024) " +msgstr "Ä°stediÄŸiniz anahtar uzunluÄŸu nedir? (1024) " + +#: g10/keygen.c:850 +msgid "DSA only allows keysizes from 512 to 1024\n" +msgstr "DSA anahtarının uzunluÄŸu 512 ile 1024 bit arasında olabilir\n" + +#: g10/keygen.c:852 +msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "" +"anahtar uzunluÄŸu çok küçük; RSA anahtarı için en küçük uzunluk: 1024 bit\n" + +#: g10/keygen.c:855 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "anahtar uzunluÄŸu çok küçük; en küçük anahtar uzunluÄŸu 768 bit'tir.\n" + +#. It is ridiculous and an annoyance to use larger key sizes! +#. * GnuPG can handle much larger sizes; but it takes an eternity +#. * to create such a key (but less than the time the Sirius +#. * Computer Corporation needs to process one of the usual +#. * complaints) and {de,en}cryption although needs some time. +#. * So, before you complain about this limitation, I suggest that +#. * you start a discussion with Marvin about this theme and then +#. * do whatever you want. +#: g10/keygen.c:866 +#, c-format +msgid "keysize too large; %d is largest value allowed.\n" +msgstr "anahtar uzunluÄŸu çok büyük; izin verilen en büyük deÄŸer: %d bit\n" + +#: g10/keygen.c:871 +msgid "" +"Keysizes larger than 2048 are not suggested because\n" +"computations take REALLY long!\n" +msgstr "" +"Hesaplama EPEYCE UZUN zaman alacağından anahtar uzunluklarında\n" +"2048 bitten fazlası tavsiye edilmez.\n" + +#: g10/keygen.c:874 +msgid "Are you sure that you want this keysize? " +msgstr "Bu anahtar uzunluÄŸunu istediÄŸinizden emin misiniz? " + +#: g10/keygen.c:875 +msgid "" +"Okay, but keep in mind that your monitor and keyboard radiation is also very " +"vulnerable to attacks!\n" +msgstr "" +"Tamam, ama saldırılara çok duyarlı olan monitör ve klavye ışınımlarından " +"kendinizi uzak tutun! (ne demekse...)\n" + +#: g10/keygen.c:884 +#, c-format +msgid "Requested keysize is %u bits\n" +msgstr "Ä°stenen anahtar uzunluÄŸu: %u bit\n" + +#: g10/keygen.c:887 g10/keygen.c:891 +#, c-format +msgid "rounded up to %u bits\n" +msgstr "%u bite yuvarlandı\n" + +#: g10/keygen.c:942 +msgid "" +"Please specify how long the key should be valid.\n" +" 0 = key does not expire\n" +" = key expires in n days\n" +" w = key expires in n weeks\n" +" m = key expires in n months\n" +" y = key expires in n years\n" +msgstr "" +"Lütfen anahtarın ne kadar süreyle geçerli olacağını belirtin.\n" +" 0 = anahtar süresiz geçerli\n" +" = anahtar n gün geçerli\n" +" w = anahtar n hafta geçerli\n" +" m = anahtar n ay geçerli\n" +" y = anahtar n yıl geçerli\n" + +#: g10/keygen.c:951 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Lütfen imzanınn ne kadar süreyle geçerli olacağını belirtin.\n" +" 0 = imza süresiz geçerli\n" +" = imza n gün geçerli\n" +" w = imza n hafta geçerli\n" +" m = imza n ay geçerli\n" +" y = imza n yıl geçerli\n" + +#: g10/keygen.c:973 +msgid "Key is valid for? (0) " +msgstr "Anahtar ne kadar geçerli olacak? (0) " + +#: g10/keygen.c:975 +msgid "Signature is valid for? (0) " +msgstr "Ä°mza ne kadar geçerli olacak? (0) " + +#: g10/keygen.c:980 +msgid "invalid value\n" +msgstr "deÄŸer hatalı\n" + +#: g10/keygen.c:985 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s hep geçerli olacak\n" + +#. print the date when the key expires +#: g10/keygen.c:992 +#, c-format +msgid "%s expires at %s\n" +msgstr "%s %s sonra geçersiz olacak\n" + +#: g10/keygen.c:998 +msgid "" +"Your system can't display dates beyond 2038.\n" +"However, it will be correctly handled up to 2106.\n" +msgstr "" +"Sisteminiz 2038 yılından sonraki tarihleri gösteremiyor.\n" +"Ama emin olun ki 2106 yılına kadar elde edilebilecek.\n" + +#: g10/keygen.c:1003 +msgid "Is this correct (y/n)? " +msgstr "Bu doÄŸru mu? (e/h)? " + +#: g10/keygen.c:1046 +msgid "" +"\n" +"You need a User-ID to identify your key; the software constructs the user " +"id\n" +"from Real Name, Comment and Email Address in this form:\n" +" \"Heinrich Heine (Der Dichter) \"\n" +"\n" +msgstr "" +"\n" +"Anahtarınızın size ait olduÄŸunu belirten bir Kullanıcı-KimliÄŸi olmalı;\n" +"Kullanıcı-KimliÄŸi, Gerçek Ä°sminiz, Bir Önbilgi ve e-Posta Adresiniz\n" +"alanlarının bir birleÅŸiminden oluÅŸur. ÖrneÄŸin:\n" +"\t\"Fatih Sultan Mehmed (Padisah) \"\n" +"\n" + +#: g10/keygen.c:1058 +msgid "Real name: " +msgstr "Adınız ve Soyadınız: " + +#: g10/keygen.c:1066 +msgid "Invalid character in name\n" +msgstr "Ad ve soyadınızda geçersiz karakter var\n" + +#: g10/keygen.c:1068 +msgid "Name may not start with a digit\n" +msgstr "Ad ve soyadınız bir rakamla baÅŸlamamalı\n" + +#: g10/keygen.c:1070 +msgid "Name must be at least 5 characters long\n" +msgstr "Ad ve soyadınız en az 5 harfli olmalı\n" + +#: g10/keygen.c:1078 +msgid "Email address: " +msgstr "E-posta adresiniz: " + +#: g10/keygen.c:1089 +msgid "Not a valid email address\n" +msgstr "geçerli bir E-posta adresi deÄŸil\n" + +#: g10/keygen.c:1097 +msgid "Comment: " +msgstr "Önbilgi: " + +#: g10/keygen.c:1103 +msgid "Invalid character in comment\n" +msgstr "Önbilgi alanında geçersiz karakter var\n" + +#: g10/keygen.c:1126 +#, c-format +msgid "You are using the `%s' character set.\n" +msgstr "`%s' karakter kümesini kullanıyorsunuz.\n" + +#: g10/keygen.c:1132 +#, c-format +msgid "" +"You selected this USER-ID:\n" +" \"%s\"\n" +"\n" +msgstr "" +"SeçtiÄŸiniz KULLANICI-KÄ°MLİĞİ:\n" +" \"%s\"\n" +"\n" + +#: g10/keygen.c:1136 +msgid "Please don't put the email address into the real name or the comment\n" +msgstr "" +"Lütfen E-posta adresinizi Adı ve Soyadı veya Açıklama alanı içine koymayın\n" + +#: g10/keygen.c:1141 +msgid "NnCcEeOoQq" +msgstr "AaYyEeTtKk" + +#: g10/keygen.c:1151 +msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " +msgstr "(A)dı ve Soyadı, (Y)orum, (E)posta alanlarını deÄŸiÅŸtir ya da Çı(k)? " + +#: g10/keygen.c:1152 +msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " +msgstr "" +"(A)dı ve Soyadı, (Y)orum, (E)posta alanlarını deÄŸiÅŸtir ya da (T)amam/Çı(k)? " + +#: g10/keygen.c:1171 +msgid "Please correct the error first\n" +msgstr "Lütfen önce hatayı düzeltin\n" + +#: g10/keygen.c:1210 +msgid "" +"You need a Passphrase to protect your secret key.\n" +"\n" +msgstr "" +"Gizli anahtarınızı korumak için bir Anahtar Parolanız olmalı.\n" +"\n" + +#: g10/keyedit.c:701 g10/keygen.c:1218 +msgid "passphrase not correctly repeated; try again" +msgstr "" +"ikinci kez yazdığınız anahtar parolası ilkiyle aynı deÄŸil; iÅŸlem " +"tekrarlanacak" + +#: g10/keygen.c:1219 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1225 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"I will do it anyway. You can change your passphrase at any time,\n" +"using this program with the option \"--edit-key\".\n" +"\n" +msgstr "" +"Bir anahtar parolası istemediniz - bu *kötü* bir fikir!\n" +"Nasıl isterseniz. Anahtar parolanızı bu programı \"--edit-key\"\n" +"seçeneÄŸi ile kullanarak her zaman deÄŸiÅŸtirebilirsiniz.\n" +"\n" + +#: g10/keygen.c:1246 +msgid "" +"We need to generate a lot of random bytes. It is a good idea to perform\n" +"some other action (type on the keyboard, move the mouse, utilize the\n" +"disks) during the prime generation; this gives the random number\n" +"generator a better chance to gain enough entropy.\n" +msgstr "" +"Bir miktar rasgele bayt üretilmesi gerekiyor. Ä°lk üretim sırasında biraz\n" +"hareket (klavyeyi kullanmak, fareyi hareket ettirmek, disklerden " +"yararlanmak)\n" +"iyi olacaktır; bu yeterli rasgele bayt kazanmak için rasgele sayı\n" +"üretecine yardımcı olur. \n" + +#: g10/keygen.c:1741 +msgid "DSA keypair will have 1024 bits.\n" +msgstr "DSA anahtar çifti 1024 bit olacak.\n" + +#: g10/keygen.c:1795 +msgid "Key generation canceled.\n" +msgstr "Anahtar üretimi durduruldu.\n" + +#: g10/keygen.c:1883 g10/keygen.c:1963 +#, c-format +msgid "writing public key to `%s'\n" +msgstr "genel anahtarı `%s'e yazıyor\n" + +#: g10/keygen.c:1884 g10/keygen.c:1965 +#, c-format +msgid "writing secret key to `%s'\n" +msgstr "gizli anahtarı `%s'e yazıyor\n" + +#: g10/keygen.c:1952 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "yazılabilir bir genel anahtar zinciri yok: %s\n" + +#: g10/keygen.c:1958 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "yazılabilir bir gizli anahtar zinciri yok: %s\n" + +#: g10/keygen.c:1972 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "`%s' genel anahtar zincirine yazılırken hata oluÅŸtu: %s\n" + +#: g10/keygen.c:1979 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "`%s' gixli anahtar zincirine yazılırken hata oluÅŸtu: %s\n" + +#: g10/keygen.c:1999 +msgid "public and secret key created and signed.\n" +msgstr "genel ve gizli anahtar üretildi ve imzalandı.\n" + +#: g10/keygen.c:2000 +msgid "key marked as ultimately trusted.\n" +msgstr "anahtar son derece güvenli olarak imlendi.\n" + +#: g10/keygen.c:2011 +msgid "" +"Note that this key cannot be used for encryption. You may want to use\n" +"the command \"--edit-key\" to generate a secondary key for this purpose.\n" +msgstr "" +"Bu anahtar ÅŸifreleme için kullanılamaz. Åžifreleme için ikinci bir anahtarı\n" +"\"--edit-key\" seçeneÄŸini kullanarak üretebilirsiniz.\n" + +#: g10/keygen.c:2023 g10/keygen.c:2131 +#, c-format +msgid "Key generation failed: %s\n" +msgstr "Anahtar üretimi baÅŸarısızlığa uÄŸradı: %s\n" + +#: g10/keygen.c:2067 g10/sig-check.c:223 g10/sign.c:228 +#, c-format +msgid "" +"key has been created %lu second in future (time warp or clock problem)\n" +msgstr "" +"anahtar %lu saniye sonra üretilmiÅŸ (zaman sapması veya saat problemi)\n" + +#: g10/keygen.c:2069 g10/sig-check.c:225 g10/sign.c:230 +#, c-format +msgid "" +"key has been created %lu seconds in future (time warp or clock problem)\n" +msgstr "" +"anahtar bundan %lu saniye sonra üretilmiÅŸ (zaman sapması veya saat " +"problemi)\n" + +#: g10/keygen.c:2078 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "" +"BÄ°LGÄ°: v3 anahtarları için yardımcı anahtar üretimi OpenPGP uyumlu deÄŸildir\n" + +#: g10/keygen.c:2107 +msgid "Really create? " +msgstr "Gerçekten oluÅŸturulsun mu? " + +#: g10/decrypt.c:92 g10/encode.c:590 +msgid "--output doesn't work for this command\n" +msgstr "--output seçeneÄŸi bu komutla çalışmaz\n" + +#: g10/encode.c:92 g10/encode.c:296 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' zaten sıkıştırılmış\n" + +#: g10/encode.c:100 g10/openfile.c:180 g10/openfile.c:300 g10/tdbio.c:492 +#: g10/tdbio.c:552 +#, c-format +msgid "%s: can't open: %s\n" +msgstr "%s: açılamıyor: %s\n" + +#: g10/encode.c:122 g10/sign.c:959 +#, c-format +msgid "error creating passphrase: %s\n" +msgstr "anahtar parolası oluÅŸturulurken hata: %s\n" + +#: g10/encode.c:185 g10/encode.c:383 +#, c-format +msgid "%s: WARNING: empty file\n" +msgstr "%s: UYARI: dosya boÅŸ\n" + +#: g10/encode.c:285 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"--pgp2 kipinde sadece 2048 bitlik RSA anahtarları ile ÅŸifreleme " +"yapabilirsiniz\n" + +#: g10/encode.c:313 +#, c-format +msgid "reading from `%s'\n" +msgstr "`%s'den okunuyor\n" + +#: g10/encode.c:347 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "tüm anahtarları ÅŸifrelemek için IDEA ÅŸifresi kullanılamaz.\n" + +#: g10/encode.c:563 +#, c-format +msgid "%s/%s encrypted for: %s\n" +msgstr "%s/%s %s için ÅŸifrelendi\n" + +#: g10/delkey.c:69 g10/export.c:141 +#, c-format +msgid "key `%s' not found: %s\n" +msgstr "anahtar `%s' yok: %s\n" + +#: g10/delkey.c:77 g10/export.c:161 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "anahtar bloÄŸu okunurken hata: %s\n" + +#: g10/export.c:169 +#, c-format +msgid "key %08lX: not a rfc2440 key - skipped\n" +msgstr "%08lX anahtarı: bir RFC2440 anahtarı deÄŸil - atlandı\n" + +#: g10/export.c:180 +#, c-format +msgid "key %08lX: not protected - skipped\n" +msgstr "%08lX anahtarı: korunmamış - atlandı\n" + +#: g10/export.c:188 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "%08lX anahtarı: PGP 2.x tarzı bir anahtar - atlandı\n" + +#: g10/export.c:255 +msgid "WARNING: nothing exported\n" +msgstr "UYARI: hiçbir ÅŸey dışarı aktarılmadı\n" + +#: g10/getkey.c:151 +msgid "too many entries in pk cache - disabled\n" +msgstr "pk belleÄŸinde çok fazla girdi - iptal edildi\n" + +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:187 g10/getkey.c:2272 +msgid "[User id not found]" +msgstr "[Kullanıcı kimliÄŸi bulunamadı]" + +#: g10/getkey.c:1360 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" +"Geçersiz %08lX anahtarı --allow-non-selfsigned-uid kullanılarak geçerli " +"oldu\n" + +#: g10/getkey.c:1989 +#, c-format +msgid "using secondary key %08lX instead of primary key %08lX\n" +msgstr "yardımcı anahtar %08lX, asıl anahtar %08lX yerine kullanılıyor\n" + +#: g10/getkey.c:2036 +#, c-format +msgid "key %08lX: secret key without public key - skipped\n" +msgstr "%08lX anahtarı: genel anahtarsız gizli anahtar - atlandı\n" + +#: g10/import.c:206 +#, c-format +msgid "skipping block of type %d\n" +msgstr "%d. tür blok atlandı\n" + +#: g10/import.c:213 +#, c-format +msgid "%lu keys so far processed\n" +msgstr "ÅŸu ana kadar herÅŸey yolunda giderek %lu anahtar iÅŸlenmiÅŸ\n" + +#: g10/import.c:218 +#, c-format +msgid "error reading `%s': %s\n" +msgstr "\"%s\" okunurken hata: %s\n" + +#: g10/import.c:230 +#, c-format +msgid "Total number processed: %lu\n" +msgstr "Ä°ÅŸlenmiÅŸ toplam miktar: %lu\n" + +#: g10/import.c:232 +#, c-format +msgid " skipped new keys: %lu\n" +msgstr " yeni anahtarlar atlandı: %lu\n" + +#: g10/import.c:235 +#, c-format +msgid " w/o user IDs: %lu\n" +msgstr " kullanıcı kimliksiz: %lu\n" + +#: g10/import.c:237 +#, c-format +msgid " imported: %lu" +msgstr " indirildi: %lu" + +#: g10/import.c:243 +#, c-format +msgid " unchanged: %lu\n" +msgstr " deÄŸiÅŸmedi: %lu\n" + +#: g10/import.c:245 +#, c-format +msgid " new user IDs: %lu\n" +msgstr " yeni kullanıcı kimliÄŸi: %lu\n" + +#: g10/import.c:247 +#, c-format +msgid " new subkeys: %lu\n" +msgstr " yeni yardımcı anahtarlar: %lu\n" + +#: g10/import.c:249 +#, c-format +msgid " new signatures: %lu\n" +msgstr " yeni imzalar: %lu\n" + +#: g10/import.c:251 +#, c-format +msgid " new key revocations: %lu\n" +msgstr " yeni anahtar iptalleri: %lu\n" + +#: g10/import.c:253 +#, c-format +msgid " secret keys read: %lu\n" +msgstr " gizli anahtarlar okundu: %lu\n" + +#: g10/import.c:255 +#, c-format +msgid " secret keys imported: %lu\n" +msgstr " gizli anahtarlar indirildi: %lu\n" + +#: g10/import.c:257 +#, c-format +msgid " secret keys unchanged: %lu\n" +msgstr " gizli anahtarlar deÄŸiÅŸmedi: %lu\n" + +#: g10/import.c:438 g10/import.c:657 +#, c-format +msgid "key %08lX: no user ID\n" +msgstr "anahtar %08lX: kullanıcı kimliÄŸi yok\n" + +#: g10/import.c:455 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "anahtar %08lX: öz-imzalı olmayan kullanıcı kimliÄŸi '%s' kabul edildi\n" + +#: g10/import.c:462 +#, c-format +msgid "key %08lX: no valid user IDs\n" +msgstr "anahtar %08lX: kullanıcı kimliÄŸi geçersiz\n" + +#: g10/import.c:464 +msgid "this may be caused by a missing self-signature\n" +msgstr "bu kayıp bir öz-imza yüzünden meydana gelebilir\n" + +#: g10/import.c:474 g10/import.c:726 +#, c-format +msgid "key %08lX: public key not found: %s\n" +msgstr "anahtar %08lX: genel anahtar bulunamadı: %s\n" + +#: g10/import.c:479 +#, c-format +msgid "key %08lX: new key - skipped\n" +msgstr "anahtar %08lX: yeni anahtar - atlandı\n" + +#: g10/import.c:489 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "yazılabilir bir anahtar zinciri yok: %s\n" + +#: g10/import.c:494 g10/openfile.c:244 g10/sign.c:648 g10/sign.c:817 +#, c-format +msgid "writing to `%s'\n" +msgstr "\"%s\"e yazıyor\n" + +#: g10/import.c:497 g10/import.c:571 g10/import.c:677 g10/import.c:786 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "\"%s\" anahtar zincirine yazarken hata oluÅŸtu: %s\n" + +#: g10/import.c:505 +#, c-format +msgid "key %08lX: public key imported\n" +msgstr "anahtar %08lX: genel anahtar indirildi\n" + +#: g10/import.c:524 +#, c-format +msgid "key %08lX: doesn't match our copy\n" +msgstr "anahtar %08lX: bizim kopyamızla eÅŸleÅŸmiyor\n" + +#: g10/import.c:542 g10/import.c:743 +#, c-format +msgid "key %08lX: can't locate original keyblock: %s\n" +msgstr "anahtar %08lX: özgün anahtar bloku bulunamadı: %s\n" + +#: g10/import.c:549 g10/import.c:749 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "anahtar %08lX: özgün anahtar bloku okunamadı: %s\n" + +#: g10/import.c:579 +#, c-format +msgid "key %08lX: 1 new user ID\n" +msgstr "anahtar %08lX: 1 yeni kullanıcı kimliÄŸi\n" + +#: g10/import.c:582 +#, c-format +msgid "key %08lX: %d new user IDs\n" +msgstr "anahtar %08lX: %d yeni kullanıcı kimliÄŸi\n" + +#: g10/import.c:585 +#, c-format +msgid "key %08lX: 1 new signature\n" +msgstr "anahtar %08lX: 1 yeni imza\n" + +#: g10/import.c:588 +#, c-format +msgid "key %08lX: %d new signatures\n" +msgstr "anahtar %08lX: %d yeni imza\n" + +#: g10/import.c:591 +#, c-format +msgid "key %08lX: 1 new subkey\n" +msgstr "anahtar %08lX: bir yeni yardımcı anahtar\n" + +#: g10/import.c:594 +#, c-format +msgid "key %08lX: %d new subkeys\n" +msgstr "anahtar %08lX: %d yeni yardımcı anahtar\n" + +#: g10/import.c:604 +#, c-format +msgid "key %08lX: not changed\n" +msgstr "anahtar %08lX: deÄŸiÅŸmedi\n" + +#: g10/import.c:671 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "öntanımlı gizli anahtar zinciri yok: %s\n" + +#: g10/import.c:682 +#, c-format +msgid "key %08lX: secret key imported\n" +msgstr "anahtar %08lX: gizli anahtar indirildi\n" + +#. we can't merge secret keys +#: g10/import.c:686 +#, c-format +msgid "key %08lX: already in secret keyring\n" +msgstr "anahtar %08lX: zaten gizli anahtar zincirinde\n" + +#: g10/import.c:691 +#, c-format +msgid "key %08lX: secret key not found: %s\n" +msgstr "anahtar %08lX: gizli anahtar bulunamadı: %s\n" + +#: g10/import.c:720 +#, c-format +msgid "key %08lX: no public key - can't apply revocation certificate\n" +msgstr "" +"anahtar %08lX: genel anahtar deÄŸil - yürürlükten kaldırma sertifikası " +"uygulanamaz\n" + +#: g10/import.c:760 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - rejected\n" +msgstr "" +"anahtar %08lX: yürürlükten kaldırma sertifikası geçersiz: %s - reddedildi\n" + +#: g10/import.c:791 +#, c-format +msgid "key %08lX: revocation certificate imported\n" +msgstr "anahtar %08lX: yürürlükten kaldırma sertifikası indirildi\n" + +#: g10/import.c:826 +#, c-format +msgid "key %08lX: no user ID for signature\n" +msgstr "anahtar %08lX: imza için kullanıcı kimliÄŸi yok\n" + +#: g10/import.c:839 +#, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "" +"anahtar %08lX: genel anahtar algoritması, kullanıcı kimliÄŸi \"%s\" için " +"desteklenmiyor\n" + +#: g10/import.c:841 +#, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "anahtar %08lX: kullanıcı kimliÄŸi \"%s\" için öz-imza geçersiz\n" + +#: g10/import.c:858 +#, c-format +msgid "key %08lX: no subkey for key binding\n" +msgstr "anahtar %08lX: anahtarı garantilemek için yardımcı anahtar yok\n" + +#: g10/import.c:868 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "anahtar %08lX: genel anahtar algoritması desteklenmiyor\n" + +#: g10/import.c:869 +#, c-format +msgid "key %08lX: invalid subkey binding\n" +msgstr "anahtar %08lX: yardımcı anahtar garantileme geçersiz\n" + +#: g10/import.c:899 +#, c-format +msgid "key %08lX: skipped user ID '" +msgstr "anahtar %08lX: kullanıcı kimliÄŸi atlandı: '" + +#: g10/import.c:922 +#, c-format +msgid "key %08lX: skipped subkey\n" +msgstr "anahtar %08lX: yardımcı anahtar atlandı\n" + +#. here we violate the rfc a bit by still allowing +#. * to import non-exportable signature when we have the +#. * the secret key used to create this signature - it +#. * seems that this makes sense +#: g10/import.c:945 +#, c-format +msgid "key %08lX: non exportable signature (class %02x) - skipped\n" +msgstr "anahtar %08lX: imza gönderilebilir deÄŸil (%02x sınıfı) - atlandı\n" + +#: g10/import.c:954 +#, c-format +msgid "key %08lX: revocation certificate at wrong place - skipped\n" +msgstr "" +"anahtar %08lX: yürürlükten kaldırma sertifikası yanlış yerde - atlandı\n" + +#: g10/import.c:971 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - skipped\n" +msgstr "" +"anahtar %08lX: yürürlükten kaldırma sertifikası geçersiz: %s - atlandı\n" + +#: g10/import.c:1072 +#, c-format +msgid "key %08lX: duplicated user ID detected - merged\n" +msgstr "anahtar %08lX: çift kullanıcı kimliÄŸi saptandı - katıştırıldı\n" + +#: g10/import.c:1131 +#, c-format +msgid "Warning: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"Uyarı: anahtar %08lX yürürlükten kaldırılmış olmalı: yürürlükten kaldırma " +"anahtarı %08lX alınıyor\n" + +#: g10/import.c:1145 +#, c-format +msgid "Warning: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" +"Uyarı: anahtar %08lX yürürlükten kaldırılmış olabilir: yürürlükten kaldırma " +"anahtarı %08lX mevcut deÄŸil.\n" + +#: g10/import.c:1201 +#, c-format +msgid "key %08lX: revocation certificate added\n" +msgstr "anahtar %08lX: yürürlükten kaldırma sertifikası eklendi\n" + +#: g10/import.c:1231 +#, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "anahtar %08lX: doÄŸrudan anahtar imzası eklendi\n" + +#: g10/keyedit.c:142 +msgid "[revocation]" +msgstr "[yürürlükten kaldırma]" + +#: g10/keyedit.c:143 +msgid "[self-signature]" +msgstr "[öz-imza]" + +#: g10/keyedit.c:214 g10/keylist.c:139 +msgid "1 bad signature\n" +msgstr "1 kötü imza\n" + +#: g10/keyedit.c:216 g10/keylist.c:141 +#, c-format +msgid "%d bad signatures\n" +msgstr "%d kötü imza\n" + +#: g10/keyedit.c:218 g10/keylist.c:143 +msgid "1 signature not checked due to a missing key\n" +msgstr "1 imza kayıp bir anahtar yüzünden kontrol edilmedi\n" + +#: g10/keyedit.c:220 g10/keylist.c:145 +#, c-format +msgid "%d signatures not checked due to missing keys\n" +msgstr "%d imza kayıp bir anahtar yüzünden kontrol edilmedi\n" + +#: g10/keyedit.c:222 g10/keylist.c:147 +msgid "1 signature not checked due to an error\n" +msgstr "1 imza bir hata yüzünden kontrol edilmedi\n" + +#: g10/keyedit.c:224 g10/keylist.c:149 +#, c-format +msgid "%d signatures not checked due to errors\n" +msgstr "%d imza hatalardan dolayı kontrol edilmedi\n" + +#: g10/keyedit.c:226 +msgid "1 user ID without valid self-signature detected\n" +msgstr "1 öz-imzası geçersiz kullanıcı kimliÄŸi saptandı\n" + +#: g10/keyedit.c:228 +#, c-format +msgid "%d user IDs without valid self-signatures detected\n" +msgstr "%d öz-imzası geçersiz kullanıcı kimliÄŸi saptandı\n" + +#: g10/keyedit.c:335 +#, c-format +msgid "User ID \"%s\" is revoked." +msgstr "Kullanıcı kimliÄŸi \"%s\" yürürlükten kaldırıldı." + +#: g10/keyedit.c:343 g10/keyedit.c:426 g10/keyedit.c:484 g10/keyedit.c:1053 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Onu yine de imzalamak istiyor musunuz? (e/H) " + +#: g10/keyedit.c:350 g10/keyedit.c:432 g10/keyedit.c:1059 +msgid " Unable to sign.\n" +msgstr " Ä°mzalanamıyor.\n" + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:364 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"\"%s\" üzerindeki imzanız\n" +"dahili bir imza.\n" + +#: g10/keyedit.c:368 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" +"Bu imzanın dışarda da geçerli hale getirilmesini istiyor musunuz? (e/H) " + +#: g10/keyedit.c:388 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" zaten %08lX anahtarıyla yerel olarak imzalanmış\n" + +#: g10/keyedit.c:393 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" zaten %08lX anahtarıyla imzalanmış\n" + +#: g10/keyedit.c:405 +#, c-format +msgid "Nothing to sign with key %08lX\n" +msgstr "%08lX anahtarı ile imzalanacak hiçbir ÅŸey yok\n" + +#: g10/keyedit.c:420 +msgid "This key has expired!" +msgstr "Bu anahtarın kullanım süresi dolmuÅŸ!" + +#: g10/keyedit.c:440 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Bu anahtarın geçerliliÄŸi %s de bitiyor.\n" + +#: g10/keyedit.c:444 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Ä°mzanızın da bu kadar süre geçerli olmasını ister misiniz? (E/h) " + +#: g10/keyedit.c:477 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" +"--pgp2 kipinde bir PGP 2.x anahtarlara bir OpenPGP imzası " +"uygulanamayabilir.\n" + +#: g10/keyedit.c:479 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "Bu, anahtarı PGP 2.x için kullanışsız yapacak.\n" + +#: g10/keyedit.c:500 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Bu anahtarın ismi yukarda yazılı kiÅŸiye ait olduÄŸunu ne kadar dikkatli\n" +"doÄŸruladınız? Bu sorunun cevabını bilmiyorsanız \"0\" yazın.\n" + +#: g10/keyedit.c:504 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Cevabı bilmiyorum. %s\n" + +#: g10/keyedit.c:506 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Tamamen kontrol edildi.%s\n" + +#: g10/keyedit.c:508 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Ä°liÅŸkisel denetim yaptım.%s\n" + +#: g10/keyedit.c:510 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Çok dikkatli bir denetim yaptım.%s\n" + +#: g10/keyedit.c:535 +msgid "" +"Are you really sure that you want to sign this key\n" +"with your key: \"" +msgstr "" +"Bu anahtarı kendi anahtarınızla imzalamak istediÄŸinize gerçekten\n" +"emin misiniz?: \"" + +#: g10/keyedit.c:544 +msgid "" +"\n" +"The signature will be marked as non-exportable.\n" +msgstr "" +"\n" +"Ä°mza dışarı gönderilemez olarak imlenecek.\n" + +#: g10/keyedit.c:548 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"Ä°mza yürürlükten kaldırılamaz olarak imlenecek.\n" + +#: g10/keyedit.c:553 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Her ÅŸeyiyle bu anahtarı kontol edemedim.\n" + +#: g10/keyedit.c:557 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Bu anahtarı karşılaÅŸtırmalı kontrol ettim.\n" + +#: g10/keyedit.c:561 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Bu anahtarı çok dikkatli kontrol ettim.\n" + +#: g10/keyedit.c:569 +msgid "Really sign? " +msgstr "Gerçekten imzalayacak mısınız? " + +#: g10/keyedit.c:602 g10/keyedit.c:2593 g10/keyedit.c:2652 g10/sign.c:279 +#, c-format +msgid "signing failed: %s\n" +msgstr "imzalama baÅŸarısız: %s\n" + +#: g10/keyedit.c:658 +msgid "This key is not protected.\n" +msgstr "Bu anahtar korunmamış.\n" + +#: g10/keyedit.c:662 +msgid "Secret parts of primary key are not available.\n" +msgstr "Asıl anahtarın gizli parçaları kullanılamaz.\n" + +#: g10/keyedit.c:666 +msgid "Key is protected.\n" +msgstr "Anahtar korunmuÅŸ.\n" + +#: g10/keyedit.c:686 +#, c-format +msgid "Can't edit this key: %s\n" +msgstr "Bu anahtar üzerinde düzenleme yapılamaz: %s\n" + +#: g10/keyedit.c:692 +msgid "" +"Enter the new passphrase for this secret key.\n" +"\n" +msgstr "" +"Bu gizli anahtar için yeni anahtar parolasını giriniz.\n" +"\n" + +#: g10/keyedit.c:706 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"\n" +msgstr "" +"Bir anahtar parolası vermediniz - bu çok *kötü* bir fikir!\n" +"\n" + +#: g10/keyedit.c:709 +msgid "Do you really want to do this? " +msgstr "Gerçekten bunu yapmak istiyor musunuz? " + +#: g10/keyedit.c:773 +msgid "moving a key signature to the correct place\n" +msgstr "bir anahtar imzası doÄŸru yere taşınıyor\n" + +#: g10/keyedit.c:815 +msgid "quit this menu" +msgstr "bu menüden çık" + +#: g10/keyedit.c:816 +msgid "q" +msgstr "k" + +#: g10/keyedit.c:817 +msgid "save" +msgstr "kaydet" + +#: g10/keyedit.c:817 +msgid "save and quit" +msgstr "kaydet ve çık" + +#: g10/keyedit.c:818 +msgid "help" +msgstr "yardım" + +#: g10/keyedit.c:818 +msgid "show this help" +msgstr "bunu gösterir " + +#: g10/keyedit.c:820 +msgid "fpr" +msgstr "piz" + +#: g10/keyedit.c:820 +msgid "show fingerprint" +msgstr "parmak izini göster" + +#: g10/keyedit.c:821 +msgid "list" +msgstr "listele" + +#: g10/keyedit.c:821 +msgid "list key and user IDs" +msgstr "anahtarı ve kullanıcı kimliÄŸini göster" + +#: g10/keyedit.c:822 +msgid "l" +msgstr "l" + +#: g10/keyedit.c:823 +msgid "uid" +msgstr "kullkim" + +#: g10/keyedit.c:823 +msgid "select user ID N" +msgstr "N kullanıcı kimliÄŸini seçer" + +#: g10/keyedit.c:824 +msgid "key" +msgstr "anahtar" + +#: g10/keyedit.c:824 +msgid "select secondary key N" +msgstr "N yardımcı anahtarını seçer" + +#: g10/keyedit.c:825 +msgid "check" +msgstr "kontrol" + +#: g10/keyedit.c:825 +msgid "list signatures" +msgstr "imzaları listele" + +#: g10/keyedit.c:826 +msgid "c" +msgstr "k" + +#: g10/keyedit.c:827 +msgid "sign" +msgstr "imzala" + +#: g10/keyedit.c:827 +msgid "sign the key" +msgstr "anahtarı imzalar" + +#: g10/keyedit.c:828 +msgid "s" +msgstr "i" + +#: g10/keyedit.c:829 +msgid "lsign" +msgstr "yimza" + +#: g10/keyedit.c:829 +msgid "sign the key locally" +msgstr "anahtarı yerel olarak imzala" + +#: g10/keyedit.c:830 +msgid "nrsign" +msgstr "yksızimza" + +#: g10/keyedit.c:830 +msgid "sign the key non-revocably" +msgstr "yürürlükten kaldırılamayan imza" + +#: g10/keyedit.c:831 +msgid "nrlsign" +msgstr "içyksızimza" + +#: g10/keyedit.c:831 +msgid "sign the key locally and non-revocably" +msgstr "yürürlükten kaldırılamayan yerel imza" + +#: g10/keyedit.c:832 +msgid "debug" +msgstr "hata ayıklama" + +#: g10/keyedit.c:833 +msgid "adduid" +msgstr "kullkimEkle" + +#: g10/keyedit.c:833 +msgid "add a user ID" +msgstr "bir kullanıcı kimliÄŸi ekler" + +#: g10/keyedit.c:834 +msgid "addphoto" +msgstr "fotoekle" + +#: g10/keyedit.c:834 +msgid "add a photo ID" +msgstr "bir foto kimliÄŸi ekler" + +#: g10/keyedit.c:835 +msgid "deluid" +msgstr "kullkimSil" + +#: g10/keyedit.c:835 +msgid "delete user ID" +msgstr "kullanıcı kimliÄŸini siler" + +#. delphoto is really deluid in disguise +#: g10/keyedit.c:837 +msgid "delphoto" +msgstr "fotosil" + +#: g10/keyedit.c:838 +msgid "addkey" +msgstr "anhEkle" + +#: g10/keyedit.c:838 +msgid "add a secondary key" +msgstr "bir yardımcı anahtar ekler" + +#: g10/keyedit.c:839 +msgid "delkey" +msgstr "anhSil" + +#: g10/keyedit.c:839 +msgid "delete a secondary key" +msgstr "bir yardımcı anahtar siler" + +#: g10/keyedit.c:840 +msgid "delsig" +msgstr "imzaSil" + +#: g10/keyedit.c:840 +msgid "delete signatures" +msgstr "imzaları siler" + +#: g10/keyedit.c:841 +msgid "expire" +msgstr "sontarih" + +#: g10/keyedit.c:841 +msgid "change the expire date" +msgstr "son kullanım tarihini deÄŸiÅŸtirir" + +#: g10/keyedit.c:842 +msgid "primary" +msgstr "asıl" + +#: g10/keyedit.c:842 +msgid "flag user ID as primary" +msgstr "kullanıcı kimliÄŸini asıl olarak imler" + +#: g10/keyedit.c:843 +msgid "toggle" +msgstr "seçmece" + +#: g10/keyedit.c:843 +msgid "toggle between secret and public key listing" +msgstr "genel ve gizli anahtar listeleri arasında yer deÄŸiÅŸtirir" + +#: g10/keyedit.c:845 +msgid "t" +msgstr "b" + +#: g10/keyedit.c:846 +msgid "pref" +msgstr "önayar" + +#: g10/keyedit.c:846 +msgid "list preferences (expert)" +msgstr "tercihleri listeler (uzman)" + +#: g10/keyedit.c:847 +msgid "showpref" +msgstr "tercihgöst" + +#: g10/keyedit.c:847 +msgid "list preferences (verbose)" +msgstr "tercihleri listeler (ayrıntılı)" + +#: g10/keyedit.c:848 +msgid "setpref" +msgstr "tercihyap" + +#: g10/keyedit.c:848 +msgid "set preference list" +msgstr "tercih listesi oluÅŸturmak için" + +#: g10/keyedit.c:849 +msgid "updpref" +msgstr "tercgüncel" + +#: g10/keyedit.c:849 +msgid "updated preferences" +msgstr "güncelenmiÅŸ tercihler" + +#: g10/keyedit.c:850 +msgid "passwd" +msgstr "aparola" + +#: g10/keyedit.c:850 +msgid "change the passphrase" +msgstr "anahtar parolasını deÄŸiÅŸtirir" + +#: g10/keyedit.c:851 +msgid "trust" +msgstr "güvence" + +#: g10/keyedit.c:851 +msgid "change the ownertrust" +msgstr "sahibiningüvencesini deÄŸiÅŸtirir" + +#: g10/keyedit.c:852 +msgid "revsig" +msgstr "imzayürkal" + +#: g10/keyedit.c:852 +msgid "revoke signatures" +msgstr "imzaları yürürlükten kaldırır" + +#: g10/keyedit.c:853 +msgid "revkey" +msgstr "yürkalanh" + +#: g10/keyedit.c:853 +msgid "revoke a secondary key" +msgstr "bir yardımcı anahtarı yürürlükten kaldırır" + +#: g10/keyedit.c:854 +msgid "disable" +msgstr "iptal" + +#: g10/keyedit.c:854 +msgid "disable a key" +msgstr "bir anahtarı iptal eder" + +#: g10/keyedit.c:855 +msgid "enable" +msgstr "kullan" + +#: g10/keyedit.c:855 +msgid "enable a key" +msgstr "bir anahtarı kullanıma sokar" + +#: g10/keyedit.c:856 +msgid "showphoto" +msgstr "fotogöst" + +#: g10/keyedit.c:856 +msgid "show photo ID" +msgstr "foto kimliÄŸini gösterir" + +#: g10/delkey.c:112 g10/keyedit.c:876 +msgid "can't do that in batchmode\n" +msgstr "bu önceden belirlenmiÅŸ iÅŸlemler kipinde (in batchmode) yapılamaz\n" + +#: g10/keyedit.c:913 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "gizli anahtar bloÄŸu `%s' okunurken hata oluÅŸtu: %s\n" + +#: g10/keyedit.c:931 +msgid "Secret key is available.\n" +msgstr "Gizli anahtar mevcut.\n" + +#: g10/keyedit.c:962 +msgid "Command> " +msgstr "Komut> " + +#: g10/keyedit.c:994 +msgid "Need the secret key to do this.\n" +msgstr "Bunu yapmak için gizli anahtar gerekli.\n" + +#: g10/keyedit.c:998 +msgid "Please use the command \"toggle\" first.\n" +msgstr "lütfen önce \"seçmece\" komutunu kullanın.\n" + +#: g10/keyedit.c:1047 +msgid "Key is revoked." +msgstr "Anahtar yürürlükten kaldırıldı." + +#: g10/keyedit.c:1066 +msgid "Really sign all user IDs? " +msgstr "Tüm kullanıcı kimlikleri gerçekten imzalanacak mı? " + +#: g10/keyedit.c:1067 +msgid "Hint: Select the user IDs to sign\n" +msgstr "Ä°pucu: Ä°mzalamak için bir kullanıcı kimliÄŸi seçiniz\n" + +#: g10/keyedit.c:1092 +#, c-format +msgid "This command is not allowed while in %s mode.\n" +msgstr "%s kipindeyken bu komut kullanılamaz.\n" + +#: g10/keyedit.c:1112 g10/keyedit.c:1133 +msgid "You must select at least one user ID.\n" +msgstr "En az bir kullanıcı kimliÄŸi seçmelisiniz.\n" + +#: g10/keyedit.c:1114 +msgid "You can't delete the last user ID!\n" +msgstr "Son kullanıcı kimliÄŸini silemezsiniz!\n" + +#: g10/keyedit.c:1117 +msgid "Really remove all selected user IDs? " +msgstr "Seçilen tüm kullanıcı kimlikleri gerçekten silinecek mi? " + +#: g10/keyedit.c:1118 +msgid "Really remove this user ID? " +msgstr "Bu kullanıcı kimliÄŸi gerçekten silinecek mi? " + +#: g10/keyedit.c:1156 g10/keyedit.c:1178 +msgid "You must select at least one key.\n" +msgstr "En az bir anahtar seçmelisiniz.\n" + +#: g10/keyedit.c:1160 +msgid "Do you really want to delete the selected keys? " +msgstr "Seçilen anahtarları gerçekten silmek istiyor musunuz? " + +#: g10/keyedit.c:1161 +msgid "Do you really want to delete this key? " +msgstr "Bu anahtarı gerçekten silmek istiyor musunuz? " + +#: g10/keyedit.c:1182 +msgid "Do you really want to revoke the selected keys? " +msgstr "Seçilen anahtarları gerçekten yürürlükten kaldırmak istiyor musunuz? " + +#: g10/keyedit.c:1183 +msgid "Do you really want to revoke this key? " +msgstr "Bu anahtarı gerçekten yürürlükten kaldırmak istiyor musunuz? " + +#: g10/keyedit.c:1252 +msgid "Really update the preferences for the selected user IDs? " +msgstr "" +"Seçilen kullanıcı kimlik için tercihleri gerçekten güncellemek istiyor " +"musunuz? " + +#: g10/keyedit.c:1254 +msgid "Really update the preferences? " +msgstr "Tercihleri gerçekten güncellemek istiyor musunuz? " + +#: g10/keyedit.c:1292 +msgid "Save changes? " +msgstr "DeÄŸiÅŸiklikler kaydedilecek mi? " + +#: g10/keyedit.c:1295 +msgid "Quit without saving? " +msgstr "Kaydetmeden çıkılsın mı? " + +#: g10/keyedit.c:1306 +#, c-format +msgid "update failed: %s\n" +msgstr "güncelleme baÅŸarısız: %s\n" + +#: g10/keyedit.c:1313 +#, c-format +msgid "update secret failed: %s\n" +msgstr "gizliyi güncelleme baÅŸarısız: %s\n" + +#: g10/keyedit.c:1320 +msgid "Key not changed so no update needed.\n" +msgstr "Güncelleme gereÄŸi olmadığından anahtar deÄŸiÅŸmedi.\n" + +#: g10/keyedit.c:1332 +msgid "Invalid command (try \"help\")\n" +msgstr "Komut geçersiz (\"yardım\" komutunu deneyin)\n" + +#: g10/keyedit.c:1489 +#, c-format +msgid "This key may be revoked by %s key %s%s\n" +msgstr "" +"Bu anahtar %s tarafından %s%s anahtarı ile yürürlükten kaldırılmış olabilir\n" + +#: g10/keyedit.c:1492 +msgid " (sensitive)" +msgstr " (duyarlı)" + +#: g10/keyedit.c:1497 g10/keyedit.c:1523 +#, c-format +msgid "%s%c %4u%c/%08lX created: %s expires: %s" +msgstr "%s%c %4u%c/%08lX üretildi: %s son kullanma tarihi: %s" + +#: g10/keyedit.c:1506 +#, c-format +msgid " trust: %c/%c" +msgstr " güven derecesi: %c/%c" + +#: g10/keyedit.c:1510 +msgid "This key has been disabled" +msgstr "Bu anahtar iptal edilmiÅŸti" + +#: g10/keyedit.c:1539 +#, c-format +msgid "rev! subkey has been revoked: %s\n" +msgstr "yürkal! yardımcı anahtar yürürlülükten kaldırıldı: %s\n" + +#: g10/keyedit.c:1542 +msgid "rev- faked revocation found\n" +msgstr "yürkal- sahte yürürlükten kaldırma sertifikası bulundu\n" + +#: g10/keyedit.c:1544 +#, c-format +msgid "rev? problem checking revocation: %s\n" +msgstr "yürkal? Yürürlükten kaldırma denetlenirken problem: %s\n" + +#: g10/keyedit.c:1574 +msgid "" +"Please note that the shown key validity is not necessary correct\n" +"unless you restart the program.\n" +msgstr "" +"Gösterilen anahtarın, uygulamayı yeniden baÅŸlatıncaya kadar, geçerliliÄŸinin\n" +"olmayacağını lütfen gözönüne alınız.\n" + +#: g10/keyedit.c:1660 +msgid "" +"WARNING: This key already has a photo ID.\n" +" Adding another photo ID may confuse some versions of PGP.\n" +msgstr "" +"UYARI: Bu anahtarın zaten bir foto kimliÄŸi var.\n" +" BaÅŸka bir foto kimliÄŸi eklemek PGP'in bazı sürümleriyle uyumsuz " +"olabilir.\n" + +#: g10/keyedit.c:1664 g10/keyedit.c:1691 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Onu yine de eklemek istiyor musunuz? (e/H) " + +#: g10/keyedit.c:1672 +msgid "You may only have one photo ID on a key.\n" +msgstr "Bir anahtarın sadece bir foto kimliÄŸi olabilir.\n" + +#: g10/keyedit.c:1686 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"UYARI: Bu PGP-2 tarzı bir anahtar. Bir foto kimliÄŸi eklenmesi bu anahtarın\n" +" bazı PGP sürümleri tarafından reddedilmesi ile sonuçlanabilir.\n" + +#: g10/keyedit.c:1697 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "PGP2 tarzı bir anahtara bir foto kimliÄŸi ekleyemeyebilirsiniz.\n" + +#: g10/keyedit.c:1832 +msgid "Delete this good signature? (y/N/q)" +msgstr "Bu doÄŸru imza silinsin mi? (e/H/k)" + +#: g10/keyedit.c:1842 +msgid "Delete this invalid signature? (y/N/q)" +msgstr "Bu geçersiz imza silinsin mi? (e/H/k)" + +#: g10/keyedit.c:1846 +msgid "Delete this unknown signature? (y/N/q)" +msgstr "Bu bilinmeyen imza silinsin mi? (e/H/k)" + +#: g10/keyedit.c:1852 +msgid "Really delete this self-signature? (y/N)" +msgstr "Bu öz-imza gerçekten silinecek mi? (e/H)" + +#: g10/keyedit.c:1866 +#, c-format +msgid "Deleted %d signature.\n" +msgstr "%d imza silindi.\n" + +#: g10/keyedit.c:1867 +#, c-format +msgid "Deleted %d signatures.\n" +msgstr "%d imza silindi.\n" + +#: g10/keyedit.c:1870 +msgid "Nothing deleted.\n" +msgstr "Hiçbir ÅŸey silinmedi.\n" + +#: g10/keyedit.c:1943 +msgid "Please remove selections from the secret keys.\n" +msgstr "Lütfen gizli anahtarlardan seçilenleri silin.\n" + +#: g10/keyedit.c:1949 +msgid "Please select at most one secondary key.\n" +msgstr "Lütfen en fazla bir yardımcı anahtar seçin.\n" + +#: g10/keyedit.c:1953 +msgid "Changing expiration time for a secondary key.\n" +msgstr "Bir yardımcı anahtar için son kullanma tarihi deÄŸiÅŸtiriliyor.\n" + +#: g10/keyedit.c:1955 +msgid "Changing expiration time for the primary key.\n" +msgstr "Asıl anahtar için son kullanma tarihi deÄŸiÅŸtiriliyor.\n" + +#: g10/keyedit.c:1997 +msgid "You can't change the expiration date of a v3 key\n" +msgstr "Bir v3 anahtarının son kullanma tarihini deÄŸiÅŸtiremezsiniz\n" + +#: g10/keyedit.c:2013 +msgid "No corresponding signature in secret ring\n" +msgstr "Gizli anahtar demetinde uygun/benzer imza yok\n" + +#: g10/keyedit.c:2096 +msgid "Please select exactly one user ID.\n" +msgstr "Lütfen sadece ve sadece bir kullanıcı kimlik seçiniz.\n" + +#: g10/keyedit.c:2284 +#, c-format +msgid "No user ID with index %d\n" +msgstr "%d endeksine sahip kullanıcı kimliÄŸi yok\n" + +#: g10/keyedit.c:2330 +#, c-format +msgid "No secondary key with index %d\n" +msgstr "%d endeksine sahip yardımcı anahtar yok\n" + +#: g10/keyedit.c:2444 +msgid "user ID: \"" +msgstr "Kullanıcı kimliÄŸi: \"" + +#: g10/keyedit.c:2449 +#, c-format +msgid "" +"\"\n" +"signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +" %08lX anahtarınızla %s de imzalandı\n" + +#: g10/keyedit.c:2452 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"%08lX anahtarınızla %s de yerel olarak imzalı\n" + +#: g10/keyedit.c:2457 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "Bu anahtarın geçerliliÄŸi %s de bitti.\n" + +#: g10/keyedit.c:2461 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Onu yine de yürürlükten kaldırmak istiyor musunuz? (e/H) " + +#: g10/keyedit.c:2465 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "" +"Bu imza için bir yürürlükten kaldırma sertifikası oluÅŸturulsun mu? (e/H) " + +#. FIXME: detect duplicates here +#: g10/keyedit.c:2490 +msgid "You have signed these user IDs:\n" +msgstr "Bu kullanıcı kimliklerini imzalamışsınız:\n" + +#: g10/keyedit.c:2504 +#, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr " %08lX ile %s%s%s de imzalanmış\n" + +#: g10/keyedit.c:2512 +#, c-format +msgid " revoked by %08lX at %s\n" +msgstr " %08lX tarafından %s de yürürlükten kaldırılmış\n" + +#: g10/keyedit.c:2532 +msgid "You are about to revoke these signatures:\n" +msgstr "Bu imzaları yürürlükten kaldırmak üzeresiniz:\n" + +#: g10/keyedit.c:2542 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " %08lX ile %s%s de imzalanmış\n" + +#: g10/keyedit.c:2544 +msgid " (non-exportable)" +msgstr " (dışarda geçersiz)" + +#: g10/keyedit.c:2551 +msgid "Really create the revocation certificates? (y/N) " +msgstr "" +"Bu yürürlükten kaldırma sertifikalarını gerçekten oluÅŸturacak mısınız? (e/H) " + +#: g10/keyedit.c:2581 +msgid "no secret key\n" +msgstr "gizli anahtar yok\n" + +#: g10/keyedit.c:2730 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" +"Anahtar 0x%3$08lX (kull-kiml %4$d) için %2$ld uzunluktaki %1$s foto kimliÄŸi " +"gösteriliyor\n" + +#. This isn't UTF8 as it is a URL(?) +#: g10/keylist.c:87 +msgid "Signature policy: " +msgstr "imza guvencesi: " + +#: g10/keylist.c:112 g10/keylist.c:132 g10/mainproc.c:721 g10/mainproc.c:730 +msgid "WARNING: invalid notation data found\n" +msgstr "UYARI: geçersiz niteleme verisi bulundu\n" + +#. This is UTF8 +#: g10/keylist.c:120 +msgid "Signature notation: " +msgstr "imza niteleyici: " + +#: g10/keylist.c:127 +msgid "not human readable" +msgstr "insan okuyabilir deÄŸil" + +#: g10/keylist.c:216 +msgid "Keyring" +msgstr "Anahtar Zinciri" + +#. of subkey +#: g10/keylist.c:423 g10/mainproc.c:856 +#, c-format +msgid " [expires: %s]" +msgstr "[son kullanma tarihi: %s]" + +#: g10/keylist.c:889 +msgid "Fingerprint:" +msgstr " Parmak izi:" + +#. use tty +#. Translators: this should fit into 24 bytes to that the fingerprint +#. * data is properly aligned with the user ID +#: g10/keylist.c:895 +msgid " Fingerprint:" +msgstr " Parmak izi:" + +#: g10/keylist.c:899 +msgid " Key fingerprint =" +msgstr " Anahtar parmak izi =" + +#: g10/encr-data.c:66 g10/mainproc.c:255 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s ÅŸifreli veri\n" + +#: g10/encr-data.c:68 g10/mainproc.c:257 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "bilinmeyen algoritma %d ile ÅŸifrelenmiÅŸ\n" + +#: g10/mainproc.c:280 +#, c-format +msgid "public key is %08lX\n" +msgstr "genel anahtar: %08lX\n" + +#: g10/mainproc.c:326 +msgid "public key encrypted data: good DEK\n" +msgstr "genel anahtarla ÅŸifreli veri: doÄŸru DEK\n" + +#: g10/mainproc.c:378 +#, c-format +msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" +msgstr "" +"%u bitlik %s anahtarı ve kullanıcı kimliÄŸi\n" +"%08lX ile ÅŸifrelendi, %s oluÅŸturuldu\n" + +#: g10/mainproc.c:388 +#, c-format +msgid "encrypted with %s key, ID %08lX\n" +msgstr "%s anahtarı ve %08lX kullanıcı kimliÄŸi ile ÅŸifrelendi\n" + +#: g10/mainproc.c:402 +#, c-format +msgid "public key decryption failed: %s\n" +msgstr "genel anahtar ÅŸifre çözümü baÅŸarısız: %s\n" + +#: g10/mainproc.c:429 g10/mainproc.c:448 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "%s ÅŸifreli veri varsayılıyor\n" + +#: g10/mainproc.c:436 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "" +"IDEA ÅŸifre kullanışsız, iyimserlikle yerine %s kullanılmaya çalışılıyor\n" + +#: g10/mainproc.c:466 +msgid "decryption okay\n" +msgstr "Åžifre çözme tamam\n" + +#: g10/mainproc.c:471 +msgid "WARNING: encrypted message has been manipulated!\n" +msgstr "UYARI: ÅŸifreli ileti tahrip edilmiÅŸ!\n" + +#: g10/mainproc.c:476 +#, c-format +msgid "decryption failed: %s\n" +msgstr "ÅŸifre çözme baÅŸarısız: %s\n" + +#: g10/mainproc.c:495 +msgid "NOTE: sender requested \"for-your-eyes-only\"\n" +msgstr "BÄ°LGÄ°: gönderen \"yalnız-gözleriniz-için\" ricasında bulundu\n" + +#: g10/mainproc.c:497 +#, c-format +msgid "original file name='%.*s'\n" +msgstr "özgün dosya adı = '%.*s'\n" + +#: g10/mainproc.c:672 +msgid "standalone revocation - use \"gpg --import\" to apply\n" +msgstr "" +"tek başına yürürlükten kaldırma - uygulamak için \"gpg --import\" kullanın\n" + +#: g10/mainproc.c:733 +msgid "Notation: " +msgstr "Niteleme: " + +#: g10/mainproc.c:745 +msgid "Policy: " +msgstr "Güvence: " + +#: g10/mainproc.c:1198 +msgid "signature verification suppressed\n" +msgstr "imza doÄŸrulama engellendi\n" + +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1240 g10/mainproc.c:1250 +msgid "can't handle these multiple signatures\n" +msgstr "bu çoklu imzalar elde edilemiyor\n" + +#: g10/mainproc.c:1261 +#, c-format +msgid "Signature made %.*s using %s key ID %08lX\n" +msgstr "%.*s imzası, %s anahtarı ve %08lX kullanıcı kimliÄŸi ile yapıldı\n" + +#: g10/mainproc.c:1305 g10/mainproc.c:1327 +msgid "BAD signature from \"" +msgstr "KÖTÃœ imza: \"" + +#: g10/mainproc.c:1306 g10/mainproc.c:1328 +msgid "Expired signature from \"" +msgstr "Kullanım tarihi geçmiÅŸ imza: \"" + +#: g10/mainproc.c:1307 g10/mainproc.c:1329 +msgid "Good signature from \"" +msgstr "DoÄŸru imza: \"" + +#: g10/mainproc.c:1331 +msgid "[uncertain]" +msgstr "[şüpheli]" + +#: g10/mainproc.c:1351 +msgid " aka \"" +msgstr " den \"" + +#: g10/mainproc.c:1412 +#, c-format +msgid "Can't check signature: %s\n" +msgstr "Ä°mza kontrol edilemedi: %s\n" + +#: g10/mainproc.c:1481 g10/mainproc.c:1497 g10/mainproc.c:1559 +msgid "not a detached signature\n" +msgstr "bir bağımsız imza deÄŸil\n" + +#: g10/mainproc.c:1508 +#, c-format +msgid "standalone signature of class 0x%02x\n" +msgstr "0x%02x sınıfı tek başına imza\n" + +#: g10/mainproc.c:1565 +msgid "old style (PGP 2.x) signature\n" +msgstr "eski stil (PGP 2.x) imza\n" + +#: g10/mainproc.c:1572 +msgid "invalid root packet detected in proc_tree()\n" +msgstr "proc_tree() içinde geçersiz kök paket saptandı\n" + +#: g10/misc.c:101 +#, c-format +msgid "can't disable core dumps: %s\n" +msgstr "\"core\" oluÅŸumu iptal edilemedi: %s\n" + +#: g10/misc.c:211 +msgid "Experimental algorithms should not be used!\n" +msgstr "Deneysel algoritmalar kullanılmamalı!\n" + +#: g10/misc.c:241 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" +msgstr "" +"bu ÅŸifre algoritması standart dışı; lütfen daha standart birini kullanın!\n" + +#: g10/misc.c:378 +#, c-format +msgid "Warning: unsafe ownership on %s \"%s\"\n" +msgstr "Uyarı: %s \"%s\" de güvensiz sahiplik\n" + +#: g10/misc.c:410 +#, c-format +msgid "Warning: unsafe permissions on %s \"%s\"\n" +msgstr "Uyarı: %s \"%s\" de güvensiz izinler\n" + +#: g10/misc.c:435 +msgid "the IDEA cipher plugin is not present\n" +msgstr "IDEA ÅŸifre eklentisi yok\n" + +#: g10/misc.c:436 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "" +"Daha fazla bilgi için lütfen http://www.gnupg.org/why-not-idea.html " +"adresine\n" +"bakınız.\n" + +#: g10/parse-packet.c:119 +#, c-format +msgid "can't handle public key algorithm %d\n" +msgstr "%d genel anahtar algoritması kullanılamadı\n" + +#: g10/parse-packet.c:1053 +#, c-format +msgid "subpacket of type %d has critical bit set\n" +msgstr "%d tipi alt paket kritik bit kümesine sahip\n" + +#: g10/passphrase.c:442 g10/passphrase.c:489 +msgid "gpg-agent is not available in this session\n" +msgstr "gpg-agent bu oturumda kullanılamaz\n" + +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "istemci pid'i belirlenemiyor\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "sunucu okuma dosya tanıtıcısı alınamadı\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "sunucu yazma dosya tanıtıcısı alınamadı\n" + +#: g10/passphrase.c:498 +msgid "malformed GPG_AGENT_INFO environment variable\n" +msgstr "GPG_AGENT_INFO çevre deÄŸiÅŸkeni hatalı\n" + +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "gpg-agent protokolü sürüm %d desteklenmiyor\n" + +#: g10/hkp.c:147 g10/passphrase.c:532 +#, c-format +msgid "can't connect to `%s': %s\n" +msgstr "\"%s\" sunucusuna baÄŸlanılamadı: %s\n" + +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "gpg-agent ile haberleÅŸme problemi\n" + +#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919 +msgid "problem with the agent - disabling agent use\n" +msgstr "vekil ile problem - vekil kullanımı iptal ediliyor\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1017 +#, c-format +msgid " (main key ID %08lX)" +msgstr " (asıl anahtar kimliÄŸi %08lX)" + +#: g10/passphrase.c:641 +#, c-format +msgid "" +"You need a passphrase to unlock the secret key for user:\n" +"\"%.*s\"\n" +"%u-bit %s key, ID %08lX, created %s%s\n" +msgstr "" +"\"%.*s\"\n" +"kullanıcısının gizli anahtarını açacak bir anahtar parolasına ihtiyaç var.\n" +"%u bitlik %s anahtarı, kimlik %08lX, oluÅŸturulan %s%s\n" + +#: g10/passphrase.c:662 +msgid "Enter passphrase\n" +msgstr "Anahtar parolasını giriniz\n" + +#: g10/passphrase.c:664 +msgid "Repeat passphrase\n" +msgstr "Parolayı tekrar yazınız\n" + +#: g10/passphrase.c:705 +msgid "passphrase too long\n" +msgstr "Parola çok uzun\n" + +#: g10/passphrase.c:718 +msgid "invalid response from agent\n" +msgstr "yanıt geçersiz\n" + +#: g10/passphrase.c:727 g10/passphrase.c:808 +msgid "cancelled by user\n" +msgstr "kullanıcı tarafından durduruldu\n" + +#: g10/passphrase.c:729 g10/passphrase.c:890 +#, c-format +msgid "problem with the agent: agent returns 0x%lx\n" +msgstr "vekil ile sorun var: vekil 0x%lx ile sonuçlandı\n" + +#: g10/passphrase.c:1003 +msgid "" +"\n" +"You need a passphrase to unlock the secret key for\n" +"user: \"" +msgstr "" +"\n" +"Gizli anahtarın kilidini açmak için bir anahtar parolasına ihtiyacınız var.\n" +"Anahtarın sahibi: \"" + +#: g10/passphrase.c:1012 +#, c-format +msgid "%u-bit %s key, ID %08lX, created %s" +msgstr "%u bitlik %s anahtarı, kimlik: %08lX, oluÅŸturuldu %s" + +#: g10/passphrase.c:1063 +msgid "can't query password in batchmode\n" +msgstr "önceden tanımlanmış iÅŸlemler kipinde (batchmode) parola sorgulanamaz\n" + +#: g10/passphrase.c:1067 +msgid "Enter passphrase: " +msgstr "Anahtar parolasını girin: " + +#: g10/passphrase.c:1071 +msgid "Repeat passphrase: " +msgstr "Tekrar: " + +#: g10/plaintext.c:67 +msgid "data not saved; use option \"--output\" to save it\n" +msgstr "veri kaydedilmedi; kaydetmek için \"--output\" seçeneÄŸini kullanın\n" + +#: g10/plaintext.c:108 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "`%s' oluÅŸturulurken hata: %s\n" + +#: g10/plaintext.c:337 +msgid "Detached signature.\n" +msgstr "Bağımsız imza.\n" + +#: g10/plaintext.c:341 +msgid "Please enter name of data file: " +msgstr "Lütfen veri dosyasının ismini girin: " + +#: g10/plaintext.c:362 +msgid "reading stdin ...\n" +msgstr "standart girdiden okuyor ...\n" + +#: g10/plaintext.c:396 +msgid "no signed data\n" +msgstr "imzalı veri yok\n" + +#: g10/plaintext.c:404 +#, c-format +msgid "can't open signed data `%s'\n" +msgstr "imzalı veri '%s' açılamadı\n" + +#: g10/pubkey-enc.c:100 +#, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "anonim alıcı: %08lX gizli anahtarı deneniyor ...\n" + +#: g10/pubkey-enc.c:106 +msgid "okay, we are the anonymous recipient.\n" +msgstr "tamam, biz anonim alıcıyız.\n" + +#: g10/pubkey-enc.c:158 +msgid "old encoding of the DEK is not supported\n" +msgstr "DEK'in eski kodlaması desteklenmiyor\n" + +#: g10/pubkey-enc.c:177 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "ÅŸifre algoritması %d%s bilinmiyor ya da iptal edilmiÅŸ\n" + +#: g10/pubkey-enc.c:220 +#, c-format +msgid "NOTE: cipher algorithm %d not found in preferences\n" +msgstr "BÄ°LGÄ°: %d ÅŸifre algoritması tercihlerde bulunamadı\n" + +#: g10/pubkey-enc.c:242 +#, c-format +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "BÄ°LGÄ°: %08lX gizli anahtarının %s tarihinde kullanım süresi doldu\n" + +#. HKP does not support v3 fingerprints +#: g10/hkp.c:70 +#, c-format +msgid "requesting key %08lX from HKP keyserver %s\n" +msgstr "%08lX anahtarı HKP anahtar sunucusunun %s adresinden isteniyor\n" + +#: g10/hkp.c:94 +#, c-format +msgid "can't get key from keyserver: %s\n" +msgstr "anahtar sunucusunun %s adresinden anahtar alınamadı\n" + +#: g10/hkp.c:171 +#, c-format +msgid "error sending to `%s': %s\n" +msgstr "\"%s\" adresine gönderme hatası: %s\n" + +#: g10/hkp.c:186 +#, c-format +msgid "success sending to `%s' (status=%u)\n" +msgstr "\"%s\" adresine gönderme iÅŸlemi baÅŸarılı (durum=%u)\n" + +#: g10/hkp.c:189 +#, c-format +msgid "failed sending to `%s': status=%u\n" +msgstr "\"%s\" adresine gönderme iÅŸlemi baÅŸarısız (durum=%u)\n" + +#: g10/hkp.c:471 +#, c-format +msgid "searching for \"%s\" from HKP server %s\n" +msgstr "HKP sunucusunun %2$s adresinde \"%1$s\" aranıyor\n" + +#: g10/hkp.c:521 +#, c-format +msgid "can't search keyserver: %s\n" +msgstr "anahtar sunucusu aranamıyor: %s\n" + +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "gizli anahtar parçaları kullanım dışı\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "koruma algoritması %d%s desteklenmiyor\n" + +#: g10/seckey-cert.c:215 +msgid "Invalid passphrase; please try again" +msgstr "Anahtar parolası geçersiz; lütfen tekrar deneyin" + +#: g10/seckey-cert.c:216 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:273 +msgid "WARNING: Weak key detected - please change passphrase again.\n" +msgstr "" +"UYARI: Zayıf anahtar saptandı - lütfen anahtar parolasını tekrar " +"deÄŸiÅŸtirin.\n" + +#: g10/seckey-cert.c:311 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" +"gizli anahtarın güvenliÄŸi için eski tarz 16 bitlik saÄŸlama toplamı " +"üretiliyor\n" + +#: g10/sig-check.c:205 +msgid "" +"this is a PGP generated ElGamal key which is NOT secure for signatures!\n" +msgstr "Bu, imzalar için güvenli olmayan PGP üretimi bir ElGamal anahtarı!\n" + +#: g10/sig-check.c:213 +#, c-format +msgid "public key is %lu second newer than the signature\n" +msgstr "genel anahtar imzadan %lu saniye daha yeni\n" + +#: g10/sig-check.c:214 +#, c-format +msgid "public key is %lu seconds newer than the signature\n" +msgstr "genel anahtar imzadan %lu saniye daha yeni.\n" + +#: g10/sig-check.c:237 +#, c-format +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "BÄ°LGÄ°: %08lX imza anahtarının kullanım süresi %s tarihinde dolmuÅŸ\n" + +#: g10/sig-check.c:318 +msgid "assuming bad signature due to an unknown critical bit\n" +msgstr "Hatalı imzanın bilinmeyen bir kritik bitten kaynaklandığı sanılıyor\n" + +#: g10/sign.c:115 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"UYARI: güvence adresinin uzatılması imkansız (çok büyük).\n" +"Uzatılmadan kullanılıyor.\n" + +#: g10/sign.c:274 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "oluÅŸturulan imzanın denetimi baÅŸarısız: %s\n" + +#: g10/sign.c:283 +#, c-format +msgid "%s signature from: %s\n" +msgstr "%s imza: %s den\n" + +#: g10/sign.c:430 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "UYARI: \"%s\" dosyası boÅŸ\n" + +#: g10/sign.c:618 +msgid "you can only sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"--pgp2 kipinde sadece PGP 2.x tarzı anahtarlarla imzalama yapabilirsiniz\n" + +#: g10/sign.c:643 g10/sign.c:812 +#, c-format +msgid "can't create %s: %s\n" +msgstr "%s oluÅŸturulamıyor: %s\n" + +#: g10/sign.c:704 +msgid "signing:" +msgstr "imzalanıyor:" + +#: g10/sign.c:796 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "--pgp2 kipinde sadece PGP 2.x tarzı anahtarlarla imza yapabilirsiniz\n" + +#: g10/sign.c:953 +#, c-format +msgid "%s encryption will be used\n" +msgstr "%s ÅŸifrelemesi kullanılmayacak\n" + +#: g10/textfilter.c:134 +#, c-format +msgid "can't handle text lines longer than %d characters\n" +msgstr "%d karakterden daha uzun metin satırları okunamıyor\n" + +#: g10/textfilter.c:231 +#, c-format +msgid "input line longer than %d characters\n" +msgstr "girdi satırı %d karakterden daha uzun\n" + +#: g10/tdbio.c:121 g10/tdbio.c:1382 +#, c-format +msgid "trustdb rec %lu: lseek failed: %s\n" +msgstr "güvence veritabanı %lu kaydı: eriÅŸim baÅŸarısız: %s\n" + +#: g10/tdbio.c:127 g10/tdbio.c:1389 +#, c-format +msgid "trustdb rec %lu: write failed (n=%d): %s\n" +msgstr "güvence veritabanı %lu kaydı: yazma baÅŸarısız (n=%d): %s\n" + +#: g10/tdbio.c:237 +msgid "trustdb transaction too large\n" +msgstr "güvence veritabanı iÅŸlemi çok uzun\n" + +#: g10/tdbio.c:454 +#, c-format +msgid "%s: can't access: %s\n" +msgstr "%s: eriÅŸilemedi: %s\n" + +#: g10/tdbio.c:468 +#, c-format +msgid "%s: directory does not exist!\n" +msgstr "%s: dizin yok!\n" + +#: g10/tdbio.c:478 g10/tdbio.c:498 g10/tdbio.c:541 +#, c-format +msgid "%s: can't create lock\n" +msgstr "%s: kilit oluÅŸturulamadı\n" + +#: g10/tdbio.c:480 g10/tdbio.c:544 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: kilitleme yapılamadı\n" + +#: g10/keyring.c:1436 g10/openfile.c:240 g10/openfile.c:307 g10/tdbio.c:484 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: oluÅŸturulamadı: %s\n" + +#: g10/tdbio.c:503 +#, c-format +msgid "%s: failed to create version record: %s" +msgstr "%s: sürüm kaydı oluÅŸturmada baÅŸarısız: %s" + +#: g10/tdbio.c:507 +#, c-format +msgid "%s: invalid trustdb created\n" +msgstr "%s: geçersiz güvence veritabanı oluÅŸturuldu\n" + +#: g10/tdbio.c:510 +#, c-format +msgid "%s: trustdb created\n" +msgstr "%s: güvence veritabanı oluÅŸturuldu\n" + +#: g10/tdbio.c:565 +#, c-format +msgid "%s: invalid trustdb\n" +msgstr "%s: güvence veritabanı geçersiz\n" + +#: g10/tdbio.c:597 +#, c-format +msgid "%s: failed to create hashtable: %s\n" +msgstr "%s: nitelemeli tablo oluÅŸturulamadı: %s\n" + +#: g10/tdbio.c:605 +#, c-format +msgid "%s: error updating version record: %s\n" +msgstr "%s: sürüm kaydının güncellenmesinde hata: %s\n" + +#: g10/tdbio.c:621 g10/tdbio.c:657 g10/tdbio.c:671 g10/tdbio.c:701 +#: g10/tdbio.c:1315 g10/tdbio.c:1342 +#, c-format +msgid "%s: error reading version record: %s\n" +msgstr "%s: sürüm kaydının okunmasında hata: %s\n" + +#: g10/tdbio.c:634 g10/tdbio.c:680 +#, c-format +msgid "%s: error writing version record: %s\n" +msgstr "%s: sürüm kaydının yazılmasında hata: %s\n" + +#: g10/tdbio.c:1119 +#, c-format +msgid "trustdb: lseek failed: %s\n" +msgstr "güvence veritabanı: eriÅŸim baÅŸarısız: %s\n" + +#: g10/tdbio.c:1127 +#, c-format +msgid "trustdb: read failed (n=%d): %s\n" +msgstr "güvence veritabanı: okuma baÅŸarısız (n=%d): %s\n" + +#: g10/tdbio.c:1148 +#, c-format +msgid "%s: not a trustdb file\n" +msgstr "%s: bir güvence veritabanı dosyası deÄŸil\n" + +#: g10/tdbio.c:1165 +#, c-format +msgid "%s: version record with recnum %lu\n" +msgstr "%s: %lu kayıt numarası ile sürüm kaydı\n" + +#: g10/tdbio.c:1170 +#, c-format +msgid "%s: invalid file version %d\n" +msgstr "%s: dosya sürümü %d geçersiz\n" + +#: g10/tdbio.c:1348 +#, c-format +msgid "%s: error reading free record: %s\n" +msgstr "%s: serbest kaydı okuma hatası: %s\n" + +#: g10/tdbio.c:1356 +#, c-format +msgid "%s: error writing dir record: %s\n" +msgstr "%s: dizin kaydını yazma hatası: %s\n" + +#: g10/tdbio.c:1366 +#, c-format +msgid "%s: failed to zero a record: %s\n" +msgstr "%s: kayıt sıfırlama baÅŸarısız: %s\n" + +#: g10/tdbio.c:1396 +#, c-format +msgid "%s: failed to append a record: %s\n" +msgstr "%s: kayıt ekleme baÅŸarısız: %s\n" + +#: g10/tdbio.c:1441 +msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" +msgstr "" +"güvence veritabanı bozulmuÅŸ; lütfen \"gpg --fix-trustdb\" çalıştırın.\n" + +#: g10/trustdb.c:200 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "`%s' geçerli bir anahtar kimliÄŸi deÄŸil\n" + +#: g10/trustdb.c:235 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "%08lX anahtarı: güvenli anahtar olarak kabul edildi\n" + +#: g10/trustdb.c:274 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "%08lX anahtarı güvence veritabanında birden fazla kayıtta bulundu\n" + +#: g10/trustdb.c:290 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "%08lX anahtarı: güvenli anahtar için genel anahtar yok - atlandı\n" + +#: g10/trustdb.c:332 +#, c-format +msgid "trust record %lu, req type %d: read failed: %s\n" +msgstr "güvence veritabanı kaydı %lu, istek tipi %d: okuma baÅŸarısız: %s\n" + +#: g10/trustdb.c:338 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "güvence veritabanının %lu. kaydı %d istek türünde deÄŸil\n" + +#: g10/trustdb.c:353 +#, c-format +msgid "trust record %lu, type %d: write failed: %s\n" +msgstr "güvence veritabanının %lu. kaydı, %d türünde: yazma baÅŸarısız: %s\n" + +#: g10/trustdb.c:368 +#, c-format +msgid "trustdb: sync failed: %s\n" +msgstr "güvence veritabanı: eÅŸzamanlama baÅŸarısız: %s\n" + +#: g10/trustdb.c:468 +msgid "no need for a trustdb check\n" +msgstr "bir güvence veritabanı denetimi gereksiz\n" + +#: g10/trustdb.c:474 g10/trustdb.c:1641 +#, c-format +msgid "next trustdb check due at %s\n" +msgstr "sonraki güvence veritabanı denetimi %s de\n" + +#: g10/trustdb.c:779 +msgid "checking the trustdb\n" +msgstr "güvence veritabanı denetleniyor\n" + +#: g10/trustdb.c:933 +#, c-format +msgid "public key %08lX not found: %s\n" +msgstr "%08lX genel anahtarı yok: %s\n" + +#: g10/trustdb.c:1515 +#, c-format +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "son derece güvenli %08lX genel anahtarı yok\n" + +#: g10/trustdb.c:1593 +#, c-format +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "" +"denetim %d derinlikte yapılıyor: signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%" +"d\n" + +#: g10/verify.c:108 +msgid "" +"the signature could not be verified.\n" +"Please remember that the signature file (.sig or .asc)\n" +"should be the first file given on the command line.\n" +msgstr "" +"imza doÄŸrulanamadı.\n" +"Ä°mza dosyasının (.sig veya .asc) komut satırında verilecek\n" +"ilk dosya olması gerektiÄŸini lütfen hatırlayın.\n" + +#: g10/verify.c:173 +#, c-format +msgid "input line %u too long or missing LF\n" +msgstr "girdi satırı %u ya çok uzun ya da sonunda satırsonu karakteri yok\n" + +#: g10/skclist.c:110 g10/skclist.c:166 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "anahtar güvenli olarak imlenmemiÅŸ - onu sahte RSÃœ ile kullanmayın!\n" + +#: g10/skclist.c:138 +#, c-format +msgid "skipped `%s': duplicated\n" +msgstr "`%s' atlandı: tekrarlanmış\n" + +#: g10/skclist.c:145 g10/skclist.c:153 +#, c-format +msgid "skipped `%s': %s\n" +msgstr "\"%s\" atlandı: %s\n" + +#: g10/skclist.c:149 +msgid "skipped: secret key already present\n" +msgstr "atlandı: gizli anahtar zaten var\n" + +#: g10/skclist.c:160 +#, c-format +msgid "" +"skipped `%s': this is a PGP generated ElGamal key which is not secure for " +"signatures!\n" +msgstr "" +"`%s' atlandı:\n" +"Bu, imzalar için güvenli olmayan PGP üretimi bir ElGamal anahtarı!\n" + +#. do not overwrite +#: g10/openfile.c:84 +#, c-format +msgid "File `%s' exists. " +msgstr "\"%s\" dosyası var. " + +#: g10/openfile.c:86 +msgid "Overwrite (y/N)? " +msgstr "Ãœzerine yazılsın mı? (e/H)? " + +#: g10/openfile.c:119 +#, c-format +msgid "%s: unknown suffix\n" +msgstr "%s: bilinmeyen sonek\n" + +#: g10/openfile.c:141 +msgid "Enter new filename" +msgstr "Yeni dosya ismini giriniz" + +#: g10/openfile.c:184 +msgid "writing to stdout\n" +msgstr "standart çıktıya yazıyor\n" + +#: g10/openfile.c:273 +#, c-format +msgid "assuming signed data in `%s'\n" +msgstr "\"%s\" içindeki veri imzalı kabul ediliyor\n" + +#: g10/openfile.c:323 +#, c-format +msgid "%s: new options file created\n" +msgstr "%s: yeni seçenekler dosyası oluÅŸturuldu\n" + +#: g10/openfile.c:350 +#, c-format +msgid "%s: can't create directory: %s\n" +msgstr "%s: dizin oluÅŸturulamıyor: %s\n" + +#: g10/openfile.c:353 +#, c-format +msgid "%s: directory created\n" +msgstr "%s: dizin oluÅŸturuldu\n" + +#: g10/openfile.c:355 +msgid "you have to start GnuPG again, so it can read the new options file\n" +msgstr "" +"Yeni seçenekler dosyasının okunabilmesi için GnuPG yeniden baÅŸlatılmalıdır\n" + +#: g10/encr-data.c:91 +msgid "" +"WARNING: message was encrypted with a weak key in the symmetric cipher.\n" +msgstr "UYARI: ileti simetrik ÅŸifre içindeki zayıf bir anahtarla ÅŸifrelendi.\n" + +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "ÅŸifreli paketin elde edilmesinde sorun var\n" + +#: g10/seskey.c:52 +msgid "weak key created - retrying\n" +msgstr "zayıf anahtar oluÅŸturuldu - yeniden deneniyor\n" + +#: g10/seskey.c:57 +#, c-format +msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" +msgstr "" +"simetrik ÅŸifre için zayıf anahtarın önlenmesi mümkün olamadı: %d kere " +"denendi!\n" + +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "DSA, 160 bitlik bir hash algoritması kullanılmasını gerektiriyor\n" + +#: g10/delkey.c:116 +msgid "can't do that in batchmode without \"--yes\"\n" +msgstr "önceden belirlenmiÅŸ iÅŸlemler kipinde \"--yes\" olmaksızın yapılamaz\n" + +#: g10/delkey.c:138 +msgid "Delete this key from the keyring? " +msgstr "Bu anahtar, anahtar zincirinden silinsin mi? " + +#: g10/delkey.c:146 +msgid "This is a secret key! - really delete? " +msgstr "Bu bir gizli anahtar! - gerçekten silinecek mi? " + +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "anahtar bloÄŸu silinemedi: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "sahibinin güvencesi bilgisi temizlendi\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "genel anahtar \"%s\" için bir gizli anahtar var!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "onu önce \"--delete-secret-keys\" ile silmelisiniz.\n" + +#: g10/helptext.c:47 +msgid "" +"It's up to you to assign a value here; this value will never be exported\n" +"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" +"to do with the (implicitly created) web-of-certificates." +msgstr "" +"Bir deÄŸeri buraya iÅŸaretlemek size kalmış; bu deÄŸer herhangi bir 3. ÅŸahsa\n" +"gönderilmeyecek. Bir güvence ağı saÄŸlamak için bizim buna ihtiyacımız var;\n" +"bunun (açıkça belirtilmeden oluÅŸturulmuÅŸ) sertifikalar ağıyla\n" +"hiçbir alakası yok." + +#: g10/helptext.c:53 +msgid "" +"To build the Web-of-Trust, GnuPG needs to know which keys are\n" +"ultimately trusted - those are usually the keys for which you have\n" +"access to the secret key. Answer \"yes\" to set this key to\n" +"ultimately trusted\n" +msgstr "" +"Web-of-Trust oluÅŸturulabilmesi için GnuPG'ye hangi anahtarların son derece\n" +"güvenli (bunlar gizli anahtarlarına eriÅŸiminiz olan anahtarlardır) " +"olduÄŸunun\n" +"bildirilmesi gerekir. \"evet\" yanıtı bu anahtarın son derece güvenli\n" +"olduÄŸunun belirtilmesi için yeterlidir.\n" + +#: g10/helptext.c:60 +msgid "If you want to use this revoked key anyway, answer \"yes\"." +msgstr "" +"Bu yürürlükten kaldırılmış anahtarı yine de kullanmak istiyorsanız\n" +"cevap olarak \"evet\" yazın." + +#: g10/helptext.c:64 +msgid "If you want to use this untrusted key anyway, answer \"yes\"." +msgstr "" +"Bu güvencesiz anahtarı yine de kullanmak istiyorsanız cevap olarak\n" +" \"evet\" yazın." + +#: g10/helptext.c:68 +msgid "" +"Enter the user ID of the addressee to whom you want to send the message." +msgstr "Bu iletiyi göndereceÄŸiniz adresin kullanıcı kimliÄŸini giriniz." + +#: g10/helptext.c:72 +msgid "" +"Select the algorithm to use.\n" +"\n" +"DSA (aka DSS) is the digital signature algorithm which can only be used\n" +"for signatures. This is the suggested algorithm because verification of\n" +"DSA signatures are much faster than those of ElGamal.\n" +"\n" +"ElGamal is an algorithm which can be used for signatures and encryption.\n" +"OpenPGP distinguishs between two flavors of this algorithms: an encrypt " +"only\n" +"and a sign+encrypt; actually it is the same, but some parameters must be\n" +"selected in a special way to create a safe key for signatures: this program\n" +"does this but other OpenPGP implementations are not required to understand\n" +"the signature+encryption flavor.\n" +"\n" +"The first (primary) key must always be a key which is capable of signing;\n" +"this is the reason why the encryption only ElGamal key is not available in\n" +"this menu." +msgstr "" +"Kullanılacak algoritmayı seçiniz.\n" +"\n" +"DSA (DSS olarak da bilinir) sadece imzalar için kullanılan bir sayısal\n" +"imza algoritmasıdır. Bu algoritma ElGamal algoritmasından çok daha hızlı\n" +"doÄŸrulandığı için önerilmektedir.\n" +"\n" +"ElGamal imzalar ve ÅŸifreleme için kullanılan bir algoritmadır.\n" +"OpenPGP bu algoritmanın bu iki kullanımını birbirinden ayırır:\n" +"sadece ÅŸifreleme ve imza+ÅŸifreleme; esas olarak aynı gibi görünmekle " +"beraber\n" +"imzalar için kullanılacak anahtarı oluÅŸturacak bazı özel parametrelerin\n" +"seçilmesini gerektirir: bu program bunu yapar ama diÄŸer OpenPGP\n" +"gerçeklemelerinin imza+ÅŸifreleme olayını anlaması gerekmiyorsa kullanmak\n" +"anlamlı olur.\n" +"\n" +"Ä°lk (asıl) anahtar imzalama yeteneÄŸine sahip bir anahtar olmalıdır;\n" +"bu durum, sadece ÅŸifreleme yapabilen ElGamal anahtarlarının neden menüde\n" +"bulunmadığını açıklar." + +#: g10/helptext.c:92 +msgid "" +"Although these keys are defined in RFC2440 they are not suggested\n" +"because they are not supported by all programs and signatures created\n" +"with them are quite large and very slow to verify." +msgstr "" +"Bu anahtarlar tüm programlar tarafından desteklenmediÄŸi için ve\n" +"onlarla oluÅŸturulan imzalar gereÄŸinden büyük ve doÄŸrulanması çok yavaÅŸ\n" +"olduÄŸundan RFC2440 standardında tanımlı olmalarına raÄŸmen tavsiye\n" +"edilmezler." + +#: g10/helptext.c:99 +msgid "Enter the size of the key" +msgstr "Anahtar uzunluÄŸunu giriniz" + +#: g10/helptext.c:103 g10/helptext.c:108 g10/helptext.c:120 g10/helptext.c:152 +#: g10/helptext.c:180 g10/helptext.c:185 g10/helptext.c:190 +msgid "Answer \"yes\" or \"no\"" +msgstr "Cevap \"evet\" ya da \"hayır\"" + +#: g10/helptext.c:113 +msgid "" +"Enter the required value as shown in the prompt.\n" +"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" +"get a good error response - instead the system tries to interpret\n" +"the given value as an interval." +msgstr "" +"Ä°stenen deÄŸeri girin. ISO tarihi (YYYY-AA-GG) girmeniz mümkündür fakat\n" +"iyi bir hata cevabı alamazsınız -- onun yerine sistem verilen deÄŸeri\n" +"bir zaman aralığı olarak çözümlemeyi dener." + +#: g10/helptext.c:125 +msgid "Enter the name of the key holder" +msgstr "Anahtar tutucunun ismini giriniz" + +#: g10/helptext.c:130 +msgid "please enter an optional but highly suggested email address" +msgstr "" +"lütfen bir E-posta adresi girin (isteÄŸe baÄŸlı ancak kuvvetle tavsiye edilir)" + +#: g10/helptext.c:134 +msgid "Please enter an optional comment" +msgstr "Lütfen önbilgi girin (isteÄŸe baÄŸlı)" + +#: g10/helptext.c:139 +msgid "" +"N to change the name.\n" +"C to change the comment.\n" +"E to change the email address.\n" +"O to continue with key generation.\n" +"Q to to quit the key generation." +msgstr "" +"S iSim deÄŸiÅŸtirmek için.\n" +"B önBilgiyi deÄŸiÅŸtirmek için.\n" +"P e-Posta adresini deÄŸiÅŸtirmek için.\n" +"D anahtar üretimine Devam etmek için.\n" +"K anahtar üretiminden çıKmak için." + +#: g10/helptext.c:148 +msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." +msgstr "Yardımcı anahtarı üretmek istiyorsanız \"evet\" ya da \"e\" girin." + +#: g10/helptext.c:156 +msgid "" +"When you sign a user ID on a key, you should first verify that the key\n" +"belongs to the person named in the user ID. It is useful for others to\n" +"know how carefully you verified this.\n" +"\n" +"\"0\" means you make no particular claim as to how carefully you verified " +"the\n" +" key.\n" +"\n" +"\"1\" means you believe the key is owned by the person who claims to own it\n" +" but you could not, or did not verify the key at all. This is useful " +"for\n" +" a \"persona\" verification, where you sign the key of a pseudonymous " +"user.\n" +"\n" +"\"2\" means you did casual verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint and checked the user ID on " +"the\n" +" key against a photo ID.\n" +"\n" +"\"3\" means you did extensive verification of the key. For example, this " +"could\n" +" mean that you verified the key fingerprint with the owner of the key in\n" +" person, and that you checked, by means of a hard to forge document with " +"a\n" +" photo ID (such as a passport) that the name of the key owner matches " +"the\n" +" name in the user ID on the key, and finally that you verified (by " +"exchange\n" +" of email) that the email address on the key belongs to the key owner.\n" +"\n" +"Note that the examples given above for levels 2 and 3 are *only* examples.\n" +"In the end, it is up to you to decide just what \"casual\" and \"extensive" +"\"\n" +"mean to you when you sign other keys.\n" +"\n" +"If you don't know what the right answer is, answer \"0\"." +msgstr "" +"Bir anahtarı bir kullanıcı kimlikle imzalamadan önce kullanıcı kimliÄŸin\n" +"içindeki ismin, anahtarın sahibine ait olup olmadığını kontrol etmelisiniz.\n" +"\n" +"\"0\" bu kontrolu yapmadığınız ve yapmayı da bilmediÄŸiniz anlamındadır.\n" +"\"1\" anahtar size sahibi tarafından gönderildi ama siz bu anahtarı baÅŸka\n" +" kaynaklardan doÄŸrulamadınız anlamındadır. Bu kiÅŸisel doÄŸrulama için\n" +" yeterlidir. En azında yarı anonim bir anahtar imzalaması yapmış\n" +" olursunuz.\n" +"\"2\" ayrıntılı bir inceleme yapıldığı anlamındadır. ÖrneÄŸin parmakizi ve\n" +" bir anahtarın foto kimliÄŸiyle kullanıcı kimliÄŸini karşılaÅŸtırmak\n" +" gibi denetimleri yapmışsınızdır.\n" +"\"3\" inceden inceye bir doÄŸrulama anlatır. ÖrneÄŸin, ÅŸahıstaki anahtarın\n" +" sahibi ile anahtar parmak izini karşılaÅŸtırmışsınızdır ve anahtardaki\n" +" kullanıcı kimlikte belirtilen isme ait bir basılı kimlik belgesindeki\n" +" bir fotoÄŸrafla ÅŸahsı karşılaÅŸtırmışsınızdır ve son olarak anahtar\n" +" sahibinin e-posta adresini kendisinin kullanmakta olduÄŸunu da\n" +" denetlemiÅŸsinizdir.\n" +"Burada 2 ve 3 için verilen örnekler *sadece* örnektir.\n" +"Eninde sonunda bir anahtarı imzalarken \"ayrıntılı\" ve \"inceden inceye\" " +"kontroller arasındaki ayrıma siz karar vereceksiniz.\n" +"Bu kararı verebilecek durumda deÄŸilseniz \"0\" cevabını verin." + +#: g10/helptext.c:194 +msgid "Answer \"yes\" is you want to sign ALL the user IDs" +msgstr "Kullanıcı kimliklerinin TÃœMünü imzalamak istiyorsanız \"evet\" girin" + +#: g10/helptext.c:198 +msgid "" +"Answer \"yes\" if you really want to delete this user ID.\n" +"All certificates are then also lost!" +msgstr "" +"Bu kullanıcı kimliÄŸini gerçekten silmek istiyorsanız \"evet\" girin.\n" +"Böylece bütün sertifikaları kaybedeceksiniz!" + +#: g10/helptext.c:203 +msgid "Answer \"yes\" if it is okay to delete the subkey" +msgstr "Bu yardımcı anahtarı silme izni vermek istiyorsanız \"evet\" girin" + +#: g10/helptext.c:208 +msgid "" +"This is a valid signature on the key; you normally don't want\n" +"to delete this signature because it may be important to establish a\n" +"trust connection to the key or another key certified by this key." +msgstr "" +"Bu, anahtar üzerinde geçerli bir imzadır; anahtara ya da bu anahtarla\n" +"sertifikalanmış bir diÄŸer anahtara bir güvence baÄŸlantısı saÄŸlamakta\n" +"önemli olabileceÄŸinden normalde bu imzayı silmek istemezsiniz." + +#: g10/helptext.c:213 +msgid "" +"This signature can't be checked because you don't have the\n" +"corresponding key. You should postpone its deletion until you\n" +"know which key was used because this signing key might establish\n" +"a trust connection through another already certified key." +msgstr "" +"Bu imza, anahtarına sahip olmadığınızdan, kontrol edilemez. Bu imzanın\n" +"silinmesini hangi anahtarın kullanıldığını bilene kadar\n" +"ertelemelisiniz çünkü bu imzalama anahtarı baÅŸka bir sertifikalı\n" +"anahtar vasıtası ile bir güvence baÄŸlantısı saÄŸlayabilir." + +#: g10/helptext.c:219 +msgid "" +"The signature is not valid. It does make sense to remove it from\n" +"your keyring." +msgstr "Ä°mza geçersiz. Onu anahtar zincirinizden kaldırmak uygun olacak." + +#: g10/helptext.c:223 +msgid "" +"This is a signature which binds the user ID to the key. It is\n" +"usually not a good idea to remove such a signature. Actually\n" +"GnuPG might not be able to use this key anymore. So do this\n" +"only if this self-signature is for some reason not valid and\n" +"a second one is available." +msgstr "" +"Bu imza kullanıcı kimliÄŸini anahtara baÄŸlar. Öz-imzayı silmek hiç iyi\n" +"bir fikir deÄŸil. GnuPG bu anahtarı bir daha hiç kullanamayabilir.\n" +"Bunu sadece, eÄŸer bu öz-imza bazı durumlarda geçerli deÄŸilse ya da\n" +"kullanılabilir bir ikincisi var ise yapın." + +#: g10/helptext.c:231 +msgid "" +"Change the preferences of all user IDs (or just of the selected ones)\n" +"to the current list of preferences. The timestamp of all affected\n" +"self-signatures will be advanced by one second.\n" +msgstr "" +"Tüm kullanıcı kimlik tercihlerini (ya da seçilen birini) mevcut tercihler\n" +"listesine çevirir. Tüm etkilenen öz-imzaların zaman damgaları bir sonraki\n" +"tarafından öne alınacaktır.\n" + +#: g10/helptext.c:238 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Lütfen bir anahtar parolası giriniz; yazdıklarınız görünmeyecek\n" + +#: g10/helptext.c:244 +msgid "Please repeat the last passphrase, so you are sure what you typed in." +msgstr "Lütfen son parolayı tekrarlayarak ne yazdığınızdan emin olun." + +#: g10/helptext.c:248 +msgid "Give the name of the file to which the signature applies" +msgstr "Ä°mzanın uygulanacağı dosyanın ismini verin" + +#: g10/helptext.c:253 +msgid "Answer \"yes\" if it is okay to overwrite the file" +msgstr "Dosyanın üzerine yazılacaksa lütfen \"evet\" yazın" + +#: g10/helptext.c:258 +msgid "" +"Please enter a new filename. If you just hit RETURN the default\n" +"file (which is shown in brackets) will be used." +msgstr "" +"Lütfen yeni dosya ismini girin. Dosya ismini yazmadan RETURN tuÅŸlarsanız\n" +"parantez içinde gösterilen öntanımlı dosya kullanılacak." + +#: g10/helptext.c:264 +msgid "" +"You should specify a reason for the certification. Depending on the\n" +"context you have the ability to choose from this list:\n" +" \"Key has been compromised\"\n" +" Use this if you have a reason to believe that unauthorized persons\n" +" got access to your secret key.\n" +" \"Key is superseded\"\n" +" Use this if you have replaced this key with a newer one.\n" +" \"Key is no longer used\"\n" +" Use this if you have retired this key.\n" +" \"User ID is no longer valid\"\n" +" Use this to state that the user ID should not longer be used;\n" +" this is normally used to mark an email address invalid.\n" +msgstr "" +"Sertifikalama için bir sebep belirtmelisiniz. İçeriÄŸine baÄŸlı olarak\n" +"bu listeden seçebilirsiniz:\n" +" \"Anahtar tehlikede\"\n" +"\tYetkisiz kiÅŸilerin gizli anahtarınıza eriÅŸebildiÄŸine inanıyorsanız\n" +"\tbunu seçin.\n" +" \"Anahtar geçici\"\n" +"\tMevcut anahtarı daha yeni bir anahtar ile deÄŸiÅŸtirmiÅŸseniz bunu seçin.\n" +" \"Anahtar artık kullanılmayacak\"\n" +"\tAnahtarı emekliye ayıracaksanız bunu seçin.\n" +" \"Kullanıcı kimliÄŸi artık geçersiz\"\n" +"\tKullanıcı kimliÄŸi artık kullanılamayacak durumdaysa bunu\n" +"\tseçin; genelde Eposta adresi geçersiz olduÄŸunda kullanılır.\n" + +#: g10/helptext.c:280 +msgid "" +"If you like, you can enter a text describing why you issue this\n" +"revocation certificate. Please keep this text concise.\n" +"An empty line ends the text.\n" +msgstr "" +"Ä°sterseniz, neden bu yürürlükten kaldırma sertifikasını\n" +"verdiÄŸinizi açıklayan bir metin girebilirsiniz.\n" +"Lütfen bu metin kısa olsun. Bir boÅŸ satır metni bitirir.\n" + +#: g10/helptext.c:295 +msgid "No help available" +msgstr "yardım mevcut deÄŸil" + +#: g10/helptext.c:303 +#, c-format +msgid "No help available for `%s'" +msgstr "\"%s\" için yardım mevcut deÄŸil" + +#: g10/keydb.c:177 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "`%s' anahtar zinciri oluÅŸturulurken hata: %s\n" + +#: g10/keydb.c:188 +#, c-format +msgid "changing permission of `%s' failed: %s\n" +msgstr "`%s' izinleri deÄŸiÅŸtirilemedi: %s\n" + +#: g10/keydb.c:197 +#, c-format +msgid "keyring `%s' created\n" +msgstr "`%s' anahtar zinciri oluÅŸturuldu\n" + +#: g10/keydb.c:587 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "anahtar zinciri belleÄŸi yeniden oluÅŸturulurken hata: %s\n" + +#: g10/keyring.c:1235 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "UYARI: gizli bilgi içeren 2 dosya mevcut.\n" + +#: g10/keyring.c:1237 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s deÄŸiÅŸmeyenlerden\n" + +#: g10/keyring.c:1238 +#, c-format +msgid "%s is the new one\n" +msgstr "%s yenilerden\n" + +#: g10/keyring.c:1239 +msgid "Please fix this possible security flaw\n" +msgstr "Lütfen bu güvenlik çatlağını giderin\n" + +#: g10/keyring.c:1337 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "`%s' anahtar zinciri denetleniyor\n" + +#: g10/keyring.c:1368 +#, c-format +msgid "%lu keys so far checked (%lu signatures)\n" +msgstr "ÅŸimdiye dek %lu anahtar denetlendi (%lu imza)\n" + +#: g10/keyring.c:1379 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu anahtar denetlendi (%lu imza)\n" + +#: g10/keyring.c:1441 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: anahtar zinciri oluÅŸturuldu\n" + +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Onu yine de imzalamak istiyor musunuz?\n" + +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr " Onu yine de imzalamak istiyor musunuz?\n" + +#, fuzzy +#~ msgid "Really sign? (y/N) " +#~ msgstr "Gerçekten imzalayacak mısınız? " + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "anahtar %08lX: bizim kopyanın öz-imzası yok\n" + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Bu kadar büyük anahtar uzunluÄŸuna gerçekten ihtiyacınız var mı?" + +#~ msgid " signed by %08lX at %s\n" +#~ msgstr " %08lX tarafından %s de imzalanmış\n" diff --git a/scripts/ChangeLog b/scripts/ChangeLog index 16779ff26..4447ea143 100644 --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,38 +1,159 @@ -Mon Jul 17 16:35:47 CEST 2000 Werner Koch +2002-06-21 Stefan Bellon - * config.gues, config.sub: Support for s390-ibm-linux-gnu; thanks - to Holger Smolinski. Add support for QNX; by Sam Roberts. + * conf-riscos/Makefile: Changes due to moving around RISC OS + specific stuff in the code. -Tue Oct 26 14:10:21 CEST 1999 Werner Koch +2002-06-07 Stefan Bellon + + * conf-riscos/include/config.h [__riscos__]: Fixed macro bug. + +2002-05-10 Stefan Bellon + + * conf-riscos/include/config.h [__riscos__]: Changes for later + Norcroft compilers. + + * conf-riscos/Makefile [__riscos__]: Updated. + +2002-04-22 Stefan Bellon + + * conf-riscos/include/config.h [__riscos__]: Development + versions automatically define DEBUG from now on. + + * conf-riscos/Makefile [__riscos__]: Updated for LDAP keyserver + code. + +2002-04-19 David Shaw + + * gnupg.spec.in: Removed pubring.asc and OPTIONS. Added + samplekeys.asc. + +2002-03-31 David Shaw + + * gnupg.spec.in: Added the gpgkeys_xxx keyserver helpers. Added a + * to catch variations on the basic gpg man page (gpg, gpgv). Mark + options.skel as a config file. Do not include the FAQ/faq.html + twice (in /doc/ and /share/). + +2002-01-02 Stefan Bellon + + * build-riscos [__riscos__]: Set filetype of Makefile correctly. + + * conf-riscos/include/g10defs.h [__riscos__]: Added GNU GPL + header and exec code defines. + + * conf-riscos/include/config.h [__riscos__]: Moved parts to + include/util.h where they really belong to. + + * conf-riscos/Makefile [__riscos__]: Updated for new keyserver, + exec and photo id code. + +2001-12-22 Werner Koch + + * autogen.sh: Fixed last change. + +2001-12-21 Werner Koch + + * distfiles: Removed those files which which automake installs by + default. + + * autogen.sh: Replaced $() by backticks for system without a posix + shell. Removed gawk specific quoting. By David Champion. + +2001-10-22 Werner Koch + + * autogen.sh (aclocal_vers): Require automalke 1.5. + +2001-08-21 Stefan Bellon + + * build-riscos [__riscos__]: New. + * conf-riscos [__riscos__]: Ditto. + +2001-08-13 Werner Koch + + * autogen.sh: Test on gettext 0.10.38. By Michael Engels. + +2001-08-07 Werner Koch + + * autogen.sh: Adjusted --build-w32 for autoconf 2.52 + +2001-07-09 Werner Koch + + * autogen.sh (autoconf_vers): Require autoconf 2.50 + +2001-05-06 Werner Koch + + * config.guess, config.sub: Add updates from subversions.gnu.org. + +2001-04-19 Werner Koch + + * autogen.sh: Add VPATH build support for option --build-w32. + +2001-03-12 Werner Koch + + * config.guess, config.sub: Replaced with the current GNU CVS ones. + +2001-01-18 Werner Koch + + * autogen.sh: New options --build-w32 + * build-w32: Does now call autogen.sh + +2000-11-24 Werner Koch + + * build-w32: New script to build the W32 version. + * distfiles: And put it into the distribution + +Thu Sep 14 17:45:11 CEST 2000 Werner Koch + + * gnupg.spec.in: Updated. + +Wed Sep 6 17:55:47 CEST 2000 Werner Koch + + * config.guess, config.sub: Replaced with the latest version from the + CVS archive. Hope that does not break too much. + +Fri May 12 14:01:20 CEST 2000 Werner Koch + + * gnupg.spec.in: New version from Fabio with some updated descriptions. + +Mon May 1 15:38:04 CEST 2000 Werner Koch + + * gnupg.spec.in: New version from Fabio. + +Fri Mar 17 16:26:05 CET 2000 Werner Koch + + * config.gues, config.sub: Support for s390-ibm-linux-gnu. Thanks + to Holger Smolinski. + +Thu Mar 2 15:37:46 CET 2000 Werner Koch + + * config.guess: Add support for QNX. By Sam Roberts. + * config.sub: Ditto. + +Thu Sep 23 09:49:25 1999 Werner Koch (wk@gnupg.org) * commit: Remove leading and trailing empty lines when copying Changes to Changelog Wed Sep 15 16:22:17 CEST 1999 Werner Koch - * gnupg.spec: Add Portuguese description Thu Sep 2 16:40:55 CEST 1999 Werner Koch - * mkdiff: changed format of diff file name and made script more general. Wed Aug 4 10:34:18 CEST 1999 Werner Koch - * config.guess: Updated from gnu/common and applied my emx patch again. * config.sub: Updated from gnu/common. Wed Jul 14 19:42:08 CEST 1999 Werner Koch - * ltmain.sh, ltconfig.sh : Updated to libtool 1.3.3 Mon Jul 12 14:55:34 CEST 1999 Werner Koch - * autogen.sh: Run libtoolize Sat May 22 22:47:26 CEST 1999 Werner Koch @@ -105,3 +226,15 @@ Wed Oct 14 09:55:25 1998 Werner Koch (wk@isil.d.shuttle.de) * config.guess (FreeBSD): Changes from Jun Kuriyama to support ELF * config.sub: (freebsd): Add to maybe_os + + Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + diff --git a/scripts/autogen.sh b/scripts/autogen.sh index 28ea1ee18..2751a6205 100755 --- a/scripts/autogen.sh +++ b/scripts/autogen.sh @@ -1,13 +1,76 @@ #!/bin/sh # Run this to generate all the initial makefiles, etc. +# +# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. PGM=GnuPG -DIE=no +lib_config_files="" +autoconf_vers=2.52 +automake_vers=1.5 +aclocal_vers=1.5 + + +DIE=no +if test "$1" = "--build-w32"; then + tmp=`dirname $0` + tsdir=`cd "$tmp"; cd ..; pwd` + shift + host=i386--mingw32 + if [ ! -f $tsdir/scripts/config.guess ]; then + echo "$tsdir/scripts/config.guess not found" >&2 + exit 1 + fi + build=`$tsdir/scripts/config.guess` + + if ! mingw32 --version >/dev/null; then + echo "We need at least version 0.3 of MingW32/CPD" >&2 + exit 1 + fi + + if [ -f "$tsdir/config.log" ]; then + if ! head $tsdir/config.log | grep i386--mingw32 >/dev/null; then + echo "Pease run a 'make distclean' first" >&2 + exit 1 + fi + fi + + crossbindir=`mingw32 --install-dir`/bin + CC=`mingw32 --get-path gcc` + CPP=`mingw32 --get-path cpp` + AR=`mingw32 --get-path ar` + RANLIB=`mingw32 --get-path ranlib` + export CC CPP AR RANLIB + + disable_foo_tests="" + if [ -n "$lib_config_files" ]; then + for i in $lib_config_files; do + j=`echo $i | tr '[a-z-]' '[A-Z_]'` + eval "$j=${crossbindir}/$i" + export $j + disable_foo_tests="$disable_foo_tests --disable-`echo $i| \ + sed 's,-config$,,'`-test" + if [ ! -f "${crossbindir}/$i" ]; then + echo "$i not installed for MingW32" >&2 + DIE=yes + fi + done + fi + [ $DIE = yes ] && exit 1 + + $tsdir/configure --build=${build} --host=${host} \ + ${disable_foo_tests} $* + exit $? +fi + -autoconf_vers=2.13 -automake_vers=1.4 -aclocal_vers=1.4 -#libtool_vers=1.3 if (autoconf --version) < /dev/null > /dev/null 2>&1 ; then if (autoconf --version | awk 'NR==1 { if( $3 >= '$autoconf_vers') \ @@ -54,42 +117,23 @@ else fi -if (gettext --version /dev/null | awk 'NR==1 { split($4,A,"\."); \ - X=10000*A[1]+100*A[2]+A[3]; echo X; if( X >= 1035 ) exit 1; exit 0}') +if (gettext --version /dev/null | awk 'NR==1 { split($4,A,"."); \ + X=10000*A[1]+100*A[2]+A[3]; echo X; if( X >= 1038 ) exit 1; exit 0}') then echo "**Error**: You must have "\`gettext\'" installed to compile $PGM." - echo ' (version 0.10.35 or newer is required; get' - echo ' ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz' + echo ' (version 0.10.38 or newer is required; get' + echo ' ftp://alpha.gnu.org/gnu/gettext/gettext-0.10.38.tar.gz' echo ' or install the latest Debian package)' DIE="yes" fi -#if (libtool --version) < /dev/null > /dev/null 2>&1 ; then -# if (libtool --version | awk 'NR==1 { if( $4 >= '$libtool_vers') \ -# exit 1; exit 0; }'); -# then -# echo "**Error**: "\`libtool\'" is too old." -# echo ' (version ' $libtool_vers ' or newer is required)' -# DIE="yes" -# fi -#else -# echo -# echo "**Error**: You must have "\`libtool\'" installed to compile $PGM." -# echo ' (version ' $libtool_vers ' or newer is required)' -# DIE="yes" -#fi - - if test "$DIE" = "yes"; then exit 1 fi echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force -#echo "Running libtoolize... Ignore non-fatal messages." -#echo "no" | libtoolize - echo "Running aclocal..." aclocal diff --git a/scripts/build-riscos b/scripts/build-riscos new file mode 100644 index 000000000..c255a7827 --- /dev/null +++ b/scripts/build-riscos @@ -0,0 +1,11 @@ +| This is an RISC OS Obey file (filetype &feb) that copies handcrafted files +| for the RISC OS version into the correct places. +| It won't run on anything other than RISC OS -- I think ;-) + +copy .conf-riscos.cipher.c.construct .^.cipher.c.construct ~cf~v +copy .conf-riscos.cipher.c.constructv .^.cipher.c.constructv ~cf~v +copy .conf-riscos.include.h.config .^.include.h.config ~cf~v +copy .conf-riscos.include.h.g10defs .^.include.h.g10defs ~cf~v +copy .conf-riscos.Makefile .^.Makefile ~cf~v +settype .^.Makefile &fe1 +echo Done. diff --git a/scripts/build-w32 b/scripts/build-w32 new file mode 100755 index 000000000..9995a4865 --- /dev/null +++ b/scripts/build-w32 @@ -0,0 +1,6 @@ +#!/bin/sh + +exec scripts/autogen.sh --build-w32 + + + diff --git a/scripts/conf-riscos/Makefile b/scripts/conf-riscos/Makefile new file mode 100644 index 000000000..3461fa196 --- /dev/null +++ b/scripts/conf-riscos/Makefile @@ -0,0 +1,465 @@ +# Makefile for the RISC OS version of GnuPG +CC=cc +LINK=link +AS=objasm +MAKE=amu +DEPEND=-depend !Depend +LIBLDAP=^.^.openldap-2/0/18 +CC_FLAGS=-Wp -apcs 3/26bit/fpe2 -throwback -Otime -IUnix:,include,mpi,intl,zlib,$(LIBLDAP).include -JUnix: -D__riscos__ -DHAVE_CONFIG_H -DNO_ASM -UIS_MODULE -DVERSION="\"$(GnuPG$Version)\"" $(GnuPG$DevDefine) +AS_FLAGS=-apcs 3/26bit/fpe2 -throwback -predefine "ARMv4 SETA 0" +LD_FLAGS=Unix:o.unixlib +CIPHER_OBJS=cipher.o.blowfish \ + cipher.o.cast5 \ + cipher.o.cipher \ + cipher.o.construct \ + cipher.o.des \ + cipher.o.dsa \ + cipher.o.dynload \ + cipher.o.elgamal \ + cipher.o.g10c \ + cipher.o.md \ + cipher.o.md5 \ + cipher.o.primegen \ + cipher.o.pubkey \ + cipher.o.random \ + cipher.o.rijndael \ + cipher.o.rmd160 \ + cipher.o.rndriscos \ + cipher.o.rsa \ + cipher.o.sha1 \ + cipher.o.smallprime \ + cipher.o.tiger32 \ + cipher.o.twofish +GETTEXT_OBJS=intl.o.bindtextdom \ + intl.o.dcgettext \ + intl.o.dgettext \ + intl.o.explodename \ + intl.o.finddomain \ + intl.o.gettext \ + intl.o.intl-compat \ + intl.o.l10nflist \ + intl.o.loadmsgcat \ + intl.o.localealias \ + intl.o.textdomain +MPI_OBJS=mpi.o.mpi-add \ + mpi.o.mpi-bit \ + mpi.o.mpi-cmp \ + mpi.o.mpi-div \ + mpi.o.mpi-gcd \ + mpi.o.mpi-inline \ + mpi.o.mpi-inv \ + mpi.o.mpi-mul \ + mpi.o.mpi-pow \ + mpi.o.mpi-mpow \ + mpi.o.mpi-scan \ + mpi.o.mpicoder \ + mpi.o.mpih-div \ + mpi.o.mpih-mul \ + mpi.o.mpiutil \ + mpi.o.g10m \ + mpi.arm.o.mpih +UTIL_OBJS=util.o.argparse \ + util.o.dotlock \ + util.o.errors \ + util.o.fileutil \ + util.o.g10u \ + util.o.http \ + util.o.iobuf \ + util.o.logger \ + util.o.memory \ + util.o.miscutil \ + util.o.secmem \ + util.o.strgutil \ + util.o.ttyio \ + util.o.riscos +ZLIB_OBJS=zlib.o.adler32 \ + zlib.o.compress \ + zlib.o.crc32 \ + zlib.o.deflate \ + zlib.o.infblock \ + zlib.o.infcodes \ + zlib.o.inffast \ + zlib.o.inflate \ + zlib.o.inftrees \ + zlib.o.infutil \ + zlib.o.trees \ + zlib.o.uncompr \ + zlib.o.zutil +G10_OBJS=g10.o.armor \ + g10.o.build-packet \ + g10.o.cipher \ + g10.o.comment \ + g10.o.compress \ + g10.o.dearmor \ + g10.o.decrypt \ + g10.o.delkey \ + g10.o.encode \ + g10.o.encr-data \ + g10.o.exec \ + g10.o.export \ + g10.o.free-packet \ + g10.o.g10 \ + g10.o.getkey \ + g10.o.helptext \ + g10.o.hkp \ + g10.o.import \ + g10.o.kbnode \ + g10.o.keydb \ + g10.o.keyedit \ + g10.o.keygen \ + g10.o.keyid \ + g10.o.keylist \ + g10.o.keyring \ + g10.o.keyserver \ + g10.o.mainproc \ + g10.o.mdfilter \ + g10.o.misc \ + g10.o.mkdtemp \ + g10.o.openfile \ + g10.o.parse-packet \ + g10.o.passphrase \ + g10.o.photoid \ + g10.o.pipemode \ + g10.o.pkclist \ + g10.o.plaintext \ + g10.o.pubkey-enc \ + g10.o.revoke \ + g10.o.seckey-cert \ + g10.o.seskey \ + g10.o.sig-check \ + g10.o.sign \ + g10.o.signal \ + g10.o.skclist \ + g10.o.status \ + g10.o.tdbdump \ + g10.o.tdbio \ + g10.o.textfilter \ + g10.o.trustdb \ + g10.o.verify +GPGV_OBJS=g10.o.armor \ + g10.o.build-packet \ + g10.o.compress \ + g10.o.free-packet \ + g10.o.getkey \ + g10.o.gpgv \ + g10.o.keydb \ + g10.o.keylist \ + g10.o.kbnode \ + g10.o.keyid \ + g10.o.keyring \ + g10.o.mainproc \ + g10.o.mdfilter \ + g10.o.misc \ + g10.o.openfile \ + g10.o.parse-packet \ + g10.o.plaintext \ + g10.o.seskey \ + g10.o.sig-check \ + g10.o.signal \ + g10.o.status \ + g10.o.textfilter \ + g10.o.verify \ + util.o.argparse \ + util.o.errors \ + util.o.fileutil \ + util.o.g10u \ + util.o.iobuf \ + util.o.logger \ + util.o.memory \ + util.o.miscutil \ + util.o.secmem \ + util.o.strgutil \ + util.o.riscos \ + cipher.o.constructv \ + cipher.o.dsa \ + cipher.o.dynload \ + cipher.o.elgamal \ + cipher.o.g10c \ + cipher.o.md \ + cipher.o.pubkey \ + cipher.o.rmd160 \ + cipher.o.rsa \ + mpi.mpi \ + zlib.zlib +GPGKEYS_OBJS=util.o.riscos \ + util.o.strgutil \ + util.o.memory \ + util.o.logger \ + util.o.secmem \ + intl.gettext + +## Rule Patterns ## + +.SUFFIXES: .c .o .s + +.c.o: + $(CC) $(CC_FLAGS) $(DEPEND) -c -o $@ $< + +.s.o: + $(AS) $(AS_FLAGS) $(DEPEND) $< $@ + +# Static dependencies: + +all: + @echo Use one of the following as target: + @echo | dev to build the development version + @echo | dist to build the distribution with all archives + @echo All other targets are internal and shouldn't be used! + +cipher.cipher: $(CIPHER_OBJS) + $(LINK) -aof $(CIPHER_OBJS) -o cipher.cipher + +intl.gettext: $(GETTEXT_OBJS) + $(LINK) -aof $(GETTEXT_OBJS) -o intl.gettext + +mpi.mpi: $(MPI_OBJS) + $(LINK) -aof $(MPI_OBJS) -o mpi.mpi + +tools.gpgsplit: tools.o.gpgsplit util.util intl.gettext zlib.zlib + $(LINK) $(LD_FLAGS) tools.o.gpgsplit util.util intl.gettext zlib.zlib -o tools.gpgsplit + -squeeze tools.gpgsplit + -copy tools.gpgsplit ADFS::A5.$.tmp.!GnuPG.gpgsplit ~CF~V + +keyserver.gpgkeys_ldap: keyserver.o.gpgkeys_ldap $(GPGKEYS_OBJS) $(LIBLDAP).libraries.libldap.libldap + $(LINK) $(LD_FLAGS) keyserver.o.gpgkeys_ldap $(GPGKEYS_OBJS) $(LIBLDAP).libraries.libldap.libldap -o keyserver.gpgkeys_ldap + -squeeze keyserver.gpgkeys_ldap + -copy keyserver.gpgkeys_ldap ADFS::A5.$.tmp.!GnuPG.gpgkeys_ldap ~CF~V + +riscos.jpegview.jpegview: + -dir riscos.jpegview + -$(MAKE) + -back + +util.util: $(UTIL_OBJS) + $(LINK) -aof $(UTIL_OBJS) -o util.util + +zlib.zlib: $(ZLIB_OBJS) + $(LINK) -aof zlib.o.* -o zlib.zlib + +g10.gpg: $(G10_OBJS) cipher.o.idea cipher.cipher intl.gettext mpi.mpi util.util zlib.zlib BUILD + $(LINK) $(G10_OBJS) $(LD_FLAGS) cipher.o.idea cipher.cipher intl.gettext mpi.mpi util.util zlib.zlib -o g10.gpg + -copy g10.gpg ADFS::A5.$.tmp.!GnuPG.gpg ~CFR~V + +g10.gpgv: $(GPGV_OBJS) intl.gettext BUILD + $(LINK) $(GPGV_OBJS) intl.gettext $(LD_FLAGS) -o g10.gpgv + -copy g10.gpgv ADFS::A5.$.tmp.!GnuPG.gpgv ~CFR~V + +g10.gpgpart: $(G10_OBJS) cipher.cipher intl.gettext mpi.mpi util.util zlib.zlib BUILD + drlink034 -aof $(G10_OBJS) $(LD_FLAGS) cipher.cipher intl.gettext mpi.mpi util.util zlib.zlib -o g10.gpgpart + +select-idea-src: + -copy distrib.idea-addon.cipher.c.idea cipher.c.idea ~CF~NR~V + $(CC) $(CC_FLAGS) $(DEPEND) -c -o cipher.o.idea cipher.c.idea + +select-gpl-src: + -copy distrib.non-idea.cipher.c.idea cipher.c.idea ~CF~NR~V + $(CC) $(CC_FLAGS) $(DEPEND) -c -o cipher.o.idea cipher.c.idea + +distrib.gnupgsrc/zip: select-gpl-src + -zip -9@ distrib.gnupgsrc/zip < distrib.resources.distfiles + +distrib.gnupg/zip: distrib.gpl-bin.!GnuPG.JPEGview distrib.gpl-bin.!GnuPG.gpgsplit distrib.gpl-bin.!GnuPG.gpg distrib.gpl-bin.!GnuPG.gpgv select-gpl-src + -copy distrib.resources.History distrib.gpl-bin.History ~CFR~V + -copy distrib.resources.Upgrading distrib.gpl-bin.Upgrading ~CFR~V + -copy distrib.resources.ReadMe_bin distrib.gpl-bin.!ReadMe1st ~CFR~V + -copy distrib.resources.!GnuPG distrib.gpl-bin.!GnuPG ~CFR~V + -copy distrib.resources.!GnuPGUser distrib.gpl-bin.!GnuPGUser ~CFR~V + -copy distrib.resources.!System distrib.gpl-bin.!System ~CFR~V + -copy distrib.resources.orig_docs distrib.gpl-bin.orig_docs ~CFR~V + -dir distrib.gpl-bin + -zip -r9 ^.gnupg/zip * + -back + +distrib.gnupgdev/zip: distrib.private.!GnuPG.JPEGview distrib.private.!GnuPG.gpgsplit distrib.private.!GnuPG.gpgkeys_ldap distrib.private.!GnuPG.gpg distrib.private.!GnuPG.gpgv select-idea-src + -ifthere distrib.private.!GnuPG.locale then wipe distrib.private.!GnuPG.locale ~CFR~V + -copy distrib.intl.!GnuPG.locale distrib.private.!GnuPG.locale ~CFR~V + -copy distrib.resources.History distrib.private.History ~CFR~V + -copy distrib.resources.Upgrading distrib.private.Upgrading ~CFR~V + -copy distrib.resources.ReadMe_bin distrib.private.!ReadMe1st ~CFR~V + -copy distrib.resources.!GnuPG distrib.private.!GnuPG ~CFR~V + -copy distrib.resources.!GnuPGUser distrib.private.!GnuPGUser ~CFR~V + -copy distrib.resources.!System distrib.private.!System ~CFR~V + -copy distrib.resources.orig_docs distrib.private.orig_docs ~CFR~V + -dir distrib.private + -zip -r9 ^.gnupgdev/zip * + -back + +distrib.gnupgidea/zip: cipher.o.idea select-idea-src + -copy distrib.resources.ReadMe_idea distrib.idea-addon.!ReadMe ~CFR~V + -copy cipher.o.idea distrib.idea-addon.cipher.o.idea ~CFR~V + -dir distrib.idea-addon + -zip -r9 ^.gnupgidea/zip * + -back + +distrib.gnupgpart/zip: g10.gpgpart select-idea-src + -copy distrib.resources.ReadMe_part distrib.part.!ReadMe1st ~CFR~V + -copy g10.gpgpart distrib.part.g10.gpgpart ~CFR~V + -dir distrib.part + -zip -r9 ^.gnupgpart/zip * + -back + +distrib.gnupgldap/zip: keyserver.gpgkeys_ldap + -copy distrib.resources.ReadMe_ldap distrib.ldap.!ReadMe ~CFR~V + -copy keyserver.gpgkeys_ldap distrib.ldap.!GnuPG.gpgkeys_ldap ~CFR~V + -dir distrib.ldap + -zip -r9 ^.gnupgldap/zip * + -back + +distrib.gnupgintl/zip: + -dir distrib.intl + -zip -r9 ^.gnupgintl/zip * + -back + +distrib.gpl-bin.!GnuPG.gpg: g10.gpg + -copy g10.gpg distrib.gpl-bin.!GnuPG.gpg ~CFR~V + -squeeze distrib.gpl-bin.!GnuPG.gpg + +distrib.gpl-bin.!GnuPG.gpgv: g10.gpgv + -copy g10.gpgv distrib.gpl-bin.!GnuPG.gpgv ~CFR~V + -squeeze distrib.gpl-bin.!GnuPG.gpgv + +distrib.gpl-bin.!GnuPG.gpgsplit: tools.gpgsplit + -copy tools.gpgsplit distrib.gpl-bin.!GnuPG.gpgsplit ~CFR~V + -squeeze distrib.gpl-bin.!GnuPG.gpgsplit + +distrib.gpl-bin.!GnuPG.JPEGview: riscos.jpegview.jpegview + -copy riscos.jpegview.jpegview distrib.gpl-bin.!GnuPG.JPEGview ~CFR~V + +distrib.private.!GnuPG.gpg: g10.gpg + -copy g10.gpg distrib.private.!GnuPG.gpg ~CFR~V + -squeeze distrib.private.!GnuPG.gpg + +distrib.private.!GnuPG.gpgv: g10.gpgv + -copy g10.gpgv distrib.private.!GnuPG.gpgv ~CFR~V + -squeeze distrib.private.!GnuPG.gpgv + +distrib.private.!GnuPG.gpgsplit: tools.gpgsplit + -copy tools.gpgsplit distrib.private.!GnuPG.gpgsplit ~CFR~V + -squeeze distrib.private.!GnuPG.gpgsplit + +distrib.private.!GnuPG.gpgkeys_ldap: keyserver.gpgkeys_ldap + -copy keyserver.gpgkeys_ldap distrib.private.!GnuPG.gpgkeys_ldap ~CFR~V + -squeeze distrib.private.!GnuPG.gpgkeys_ldap + +distrib.private.!GnuPG.JPEGview: riscos.jpegview.jpegview + -copy riscos.jpegview.jpegview distrib.private.!GnuPG.JPEGview ~CFR~V + +clean-cipher: + -ifthere cipher.o.* then wipe cipher.o.* ~CFR~V + -ifthere cipher.cipher then wipe cipher.cipher ~CFR~V + +clean-intl: + -ifthere intl.o.* then wipe intl.o.* ~CFR~V + -ifthere intl.gettext then wipe intl.gettext ~CFR~V + +clean-mpi: + -ifthere mpi.o.* then wipe mpi.o.* ~CFR~V + -ifthere mpi.arm.o.* then wipe mpi.arm.o.* ~CFR~V + -ifthere mpi.mpi then wipe mpi.mpi ~CFR~V + +clean-util: + -ifthere util.o.* then wipe util.o.* ~CFR~V + -ifthere util.util then wipe util.util ~CFR~V + +clean-zlib: + -ifthere zlib.o.* then wipe zlib.o.* ~CFR~V + -ifthere zlib.zlib then wipe zlib.zlib ~CFR~V + +clean-dist: + -ifthere distrib.*/zip then wipe distrib.*/zip ~CFR~V + +clean-g10: + -ifthere g10.gpg then wipe g10.gpg ~CFR~V + -ifthere g10.gpgv then wipe g10.gpgv ~CFR~V + -ifthere g10.gpgpart then wipe g10.gpgpart ~CFR~V + -ifthere g10.o.* then wipe g10.o.* ~CFR~V + +clean-keyserver: + -ifthere keyserver.gpgkeys_* then wipe keyserver.gpgkeys_* ~CFR~V + -ifthere keyserver.o.* then wipe keyserver.o.* ~CFR~V + +clean-tools: + -ifthere tools.gpgsplit then wipe tools.gpgsplit ~CFR~V + -ifthere tools.o.* then wipe tools.o.* ~CFR~V + +clean-riscos: + -ifthere riscos.jpegview.jpegview then wipe riscos.jpegview.jpegview ~CFR~V + +clean-version: + -ifthere g10.o.armor then wipe g10.o.armor ~CFR~V + -ifthere g10.o.encode then wipe g10.o.encode ~CFR~V + -ifthere g10.o.g10 then wipe g10.o.g10 ~CFR~V + -ifthere g10.o.gpgv then wipe g10.o.gpgv ~CFR~V + -ifthere g10.o.keygen then wipe g10.o.keygen ~CFR~V + -ifthere g10.o.sign then wipe g10.o.sign ~CFR~V + -ifthere g10.gpg then wipe g10.gpg ~CFR~V + -ifthere g10.gpgv then wipe g10.gpgv ~CFR~V + -ifthere g10.gpgpart then wipe g10.gpgpart ~CFR~V + +clean: clean-dist clean-cipher clean-intl clean-mpi clean-util clean-zlib clean-g10 clean-keyserver clean-tools clean-riscos + +g10.o.armor: BUILD + $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.armor g10.c.armor + +g10.o.encode: BUILD + $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.encode g10.c.encode + +g10.o.g10: BUILD + $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.g10 g10.c.g10 + +g10.o.gpgv: BUILD + $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.gpgv g10.c.gpgv + +g10.o.keygen: BUILD + $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.keygen g10.c.keygen + +g10.o.sign: BUILD + $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.sign g10.c.sign + +dev: clean-version + $(MAKE) fast-dev + +fast-dev: BUILD + setver configure/ac AC_INIT(gnupg, , dev + wipe distrib.private.!GnuPG.gpg* ~CFR~V + -$(MAKE) keyserver.gpgkeys_ldap + $(MAKE) tools.gpgsplit + $(MAKE) distrib.gnupgdev/zip + ifthere .private.gnupgdev/zip then wipe .private.gnupgdev/zip ~CFR~V + rename distrib.gnupgdev/zip .private.gnupgdev/zip + +dist: BUILD clean-version tools.gpgsplit + setver configure/ac AC_INIT(gnupg, , dist + wipe distrib.gpl-bin.!GnuPG.gpg* ~CFR~V + $(MAKE) distrib.gnupg/zip + $(MAKE) distrib.gnupgidea/zip + $(MAKE) distrib.gnupgpart/zip + wipe distrib.private.!GnuPG.gpg* ~CFR~V + $(MAKE) distrib.gnupgdev/zip + $(MAKE) distrib.gnupgsrc/zip + $(MAKE) distrib.gnupgintl/zip + $(MAKE) distrib.gnupgldap/zip + $(MAKE) select-idea-src + ifthere .archives.gnupg/zip then wipe .archives.gnupg/zip ~CFR~V + ifthere .private.gnupgdev/zip then wipe .private.gnupgdev/zip ~CFR~V + ifthere .archives.gnupgidea/zip then wipe .archives.gnupgidea/zip ~CFR~V + ifthere .archives.gnupgpart/zip then wipe .archives.gnupgpart/zip ~CFR~V + ifthere .archives.gnupgsrc/zip then wipe .archives.gnupgsrc/zip ~CFR~V + ifthere .archives.gnupgintl/zip then wipe .archives.gnupgintl/zip ~CFR~V + ifthere .archives.gnupgldap/zip then wipe .archives.gnupgldap/zip ~CFR~V + ifthere .gnupg_history/txt then wipe .gnupg_history/txt ~CFR~V + ifthere .gnupg_news/txt then wipe .gnupg_news/txt ~CFR~V + rename distrib.gnupgdev/zip .private.gnupgdev/zip + rename distrib.gnupg/zip .archives.gnupg/zip + rename distrib.gnupgidea/zip .archives.gnupgidea/zip + rename distrib.gnupgpart/zip .archives.gnupgpart/zip + rename distrib.gnupgsrc/zip .archives.gnupgsrc/zip + rename distrib.gnupgintl/zip .archives.gnupgintl/zip + rename distrib.gnupgldap/zip .archives.gnupgldap/zip + copy distrib.resources.History .gnupg_history/txt ~CFR~V + copy distrib.resources.orig_docs.NEWS .gnupg_news/txt ~CFR~V + unset GnuPG$DevDefine + unset GnuPG$Version + updatesigs .archives --secring adfs::ap.$.secring/gpg + +# Dynamic dependencies: diff --git a/scripts/conf-riscos/cipher/construct.c b/scripts/conf-riscos/cipher/construct.c new file mode 100644 index 000000000..122d740e8 --- /dev/null +++ b/scripts/conf-riscos/cipher/construct.c @@ -0,0 +1,38 @@ +/* construct.c - RISC OS constructors for cipher algorithms + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +void rndriscos_constructor(void); +void sha1_constructor(void); +void rmd160_constructor(void); +void md5_constructor(void); + +void +cipher_modules_constructor(void) +{ + static int done = 0; + if( done ) + return; + done = 1; + + rndriscos_constructor(); + sha1_constructor(); + rmd160_constructor(); + md5_constructor(); +} diff --git a/scripts/conf-riscos/cipher/constructv.c b/scripts/conf-riscos/cipher/constructv.c new file mode 100644 index 000000000..cb50bfff8 --- /dev/null +++ b/scripts/conf-riscos/cipher/constructv.c @@ -0,0 +1,32 @@ +/* constructv.c - RISC OS constructors for cipher algorithms (gpgv version) + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +void rmd160_constructor(void); + +void +cipher_modules_constructor(void) +{ + static int done = 0; + if( done ) + return; + done = 1; + + rmd160_constructor(); +} diff --git a/scripts/conf-riscos/include/config.h b/scripts/conf-riscos/include/config.h new file mode 100644 index 000000000..6a3440235 --- /dev/null +++ b/scripts/conf-riscos/include/config.h @@ -0,0 +1,384 @@ +/* config.h - hand edited by Stefan Bellon to suit RISC OS needs + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GNUPG. + * + * GNUPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GNUPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ifndef G10_CONFIG_H +#define G10_CONFIG_H + +/* need this, because some autoconf tests rely on this (e.g. stpcpy) + * and it should be used for new programs + */ +#define _GNU_SOURCE 1 + + +/* Define if using alloca.c. */ +#undef C_ALLOCA + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define if you have alloca, as a function or macro. */ +/* #undef HAVE_ALLOCA */ +#define HAVE_ALLOCA + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ +#define HAVE_ALLOCA_H + +/* #undef _LIBC */ + +/* Define if you don't have vprintf but do have _doprnt. */ +#undef HAVE_DOPRNT + +/* Define if you have the vprintf function. */ +#define HAVE_VPRINTF + +/* Define to `long' if doesn't define. */ +#undef off_t + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define to `unsigned' if doesn't define. */ +#define size_t unsigned int + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +#undef STACK_DIRECTION + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS + +/* Define if `sys_siglist' is declared by . */ +#define SYS_SIGLIST_DECLARED + +#undef M_DEBUG +#undef M_GUARD +#define PRINTABLE_OS_NAME "RISC OS" + +/* Define if your locale.h file contains LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define to 1 if NLS is requested. */ +#define ENABLE_NLS 1 + +/* Define as 1 if you have catgets and don't want to use GNU gettext. */ +#undef HAVE_CATGETS + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +#undef HAVE_GETTEXT + +#undef BIG_ENDIAN_HOST +#define LITTLE_ENDIAN_HOST 1 + +#undef HAVE_BYTE_TYPEDEF +#undef HAVE_USHORT_TYPEDEF +#undef HAVE_ULONG_TYPEDEF +#undef HAVE_U16_TYPEDEF +#undef HAVE_U32_TYPEDEF + +#undef HAVE_BROKEN_MLOCK + +/* defined if we have a /dev/random and /dev/urandom */ +#undef HAVE_DEV_RANDOM +/* and the real names of the random devices */ +#undef NAME_OF_DEV_RANDOM +#undef NAME_OF_DEV_URANDOM +/* Linux has an ioctl */ +#undef HAVE_DEV_RANDOM_IOCTL + +/* see cipher/rndegd.c */ +#undef EGD_SOCKET_NAME + +#undef USE_DYNAMIC_LINKING +#undef HAVE_DL_DLOPEN +#undef HAVE_DL_SHL_LOAD +#undef HAVE_DLD_DLD_LINK + +#undef USE_SHM_COPROCESSING + +#undef IPC_HAVE_SHM_LOCK +#undef IPC_RMID_DEFERRED_RELEASE + +/* set this to limit filenames to the 8.3 format */ +#undef USE_ONLY_8DOT3 +/* defined if we must run on a stupid file system */ +#undef HAVE_DRIVE_LETTERS +/* defined if we run on some of the PCDOS like systems (DOS, Windoze. OS/2) + * with special properties like no file modes */ +#undef HAVE_DOSISH_SYSTEM +/* because the Unix gettext has to much overhead on MingW32 systems + * and these systems lack Posix functions, we use a simplified version + * of gettext */ +#undef USE_SIMPLE_GETTEXT +/* At some point in the system we need to know that we use the Windows + * random module. */ +#undef USE_STATIC_RNDW32 + +#undef USE_CAPABILITIES + +/* Some systems have mkdir that takes a single argument. */ +#undef MKDIR_TAKES_ONE_ARG + +/* The number of bytes in a unsigned int. */ +#define SIZEOF_UNSIGNED_INT 4 + +/* The number of bytes in a unsigned long. */ +#define SIZEOF_UNSIGNED_LONG 4 + +/* The number of bytes in a unsigned long long. */ +#define SIZEOF_UNSIGNED_LONG_LONG 0 + +/* The number of bytes in a unsigned short. */ +#define SIZEOF_UNSIGNED_SHORT 2 + +/* Define if you have the __argz_count function. */ +#undef HAVE___ARGZ_COUNT + +/* Define if you have the __argz_next function. */ +#undef HAVE___ARGZ_NEXT + +/* Define if you have the __argz_stringify function. */ +#undef HAVE___ARGZ_STRINGIFY + +/* Define if you have the atexit function. */ +#define HAVE_ATEXIT + +/* Define if you have the clock_gettime function. */ +#undef HAVE_CLOCK_GETTIME + +/* Define if you have the dcgettext function. */ +#undef HAVE_DCGETTEXT + +/* Define if you have the dlopen function. */ +#undef HAVE_DLOPEN + +/* Define if you have the fopen64 function. */ +#undef HAVE_FOPEN64 + +/* Define if you have the fstat64 function. */ +#undef HAVE_FSTAT64 + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD + +/* Define if you have the gethrtime function. */ +#undef HAVE_GETHRTIME + +/* Define if you have the getpagesize function. */ +#define HAVE_GETPAGESIZE + +/* Define if you have the getrusage function. */ +#define HAVE_GETRUSAGE + +/* Define if you have the gettimeofday function. */ +#define HAVE_GETTIMEOFDAY + +/* Define if you have the memicmp function. */ +#undef HAVE_MEMICMP + +/* Define if you have the memmove function. */ +#define HAVE_MEMMOVE + +/* Define if you have the mlock function. */ +#undef HAVE_MLOCK + +/* Define if you have the mmap function. */ +#undef HAVE_MMAP + +/* Define if you have the munmap function. */ +#undef HAVE_MUNMAP + +/* Define if you have the nl_langinfo function. */ +#undef HAVE_NL_LANGINFO + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV + +/* Define if you have the raise function. */ +#define HAVE_RAISE + +/* Define if you have the rand function. */ +#define HAVE_RAND + +/* Define if you have the setenv function. */ +#define HAVE_SETENV + +/* Define if you have the setlocale function. */ +#define HAVE_SETLOCALE + +/* Define if you have the setrlimit function. */ +#define HAVE_SETRLIMIT + +/* Define if you have the sigaction function. */ +#define HAVE_SIGACTION + +/* Define if you have the sigprocmask function. */ +#define HAVE_SIGPROCMASK + +/* Define if you have the stpcpy function. */ +#define HAVE_STPCPY + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP + +/* Define if you have the strchr function. */ +#define HAVE_STRCHR + +/* Define if you have the strdup function. */ +#define HAVE_STRDUP + +/* Define if you have the strerror function. */ +#define HAVE_STRERROR + +/* Define if you have the strftime function. */ +#define HAVE_STRFTIME + +/* Define if you have the stricmp function. */ +#define HAVE_STRICMP + +/* Define if you have the strlwr function. */ +#undef HAVE_STRLWR + +/* Define if you have the strtoul function. */ +#define HAVE_STRTOUL + +/* Define if you have the tcgetattr function. */ +#define HAVE_TCGETATTR + +/* Define if you have the wait4 function. */ +#define HAVE_WAIT4 + +/* Define if you have the waitpid function. */ +#define HAVE_WAITPID + +/* Define if you have the header file. */ +#undef HAVE_ARGZ_H + +/* Define if you have the header file. */ +#undef HAVE_DIRECT_H + +/* Define if you have the header file. */ +#undef HAVE_GDBM_H + +/* Define if you have the header file. */ +#undef HAVE_LANGINFO_H + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H + +/* Define if you have the header file. */ +#undef HAVE_LINUX_RANDOM_H + +/* Define if you have the header file. */ +#define HAVE_LOCALE_H + +/* Define if you have the header file. */ +#define HAVE_MALLOC_H + +/* Define if you have the header file. */ +#undef HAVE_NL_TYPES_H + +/* Define if you have the header file. */ +#define HAVE_STRING_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_CAPABILITY_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_IPC_H + +/* Define if you have the header file. */ +#define HAVE_SYS_MMAN_H + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SHM_H + +/* Define if you have the header file. */ +#define HAVE_SYS_STAT_H + +/* Define if you have the header file. */ +#define HAVE_TERMIO_H + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H + +/* Define if you have the header file. */ +#define HAVE_ZLIB_H + +/* Define if you have the dl library (-ldl). */ +#undef HAVE_LIBDL + +/* Define if you have the dld library (-ldld). */ +#undef HAVE_LIBDLD + +/* Define if you have the gdbm library (-lgdbm). */ +#undef HAVE_LIBGDBM + +/* Define if you have the i library (-li). */ +#undef HAVE_LIBI + +/* Define if you have the nsl library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define if you have the rt library (-lrt). */ +#undef HAVE_LIBRT + +/* Name of package */ +#define PACKAGE "GnuPG" + + +/* define if compiled symbols have a leading underscore */ +#define WITH_SYMBOL_UNDERSCORE + +#ifdef IS_DEVELOPMENT_VERSION + #define DEBUG +/* #define M_DEBUG */ + #define M_GUARD +#endif + + +/* RISC OS specifica */ +#if (__CC_NORCROFT == 1) /* Norcroft */ +# define __attribute__(x) +# if (__CC_NORCROFT_VERSION < 544) /* old version of Norcroft */ +# define inline __inline +# define STR(a) #a +# define __func__ "[" __FILE__ ":" STR(__LINE__) "]" +# endif +#else /* gcc */ +#endif + +#include "g10defs.h" + +#endif /*G10_CONFIG_H*/ diff --git a/scripts/conf-riscos/include/g10defs.h b/scripts/conf-riscos/include/g10defs.h new file mode 100644 index 000000000..a02dff42a --- /dev/null +++ b/scripts/conf-riscos/include/g10defs.h @@ -0,0 +1,41 @@ +/* g10defs.h - hand edited by Stefan Bellon to suit RISC OS needs + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GNUPG. + * + * GNUPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GNUPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* Path variables and filing system constants for RISC OS */ +#define G10_LOCALEDIR ".locale" +#define GNUPG_LIBDIR "" +#define GNUPG_DATADIR "" +#define GNUPG_HOMEDIR "" +#define LOCALE_ALIAS_PATH ".locale" +#define GNULOCALEDIR ".locale" +#define DIRSEP_C '.' +#define EXTSEP_C '/' +#define DIRSEP_S "." +#define EXTSEP_S "/" + +/* This file defines some basic constants for the MPI machinery. We + * need to define the types on a per-CPU basis, so it is done with + * this file here. */ +#define BYTES_PER_MPI_LIMB (SIZEOF_UNSIGNED_LONG) + +/* External process spawning mechanism */ +#if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID)) +#define EXEC_TEMPFILE_ONLY +#endif diff --git a/scripts/config.guess b/scripts/config.guess index 50fd53e39..dff9e481b 100755 --- a/scripts/config.guess +++ b/scripts/config.guess @@ -1,8 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. -# + +timestamp='2001-09-04' + # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or @@ -10,7 +12,7 @@ # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License @@ -23,53 +25,152 @@ # the same distribution terms that you use for the rest of that program. # Written by Per Bothner . -# The master version of this file is at the FSF in /home/gd/gnu/lib. -# Please send patches to the Autoconf mailing list . +# Please send patches to . # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you -# don't specify an explicit system type (host/target name). -# -# Only a few systems have been added to this list; please add others -# (but try to keep the structure clean). -# +# don't specify an explicit build system type. -# Use $HOST_CC if defined. $CC may point to a cross-compiler -if test x"$CC_FOR_BUILD" = x; then - if test x"$HOST_CC" != x; then - CC_FOR_BUILD="$HOST_CC" - else - if test x"$CC" != x; then - CC_FOR_BUILD="$CC" - else - CC_FOR_BUILD=cc - fi - fi +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 fi +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int dummy(){}" > $dummy.c ; + for c in cc gcc c89 ; do + ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; + if test $? = 0 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + rm -f $dummy.c $dummy.o $dummy.rel ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac' + # This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 8/24/94.) +# (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 - # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:QNX:*:*) - echo i386-pc-qnx + *:NetBSD:*:*) + # Netbsd (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # Determine the machine/vendor (is the vendor relevant). + case "${UNAME_MACHINE}" in + amiga) machine=m68k-unknown ;; + arm32) machine=arm-unknown ;; + atari*) machine=m68k-atari ;; + sun3*) machine=m68k-sun ;; + mac68k) machine=m68k-apple ;; + macppc) machine=powerpc-apple ;; + hp3[0-9][05]) machine=m68k-hp ;; + ibmrt|romp-ibm) machine=romp-ibm ;; + *) machine=${UNAME_MACHINE}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE}" in + i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then @@ -80,41 +181,55 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text .globl main + .align 4 .ent main main: - .frame \$30,0,\$26,0 - .prologue 0 - .long 0x47e03d80 # implver $0 - lda \$2,259 - .long 0x47e20c21 # amask $2,$1 - srl \$1,8,\$2 - sll \$2,2,\$2 - sll \$0,3,\$0 - addl \$1,\$0,\$0 - addl \$2,\$0,\$0 - ret \$31,(\$26),1 + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit .end main EOF + eval $set_cc_for_build $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then - ./$dummy - case "$?" in - 7) + case `./$dummy` in + 0-0) UNAME_MACHINE="alpha" ;; - 15) + 1-0) UNAME_MACHINE="alphaev5" ;; - 14) + 1-1) UNAME_MACHINE="alphaev56" ;; - 10) + 1-101) UNAME_MACHINE="alphapca56" ;; - 16) + 2-303) UNAME_MACHINE="alphaev6" ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; esac fi rm -f $dummy.s $dummy @@ -130,11 +245,8 @@ EOF echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-cbm-sysv4 + echo m68k-unknown-sysv4 exit 0;; - amiga:NetBSD:*:*) - echo m68k-cbm-netbsd${UNAME_RELEASE} - exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; @@ -159,13 +271,13 @@ EOF wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; - arm32:NetBSD:*:*) - echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - SR2?01:HI-UX/MPP:*:*) + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) @@ -221,8 +333,8 @@ EOF aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; - atari*:NetBSD:*:*) - echo m68k-atari-netbsd${UNAME_RELEASE} + sparc*:NetBSD:*) + echo `uname -p`-unknown-netbsd${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} @@ -236,32 +348,26 @@ EOF # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - sun3*:NetBSD:*:*) - echo m68k-sun-netbsd${UNAME_RELEASE} - exit 0 ;; + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - mac68k:NetBSD:*:*) - echo m68k-apple-netbsd${UNAME_RELEASE} - exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; @@ -274,9 +380,6 @@ EOF powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; - macppc:NetBSD:*:*) - echo powerpc-apple-netbsd${UNAME_RELEASE} - exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; @@ -290,8 +393,10 @@ EOF echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) - sed 's/^ //' << EOF >$dummy.c + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus +#include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { @@ -312,10 +417,13 @@ EOF EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm $dummy.c $dummy && exit 0 + && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; @@ -329,19 +437,22 @@ EOF echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ - -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then echo m88k-dg-dgux${UNAME_RELEASE} - else + else echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} fi - else echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) @@ -359,13 +470,22 @@ EOF exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i?86:AIX:*:*) + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - sed 's/^ //' << EOF >$dummy.c + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c #include main() @@ -376,7 +496,7 @@ EOF exit(0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then @@ -385,9 +505,9 @@ EOF echo rs6000-ibm-aix3.2 fi exit 0 ;; - *:AIX:*:4) + *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` - if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -395,7 +515,7 @@ EOF if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=4.${UNAME_RELEASE} + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; @@ -405,9 +525,9 @@ EOF ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 + exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; @@ -421,49 +541,76 @@ EOF echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - sed 's/^ //' << EOF >$dummy.c - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - ($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` - rm -f $dummy.c $dummy - esac HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + case "${HPUX_REV}" in + 11.[0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + esac ;; + esac + fi ;; + esac + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy + fi ;; + esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; 3050*:HI-UX:*:*) - sed 's/^ //' << EOF >$dummy.c + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c #include int main () @@ -471,7 +618,7 @@ EOF long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ + results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) @@ -488,7 +635,7 @@ EOF exit (0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; @@ -498,7 +645,7 @@ EOF 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; - *9??*:MPE/iX:*:*) + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) @@ -507,7 +654,7 @@ EOF hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; - i?86:OSF1:*:*) + i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else @@ -522,57 +669,59 @@ EOF exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit 0 ;; + exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit 0 ;; + exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit 0 ;; + exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit 0 ;; + exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos - exit 0 ;; + exit 0 ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3D:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) - echo t3e-cray-unicosmk${UNAME_RELEASE} + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos - exit 0 ;; - F300:UNIX_System_V:*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - F301:UNIX_System_V:*:*) - echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` - exit 0 ;; - hp3[0-9][05]:NetBSD:*:*) - echo m68k-hp-netbsd${UNAME_RELEASE} - exit 0 ;; + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - i?86:BSD/386:*:* | i?86:BSD/OS:*:*) + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) @@ -582,17 +731,8 @@ EOF echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) - if test -x /usr/bin/objformat; then - if test "elf" = "`/usr/bin/objformat`"; then - echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` - exit 0 - fi - fi echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; - *:NetBSD:*:*) - echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; @@ -602,6 +742,9 @@ EOF i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -620,150 +763,99 @@ EOF *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; - *:Linux:*:*) - # uname on the ARM produces all sorts of strangeness, and we need to - # filter it out. - case "$UNAME_MACHINE" in - armv*) UNAME_MACHINE=$UNAME_MACHINE ;; - arm* | sa110*) UNAME_MACHINE="arm" ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in + big) echo mips-unknown-linux-gnu && exit 0 ;; + little) echo mipsel-unknown-linux-gnu && exit 0 ;; esac - + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. - ld_help_string=`cd /; ld --help 2>&1` - ld_supported_emulations=`echo $ld_help_string \ - | sed -ne '/supported emulations:/!d - s/[ ][ ]*/ /g - s/.*supported emulations: *// + ld_supported_targets=`cd /; ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// s/ .*// p'` - case "$ld_supported_emulations" in - i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; - i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; - sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - elf_s390) echo "${UNAME_MACHINE}-ibm-linux-gnu" ; exit 0 ;; - elf32ppc) - # Determine Lib Version - cat >$dummy.c < -#if defined(__GLIBC__) -extern char __libc_version[]; -extern char __libc_release[]; -#endif -main(argc, argv) - int argc; - char *argv[]; -{ -#if defined(__GLIBC__) - printf("%s %s\n", __libc_version, __libc_release); -#else - printf("unkown\n"); -#endif - return 0; -} -EOF - LIBC="" - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null - if test "$?" = 0 ; then - ./$dummy | grep 1\.99 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.c $dummy - echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;; + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; esac - - if test "${UNAME_MACHINE}" = "alpha" ; then - sed 's/^ //' <$dummy.s - .globl main - .ent main - main: - .frame \$30,0,\$26,0 - .prologue 0 - .long 0x47e03d80 # implver $0 - lda \$2,259 - .long 0x47e20c21 # amask $2,$1 - srl \$1,8,\$2 - sll \$2,2,\$2 - sll \$0,3,\$0 - addl \$1,\$0,\$0 - addl \$2,\$0,\$0 - ret \$31,(\$26),1 - .end main -EOF - LIBC="" - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - ./$dummy - case "$?" in - 7) - UNAME_MACHINE="alpha" - ;; - 15) - UNAME_MACHINE="alphaev5" - ;; - 14) - UNAME_MACHINE="alphaev56" - ;; - 10) - UNAME_MACHINE="alphapca56" - ;; - 16) - UNAME_MACHINE="alphaev6" - ;; - esac - - objdump --private-headers $dummy | \ - grep ld.so.1 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 - elif test "${UNAME_MACHINE}" = "mips" ; then - cat >$dummy.c </dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - else - # Either a pre-BFD a.out linker (linux-gnuoldld) - # or one that does not give us useful --help. - # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. - # If ld does not provide *any* "supported emulations:" - # that means it is gnuoldld. - echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" - test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 - - case "${UNAME_MACHINE}" in - i?86) - VENDOR=pc; - ;; - *) - VENDOR=unknown; - ;; - esac - # Determine whether the default compiler is a.out or elf - cat >$dummy.c <$dummy.c < #ifdef __cplusplus +#include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { @@ -771,51 +863,54 @@ EOF #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 - printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); + printf ("%s-pc-linux-gnu\n", argv[1]); # else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); + printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif # else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); + printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif #else - printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); + printf ("%s-pc-linux-gnuaout\n", argv[1]); #endif return 0; } EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - fi ;; -# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions -# are messed up and put the nodename in both sysname and nodename. - i?86:DYNIX/ptx:4*:*) + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; - i?86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; - i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; - i?86:*:5:7*) - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586 - (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585 - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE} + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; - i?86:*:3.2:*) + i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; - i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; - rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; @@ -900,10 +1002,10 @@ EOF echo ns32k-sni-sysv fi exit 0 ;; - PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm @@ -913,19 +1015,23 @@ EOF # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; - news*:NEWS-OS:*:6*) + news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv${UNAME_RELEASE} else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv${UNAME_RELEASE} fi - exit 0 ;; + exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; @@ -947,11 +1053,76 @@ EOF *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_MACHINE=pc + fi + echo `uname -p`-${UNAME_MACHINE}-nto-qnx + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[KW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 +eval $set_cc_for_build cat >$dummy.c < @@ -968,11 +1139,11 @@ main () #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 - "4" + "4" #else "" #endif - ); exit (0); + ); exit (0); #endif #endif @@ -1038,26 +1209,35 @@ main () #endif #if defined (vax) -#if !defined (ultrix) - printf ("vax-dec-bsd\n"); exit (0); -#else - printf ("vax-dec-ultrix\n"); exit (0); -#endif +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif -#if defined(__EMX__) - printf ("i386-pc-os2_emx"); exit(0); -#endif - exit (1); } EOF -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. @@ -1090,6 +1270,48 @@ then esac fi -#echo '(Unable to guess system type)' 1>&2 +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/scripts/config.sub b/scripts/config.sub index 0159f7208..393f13d37 100755 --- a/scripts/config.sub +++ b/scripts/config.sub @@ -1,6 +1,10 @@ #! /bin/sh -# Configuration validation subroutine script, version 1.1. -# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc. +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. + +timestamp='2001-09-07' + # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. @@ -12,7 +16,7 @@ # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License @@ -25,6 +29,8 @@ # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. +# Please send patches to . +# # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. @@ -34,7 +40,7 @@ # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish +# it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. @@ -45,30 +51,73 @@ # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. -if [ x$1 = x ] -then - echo Configuration name missing. 1>&2 - echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 - echo "or $0 ALIAS" 1>&2 - echo where ALIAS is a recognized configuration type. 1>&2 - exit 1 -fi +me=`echo "$0" | sed -e 's,.*/,,'` -# First pass through any local machine types. -case $1 in - *local*) - echo $1 - exit 0 - ;; - *) - ;; +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - linux-gnu*) + nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -94,7 +143,7 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple) + -apple | -axis) os= basic_machine=$1 ;; @@ -105,9 +154,17 @@ case $os in -scout) ;; -wrs) - os=vxworks + os=-vxworks basic_machine=$1 ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; -hiux*) os=-hiuxwe2 ;; @@ -156,64 +213,105 @@ case $os in -psos*) os=-psos ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. - tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ - | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ - | 580 | i960 | h8300 \ - | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ - | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] | s390 \ - | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ - | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ - | mips64orion | mips64orionel | mipstx39 | mipstx39el \ - | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ - | mips64vr5000 | miprs64vr5000el \ - | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ - | thumb | d10v) + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dsp16xx \ + | fr30 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el | mips64vr4300 \ + | mips64vr4300el | mips64vr5000 | mips64vr5000el \ + | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ + | mipsisa32 \ + | mn10200 | mn10300 \ + | ns16k | ns32k \ + | openrisc \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | s390 | s390x \ + | sh | sh[34] | sh[34]eb | shbe | shle \ + | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ + | stormy16 | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 \ + | we32k \ + | x86 | xscale \ + | z8k) basic_machine=$basic_machine-unknown ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65) + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. - i[34567]86) + i*86 | x86_64) basic_machine=$basic_machine-pc ;; - s390 | s390-ibm) - basic_machine=s390-ibm - ;; - s390-redhat) - basic_machine=s390-redhat - ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. - vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ - | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ - | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ - | xmp-* | ymp-* \ - | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ - | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \ - | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ - | clipper-* | orion-* \ - | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ - | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ - | mipstx39-* | mipstx39el-* \ - | f301-* | armv*-* | t3e-* \ - | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ - | thumb-* | v850-* | d30v-* | tic30-* | c30-* ) + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alphapca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armv*-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c54x-* \ + | clipper-* | cray2-* | cydra-* \ + | d10v-* | d30v-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | m32r-* \ + | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ + | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ + | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | s390-* | s390x-* \ + | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \ + | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ + | v850-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \ + | ymp-* \ + | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -250,14 +348,14 @@ case $basic_machine in os=-sysv ;; amiga | amiga-*) - basic_machine=m68k-cbm + basic_machine=m68k-unknown ;; amigaos | amigados) - basic_machine=m68k-cbm + basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) - basic_machine=m68k-cbm + basic_machine=m68k-unknown os=-sysv4 ;; apollo68) @@ -304,13 +402,16 @@ case $basic_machine in basic_machine=cray2-cray os=-unicos ;; - [ctj]90-cray) - basic_machine=c90-cray + [cjt]90) + basic_machine=${basic_machine}-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; da30 | da30-*) basic_machine=m68k-da30 ;; @@ -358,6 +459,10 @@ case $basic_machine in basic_machine=tron-gmicro os=-sysv ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 @@ -431,22 +536,21 @@ case $basic_machine in ;; i370-ibm* | ibm*) basic_machine=i370-ibm - os=-mvs ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[34567]86v32) + i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; - i[34567]86v4*) + i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; - i[34567]86v) + i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; - i[34567]86sol2) + i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; @@ -458,14 +562,6 @@ case $basic_machine in basic_machine=i386-unknown os=-vsta ;; - i386-go32 | go32) - basic_machine=i386-unknown - os=-go32 - ;; - i386-mingw32 | mingw32) - basic_machine=i386-unknown - os=-mingw32 - ;; iris | iris4d) basic_machine=mips-sgi case $os in @@ -491,10 +587,14 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; miniframe) basic_machine=m68000-convergent ;; - *mint | *MiNT) + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; @@ -512,14 +612,22 @@ case $basic_machine in mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; monitor) basic_machine=m68k-rom68k os=-coff ;; msdos) - basic_machine=i386-unknown + basic_machine=i386-pc os=-msdos ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 @@ -529,7 +637,7 @@ case $basic_machine in os=-netbsd ;; netwinder) - basic_machine=armv4l-corel + basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) @@ -577,9 +685,16 @@ case $basic_machine in basic_machine=i960-intel os=-mon960 ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; np1) basic_machine=np1-gould ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf @@ -606,45 +721,59 @@ case $basic_machine in pbb) basic_machine=m68k-tti ;; - pc532 | pc532-*) + pc532 | pc532-*) basic_machine=ns32k-pc532 ;; - pentium | p5 | k5 | k6 | nexen) + pentium | p5 | k5 | k6 | nexgen) basic_machine=i586-pc ;; - pentiumpro | p6 | 6x86) + pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) - basic_machine=i786-pc + basic_machine=i686-pc ;; - pentium-* | p5-* | k5-* | k6-* | nexen-*) + pentium-* | p5-* | k5-* | k6-* | nexgen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumpro-* | p6-* | 6x86-*) + pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; - power) basic_machine=rs6000-ibm + power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown - ;; + ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown - ;; + ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; ps2) basic_machine=i386-ibm ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; rom68k) basic_machine=m68k-rom68k os=-coff @@ -724,6 +853,10 @@ case $basic_machine in sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; symmetry) basic_machine=i386-sequent os=-dynix @@ -732,6 +865,10 @@ case $basic_machine in basic_machine=t3e-cray os=-unicos ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; tx39) basic_machine=mipstx39-unknown ;; @@ -762,8 +899,8 @@ case $basic_machine in os=-vms ;; vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; + basic_machine=f301-fujitsu + ;; vxworks960) basic_machine=i960-wrs os=-vxworks @@ -784,11 +921,15 @@ case $basic_machine in basic_machine=hppa1.1-winbond os=-proelf ;; + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt + ;; xmp) basic_machine=xmp-cray os=-unicos ;; - xps | xps100) + xps | xps100) basic_machine=xps100-honeywell ;; z8k-*-coff) @@ -827,16 +968,23 @@ case $basic_machine in vax) basic_machine=vax-dec ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; - sparc | sparcv9) + sh3 | sh4 | sh3eb | sh4eb) + basic_machine=sh-unknown + ;; + sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; - cydra) + cydra) basic_machine=cydra-cydrome ;; orion) @@ -855,6 +1003,9 @@ case $basic_machine in basic_machine=c4x-none os=-coff ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 @@ -878,8 +1029,8 @@ esac if [ x"$os" != x"" ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases + # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` @@ -887,9 +1038,6 @@ case $os in -solaris) os=-solaris2 ;; - -qnx) - os=-qnx - ;; -svr4*) os=-sysv4 ;; @@ -914,14 +1062,30 @@ case $os in | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*) + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos*) # Remember, each alternative MUST END IN *, to match a version number. ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx + ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mon960* | -lnews*) + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` @@ -935,6 +1099,12 @@ case $os in -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; -osfrose*) os=-osfrose ;; @@ -957,7 +1127,10 @@ case $os in os=-sysv ;; -ns2 ) - os=-nextstep2 + os=-nextstep2 + ;; + -nsk*) + os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) @@ -993,8 +1166,8 @@ case $os in -xenix) os=-xenix ;; - -*mint | -*MiNT) - os=-mint + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint ;; -none) ;; @@ -1021,13 +1194,16 @@ case $basic_machine in *-acorn) os=-riscix1.2 ;; - arm*-corel) + arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; - pdp11-*) + pdp10-*) + os=-tops20 + ;; + pdp11-*) os=-none ;; *-dec | vax-*) @@ -1117,25 +1293,25 @@ case $basic_machine in *-next) os=-nextstep3 ;; - *-gould) + *-gould) os=-sysv ;; - *-highlevel) + *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; - *-sgi) + *-sgi) os=-irix ;; - *-siemens) + *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; - f301-fujitsu) + f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) @@ -1195,7 +1371,7 @@ case $basic_machine in -genix*) vendor=ns ;; - -mvs*) + -mvs* | -opened*) vendor=ibm ;; -ptx*) @@ -1213,12 +1389,23 @@ case $basic_machine in -mpw* | -macos*) vendor=apple ;; - -*mint | -*MiNT) + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; + -vos*) + vendor=stratus + ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/scripts/db2html.in b/scripts/db2html.in deleted file mode 100755 index ba35afbc1..000000000 --- a/scripts/db2html.in +++ /dev/null @@ -1,151 +0,0 @@ -#!/bin/sh -# db2html.in - Docbook to HTML rendering (wk 2000-02-15) -# -# Copyright (C) 2000 Free Software Foundation -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - -nosplit=no -copyfiles=no -stylesheet=@DSL_FOR_HTML@ -JADE=@JADE@ - -usage () { - echo 'usage: db2html [--nosplit] [--copyfiles] filename' >&2 - exit 1 -} - - -while test "`echo $1 | head -c1`" = "-"; do - case $1 in - --version) - cat <&2 - exit 1 - ;; - esac - shift -done - -if test $# = 1; then - input="$1" -else - usage -fi - -# grep the document type -doctype=`grep -i '\&2 -else - echo "DOCTYPE is '$doctype'" >&2 -fi - -output="`basename $input| sed 's/\.sgml$//'`.html" - - -if test $nosplit = yes; then - echo "running jade on '$input' ..." >&2 - $JADE -d $stylesheet -t sgml -i html -V nochunks $input > $output - echo "$output created" - exit 0 -fi - -if test -d html ; then - : -else - if mkdir html; then - echo "'html' directory created" >&2 - else - echo "failed to create 'html' directory" >&2 - exit 1 - fi -fi - -outputdir="html/`basename $input| sed 's/\.sgml$//'`" - -if test -d $outputdir ; then - : -else - if mkdir $outputdir; then - echo "'$outputdir' created" >&2 - else - echo "failed to create '$outputdir'" >&2 - exit 1 - fi -fi -echo "creating html pages in '$outputdir' ..." >&2 -if test "$input" = "`basename $input`"; then - inp="../../$input" -else - inp="$input" -fi -echo "running jade on '$inp' ..." >&2 -(cd $outputdir && $JADE -t sgml -i html -d $stylesheet $inp ) -echo "html version in '$outputdir' created" >&2 - -# break out all filerefs and copy them to the outputdirectory -# fixme: handling of path components is wrong -if test $copyfiles = yes; then - echo "looking for filerefs ..." >&2 - for file in `nsgmls -i html $input \ - | awk '/^AFILEREF[ \t]+CDATA/ {print $3}'`; do - d=$outputdir/`basename $file` - if cat $file > $outputdir/`basename $file` ; then - echo " $file -> $d" >&2 - fi - done -fi - -mainfile=`ls $outputdir/${doctype}* | head -1` - -cat > $output <$output - - -$mainfile - - - -EOF - -echo "$output created with link to '$mainfile'" >&2 - -exit 0 - diff --git a/scripts/distfiles b/scripts/distfiles index 7262866bb..6a1ef2666 100644 --- a/scripts/distfiles +++ b/scripts/distfiles @@ -1,13 +1,5 @@ -config.guess -config.sub -install-sh -mkinstalldirs mkdiff -missing +build-w32 gnupg.spec.in autogen.sh -ChangeLog -ltconfig -ltmain.sh -db2html.in diff --git a/scripts/gnupg.spec.in b/scripts/gnupg.spec.in index e116ea3b4..357f540a3 100644 --- a/scripts/gnupg.spec.in +++ b/scripts/gnupg.spec.in @@ -4,32 +4,70 @@ # %define version @pkg_version@ %define name gnupg -Summary: GPL public key crypto +Summary: GNU Utility for data encryption and digital signatures +Summary(it): Utility GNU per la sicurezza nelle comunicazioni e nell'archiviazione dei dati. +Summary(cs): GNU nástroj pro ¹ifrovanou komunikaci a bezpeèné ukládání dat +Summary(fr): Utilitaire GNU de chiffrement et d'authentification des communications et des données +Summary(pl): Narzedzie GNU do szyfrowania i podpisywania danych +Vendor: GNU Privacy Guard Project Name: %{name} Version: %{version} Release: 1 Copyright: GPL Group: Applications/Cryptography +Group(cs): Aplikace/©ifrování +Group(fr): Applications/Cryptographie +Group(it): Applicazioni/Crittografia Source: ftp://ftp.gnupg.org/pub/gcrypt/%{name}-%{version}.tar.gz URL: http://www.gnupg.org Provides: gpg openpgp BuildRoot: /tmp/rpmbuild_%{name} %changelog +* Fri Apr 19 2002 David Shaw +- Removed OPTIONS and pubring.asc - no longer used +- Added doc/samplekeys.asc +* Sun Mar 31 2002 David Shaw +- Added the gpgkeys_xxx keyserver helpers. +- Added a * to catch variations on the basic gpg man page (gpg, gpgv). +- Mark options.skel as a config file. +- Do not include the FAQ/faq.html twice (in /doc/ and /share/). + +* Wed Sep 06 2000 Fabio Coatti +- Added Polish description and summary (Kindly provided by + Lukasz Stelmach ) + +* Thu Jul 13 2000 Fabio Coatti +- Added a * to catch all formats for man pages (plain, gz, bz2...) + +* Mon May 01 2000 Fabio Coatti +- Some corrections in French description, thanks to Gaël Quéri + ; Some corrections to Italian descriptions. + +* Tue Apr 25 2000 Fabio Coatti +- Removed the no longer needed patch for man page by Keith Owens + +* Wed Mar 1 2000 Petr Kri¹tof +- Czech descriptions added; some fixes and updates. + +* Sat Jan 15 2000 Keith Owens +- Add missing man page as separate patch instead of updating the tar file. + +* Mon Dec 27 1999 Fabio Coatti +- Upgraded for 1.0.1 (added missing gpg.1 man page) + * Sat May 29 1999 Fabio Coatti -- Some corrections in French description, thanks to -Gaël Quéri +- Some corrections in French description, thanks to Gaël Quéri * Mon May 17 1999 Fabio Coatti - Added French description, provided by -Christophe Labouisse + Christophe Labouisse * Thu May 06 1999 Fabio Coatti - Upgraded for 0.9.6 (removed gpgm) * Tue Jan 12 1999 Fabio Coatti -- LINGUAS variable is now unset in configure to ensure that all - languages will be built. (Thanks to Luca Olivetti ) +- LINGUAS variable is now unset in configure to ensure that all languages will be built. (Thanks to Luca Olivetti ) * Sat Jan 02 1999 Fabio Coatti - Added pl language file. @@ -38,24 +76,57 @@ Christophe Labouisse * Sat Dec 19 1998 Fabio Coatti - Modified the spec file provided by Caskey L. Dickson - Now it can be built also by non-root. Installation has to be done as -root, gpg is suid. + root, gpg is suid. - Added some changes by Ross Golder - Updates for version 0.4.5 of GnuPG (.mo files) %description -GnuPG is a complete and free replacement for PGP. Because it does not -use IDEA or RSA it can be used without any restrictions. GnuPG is in -compliance with the OpenPGP specification (RFC2440). +GnuPG (GNU Privacy Guard) is a GNU utility for encrypting data and +creating digital signatures. GnuPG has advanced key management +capabilities and is compliant with the proposed OpenPGP Internet +standard described in RFC2440. Since GnuPG doesn't use any patented +algorithm, it is not compatible with any version of PGP2 (PGP2.x uses +only IDEA, patented worldwide, and RSA, which is patented in the US +until 9/20/00). %description -l it -GnuPG è un sostituto completo e gratuito per il PGP. Non utilizzando -IDEA o RSA può essere utilizzato senza restrizioni. GnuPG è conforme -alle specifiche OpenPGP (RFC2440). +GnuPG (GNU Privacy Guard) è una utility GNU per la cifratura di dati e +la creazione di firme digitali. Possiede una gestione avanzata delle +chiavi ed è conforme allo standard Internet OpenPGP, descritto nella +RFC 2440. Non utilizzando algoritmi brevettati, non è compatibile con +PGP2 (PGP2.x usa solo IDEA, coperto da brevetto mondiale, ed RSA, +brevettato negli USA con scadenza 20/09/2000). Questi algoritmi sono +utilizzabili da GnuPG tramite moduli esterni. %description -l fr -GnuPG est un remplacement complet et « libre » de PGP. Comme il n'utilise -ni IDEA ni RSA il peut être utilisé sans restriction. GnuPG est conforme -à la spécification OpenPGP (RFC2440). +GnuPG est un utilitaire GNU destiné à chiffrer des données et à créer +des signatures électroniques. Il a des capacités avancées de gestion de +clés et il est conforme à la norme proposée OpenPGP décrite dans la +RFC2440. Comme GnuPG n'utilise pas d'algorithme breveté, il n'est +compatible avec aucune version de PGP2 (PGP2.x ne sait utiliser que +l'IDEA breveté dans le monde entier et RSA, breveté aux États-Unis +jusqu'au 20 septembre 2000). + +%description -l cs +GnuPG je GNU nástroj pro bezpeènou komunikaci a ukládání dat. Mù¾e být +pou¾it na ¹ifrování dat a vytváøení digitálních podpisù. Obsahuje +funkce pro pokroèilou správu klíèù a vyhovuje navrhovanému OpenPGP +Internet standardu podle RFC2440. Byl vytvoøen jako kompletní +náhrada za PGP. Proto¾e neobsahuje ¹ifrovací algoritmy IDEA nebo RSA, +mù¾e být pou¾íván bez omezení. +Proto¾e GnuPG nepou¾ívá ¾ádný patentovaný algoritmus, nemù¾e být úplnì +kompatibilní s PGP verze 2. PGP 2.x pou¾ívá algoritmy IDEA (patentováno +celosvìtovì) a RSA (patentováno ve Spojených státech do 20. záøí +2000). Tyto algoritmy lze zavést do GnuPG pomocí externích modulù. + +%description -l pl +GnuPG (GNU Privacy Guard) jest nazedziem do szfrowania danych i tworzenia +cyfrowych podpisów. GnuPG posiada zaawansowane mozliwosci obslugi kluczy +i jest zgodne z OpenPGP, proponowanym standardem internetowym opisanym +w RFC2440. Poniewaz GnuPG nie uzywa zadnych opatentowanych algorytmów +nie jest wiec zgodne z jaka kolwiek wersja PGP2 (PGP2.x kozysta jedynie +z algorytmów: IDEA, opatentowanego na calym swiecie, oraz RSA, którego +patent na terenie Stanów Zjednoczonych wygasa 20 wrzesnia 2000). %prep rm -rf $RPM_BUILD_ROOT @@ -67,7 +138,7 @@ rm -rf $RPM_BUILD_DIR/%{name}-%{version} if test -n "$LINGUAS"; then unset LINGUAS fi -CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr +CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --enable-shared make %install @@ -86,25 +157,20 @@ make install-strip prefix=$RPM_BUILD_ROOT/usr %doc %attr (-,root,root) PROJECTS %doc %attr (-,root,root) doc/DETAILS %doc %attr (-,root,root) doc/FAQ +%doc %attr (-,root,root) doc/faq.html %doc %attr (-,root,root) doc/HACKING %doc %attr (-,root,root) doc/OpenPGP -%doc %attr (-,root,root) g10/pubring.asc -%doc %attr (-,root,root) g10/OPTIONS +%doc %attr (-,root,root) doc/samplekeys.asc -%attr (-,root,root) /usr/man/man1/gpg.1 +%attr (-,root,root) /usr/man/man1/gpg*.1* %attr (4755,root,root) /usr/bin/gpg +%attr (-,root,root) /usr/bin/gpgkeys_* -%attr (-,root,root) /usr/share/locale/de/LC_MESSAGES/%{name}.mo -%attr (-,root,root) /usr/share/locale/it/LC_MESSAGES/%{name}.mo -%attr (-,root,root) /usr/share/locale/fr/LC_MESSAGES/%{name}.mo -%attr (-,root,root) /usr/share/locale/ru/LC_MESSAGES/%{name}.mo -%attr (-,root,root) /usr/share/locale/es_ES/LC_MESSAGES/%{name}.mo -%attr (-,root,root) /usr/share/locale/pt_BR/LC_MESSAGES/%{name}.mo -%attr (-,root,root) /usr/share/locale/pl/LC_MESSAGES/%{name}.mo - +%attr (-,root,root) /usr/share/locale/*/*/%{name}.mo %attr (-,root,root) /usr/lib/%{name} -%attr (-,root,root) /usr/share/%{name} + +%config %attr (-,root,root) /usr/share/%{name}/options.skel %clean rm -rf $RPM_BUILD_ROOT diff --git a/scripts/gnupgbug b/scripts/gnupgbug new file mode 100644 index 000000000..7cde6aa16 --- /dev/null +++ b/scripts/gnupgbug @@ -0,0 +1,185 @@ +#!/bin/sh + +# +# File a bug against the GNU Privacy Guard. +# + +# +# Copyright (c) 2000 Thomas Roessler +# +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +SUBMIT="submit@bugs.guug.de" +DEBIAN_SUBMIT="submit@bugs.debian.org" + + +include_file () +{ + echo + echo "--- Begin $1" + sed -e 's/^-/- -/' $1 | egrep -v '^[ ]*(#|$)' + echo "--- End $1" + echo +} + +case `echo -n` in +"") n=-n; c= ;; + *) n=; c='\c' ;; +esac + + +exec > /dev/tty +exec < /dev/tty + +SCRATCH=${TMPDIR-/tmp}/`basename $0`.`hostname`.$$ + +mkdir ${SCRATCH} || \ +{ + echo "`basename $0`: Can't create temporary directory." >& 2 ; + exit 1 ; +} + +trap "rm -r -f ${SCRATCH} ; trap '' 0 ; exit" 0 1 2 + +TEMPLATE=${SCRATCH}/template.txt + +echo "Please enter a one-line description of the problem you experience:" +echo $n "> $c" +read SUBJECT + +echo $n "Do you want to include your personal GnuPG configuration files? [Y|n]$c" +read personal +case "$personal" in +[nN]*) personal=no ;; + *) personal=yes ;; +esac + +if test -f /etc/debian_version ; then + DEBIAN=yes + echo $n "Checking whether GnuPG has been installed as a package... $c" + GNUPGVERSION="`dpkg -l gnupg | grep ^i | awk '{print $3}'`" 2> /dev/null + if test "$GNUPGVERSION" ; then + DPKG=yes + else + DPKG=no + fi + echo "$DPKG" + if test "$DPKG" = "no" ; then + echo $n "File this bug with Debian? [Y|n]$c" + read $DPKG + case "$DPKG" in + [nN]) DPKG=no ;; + *) DPKG=yes ;; + esac + fi +else + DEBIAN=no + DPKG=no +fi + +test "$MUTTVERSION" || MUTTVERSION="`mutt -v | head -1 | awk '{print $2}' | tr -d i`" +test "$DPKG" = "yes" && SUBMIT="$SUBMIT, $DEBIAN_SUBMIT" + + +exec > ${TEMPLATE} + +echo "Subject: mutt-$MUTTVERSION: $SUBJECT" +echo "To: $SUBMIT" +echo "Cc: $LOGNAME" +echo +echo "Package: mutt" +echo "Version: $MUTTVERSION" +echo +echo "-- Please type your report below this line" +echo +echo +echo + +if test "$DEBIAN" = "yes" ; then + echo "Obtaining Debian-specific information..." > /dev/tty + bug -p -s dummy mutt | \ + sed -n -e "/^-- System Information/,/^---/p" | \ + grep -v '^---' +fi + +echo +echo "-- Mutt Version Information" +echo +mutt -v + +if test "$personal" = "yes" ; then + CANDIDATES=".muttrc-${MUTTVERSION} .muttrc .mutt/muttrc-${MUTTVERSION} .mutt/muttrc" + MATCHED="none" + for f in $CANDIDATES; do + if test -f "${HOME}/$f" ; then + MATCHED="${HOME}/$f" + break + fi + done + + if test "$MATCHED" = "none" ; then + echo "Warning: Can't find your personal .muttrc." >&2 + else + include_file $MATCHED + fi +fi + +if test "$global" = "yes" ; then + CANDIDATES="Muttrc-${MUTTVERSION} Muttrc" + DIRECTORIES="/etc /usr/local/share/mutt" + MATCHED="none" + for d in $DIRECTORIES ; do + for f in $CANDIDATES; do + if test -f $d/$f ; then + MATCHED="$d/$f" + break + fi + done + test "$MATCHED" = "none" || break + done + + if test "$MATCHED" = "none" ; then + echo "Warning: Can't find global Muttrc." >&2 + else + include_file $MATCHED + fi +fi + +exec > /dev/tty + +cp $TEMPLATE $SCRATCH/mutt-bug.txt + +input="e" +while : ; do + if test "$input" = "e" ; then + ${VISUAL-vi} $SCRATCH/mutt-bug.txt + if cmp $SCRATCH/mutt-bug.txt ${TEMPLATE} > /dev/null ; then + echo "Warning: Bug report was not modified!" + fi + fi + + echo $n "Submit, Edit, Print, Quit? [S|e|p|q]$c" + read _input + input="`echo $_input | tr EPSQ epsq`" + case $input in + e*) ;; + p*) ${PAGER-more} $SCRATCH/mutt-bug.txt ;; + s*|"") /usr/sbin/sendmail -t < $SCRATCH/mutt-bug.txt ; exit ;; + q*) exit + esac +done + diff --git a/scripts/install-sh b/scripts/install-sh index ebc66913e..398a88e14 100755 --- a/scripts/install-sh +++ b/scripts/install-sh @@ -1,4 +1,4 @@ -#! /bin/sh +#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). @@ -109,7 +109,7 @@ then echo "install: no input file specified" exit 1 else - true + : fi if [ x"$dir_arg" != x ]; then @@ -118,8 +118,9 @@ if [ x"$dir_arg" != x ]; then if [ -d $dst ]; then instcmd=: + chmodcmd="" else - instcmd=mkdir + instcmd=$mkdirprog fi else @@ -129,7 +130,7 @@ else if [ -f $src -o -d $src ] then - true + : else echo "install: $src does not exist" exit 1 @@ -140,7 +141,7 @@ else echo "install: no destination specified" exit 1 else - true + : fi # If destination is a directory, append the input filename; if your system @@ -150,7 +151,7 @@ else then dst="$dst"/`basename $src` else - true + : fi fi @@ -162,8 +163,8 @@ dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then -defaultIFS=' -' +defaultIFS=' + ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" @@ -182,7 +183,7 @@ while [ $# -ne 0 ] ; do then $mkdirprog "${pathcomp}" else - true + : fi pathcomp="${pathcomp}/" @@ -193,10 +194,10 @@ if [ x"$dir_arg" != x ] then $doit $instcmd $dst && - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi else # If we're going to rename the final executable, determine the name now. @@ -215,7 +216,7 @@ else then dstfile=`basename $dst` else - true + : fi # Make a temp file name in the proper directory. @@ -234,10 +235,10 @@ else # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && # Now rename the file to the real destination. diff --git a/scripts/mail-to-translators b/scripts/mail-to-translators new file mode 100755 index 000000000..f3bbbd0fd --- /dev/null +++ b/scripts/mail-to-translators @@ -0,0 +1,64 @@ +#!/bin/sh +# mail a compressed version of the current translation to the Last-Translator +# + +SENDMAIL="/usr/sbin/sendmail" + +for file in *.po; do + addr=$(awk '/Last-Translator:/ { printf "%s", $0; exit 0}' $file | sed 's/.*\(<.*>\).*/\1/') + ll=$(basename $file .po) + + if ! msgfmt -vc $file 2>&1| egrep -q 'fuzzy|untranslated|error'; then + echo "$file: okay" >&2 + continue; + fi + + if [ -z "$addr" ]; then + echo "$file: no translator known" >&2 + continue; + fi + + echo "$file: sending to $addr" + ( cat <&1 | head) + +If you are not able to continue the translation work, I suggest to +pass this message on to another translator and drop me a short note. + +Thanks, + + Werner + + +--=-=-= +Content-Type: application/octet-stream +Content-Disposition: attachment; filename=gnupg-${file}.gz +Content-Transfer-Encoding: base64 + +EOF + +gzip <$file | mimencode + +echo "" +echo "--=-=-=--" +echo "" + ) | $SENDMAIL -oi "$addr" + +done diff --git a/scripts/missing b/scripts/missing index a6abd0698..dd583709f 100755 --- a/scripts/missing +++ b/scripts/missing @@ -1,7 +1,7 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -# Copyright (C) 1996, 1997 Free Software Foundation, Inc. -# Franc,ois Pinard , 1996. +# Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,11 +18,37 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. case "$1" in -h|--h|--he|--hel|--help) @@ -35,19 +61,24 @@ error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files - bison touch file \`y.tab.c' + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file - yacc touch file \`y.tab.c'" + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing - GNU libit 0.0" + echo "missing 0.4 - GNU automake" ;; -*) @@ -56,42 +87,100 @@ Supported PROGRAM values: exit 1 ;; - aclocal) + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acinclude.m4' or \`configure.in'. You might want + you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if - you modified \`configure.in'. You might want to install the + you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acconfig.h' or \`configure.in'. You might want + you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." - touch config.h.in + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files ;; - automake) + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." - find . -type f -name Makefile.am -print \ - | sed 's/^\(.*\).am$/touch \1.in/' \ - | sh + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1Help2man' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi ;; bison|yacc) @@ -100,10 +189,84 @@ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." - touch y.tab.c + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi ;; makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file @@ -119,6 +282,45 @@ WARNING: \`$1' is missing on your system. You should only need it if touch $file ;; + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar ${1+"$@"} && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar ${1+"$@"} && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" ${1+"$@"} && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" ${1+"$@"} && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your diff --git a/scripts/mk-w32-dist b/scripts/mk-w32-dist new file mode 100755 index 000000000..317caef6e --- /dev/null +++ b/scripts/mk-w32-dist @@ -0,0 +1,53 @@ +#!/bin/sh +# +# Copyright (C) 2000, 2001 Free Software Foundation, Inc. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + +set -e + +cd dist-w32 + +if [ -f ../README ]; then + srcdir=.. +elif [ -f ../../gnupg-stable/README ]; then + srcdir=../../gnupg-stable +elif [ -f ../../../gnupg-stable/README ]; then + srcdir=../../../gnupg-stable +else + echo "cannot figure out the source dir" >&2 + exit 1 +fi + +rm * || true +ln ../g10/gpg gpg.exe +mingw32 strip gpg.exe +if [ -f ../doc/gpg.man ] ; then + sed `printf "s/\b.//g"` ../doc/gpg.man >gpg.man +else + man -Tlatin1 -l ../doc/gpg.1 | sed `printf "s/\b.//g"` >gpg.man +fi +todos gpg.man +cp ${srcdir}/README . +todos README +cp ${srcdir}/COPYING . +todos COPYING +ln ${srcdir}/doc/README.W32 . +todos README.W32 +ln ${srcdir}/doc/FAQ . +todos FAQ +for i in ${srcdir}/po/*.gmo; do ln $i "$(basename $i .gmo).mo" ; done +zip "gnupg-w32-$(cat ${srcdir}/VERSION).zip" * + + + + + + diff --git a/scripts/mkdiff b/scripts/mkdiff index 92efcda6a..f17979383 100755 --- a/scripts/mkdiff +++ b/scripts/mkdiff @@ -1,25 +1,34 @@ #!/bin/sh +# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -if [ $# = 1 ]; then - pack="$1" - vprf="" -elif [ $# = 2 ] ; then - pack="$1" - vprf="$2" -else - echo "usage: mkdiff package-name [version-prefix]" >&2 +# Please note that this script is now maintained outside of GNUPG. +# To get the most up to date version use +# cvs -d :pserver:anoncvs@cvs.gnupg.org:/cvs/wk checkout misc-scripts/mkdiff + +if [ $# != 1 ] ; then + echo "usage: mkdiff package-name" >&2 exit 1 fi +pack="$1" + set -e -curr_ver=$(ls $pack-${vprf}*.tar.gz 2>/dev/null | sed "s/^$pack-\(.*\)\.tar\.gz/\1/"\ +curr_ver=$(ls $pack-*.tar.gz 2>/dev/null | sed "s/^$pack-\(.*\)\.tar\.gz/\1/"\ | sort -r -t '.' -n +0 -1 +1 -2 +2 | head -1 ) if [ ! -f $pack-$curr_ver.tar.gz ]; then echo "mkdiff: no current version of package $pack found" >&2 exit 1 fi -prev_ver=$(ls $pack-${vprf}*.tar.gz 2>/dev/null | sed "s/^$pack-\(.*\)\.tar\.gz/\1/"\ +prev_ver=$(ls $pack-*.tar.gz 2>/dev/null | sed "s/^$pack-\(.*\)\.tar\.gz/\1/"\ | sort -r -t '.' -n +0 -1 +1 -2 +2 | head -2 | tail -1 ) if [ "$prev_ver" = "$curr_ver" ]; then echo "mkdiff: no previous version of package $pack found" >&2 diff --git a/scripts/mkinstalldirs b/scripts/mkinstalldirs index 70f6e5802..994d71ce7 100755 --- a/scripts/mkinstalldirs +++ b/scripts/mkinstalldirs @@ -16,18 +16,44 @@ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." while test $# -gt 0 ; do case "${1}" in -h | --help | --h* ) # -h for help - echo "${usage}" 1>&2; exit 0 ;; + echo "${usage}" 1>&2; exit 0 ;; -m ) # -m PERM arg - shift - test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } - dirmode="${1}" - shift ;; + shift + test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } + dirmode="${1}" + shift ;; -- ) shift; break ;; # stop option processing -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option * ) break ;; # first non-opt arg esac done +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in +0) exit 0 ;; +esac + +case $dirmode in +'') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi ;; +*) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi ;; +esac + for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` @@ -42,24 +68,24 @@ do esac if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" + echo "mkdir $pathcomp" - mkdir "$pathcomp" || lasterr=$? + mkdir "$pathcomp" || lasterr=$? - if test ! -d "$pathcomp"; then - errstatus=$lasterr + if test ! -d "$pathcomp"; then + errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" - chmod $dirmode "$pathcomp" || lasterr=$? + chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi - fi + fi fi pathcomp="$pathcomp/" @@ -69,6 +95,7 @@ done exit $errstatus # Local Variables: -# mode:shell-script -# sh-indentation:3 +# mode: shell-script +# sh-indentation: 3 # End: +# mkinstalldirs ends here diff --git a/scripts/mksnapshot b/scripts/mksnapshot index 7b534b98c..cca19d98d 100755 --- a/scripts/mksnapshot +++ b/scripts/mksnapshot @@ -21,7 +21,7 @@ This is a snapshot of the current CVS head branch! It may not compile or not work. Please don't report bugs about this snapshot release it is just for your -convenience and to reduce the load of our CVS server. +convenience and to reduce the load of out CVS server. Thanks, diff --git a/scripts/mkwebpage b/scripts/mkwebpage index eba90d490..b39feb176 100755 --- a/scripts/mkwebpage +++ b/scripts/mkwebpage @@ -1,44 +1,105 @@ #!/bin/sh # Make a snapshot of the CVS head revision for the gnupg webpages + set -e -myhome="$HOME/pub" -pgm="gnupg-www" -mod="gnupg-www" -MKWEBSITE=$HOME/bin/mkwebsite +cd $HOME/pub -cd $myhome +extract_date () { + # This strange construct is to speed up things. Grouping a "s" and a "q" + # does not work. Anyway we should use awk instead. + # Have to quote the I from $Id so that CVS does not expand it + sed '/^.*\$[I]d:.*\$.*$/q' $1 | + sed -n 's!^.*\$[I]d: [^ ]\+ [^ ]\+ \([0-9]*\)/\([0-9]*\)/\([0-9]*\) [^ ]\+ \([^ ]\+\).*$!\1-\2-\3 \4!p' +} -rm -rf $pgm.tmp 2>/dev/null || true -rm -rf $pgm.new || true -mkdir $pgm.new || true -rm -rf $pgm.old || true -cvs -Q export -r HEAD -d $pgm.tmp $mod -cat <$pgm.tmp/en/NEWS +# We have to edit most files +sed_it () { + src=$1 + dst=$2 + + for srcdir in `find $src -type d -print` ; do + dstdir=`echo "$srcdir" | sed "s/^$src/$dst/g"` + mkdir $dstdir || true + for sf in `find $srcdir -type f -maxdepth 1 -print`; do + updated=`extract_date $sf` + df="$dstdir/`basename $sf`" + case "$df" in + *.html) + sed "/@FOOTER@/ { + r $src/footer.html.inc + d + } + /^$/ { + r $src/body-tag.html.inc + d + } + /@UPDATED@/c\\ +Updated: $updated \\ +
+ /@INSERT_BUGLIST_HERE@/ { + r $src/BUGS + d + } + /@HOSTEDBY@/ { + r $src/hostedby.html.inc + d + } + " $sf > $df + ;; + *.html.inc | *~ | *.tmp | */BUGS ) + : + ;; + *) + cat $sf > $df + ;; + esac + done + done +} + + +do_export () { + pgm=$1 + mod=$2 + + rm -rf $pgm.tmp 2>/dev/null || true + rm -rf $pgm.new || true + rm -rf $pgm.old || true + cvs -Q export -r HEAD -d $pgm.tmp $mod + cat <$pgm.tmp/NEWS [ This is a snapshot of the NEWS file from the CVS head revision. You will find the NEWS for the latest revision below the line - "Noteworthy changes in version 1.x.y". + "Noteworthy changes in version 0.x.y". (wk $(date +%Y-%m-%d)) ] EOF -cvs -Q checkout -p gnupg/NEWS >>$pgm.tmp/en/NEWS -cvs -Q checkout -p gnupg/BUGS | sed '1,/^~~~~~~~~~~~/ d' > $pgm.tmp/en/include-file-1.tmp -echo "(List generated from CVS: " $(date +%Y-%m-%d) ")" >> $pgm.tmp/en/include-file-1.tmp -cd $pgm.tmp -$MKWEBSITE --cvs --use-this-dir $myhome/$pgm.new -cd $myhome -cp -a gph $pgm.new/ || true + cvs -Q checkout -p gnupg/NEWS >>$pgm.tmp/NEWS + cvs -Q checkout -p gnupg/BUGS | sed '1,/^~~~~~~~~~~~/ d' > $pgm.tmp/BUGS + echo "(List generated from CVS: " $(date +%Y-%m-%d) ")" >> $pgm.tmp/BUGS + sed_it $pgm.tmp $pgm.new + rm -rf $pgm.tmp || true + ln -sf gnupg.html $pgm.new/index.html -rm -rf $pgm.tmp || true + rm -rf $pgm.old || true + [ -d $pgm ] && mv $pgm $pgm.old + if ! mv $pgm.new $pgm ; then + echo "rename failed - restoring" >&2 + mv $pgm.old $pgm + exit 1 + fi + rm -rf $pgm.old || true +} -rm -rf $pgm.old || true -[ -d $pgm ] && mv $pgm $pgm.old -if ! mv $pgm.new $pgm ; then - echo "rename failed - restoring" >&2 - mv $pgm.old $pgm - exit 1 -fi -rm -rf $pgm.old || true + +do_export gnupg-www gnupg-www + +#cd gnupg-www +#tar czf /home/ftp/pub/gcrypt/.old/webpages.tmp * +#mv /home/ftp/pub/gcrypt/old/webpages.tmp /home/ftp/pub/gcrypt/old/webpages.tar.gz + + +exit 0 diff --git a/tools/ChangeLog b/tools/ChangeLog index 2faf8de06..0cb89ae11 100644 --- a/tools/ChangeLog +++ b/tools/ChangeLog @@ -1,22 +1,61 @@ -2000-10-10 Werner Koch +2002-05-07 Stefan Bellon - * bftest.c (main): Allow selection of cipher mode. + * gpgsplit.c (create_filename): Use EXTSEP_S instead of ".". -Mon Sep 18 16:35:45 CEST 2000 Werner Koch +2002-04-23 David Shaw - * ring-a-party: substr starts at offset 1 not 0. Many thanks to Mike - for finding this bug. Flush the last key. + * Makefile.am: Do not list libraries in -lxxx format in a + dependency line. -Mon Jul 17 16:35:47 CEST 2000 Werner Koch +2002-01-02 Stefan Bellon - * mail-signed-keys: New. - * ring-a-party: New. + * gpgsplit.c [__riscos__]: Added RISC OS specific file name + code. -Mon Jan 31 17:46:35 CET 2000 Werner Koch + * gpgsplit.c (write_part): Introduced two explicit casts. - * Makefile.am: Add libjnlib. - * bftest.c: Some minor hacks to let it compile. - * mpicalc.c: Ditto. +2001-12-21 David Shaw + + * gpgsplit.c (pkttype_to_string): PKT_PHOTO_ID -> PKT_ATTRIBUTE + +2001-10-23 Werner Koch + + * Makefile.am (gpgsplit_LDADD): Add ZLIBS. + +2001-09-18 Werner Koch + + * gpgsplit.c: New option --uncompress. + (write_part): Handle old style uncompressing. + +2001-06-20 Werner Koch + + * gpgsplit.c: New. + * Makefile.am (bin_PROGRAMS): Install gpgsplit. + +2001-03-27 Werner Koch + + * mail-signed-keys: Add option --dry-run. + +2001-03-21 Werner Koch + + * shmtest.c: Add sys/types.h + +Fri Sep 15 18:40:36 CEST 2000 Werner Koch + + * ring-a-party: An array start at offset 1 no 0. Many thanks to Mike + for finding this bug. + +Thu Sep 14 14:20:38 CEST 2000 Werner Koch + + * ring-a-party: Flush the last key. + +Wed Jul 5 13:28:45 CEST 2000 Werner Koch + + * mail-signed-keys: New. + +Tue May 23 09:19:00 CEST 2000 Werner Koch + + * ring-a-party: New. Thu Jul 8 16:21:27 CEST 1999 Werner Koch @@ -43,3 +82,16 @@ Tue Apr 7 19:50:41 1998 Werner Koch (wk@isil.d.shuttle.de) * bftest.c: Now supports all availabe ciphers. + + + Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + diff --git a/tools/Makefile.am b/tools/Makefile.am index 4e261ca34..769e30c48 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,14 +1,28 @@ +# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +# +# This file is part of GnuPG. +# +# GnuPG is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GnuPG is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + ## Process this file with automake to produce Makefile.in -EXTRA_DIST = lspgpot mail-signed-keys ring-a-party -INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl -# we need to add libutil.la a second time because we have to resolve -# gpg_log_ in some libjnlib modules. - very ugly - should be removed soon. -needed_libs = ../util/libutil.a \ - ../jnlib/libjnlib.a ../util/libutil.a \ - @INTLLIBS@ - +EXTRA_DIST = lspgpot ring-a-party mail-signed-keys +INCLUDES = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl +needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a +bin_PROGRAMS = gpgsplit noinst_PROGRAMS = mpicalc bftest clean-sat mk-tdata shmtest mpicalc_SOURCES = mpicalc.c @@ -19,11 +33,13 @@ clean_sat_SOURCES = clean-sat.c mk_tdata_SOURCES = mk-tdata.c shmtest_SOURCES = shmtest.c +gpgsplit_SOURCES = gpgsplit.c -mpicalc_LDADD = $(needed_libs) $(LIBGCRYPT_LIBS) -bftest_LDADD = $(needed_libs) $(LIBGCRYPT_LIBS) -shmtest_LDADD = $(needed_libs) $(LIBGCRYPT_LIBS) +mpicalc_LDADD = $(needed_libs) @INTLLIBS@ +bftest_LDADD = $(needed_libs) @INTLLIBS@ -mpicalc bftest shmtest: $(needed_libs) +shmtest_LDADD = $(needed_libs) @INTLLIBS@ +gpgsplit_LDADD = @ZLIBS@ $(needed_libs) @INTLLIBS@ +mpicalc bftest shmtest gpgsplit: $(needed_libs) diff --git a/tools/bftest.c b/tools/bftest.c index 6b1e09117..b15f4a1da 100644 --- a/tools/bftest.c +++ b/tools/bftest.c @@ -1,5 +1,5 @@ /* bftest.c - Blowfish test program - * Copyright (C) 1998 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -27,17 +27,22 @@ #include #endif -#include #include "util.h" +#include "cipher.h" #include "i18n.h" static void my_usage(void) { - fprintf(stderr, "usage: bftest [-e][-d] algo mode key\n"); + fprintf(stderr, "usage: bftest [-e][-d] algo key\n"); exit(1); } +const char * +strusage( int level ) +{ + return default_strusage(level); +} static void i18n_init(void) @@ -48,7 +53,7 @@ i18n_init(void) #else setlocale( LC_ALL, "" ); #endif - bindtextdomain( PACKAGE, GNUPG_LOCALEDIR ); + bindtextdomain( PACKAGE, G10_LOCALEDIR ); textdomain( PACKAGE ); #endif } @@ -57,12 +62,11 @@ int main(int argc, char **argv) { int encode=0; - GCRY_CIPHER_HD hd; + CIPHER_HANDLE hd; char buf[4096]; - int rc, n, size=4096; - int algo, mode; - const char *s; - + int n, size=4096; + int algo; + #ifdef HAVE_DOSISH_SYSTEM setmode( fileno(stdin), O_BINARY ); setmode( fileno(stdout), O_BINARY ); @@ -85,56 +89,24 @@ main(int argc, char **argv) argc--; argv++; size = 10; } - if( argc != 4 ) + if( argc != 3 ) my_usage(); argc--; argv++; - algo = gcry_cipher_map_name( *argv ); + algo = string_to_cipher_algo( *argv ); argc--; argv++; - s = *argv; argc--; argv++; - if ( !strcasecmp( s, "cfb" ) ) - mode = GCRY_CIPHER_MODE_CFB; - else if ( !strcasecmp( s, "cbc" ) ) - mode = GCRY_CIPHER_MODE_CBC; - else if ( !strcasecmp( s, "ebc" ) ) - mode = GCRY_CIPHER_MODE_ECB; - else if ( !strcasecmp( s, "none" ) ) - mode = GCRY_CIPHER_MODE_NONE; - else if ( !strcasecmp( s, "stream" ) ) - mode = GCRY_CIPHER_MODE_STREAM; - else { - fprintf( stderr, - "wrong mode; use one of: none, ecb, cbc, cfb, stream\n"); - return 1; - } - hd = gcry_cipher_open( algo, mode, 0 ); - if (!hd ) - log_fatal("cipher open failed: %s\n", gcry_strerror(-1) ); - rc = gcry_cipher_setkey( hd, *argv, strlen(*argv) ); - if ( rc ) - log_fatal("setkey failed: %s\n", gcry_strerror(rc) ); - gcry_cipher_setiv( hd, NULL, 0 ); + hd = cipher_open( algo, CIPHER_MODE_CFB, 0 ); + cipher_setkey( hd, *argv, strlen(*argv) ); + cipher_setiv( hd, NULL, 0 ); while( (n = fread( buf, 1, size, stdin )) > 0 ) { if( encode ) - gcry_cipher_encrypt( hd, buf, n, buf, n ); + cipher_encrypt( hd, buf, buf, n ); else - gcry_cipher_decrypt( hd, buf, n, buf, n ); + cipher_decrypt( hd, buf, buf, n ); if( fwrite( buf, 1, n, stdout) != n ) log_fatal("write error\n"); } - gcry_cipher_close(hd); + cipher_close(hd); return 0; } - - - - - - - - - - - - diff --git a/tools/clean-sat.c b/tools/clean-sat.c index b1edb2010..8b6bfd77a 100644 --- a/tools/clean-sat.c +++ b/tools/clean-sat.c @@ -1,4 +1,13 @@ /* clean-sat.c + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include diff --git a/tools/crlf.c b/tools/crlf.c index f81f77e69..e6ac8c70f 100644 --- a/tools/crlf.c +++ b/tools/crlf.c @@ -1,4 +1,13 @@ /* crlf.c + * Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include diff --git a/tools/gpgsplit.c b/tools/gpgsplit.c new file mode 100644 index 000000000..8d89b1b9d --- /dev/null +++ b/tools/gpgsplit.c @@ -0,0 +1,553 @@ +/* gpgsplit.c - An OpenPGP packet splitting tool + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* + * TODO: Add an option to uncompress packets. This should come quite handy. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_DOSISH_SYSTEM + #include /* for setmode() */ +#endif +#include +#ifdef __riscos__ +#include +#endif /* __riscos__ */ + +#define INCLUDED_BY_MAIN_MODULE 1 +#include "../g10/packet.h" +#include "util.h" + +static int opt_verbose; +static const char *opt_prefix = ""; +static int opt_uncompress; + +static void g10_exit( int rc ); +static void split_packets (const char *fname); + + +enum cmd_and_opt_values { aNull = 0, + oVerbose = 'v', + oPrefix = 'p', + oUncompress = 500, +aTest }; + + +static ARGPARSE_OPTS opts[] = { + + { 301, NULL, 0, "@Options:\n " }, + + { oVerbose, "verbose", 0, "verbose" }, + { oPrefix, "prefix", 2, "|STRING|Prepend filenames with STRING" }, + { oUncompress, "uncompress", 0, "uncompress a packet"}, +{0} }; + + +const char * +strusage( int level ) +{ + const char *p; + switch( level ) { + case 11: p = "gpgsplit (GnuPG)"; + break; + case 13: p = VERSION; break; + case 17: p = PRINTABLE_OS_NAME; break; + case 19: p = + "Please report bugs to .\n"; + break; + case 1: + case 40: p = + "Usage: gpgsplit [options] [files] (-h for help)"; + break; + case 41: p = + "Syntax: gpgsplit [options] [files]\n" + "Split an OpenPGP message into packets\n"; + break; + + default: p = default_strusage(level); + } + return p; +} + + + +int +main( int argc, char **argv ) +{ + ARGPARSE_ARGS pargs; + + #ifdef __riscos__ + /* set global RISC OS specific properties */ + __riscosify_control = __RISCOSIFY_NO_PROCESS; + #endif /* __riscos__ */ + #ifdef HAVE_DOSISH_SYSTEM + setmode( fileno(stdin), O_BINARY ); + setmode( fileno(stdout), O_BINARY ); + #endif + log_set_name("gpgsplit"); + + pargs.argc = &argc; + pargs.argv = &argv; + pargs.flags= 1; /* do not remove the args */ + while( optfile_parse( NULL, NULL, NULL, &pargs, opts) ) { + switch( pargs.r_opt ) { + case oVerbose: opt_verbose = 1; break; + case oPrefix: opt_prefix = pargs.r.ret_str; break; + case oUncompress: opt_uncompress = 1; break; + default : pargs.err = 2; break; + } + } + + if( log_get_errorcount(0) ) + g10_exit(2); + + if (!argc) + split_packets (NULL); + else { + for ( ;argc; argc--, argv++) + split_packets (*argv); + } + + g10_exit (0); + return 0; +} + + +static void +g10_exit( int rc ) +{ + rc = rc? rc : log_get_errorcount(0)? 2 : 0; + exit(rc ); +} + +static const char * +pkttype_to_string (int pkttype) +{ + const char *s; + switch (pkttype) { + case PKT_PUBKEY_ENC : s = "pk_enc"; break; + case PKT_SIGNATURE : s = "sig"; break; + case PKT_SYMKEY_ENC : s = "sym_enc"; break; + case PKT_ONEPASS_SIG : s = "onepass_sig"; break; + case PKT_SECRET_KEY : s = "secret_key"; break; + case PKT_PUBLIC_KEY : s = "public_key"; break; + case PKT_SECRET_SUBKEY : s = "secret_subkey"; break; + case PKT_COMPRESSED : + s = opt_uncompress? "uncompressed":"compressed"; + break; + case PKT_ENCRYPTED : s = "encrypted"; break; + case PKT_MARKER : s = "marker"; break; + case PKT_PLAINTEXT : s = "plaintext"; break; + case PKT_RING_TRUST : s = "ring_trust"; break; + case PKT_USER_ID : s = "user_id"; break; + case PKT_PUBLIC_SUBKEY : s = "public_subkey"; break; + case PKT_OLD_COMMENT : s = "old_comment"; break; + case PKT_ATTRIBUTE : s = "attribute"; break; + case PKT_ENCRYPTED_MDC : s = "encrypted_mdc"; break; + case PKT_MDC : s = "mdc"; break; + case PKT_COMMENT : s = "comment"; break; + case PKT_GPG_CONTROL : s = "gpg_control"; break; + default: s = "unknown"; break; + } + return s; +} + + +/* + * Create a new filename and a return a pointer to a statically + * allocated buffer + */ +static char * +create_filename (int pkttype) +{ + static unsigned int partno = 0; + static char *name; + + if (!name) + name = m_alloc (strlen (opt_prefix) + 100 ); + + assert (pkttype < 1000 && pkttype >= 0 ); + partno++; + sprintf (name, "%s%06u-%03d" EXTSEP_S "%.40s", + opt_prefix, partno, pkttype, pkttype_to_string (pkttype)); + return name; +} + +static int +read_u16 (FILE *fp, size_t *rn) +{ + int c; + + if ( (c = getc (fp)) == EOF ) + return -1; + *rn = c << 8; + if ( (c = getc (fp)) == EOF ) + return -1; + *rn |= c; + return 0; +} + +static int +read_u32 (FILE *fp, unsigned long *rn) +{ + size_t tmp; + + if (read_u16 (fp, &tmp)) + return -1; + *rn = tmp << 16; + if (read_u16 (fp, &tmp)) + return -1; + *rn |= tmp; + return 0; +} + + +/* hdr must pint to a buffer large enough to hold all header bytes */ +static int +write_part ( const char *fname, FILE *fpin, unsigned long pktlen, + int pkttype, int partial, unsigned char *hdr, size_t hdrlen) +{ + FILE *fpout; + int c, first; + unsigned char *p; + const char *outname = create_filename (pkttype); + + /* fixme: should we check that this file does not yet exist? */ + if (opt_verbose) + log_info ("writing `%s'\n", outname); + fpout = fopen (outname, "wb"); + if (!fpout) { + log_error ("error creating `%s': %s\n", outname, strerror(errno)); + /* stop right now, otherwise we would mess up the sequence of + * the part numbers */ + g10_exit (1); + } + + if (!opt_uncompress) { + for (p=hdr; hdrlen; p++, hdrlen--) { + if ( putc (*p, fpout) == EOF ) + goto write_error; + } + } + + first = 1; + while (partial) { + size_t partlen; + + if (partial == 1) { /* openpgp */ + if( first ) { + c = pktlen; + assert( c >= 224 && c < 255 ); + first = 0; + } + else if( (c = getc (fpin)) == EOF ) { + goto read_error; + } + else + hdr[hdrlen++] = c; + + if( c < 192 ) { + pktlen = c; + partial = 0; /* (last segment may follow) */ + } + else if( c < 224 ) { + pktlen = (c - 192) * 256; + if( (c = getc (fpin)) == EOF ) + goto read_error; + hdr[hdrlen++] = c; + pktlen += c + 192; + partial = 0; + } + else if( c == 255 ) { + if (read_u32 (fpin, &pktlen)) + goto read_error; + hdr[hdrlen++] = pktlen >> 24; + hdr[hdrlen++] = pktlen >> 16; + hdr[hdrlen++] = pktlen >> 8; + hdr[hdrlen++] = pktlen; + partial = 0; + } + else { /* next partial body length */ + for (p=hdr; hdrlen; p++, hdrlen--) { + if ( putc (*p, fpout) == EOF ) + goto write_error; + } + partlen = 1 << (c & 0x1f); + for (; partlen; partlen--) { + if ((c = getc (fpin)) == EOF) + goto read_error; + if ( putc (c, fpout) == EOF ) + goto write_error; + } + } + } + else if (partial == 2) { /* old gnupg */ + assert (!pktlen); + if ( read_u16 (fpin, &partlen) ) + goto read_error; + hdr[hdrlen++] = partlen >> 8; + hdr[hdrlen++] = partlen; + for (p=hdr; hdrlen; p++, hdrlen--) { + if ( putc (*p, fpout) == EOF ) + goto write_error; + } + if (!partlen) + partial = 0; /* end of packet */ + for (; partlen; partlen--) { + c = getc (fpin); + if (c == EOF) + goto read_error; + if ( putc (c, fpout) == EOF ) + goto write_error; + } + } + else { /* compressed: read to end */ + pktlen = 0; + partial = 0; + hdrlen = 0; + if (opt_uncompress) { + z_stream zs; + byte *inbuf, *outbuf; + unsigned int inbufsize, outbufsize; + int algo, zinit_done, zrc, nread, count; + size_t n; + + if ((c = getc (fpin)) == EOF) + goto read_error; + algo = c; + + memset (&zs, 0, sizeof zs); + inbufsize = 2048; + inbuf = m_alloc (inbufsize); + outbufsize = 8192; + outbuf = m_alloc (outbufsize); + zs.avail_in = 0; + zinit_done = 0; + + do { + if (zs.avail_in < inbufsize) { + n = zs.avail_in; + if (!n) + zs.next_in = (Bytef *) inbuf; + count = inbufsize - n; + for (nread=0; + nread < count && (c=getc (fpin)) != EOF; + nread++) { + inbuf[n+nread] = c; + } + n += nread; + if (nread < count && algo == 1) { + inbuf[n] = 0xFF; /* chew dummy byte */ + n++; + } + zs.avail_in = n; + } + zs.next_out = (Bytef *) outbuf; + zs.avail_out = outbufsize; + + if (!zinit_done) { + zrc = algo == 1? inflateInit2 ( &zs, -13) + : inflateInit ( &zs ); + if (zrc != Z_OK) { + log_fatal ("zlib problem: %s\n", zs.msg? zs.msg : + zrc == Z_MEM_ERROR ? "out of core" : + zrc == Z_VERSION_ERROR ? + "invalid lib version" : + "unknown error" ); + } + zinit_done = 1; + } + else { +#ifdef Z_SYNC_FLUSH + zrc = inflate (&zs, Z_SYNC_FLUSH); +#else + zrc = inflate (&zs, Z_PARTIAL_FLUSH); +#endif + if (zrc == Z_STREAM_END) + ; /* eof */ + else if (zrc != Z_OK && zrc != Z_BUF_ERROR) { + if (zs.msg) + log_fatal ("zlib inflate problem: %s\n", zs.msg ); + else + log_fatal ("zlib inflate problem: rc=%d\n", zrc ); + } + for (n=0; n < outbufsize - zs.avail_out; n++) { + if (putc (outbuf[n], fpout) == EOF ) + goto write_error; + } + } + } while (zrc != Z_STREAM_END && zrc != Z_BUF_ERROR); + inflateEnd (&zs); + } + else { + while ( (c=getc (fpin)) != EOF ) { + if ( putc (c, fpout) == EOF ) + goto write_error; + } + } + if (!feof (fpin)) + goto read_error; + } + + } + + for (p=hdr; hdrlen; p++, hdrlen--) { + if ( putc (*p, fpout) == EOF ) + goto write_error; + } + /* standard packet or last segment of partial length encoded packet */ + for (; pktlen; pktlen--) { + c = getc (fpin); + if (c == EOF) + goto read_error; + if ( putc (c, fpout) == EOF ) + goto write_error; + } + + + if ( fclose (fpout) ) + log_error ("error closing `%s': %s\n", outname, strerror (errno)); + return 0; + + write_error: + log_error ("error writing `%s': %s\n", outname, strerror (errno)); + fclose (fpout); + return 2; + + read_error: { + int save = errno; + fclose (fpout); + errno = save; + } + return -1; +} + + + +static int +do_split (const char *fname, FILE *fp) +{ + int c, ctb, pkttype; + unsigned long pktlen = 0; + int partial = 0; + unsigned char header[20]; + int header_idx = 0; + + ctb = getc (fp); + if (ctb == EOF) + return 3; /* ready */ + header[header_idx++] = ctb; + + if( !(ctb & 0x80) ) { + log_error("invalid CTB %02x\n", ctb ); + return 1; + } + if ( (ctb & 0x40) ) { /* new CTB */ + pkttype = (ctb & 0x3f); + if( (c = getc (fp)) == EOF ) + return -1; + header[header_idx++] = c; + + if( c < 192 ) + pktlen = c; + else if( c < 224 ) { + pktlen = (c - 192) * 256; + if( (c = getc (fp)) == EOF ) + return -1; + header[header_idx++] = c; + pktlen += c + 192; + } + else if( c == 255 ) { + if (read_u32 (fp, &pktlen)) + return -1; + header[header_idx++] = pktlen >> 24; + header[header_idx++] = pktlen >> 16; + header[header_idx++] = pktlen >> 8; + header[header_idx++] = pktlen; + } + else { /* partial body length */ + pktlen = c; + partial = 1; + } + } + else { + int lenbytes; + + pkttype = (ctb>>2)&0xf; + lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3)); + if( !lenbytes ) { + pktlen = 0; /* don't know the value */ + if( pkttype == PKT_COMPRESSED ) + partial = 3; + else + partial = 2; /* the old GnuPG partial length encoding */ + } + else { + for( ; lenbytes; lenbytes-- ) { + pktlen <<= 8; + if( (c = getc (fp)) == EOF ) + return -1; + header[header_idx++] = c; + + pktlen |= c; + } + } + } + + return write_part (fname, fp, pktlen, pkttype, partial, + header, header_idx); +} + + +static void +split_packets (const char *fname) +{ + FILE *fp; + int rc; + + if (!fname || !strcmp (fname, "-")) { + fp = stdin; + fname = "-"; + } + else if ( !(fp = fopen (fname,"rb")) ) { + log_error ("can't open `%s': %s\n", fname, strerror (errno)); + return; + } + + while ( !(rc = do_split (fname, fp)) ) + ; + if ( rc > 0 ) + ; /* error already handled */ + else if ( ferror (fp) ) + log_error ("error reading `%s': %s\n", fname, strerror (errno)); + else + log_error ("premature EOF while reading `%s'\n", fname ); + + if ( fp != stdin ) + fclose (fp); +} + diff --git a/tools/lspgpot b/tools/lspgpot index 585629b5b..8dc9c3047 100755 --- a/tools/lspgpot +++ b/tools/lspgpot @@ -1,6 +1,14 @@ #!/bin/sh # lspgpot - script to extract the ownertrust values # from PGP keyrings and list them in GnuPG ownertrust format. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ../g10/gpg --dry-run --with-fingerprint --with-colons $* | awk ' BEGIN { FS=":" diff --git a/tools/mail-signed-keys b/tools/mail-signed-keys index 3f9f01831..80fbb3481 100755 --- a/tools/mail-signed-keys +++ b/tools/mail-signed-keys @@ -1,19 +1,38 @@ #!/bin/sh +# Copyright (C) 2000, 2001 Free Software Foundation, Inc. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -if [ -z "$1" -o -z "$2" ]; then - echo "usage: mail-signed-keys keyring signedby" >&2 +# FIXME: Add --dry-run, use only valid email addreses, extract only given keys + +dryrun=0 +if [ "$1" = "--dry-run" ]; then + dryrun=1 + shift +fi + +if [ -z "$1" -o -z "$2" -o -z "$3" ]; then + echo "usage: mail-signed-keys keyring signedby signame" >&2 exit 1 fi +signame="$3" + if [ ! -f $1 ]; then echo "mail-signed-keys: '$1': no such file" >&2 exit 1 fi [ -f '.#tdb.tmp' ] && rm '.#tdb.tmp' -ro="--trustdb-name=./.#tdb.tmp --dry-run --lock-never --no-default-keyring --keyring $1" +ro="--homedir . --no-options --trustdb-name=./.#tdb.tmp --dry-run --lock-never --no-default-keyring --keyring $1" -signedby=`gpg $ro --fast-list-mode --list-keys --with-colons $2 \ +signedby=`gpg $ro --list-keys --with-colons $2 \ 2>/dev/null | awk -F: '$1=="pub" {print $5; exit 0}'` if [ -z "$signedby" ]; then @@ -21,14 +40,16 @@ if [ -z "$signedby" ]; then exit 1 fi -echo "About to send the the keys signed by $signedby" >&2 -echo -n "to their owners. Do you really want to do this? (y/N)" >&2 -read -[ "$REPLY" != "y" -a "$REPLY" != "Y" ] && exit 0 - +if [ "$dryrun" = "0" ]; then + echo "About to send the the keys signed by $signedby" >&2 + echo -n "to their owners. Do you really want to do this? (y/N)" >&2 + read + [ "$REPLY" != "y" -a "$REPLY" != "Y" ] && exit 0 +fi gpg $ro --check-sigs --with-colons 2>/dev/null \ - | awk -F: -v signedby="$signedby" -v gpgopt="$ro" ' + | awk -F: -v signedby="$signedby" -v gpgopt="$ro" \ + -v dryrun="$dryrun" -v signame="$signame" ' BEGIN { sendmail="/usr/lib/sendmail -oi -t " } $1 == "pub" { nextkid=$5; nextuid=$10 if( uidcount > 0 ) { myflush() } @@ -42,34 +63,52 @@ function myflush() { if ( kid == signedby ) { uidcount=0; return } print "sending key " substr(kid,9) " to" | "cat >&2" - for(i=0; i < uidcount; i++ ) { + for(i=0; i < 1; i++ ) { print " " uids[i] | "cat >&2" - if( i == 0 ) { - printf "To: %s", uids[i] | sendmail - } - else { - printf ",\n %s", uids[i] | sendmail - } + if( dryrun == 0 ) { + if( i == 0 ) { + printf "To: %s", uids[i] | sendmail + } + else { + printf ",\n %s", uids[i] | sendmail + } + } } - printf "\n" | sendmail - print "Subject: I signed your key " substr(kid,9) | sendmail - print "" | sendmail - print "Hi," | sendmail - print "" | sendmail - print "Here you get back the signed key." | sendmail - print "" | sendmail - print "ciao," | sendmail - print " your Key Signator" | sendmail - print "" | sendmail - cmd = "gpg " gpgopt " --export -a " kid " 2>/dev/null" - while( (cmd | getline) > 0 ) { - print | sendmail + if(dryrun == 0) { + printf "\n" | sendmail + print "Subject: I signed your key " substr(kid,9) | sendmail + print "" | sendmail + print "Hi," | sendmail + print "" | sendmail + print "Here you get back the signed key." | sendmail + print "Please send it yourself to a keyserver." | sendmail + print "" | sendmail + print "Peace," | sendmail + print " " signame | sendmail + print "" | sendmail + cmd = "gpg " gpgopt " --export -a " kid " 2>/dev/null" + while( (cmd | getline) > 0 ) { + print | sendmail + } + print "" | sendmail + close(cmd) + close( sendmail ) } - print "" | sendmail - close(cmd) - close( sendmail ) uidcount=0 } ' + + + + + + + + + + + + + diff --git a/tools/mk-tdata.c b/tools/mk-tdata.c index 70358dc47..dcfa859f1 100644 --- a/tools/mk-tdata.c +++ b/tools/mk-tdata.c @@ -1,7 +1,13 @@ -/* mk-tdata.c +/* mk-tdata.c - Create some simple random testdata + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * - * Create some simple random testdata + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include diff --git a/tools/mpicalc.c b/tools/mpicalc.c index aedb27ecf..2817c9932 100644 --- a/tools/mpicalc.c +++ b/tools/mpicalc.c @@ -1,5 +1,5 @@ /* mpitest.c - test the mpi functions - * Copyright (C) 1998 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This is an RPN calculator; values must be given in hex. * Operation is like dc(1) except that the input/output radix is @@ -28,9 +28,9 @@ #include #include #include -#include #include "util.h" +#include "mpi.h" #include "i18n.h" #define STACKSIZE 100 @@ -38,8 +38,8 @@ static MPI stack[STACKSIZE]; static int stackidx; -static const char * -my_strusage( int level ) +const char * +strusage( int level ) { const char *p; switch( level ) { @@ -56,7 +56,7 @@ my_strusage( int level ) "\nSyntax: mpicalc [options] [files]\n" "MPI RPN calculator\n"; break; - default: p = NULL; + default: p = default_strusage(level); } return p; } @@ -71,35 +71,11 @@ i18n_init(void) #else setlocale( LC_ALL, "" ); #endif - bindtextdomain( PACKAGE, GNUPG_LOCALEDIR ); + bindtextdomain( PACKAGE, G10_LOCALEDIR ); textdomain( PACKAGE ); #endif } -int -mpi_print( FILE *fp, MPI a, int mode ) -{ - int n=0; - - if( !a ) - return fprintf(fp, "[MPI_NULL]"); - if( !mode ) { - unsigned int n1; - n1 = gcry_mpi_get_nbits(a); - n += fprintf(fp, "[%u bits]", n1); - } - else { - int rc; - char *buffer; - - rc = gcry_mpi_aprint( GCRYMPI_FMT_HEX, (void **)&buffer, NULL, a ); - fputs( buffer, fp ); - n += strlen(buffer); - gcry_free( buffer ); - } - return n; -} - static void do_add(void) @@ -257,7 +233,6 @@ main(int argc, char **argv) pargs.argv = &argv; pargs.flags = 0; - set_strusage( my_strusage ); i18n_init(); while( arg_parse( &pargs, opts) ) { switch( pargs.r_opt ) { diff --git a/tools/ring-a-party b/tools/ring-a-party index 7cf05d78d..1993e2732 100755 --- a/tools/ring-a-party +++ b/tools/ring-a-party @@ -1,5 +1,14 @@ #!/bin/sh # ring-a-party - print a keyring suitable for a key signing party +# Copyright (C) 2000, 2001 Free Software Foundation, Inc. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if [ $# -lt 1 ]; then echo "usage: ring-a-party keyring [headerline]" >&2 @@ -54,20 +63,20 @@ $1 == "sub" { if( $4 != 17 && $4 != 3 ) signencrypt=1 } function myflush() { # fixme: take lines to print here into account - if( lines > 50 || lines == -1 ) { + if( lines > 45 || lines == -1 ) { if( lines != -1 ) printf "\f"; page++; printf "%s %-50.50s Page %d\n\n", now, KEYRING, page ; - printf "Type Bits KeyID Created Expires Algorithm Use\n"; + printf " Type Bits KeyID Created Expires Algorithm Use\n\n"; lines = 1; } - printf "pub %04d 0x%s %10s %10s %-10s %15s\n", + printf "[ ] pub %04d 0x%s %10s %10s %-10s %15s\n", nbits, keyid, created, expires == ""? "----------":expires, algostr, signencrypt == 1? "Sign & Encrypt":"Sign only"; length(fpr) == 40 ? printfpr20( fpr ) : printfpr16( fpr ); lnes += 2; for( i=0; i < uidcount; i++ ) { - printf "uid %s\n", uids[i]; + printf "( ) uid %s\n", uids[i]; lines++; } printf "\n\n"; @@ -84,7 +93,7 @@ function mapalgo( no ) function printfpr16( s ) { - printf "f16 Fingerprint16 ="; + printf " f16 Fingerprint16 ="; for(i=0; i < 16; i++ ) { if( i == 8 ) printf " "; printf " %s", substr( s, i*2+1, 2 ); @@ -94,7 +103,7 @@ function printfpr16( s ) function printfpr20( s ) { - printf "f20 Fingerprint20 ="; + printf " f20 Fingerprint20 ="; for(i=0; i < 10; i++ ) { if( i == 5 ) printf " "; printf " %s", substr( s, i*4+1, 4 ); diff --git a/tools/shmtest.c b/tools/shmtest.c index 956dec6c5..fceade1e1 100644 --- a/tools/shmtest.c +++ b/tools/shmtest.c @@ -1,7 +1,16 @@ /* shmtest.c + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ + #include #include #include @@ -10,12 +19,12 @@ #include #include #ifdef HAVE_SYS_IPC_H + #include #include #endif #ifdef HAVE_SYS_SHM_H #include #endif -#include #include "util.h" #include "ttyio.h" #include "i18n.h" @@ -37,6 +46,12 @@ my_usage(void) exit(1); } +const char * +strusage( int level ) +{ + return default_strusage(level); +} + static void i18n_init(void) { @@ -46,7 +61,7 @@ i18n_init(void) #else setlocale( LC_ALL, "" ); #endif - bindtextdomain( PACKAGE, GNUPG_LOCALEDIR ); + bindtextdomain( PACKAGE, G10_LOCALEDIR ); textdomain( PACKAGE ); #endif } @@ -72,7 +87,7 @@ do_get_string( int mode, const char *keyword, byte *area, size_t areasize ) memcpy( area+n+2, p, len ); area[n] = len >> 8; area[n+1] = len; - gcry_free(p); + m_free(p); } else { /* bool */ area[n] = 0; @@ -107,7 +122,7 @@ main(int argc, char **argv) for(n=0,i=1; i < argc; i++ ) n += strlen(argv[i]) + 1; - p = gcry_xmalloc( 100 + n ); + p = m_alloc( 100 + n ); strcpy( p, "../g10/gpg --status-fd 1 --run-as-shm-coprocess 0"); for(i=1; i < argc; i++ ) { strcat(p, " " ); @@ -115,7 +130,7 @@ main(int argc, char **argv) } fp = popen( p, "r" ); - gcry_free( p ); + m_free( p ); if( !fp ) log_error("popen failed: %s\n", strerror(errno)); diff --git a/util/ChangeLog b/util/ChangeLog index 20e9bda3e..c01b5e207 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,129 +1,464 @@ -Mon Sep 18 16:35:45 CEST 2000 Werner Koch +2002-06-21 Stefan Bellon - * strgutil.c (utf8_to_native): Fixed null ptr problem. By - Giampaolo Tomassoni. + * riscos.c (riscos_global_defaults): New. + +2002-06-20 Stefan Bellon + + * riscos.c (riscos_set_filetype_by_number, riscos_set_filetype): + New. Set RISC OS filetype according to MIME type. + +2002-06-14 David Shaw + + * strgutil.c (pop_strlist): New function to pop the head off of a + strlist. + +2002-06-05 Timo Schulz + + * fileutil.c (is_file_compressed): Corrected the magic values + for bzip2 and gzip. Noted by David. + +2002-05-22 Werner Koch + + * fileutil.c (compare_filenames): Replaced stricmp by strcasecmp. + * miscutil.c (answer_is_yes_no_quit,answer_is_yes_no_default): Ditto. + + * strgutil.c (strncasecmp): New. + (memicmp): Removed. + +2002-05-10 Stefan Bellon + + * memory.c (add_entry) [M_DEBUG]: Added some missing EXTRA_ALIGN. + (free_entry) [M_DEBUG]: Free secure memory via secmem_free. + (alloc_secure): Malloc at least 1 byte. + (realloc) [M_GUARD]: Added missing FNAMEARG to function call. + + * logger.c (g10_log_bug0) [__riscos__]: Make use of first + g10_log_bug0 function for later Norcroft compiler. + + * riscos.c: Added stdlib.h include. + +2002-05-04 Werner Koch + + * http.c (write_server) [__MINGW32__]: Replaced WriteFile by send + because sockets don't work with WriteFile under NT anymore. + +2002-05-03 David Shaw + + * argparse.c (optfile_parse): Remove quotes only if they totally + enclose the string, and do not occur within the string. This + makes specifying a program under Win32 easier when you need quotes + around part of a string, but not around the whole string. + +2002-05-02 Werner Koch + + * memory.c (alloc): Malloc at least 1 byte. Noted by Winona Brown. + +2002-04-23 David Shaw + + * miscutil.c: New function answer_is_yes_no_default() to give a + default answer. + +2002-04-22 Stefan Bellon + + * riscos.c (riscos_open, riscos_fopen, riscos_fstat, set_filetype): + Removed as they're not needed anymore. + + * iobuf.c (direct_open) [__riscos__]: Don't allow opening of + directories. + +2002-04-08 Werner Koch + + Fixed filename of last entry. + +2002-03-29 David Shaw + + * miscutil.c (print_string, utf8_to_native): If a delimiter is + used, then quote the backslash character as well. Problem noted + by Rainer Perske. + +2002-03-15 Werner Koch + + * argparse.c (optfile_parse): Fixed missing argument handling. + +2002-02-28 Timo Schulz + + * http.c (write_server): Convert integer to a HANDLE for W32. + +2002-01-27 David Shaw + + * iobuf.c (iobuf_fdopen, iobuf_sockopen): Do not cache fdopened + fds on close. + +2002-01-08 Werner Koch + + * secmem.c (print_warn): Print a pointer to the FAQ. + +2002-01-05 Werner Koch + + * argparse.c (default_strusage): Set default copyright date to 2002. + +2002-01-02 Stefan Bellon + + * iobuf.c [__riscos__]: Updated include file name. + + * fileutil.c [__riscos__]: Ditto. + + * ttyio.d [__riscos__]: Ditto. + + * riscos.c [__riscos__]: Ditto. Added debugging code and + unified error messages. + +2001-12-27 David Shaw + + * errors.c (g10_errstr): Added G10ERR_KEYSERVER + +2001-12-27 Werner Koch + + * simple-gettext.c [MINGW32]: Fixed last changed. + +2001-12-22 Stefan Bellon + + * memory.c (realloc): Fixed realloc not working when M_GUARD is + defined and first parameter is NULL. + +2001-12-22 Timo Schulz + + * fileutil.c (is_file_compressed): New. + +2001-12-19 Werner Koch + + * simple-gettext.c, w32reg.c [CYGWIN32]: Allow to use this file + +2001-10-11 Werner Koch + + * http.c (do_parse_uri): Changed initialization of the port number + so that it does also work with x-hkp. By David Shaw. + +2001-09-19 Werner Koch + + * w32reg.c (get_root_key): New. + (read_w32_registry_string): Use it here. + (write_w32_registry_string): New. Contributed by Timo. + + * iobuf.c (iobuf_ioctl): New command to disable fd + caching. Implemented no_cache flag where needed. + (iobuf_sockopen): Always set no_cache flag. + + * strgutil.c (utf8_to_native): Add a delim arg and changed all + callers. Make sure that quoting is done when translation is + disabled. + * miscutil.c (print_utf8_string2): New. + +2001-09-17 Werner Koch + + * miscutil.c (print_string): Use explicit ranges and not iscntrl(). + (make_printable_string): Ditto. + +2001-09-07 Werner Koch + + * strgutil.c (strsep): New, taken from glibc 2.2.1. + +2001-09-03 Werner Koch + + * miscutil.c (strtimestamp,asctimestamp): Avoid trigraphs. + +2001-08-21 Stefan Bellon + + * riscos.c [__riscos__] (close_fds): Fixed possible endless loop. + +2001-08-20 Werner Koch + + Applied patches from Stefan Bellon to support + RISC OS. Nearly all of these patches are identified by the + __riscos__ macro. + * secmem.c [__riscos__]: Disabled secure memory stuff. + * dotlock.c, ttyio.c [__riscos__]: Adapted for RISC OS + * fileutil.c, iobuf.c: Adapted for RISC OS; mainly replaced + hardcoded path separators with EXTSEP_S like macros. + * http.c (send_request): Use macros for the env-var name. + * logger.c [__riscos__]: Do an fflush at the end of each log + function. + * memory.c [__riscos__]: Minor patches + * riscos.c (set_filetype): New. + + * secmem.c (lock_pool): Under HPUX mlock is broken but we might + have plock, so we use this to lock the entire process. By Albert + Chin. + +2001-07-03 Werner Koch + + * strgutil.c (utf8_to_native): Fixed printing of invalid utf-8 + characters. Thomas Roessler reported that the escaping didn't work + correct. + +2001-06-12 Werner Koch + + * strgutil.c (ascii_memistr,ascii_isupper,ascii_islower, + ascii_toupper,ascii_tolower, ascii_strcasecmp, ascii_memcasecmp): New. + (set_native_charset): Use ascii_strcasecmp() + * fileutil.c (compare_filenames): Ditto + * miscutil.c (answer_is_yes): Ditto. + (answer_is_yes_no_quit): Ditto. + +2001-06-06 Werner Koch + + * strgutil.c (vasprintf) [__MINGW32__]: New. Taken from libiberty. + * ttyio.c (tty_printf) [__MINGW32__]: Replaced the sprintf with + the new vasprintf. + +2001-06-05 Werner Koch + + * dotlock.c (make_dotlock): Typo fixes. + +2001-05-25 Werner Koch + + * ttyio.c (do_get): Fixed a serious format string bug. Thanks to + fish stiqz. + +2001-05-23 Werner Koch + + * secmem.c (EPERM): Try to work around a Slackware problem. + +2001-05-05 Werner Koch + + * http.c (http_start_data): Flush before writing. + (http_wait_response): No need to flush here. + +2001-04-27 Werner Koch + + * memory.c (out_of_core): Print an explanation on reasons why + secret memory can get exhausted. + +2001-04-23 Werner Koch + + * http.c (http_wait_response): Implement new flag to inhibit the + TCP shutdown. + +2001-04-20 Werner Koch + + * http.c (http_start_data): Use write_server and not the iobuf + stuff. I wonder why we are at all using write_server - shouldn't + it be handled by iobuf? + + * strgutil.c (set_native_charset): Allow utf-8 by introducing the + new no_translation variable. + (native_to_utf8): Handle no_translation. + (utf8_to_native): Ditto. + +2001-04-19 Werner Koch + + * miscutil.c (asctimestamp): Handle negative times. We must do + this because Windoze segvs on negative times passed to gmtime(). + (strtimestamp): Ditto. + +2001-04-14 Werner Koch + + * strgutil.c (utf8_to_native): Fixed a segv. Thanks to Keith Clayton. + +2001-04-13 Werner Koch + + * iobuf.c (iobuf_fopen): Removed because it is not used and + furthermore mode is ignored for an fname of "-". Suggested by + Florian Weimer. + +2001-04-02 Werner Koch + + * iobuf.c (translate_file_handle): New. Use this function + everywhere in this file. + (iobuf_translate_file_handle): Always use the osfhandle stuff here + because callers don't know the implementation details of iobuf and + they expect that the handles are translated. + +2001-03-29 Werner Koch + + * miscutil.c (answer_is_yes): An empty string does now return no. + (answer_is_yes_no_quit): Likewise. + + * iobuf.c (iobuf_close): Burn the buffers. + +2001-03-26 Werner Koch + + * ttyio.c: Define TERMDEVICE depending on OS. + + * http.c (http_start_data): send a CRLF and not just a LF. + Pointed out by Steven Murdoch. + +2001-03-13 Werner Koch + + * iobuf.c (iobuf_sockopen): New. + (sock_filter) [__MINGW32__]: New. + (iobuf_ioctl): New. + (file_filter): Implemented keep_open mode. + * http.c (http_open, http_wait_response): Replaced iobuf_fdopen by + iobuf_sockopen and use an iobuf_ioctl to avoid the dup(). + (deinit_sockets, init_sockets) [__MINGW32__]: New. + (connect_server, write_server): Add code to work with W32 sockets. + +2001-03-12 Werner Koch + + * strgutil.c (check_trailing_chars,check_trailing_ws): New. + +2001-03-08 Werner Koch + + * argparse.c (default_strusage): Changed year of printed copyright + to 2001. + + * iobuf.c (fd_cache_invalidate, fd_cache_close, fd_cache_open): New. + (direct_open): Invalidate the fd_cache for read access. + (file_filter): Cache the close here. + (iobuf_open): Use new my_fopen_ro macro to try the cache first. + +2001-03-07 Werner Koch + + * iobuf.c: Made the old stdio file handling cpp conditional + controlled by FILE_FILTER_USES_STDIO and added a new + open/read/close based one. We don't need the stdio buffering + becuase we are doing our own buffering anyway. And it is a + prerequesite to allow the use of ReadFile et al for W32 which in + turn is needed to make the http stuff work there. The new W32 + stuff has also been implemented. Minor changes to all open functions. + (direct_open): New. + (file_filter): Core of the new read/write handling. + (iobuf_get_filelength): Use W32 API function here. But it is + currently limited to 2GB files. + (iobuf_seek): Ditto. + +2001-03-01 Werner Koch + + * errors.c (g10_errstr): New codes UNU_SECKEY and UNU_PUBKEY. + +2000-12-28 Werner Koch + + * dotlock.c: Made all_lockfiles volatile. + (remove_lockfiles): Made public. + +2000-11-30 Werner Koch + + * iobuf.c (iobuf_translate_file_handle): New. + (iobuf_open, iobuf_create): Use it for special filenames + +2000-11-11 Paul Eggert + + * iobuf.c (iobuf_get_filelength): Now returns off_t, not u32. + Remove kludges to worry about large files; the callers check + for files that are too large, and they should already be doing + the right thing in an implementation-independent way. + (fopen, fstat): Remove macros. + + * iobuf.c (iobuf_set_limit, iobuf_tell, iobuf_seek): + Use off_t, not ulong, for file offsets. + (): Include if needed. + (LONG_MAX, LONG_MIN): Define a substitute if needed. + (fseeko): Define a substitute if needed. + + * iobuf.c (iobuf_seek): Do not use %lu to report file + +2000-11-09 Werner Koch + + * iobuf.c (iobuf_enable_special_filenames): New. + (check_special_filename): New. + (iobuf_open): check for special filenames. + (iobuf_create): Ditto. + +2000-10-23 Werner Koch + + * secmem.c (lock_pool): Don't print warning for Windows. + +2000-10-16 Werner Koch + + * secmem.c (lock_pool): Fixed error checking for Linux. + By James Troup. + +Thu Sep 14 14:20:38 CEST 2000 Werner Koch + + * miscutil.c (answer_is_yes_no_quit): Swapped order of yes/no test + so that no is returned for an empty input. By David Champion. + +Wed Sep 6 17:55:47 CEST 2000 Werner Koch * iobuf.c: Use fopen64 insead of fopen when available. (iobuf_get_filelength): Use fstat64 when available but return 2^32-1 if the file is larger than this value. - * miscutil.c (answer_is_yes_no_quit): Swapped order of yes/no test - so that no is returned for an empty input. By David Champion. +Wed Sep 6 14:59:09 CEST 2000 Werner Koch -Fri Aug 18 14:27:14 CEST 2000 Werner Koch + * secmem.c (secmem_realloc): check for failed secmem_malloc. By + Matt Kraai. - * logger.c (log_set_file): Allow to set the file by name. + * strgutil.c (utf8_to_native): Fixed null ptr problem. By + Giampaolo Tomassoni. -Fri Jul 28 18:19:11 CEST 2000 Werner Koch +Thu Jul 27 10:02:38 CEST 2000 Werner Koch * iobuf.c: Use setmode() at several places to set stdin and stdout to binary mode for MSDOS based systems * iobuf.c (underflow): Initialize dummy_len to keep memory checker happy. -Fri Jul 14 19:38:23 CEST 2000 Werner Koch +Fri Jun 9 10:09:52 CEST 2000 Werner Koch - * iobuf.c (iobuf_cancel): Broadcast the new Cancel message to all - filters. Fix for MSDOS. - - * miscutil.c (asctimestamp): Fix for possible buffer overflow by - a large system returned date format string. - - * logger.c (log_inc_errorcount): New. - - * w32reg.c: New. - - * simple-gettext.c: Use the Registry to locate the mo file. - - * http.c (send_request): Add support for proxys; suggested by - Walter Hofmann. - (http_open_document): Pass flags to http_open. - - * ttyio.c (do_get): Replaced #if __MINGW32__ by #ifdef because - gcc 2.95.1 assigns a floating point value (0.2) to this macro, - which in turn can't be used in an expression. * ttyio.c: Simulate termios with termios. By Dave Dykstra. - * ttyio.c (tty_print_utf8_string): Oops. - * ttyio.c (tty_print_utf8_string2): New to allow a max output size. -Thu Jan 27 18:00:44 CET 2000 Werner Koch +Thu Jun 8 20:22:00 CEST 2000 Werner Koch - * Changed all "g10_"/"GPG_" prefixes to "gpg_"/"GPG_". + * secmem.c (lock_pool,secmem_init): Additional check for dropped privs. -Mon Jan 24 13:04:28 CET 2000 Werner Koch +Tue May 30 16:37:55 CEST 2000 Werner Koch - * memory.c: Removed - * secmem.c: Moved to ../gcrypt. - * argparse.c argparse.h logging.c logging.h - mischelp.h stringhelp.c stringhelp.h xmalloc.c - xmalloc.h dotlock.c: Moved to ../jnlib - * libutil-config.h: Removed. + * iobuf.c (iobuf_cancel): Fix for MSDOS. - * logging.c (log_set_file): New. - (log_printf): New. - (do_logv): Add kludge to insert LFs. +Fri Apr 14 19:37:08 CEST 2000 Werner Koch - * Replaced all m_ memory fucntions by gcry_ ones. - * README: New. + * dotlock.c (disable_dotlock): New. Implmented this in the module. -Fri Dec 31 12:48:31 CET 1999 Werner Koch +2000-03-09 14:04:22 Werner Koch (wk@habibti.openit.de) - * memory.c (m_is_secure): New. + * argparse.c (default_strusage): Changed year of default copyright. - * stringhelp.c (trim_trailing_spaces): New. +Tue Mar 7 18:45:31 CET 2000 Werner Koch -Wed Dec 8 21:58:32 CET 1999 Werner Koch + * secmem.c (lock_pool): No more warning for QNX. By Sam Roberts. + +2000-03-02 15:51:04 Werner Koch (wk@habibti.gnupg.de) + + * ttyio.c (tty_print_utf8_string): Oops. + +Thu Mar 2 15:37:46 CET 2000 Werner Koch + + * ttyio.c (tty_print_utf8_string2): New to allow a max output size. + +Wed Feb 23 10:07:57 CET 2000 Werner Koch + + * miscutil.c (asctimestamp): Fix for possible buffer overflow by + large system returned date format string. + +Fri Dec 31 14:08:15 CET 1999 Werner Koch + + * logger.c (log_inc_errorcount): New. + +Sat Dec 4 12:30:28 CET 1999 Werner Koch + + * iobuf.c (iobuf_cancel): Broadcast the new Cancel mesaage to all + filters. + +Mon Nov 22 11:14:53 CET 1999 Werner Koch * strgutil.c (strcasecmp): New. - * argparse.h: New. - * libutil.h: New. - * argparse.c: Use these new files. - (optfile_parse): s/m_alloc/libutil_xalloc/ + * secmem.c (pool_is_mmapped): Made volatile. - * strgutil.c: Moved a lot of function to ... - * stringhelp.c: ... this new file - * stringhelp.h: ... and the definitions to here +Sat Oct 9 20:34:41 CEST 1999 Werner Koch - * mischelp.h: New. + * Makefile.am: Removed libtool. - * logging.h: New, but not yet used in GnuPG. - * logging.c: Ditto. +Fri Oct 8 20:32:01 CEST 1999 Werner Koch -Fri Nov 19 17:15:20 CET 1999 Werner Koch + * w32reg.c: New. + * simple-gettext.c: Use the Registry to locate the mo file. - * argparse.c (default_strusage): Renamed to strusage. Fall back - to the old behaviour if no sepcial strhandler has been set. - - * memory.c (g10_private_check_heap): New. - - * secmem.c (m_is_secure): Renamed to ... - (g10_private_is_secure): ... this. - * memory.c (g10_private_malloc): New. Takes core functionalty of ... - (m_alloc): ... and calls it. - (g10_private_malloc_secure): New. Takes core functionalty of ... - (m_alloc_secure): ... and calls it. - (g10_private_realloc): New. Takes core functionalty of ... - (m_realloc): ... and this one calls it. - (g10_private_free): Wraps around m_free(). - - * argparse.c (g10_set_strusage): New. - (default_strusage): renamed to ... - (g10_default_strusage): .. this. - -Sat Nov 13 17:44:23 CET 1999 Werner Koch - - * g10u.c: Removed. - - * errors.c (g10_errstr): Use gcry_strerror as fallback - -Tue Oct 26 14:10:21 CEST 1999 Werner Koch - - * simple-gettext.c (set_gettext_file): Check charset and do - mapping only for IBM850. - * strgutil.c (query_native_charset): New. - (get_native_charset): Try to get it from the system on the first call. - (ibm850_unicode): New table. + * http.c (send_request): Add support for proxys; suggested by + Walter Hofmann. + (http_open_document): Pass flags to http_open. Fri Sep 17 12:56:42 CEST 1999 Werner Koch @@ -208,7 +543,7 @@ Sat Jun 26 12:15:59 CEST 1999 Werner Koch Fri Jun 18 00:18:02 CEST 1999 Michael Roth * iobuf.c: file_filter() Detection of EOF on terminals - improved/fixed (see Bug #21). + improved/fixed (see Bug #21). Mon Jun 14 21:18:54 CEST 1999 Michael Roth @@ -581,3 +916,15 @@ Fri Feb 13 15:14:13 1998 Werner Koch (wk@isil.d.shuttle.de) * argparse.c (show_help): New '\v' kludge. + + Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + diff --git a/util/Makefile.am b/util/Makefile.am index 28d0c8cb3..a8d40da2d 100644 --- a/util/Makefile.am +++ b/util/Makefile.am @@ -1,13 +1,32 @@ +# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +# +# This file is part of GnuPG. +# +# GnuPG is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GnuPG is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + ## Process this file with automake to produce Makefile.in -INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl -EXTRA_DIST = README +INCLUDES = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl noinst_LIBRARIES = libutil.a -libutil_a_SOURCES = logger.c fileutil.c miscutil.c strgutil.c \ - ttyio.c errors.c iobuf.c \ - http.c simple-gettext.c w32reg.c + +#libutil_a_LDFLAGS = +libutil_a_SOURCES = g10u.c logger.c fileutil.c miscutil.c strgutil.c \ + ttyio.c argparse.c memory.c secmem.c errors.c iobuf.c \ + dotlock.c http.c simple-gettext.c w32reg.c http-test: http.c @@ -16,5 +35,3 @@ http-test: http.c - - diff --git a/util/README b/util/README deleted file mode 100644 index 168c58a7c..000000000 --- a/util/README +++ /dev/null @@ -1,7 +0,0 @@ -Here you find supporting code for GnuPG and the tools. It needs some -support from libgcrypt. - -util is not a good name, so at some time we should rename the whole source -tree. However this is not easy for CVS and diff reasons. - - diff --git a/util/argparse.c b/util/argparse.c new file mode 100644 index 000000000..c3cc3d709 --- /dev/null +++ b/util/argparse.c @@ -0,0 +1,1000 @@ +/* [argparse.c wk 17.06.97] Argument Parser for option handling + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * + * Note: This is an independent version of the one in WkLib + */ + +#include +#include +#include +#include +#include + +#include "util.h" +#include "i18n.h" + + +/********************************* + * @Summary arg_parse + * #include + * + * typedef struct { + * char *argc; pointer to argc (value subject to change) + * char ***argv; pointer to argv (value subject to change) + * unsigned flags; Global flags (DO NOT CHANGE) + * int err; print error about last option + * 1 = warning, 2 = abort + * int r_opt; return option + * int r_type; type of return value (0 = no argument found) + * union { + * int ret_int; + * long ret_long + * ulong ret_ulong; + * char *ret_str; + * } r; Return values + * struct { + * int idx; + * const char *last; + * void *aliases; + * } internal; DO NOT CHANGE + * } ARGPARSE_ARGS; + * + * typedef struct { + * int short_opt; + * const char *long_opt; + * unsigned flags; + * } ARGPARSE_OPTS; + * + * int arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts ); + * + * @Description + * This is my replacement for getopt(). See the example for a typical usage. + * Global flags are: + * Bit 0 : Do not remove options form argv + * Bit 1 : Do not stop at last option but return other args + * with r_opt set to -1. + * Bit 2 : Assume options and real args are mixed. + * Bit 3 : Do not use -- to stop option processing. + * Bit 4 : Do not skip the first arg. + * Bit 5 : allow usage of long option with only one dash + * Bit 6 : ignore --version and --help + * all other bits must be set to zero, this value is modified by the + * function, so assume this is write only. + * Local flags (for each option): + * Bit 2-0 : 0 = does not take an argument + * 1 = takes int argument + * 2 = takes string argument + * 3 = takes long argument + * 4 = takes ulong argument + * Bit 3 : argument is optional (r_type will the be set to 0) + * Bit 4 : allow 0x etc. prefixed values. + * Bit 7 : this is a command and not an option + * You stop the option processing by setting opts to NULL, the function will + * then return 0. + * @Return Value + * Returns the args.r_opt or 0 if ready + * r_opt may be -2/-7 to indicate an unknown option/command. + * @See Also + * ArgExpand + * @Notes + * You do not need to process the options 'h', '--help' or '--version' + * because this function includes standard help processing; but if you + * specify '-h', '--help' or '--version' you have to do it yourself. + * The option '--' stops argument processing; if bit 1 is set the function + * continues to return normal arguments. + * To process float args or unsigned args you must use a string args and do + * the conversion yourself. + * @Example + * + * ARGPARSE_OPTS opts[] = { + * { 'v', "verbose", 0 }, + * { 'd', "debug", 0 }, + * { 'o', "output", 2 }, + * { 'c', "cross-ref", 2|8 }, + * { 'm', "my-option", 1|8 }, + * { 500, "have-no-short-option-for-this-long-option", 0 }, + * {0} }; + * ARGPARSE_ARGS pargs = { &argc, &argv, 0 } + * + * while( ArgParse( &pargs, &opts) ) { + * switch( pargs.r_opt ) { + * case 'v': opt.verbose++; break; + * case 'd': opt.debug++; break; + * case 'o': opt.outfile = pargs.r.ret_str; break; + * case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break; + * case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break; + * case 500: opt.a_long_one++; break + * default : pargs.err = 1; break; -- force warning output -- + * } + * } + * if( argc > 1 ) + * log_fatal( "Too many args"); + * + */ + +typedef struct alias_def_s *ALIAS_DEF; +struct alias_def_s { + ALIAS_DEF next; + char *name; /* malloced buffer with name, \0, value */ + const char *value; /* ptr into name */ +}; + +static int set_opt_arg(ARGPARSE_ARGS *arg, unsigned flags, char *s); +static void show_help(ARGPARSE_OPTS *opts, unsigned flags); +static void show_version(void); + +static void +initialize( ARGPARSE_ARGS *arg, const char *filename, unsigned *lineno ) +{ + if( !(arg->flags & (1<<15)) ) { /* initialize this instance */ + arg->internal.idx = 0; + arg->internal.last = NULL; + arg->internal.inarg = 0; + arg->internal.stopped = 0; + arg->internal.aliases = NULL; + arg->internal.cur_alias = NULL; + arg->err = 0; + arg->flags |= 1<<15; /* mark initialized */ + if( *arg->argc < 0 ) + log_bug("Invalid argument for ArgParse\n"); + } + + + if( arg->err ) { /* last option was erroneous */ + const char *s; + + if( filename ) { + if( arg->r_opt == -6 ) + s = "%s:%u: argument not expected\n"; + else if( arg->r_opt == -5 ) + s = "%s:%u: read error\n"; + else if( arg->r_opt == -4 ) + s = "%s:%u: keyword too long\n"; + else if( arg->r_opt == -3 ) + s = "%s:%u: missing argument\n"; + else if( arg->r_opt == -7 ) + s = "%s:%u: invalid command\n"; + else if( arg->r_opt == -10 ) + s = "%s:%u: invalid alias definition\n"; + else + s = "%s:%u: invalid option\n"; + log_error(s, filename, *lineno ); + } + else { + if( arg->r_opt == -3 ) + s = "Missing argument for option \"%.50s\"\n"; + else if( arg->r_opt == -6 ) + s = "Option \"%.50s\" does not expect an argument\n"; + else if( arg->r_opt == -7 ) + s = "Invalid command \"%.50s\"\n"; + else if( arg->r_opt == -8 ) + s = "Option \"%.50s\" is ambiguous\n"; + else if( arg->r_opt == -9 ) + s = "Command \"%.50s\" is ambiguous\n"; + else + s = "Invalid option \"%.50s\"\n"; + log_error(s, arg->internal.last? arg->internal.last:"[??]" ); + } + if( arg->err != 1 ) + exit(2); + arg->err = 0; + } + + /* clearout the return value union */ + arg->r.ret_str = NULL; + arg->r.ret_long= 0; +} + + +static void +store_alias( ARGPARSE_ARGS *arg, char *name, char *value ) +{ + /* TODO: replace this dummy function with a rea one + * and fix the probelms IRIX has with (ALIAS_DEV)arg.. + * used as lvalue + */ +#if 0 + ALIAS_DEF a = m_alloc( sizeof *a ); + a->name = name; + a->value = value; + a->next = (ALIAS_DEF)arg->internal.aliases; + (ALIAS_DEF)arg->internal.aliases = a; +#endif +} + +/**************** + * Get options from a file. + * Lines starting with '#' are comment lines. + * Syntax is simply a keyword and the argument. + * Valid keywords are all keywords from the long_opt list without + * the leading dashes. The special keywords "help", "warranty" and "version" + * are not valid here. + * The special keyword "alias" may be used to store alias definitions, + * which are later expanded like long options. + * Caller must free returned strings. + * If called with FP set to NULL command line args are parse instead. + * + * Q: Should we allow the syntax + * keyword = value + * and accept for boolean options a value of 1/0, yes/no or true/false? + * Note: Abbreviation of options is here not allowed. + */ +int +optfile_parse( FILE *fp, const char *filename, unsigned *lineno, + ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts) +{ + int state, i, c; + int idx=0; + char keyword[100]; + char *buffer = NULL; + size_t buflen = 0; + int inverse=0; + int in_alias=0; + + if( !fp ) /* same as arg_parse() in this case */ + return arg_parse( arg, opts ); + + initialize( arg, filename, lineno ); + + /* find the next keyword */ + state = i = 0; + for(;;) { + c=getc(fp); + if( c == '\n' || c== EOF ) { + if( c != EOF ) + ++*lineno; + if( state == -1 ) + break; + else if( state == 2 ) { + keyword[i] = 0; + for(i=0; opts[i].short_opt; i++ ) + if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) ) + break; + idx = i; + arg->r_opt = opts[idx].short_opt; + if( inverse ) /* this does not have an effect, hmmm */ + arg->r_opt = -arg->r_opt; + if( !opts[idx].short_opt ) /* unknown command/option */ + arg->r_opt = (opts[idx].flags & 256)? -7:-2; + else if( !(opts[idx].flags & 7) ) /* does not take an arg */ + arg->r_type = 0; /* okay */ + else if( (opts[idx].flags & 8) ) /* argument is optional */ + arg->r_type = 0; /* okay */ + else /* required argument */ + arg->r_opt = -3; /* error */ + break; + } + else if( state == 3 ) { /* no argument found */ + if( in_alias ) + arg->r_opt = -3; /* error */ + else if( !(opts[idx].flags & 7) ) /* does not take an arg */ + arg->r_type = 0; /* okay */ + else if( (opts[idx].flags & 8) ) /* no optional argument */ + arg->r_type = 0; /* okay */ + else /* no required argument */ + arg->r_opt = -3; /* error */ + break; + } + else if( state == 4 ) { /* have an argument */ + if( in_alias ) { + if( !buffer ) + arg->r_opt = -6; + else { + char *p; + + buffer[i] = 0; + p = strpbrk( buffer, " \t" ); + if( p ) { + *p++ = 0; + trim_spaces( p ); + } + if( !p || !*p ) { + m_free( buffer ); + arg->r_opt = -10; + } + else { + store_alias( arg, buffer, p ); + } + } + } + else if( !(opts[idx].flags & 7) ) /* does not take an arg */ + arg->r_opt = -6; /* error */ + else { + char *p; + if( !buffer ) { + keyword[i] = 0; + buffer = m_strdup(keyword); + } + else + buffer[i] = 0; + + trim_spaces( buffer ); + p = buffer; + /* remove quotes if they totally enclose the + string, and do not occur within the string */ + if( *p == '"' && p[strlen(p)-1]=='"') { + char *i=p; + + while(*(++i)) + if(*i=='"') + break; + + if(*i=='"' && *(i+1)=='\0') { + p[strlen(p)-1] = 0; + p++; + } + } + if( !set_opt_arg(arg, opts[idx].flags, p) ) + m_free(buffer); + } + break; + } + else if( c == EOF ) { + if( ferror(fp) ) + arg->r_opt = -5; /* read error */ + else + arg->r_opt = 0; /* eof */ + break; + } + state = 0; + i = 0; + } + else if( state == -1 ) + ; /* skip */ + else if( !state && isspace(c) ) + ; /* skip leading white space */ + else if( !state && c == '#' ) + state = 1; /* start of a comment */ + else if( state == 1 ) + ; /* skip comments */ + else if( state == 2 && isspace(c) ) { + keyword[i] = 0; + for(i=0; opts[i].short_opt; i++ ) + if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) ) + break; + idx = i; + arg->r_opt = opts[idx].short_opt; + if( !opts[idx].short_opt ) { + if( !strcmp( keyword, "alias" ) ) { + in_alias = 1; + state = 3; + } + else { + arg->r_opt = (opts[idx].flags & 256)? -7:-2; + state = -1; /* skip rest of line and leave */ + } + } + else + state = 3; + } + else if( state == 3 ) { /* skip leading spaces of the argument */ + if( !isspace(c) ) { + i = 0; + keyword[i++] = c; + state = 4; + } + } + else if( state == 4 ) { /* collect the argument */ + if( buffer ) { + if( i < buflen-1 ) + buffer[i++] = c; + else { + buflen += 50; + buffer = m_realloc(buffer, buflen); + buffer[i++] = c; + } + } + else if( i < DIM(keyword)-1 ) + keyword[i++] = c; + else { + buflen = DIM(keyword)+50; + buffer = m_alloc(buflen); + memcpy(buffer, keyword, i); + buffer[i++] = c; + } + } + else if( i >= DIM(keyword)-1 ) { + arg->r_opt = -4; /* keyword to long */ + state = -1; /* skip rest of line and leave */ + } + else { + keyword[i++] = c; + state = 2; + } + } + + return arg->r_opt; +} + + + +static int +find_long_option( ARGPARSE_ARGS *arg, + ARGPARSE_OPTS *opts, const char *keyword ) +{ + int i; + size_t n; + + /* Would be better if we can do a binary search, but it is not + possible to reorder our option table because we would mess + up our help strings - What we can do is: Build a nice option + lookup table wehn this function is first invoked */ + if( !*keyword ) + return -1; + for(i=0; opts[i].short_opt; i++ ) + if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) ) + return i; + #if 0 + { + ALIAS_DEF a; + /* see whether it is an alias */ + for( a = args->internal.aliases; a; a = a->next ) { + if( !strcmp( a->name, keyword) ) { + /* todo: must parse the alias here */ + args->internal.cur_alias = a; + return -3; /* alias available */ + } + } + } + #endif + /* not found, see whether it is an abbreviation */ + /* aliases may not be abbreviated */ + n = strlen( keyword ); + for(i=0; opts[i].short_opt; i++ ) { + if( opts[i].long_opt && !strncmp( opts[i].long_opt, keyword, n ) ) { + int j; + for(j=i+1; opts[j].short_opt; j++ ) { + if( opts[j].long_opt + && !strncmp( opts[j].long_opt, keyword, n ) ) + return -2; /* abbreviation is ambiguous */ + } + return i; + } + } + return -1; +} + +int +arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts) +{ + int idx; + int argc; + char **argv; + char *s, *s2; + int i; + + initialize( arg, NULL, NULL ); + argc = *arg->argc; + argv = *arg->argv; + idx = arg->internal.idx; + + if( !idx && argc && !(arg->flags & (1<<4)) ) { /* skip the first entry */ + argc--; argv++; idx++; + } + + next_one: + if( !argc ) { /* no more args */ + arg->r_opt = 0; + goto leave; /* ready */ + } + + s = *argv; + arg->internal.last = s; + + if( arg->internal.stopped && (arg->flags & (1<<1)) ) { + arg->r_opt = -1; /* not an option but a argument */ + arg->r_type = 2; + arg->r.ret_str = s; + argc--; argv++; idx++; /* set to next one */ + } + else if( arg->internal.stopped ) { /* ready */ + arg->r_opt = 0; + goto leave; + } + else if( *s == '-' && s[1] == '-' ) { /* long option */ + char *argpos; + + arg->internal.inarg = 0; + if( !s[2] && !(arg->flags & (1<<3)) ) { /* stop option processing */ + arg->internal.stopped = 1; + argc--; argv++; idx++; + goto next_one; + } + + argpos = strchr( s+2, '=' ); + if( argpos ) + *argpos = 0; + i = find_long_option( arg, opts, s+2 ); + if( argpos ) + *argpos = '='; + + if( i < 0 && !strcmp( "help", s+2) ) { + if( !(arg->flags & (1<<6)) ) { + show_help(opts, arg->flags); + } + } + else if( i < 0 && !strcmp( "version", s+2) ) { + if( !(arg->flags & (1<<6)) ) { + show_version(); + exit(0); + } + } + else if( i < 0 && !strcmp( "warranty", s+2) ) { + puts( strusage(16) ); + exit(0); + } + else if( i < 0 && !strcmp( "dump-options", s+2) ) { + for(i=0; opts[i].short_opt; i++ ) { + if( opts[i].long_opt ) + printf( "--%s\n", opts[i].long_opt ); + } + fputs("--dump-options\n--help\n--version\n--warranty\n", stdout ); + exit(0); + } + + if( i == -2 ) /* ambiguous option */ + arg->r_opt = -8; + else if( i == -1 ) { + arg->r_opt = -2; + arg->r.ret_str = s+2; + } + else + arg->r_opt = opts[i].short_opt; + if( i < 0 ) + ; + else if( (opts[i].flags & 7) ) { + if( argpos ) { + s2 = argpos+1; + if( !*s2 ) + s2 = NULL; + } + else + s2 = argv[1]; + if( !s2 && (opts[i].flags & 8) ) { /* no argument but it is okay*/ + arg->r_type = 0; /* because it is optional */ + } + else if( !s2 ) { + arg->r_opt = -3; /* missing argument */ + } + else if( !argpos && *s2 == '-' && (opts[i].flags & 8) ) { + /* the argument is optional and the next seems to be + * an option. We do not check this possible option + * but assume no argument */ + arg->r_type = 0; + } + else { + set_opt_arg(arg, opts[i].flags, s2); + if( !argpos ) { + argc--; argv++; idx++; /* skip one */ + } + } + } + else { /* does not take an argument */ + if( argpos ) + arg->r_type = -6; /* argument not expected */ + else + arg->r_type = 0; + } + argc--; argv++; idx++; /* set to next one */ + } + else if( (*s == '-' && s[1]) || arg->internal.inarg ) { /* short option */ + int dash_kludge = 0; + i = 0; + if( !arg->internal.inarg ) { + arg->internal.inarg++; + if( arg->flags & (1<<5) ) { + for(i=0; opts[i].short_opt; i++ ) + if( opts[i].long_opt && !strcmp( opts[i].long_opt, s+1)) { + dash_kludge=1; + break; + } + } + } + s += arg->internal.inarg; + + if( !dash_kludge ) { + for(i=0; opts[i].short_opt; i++ ) + if( opts[i].short_opt == *s ) + break; + } + + if( !opts[i].short_opt && ( *s == 'h' || *s == '?' ) ) { + if( !(arg->flags & (1<<6)) ) { + show_help(opts, arg->flags); + } + } + + arg->r_opt = opts[i].short_opt; + if( !opts[i].short_opt ) { + arg->r_opt = (opts[i].flags & 256)? -7:-2; + arg->internal.inarg++; /* point to the next arg */ + arg->r.ret_str = s; + } + else if( (opts[i].flags & 7) ) { + if( s[1] && !dash_kludge ) { + s2 = s+1; + set_opt_arg(arg, opts[i].flags, s2); + } + else { + s2 = argv[1]; + if( !s2 && (opts[i].flags & 8) ) { /* no argument but it is okay*/ + arg->r_type = 0; /* because it is optional */ + } + else if( !s2 ) { + arg->r_opt = -3; /* missing argument */ + } + else if( *s2 == '-' && s2[1] && (opts[i].flags & 8) ) { + /* the argument is optional and the next seems to be + * an option. We do not check this possible option + * but assume no argument */ + arg->r_type = 0; + } + else { + set_opt_arg(arg, opts[i].flags, s2); + argc--; argv++; idx++; /* skip one */ + } + } + s = "x"; /* so that !s[1] yields false */ + } + else { /* does not take an argument */ + arg->r_type = 0; + arg->internal.inarg++; /* point to the next arg */ + } + if( !s[1] || dash_kludge ) { /* no more concatenated short options */ + arg->internal.inarg = 0; + argc--; argv++; idx++; + } + } + else if( arg->flags & (1<<2) ) { + arg->r_opt = -1; /* not an option but a argument */ + arg->r_type = 2; + arg->r.ret_str = s; + argc--; argv++; idx++; /* set to next one */ + } + else { + arg->internal.stopped = 1; /* stop option processing */ + goto next_one; + } + + leave: + *arg->argc = argc; + *arg->argv = argv; + arg->internal.idx = idx; + return arg->r_opt; +} + + + +static int +set_opt_arg(ARGPARSE_ARGS *arg, unsigned flags, char *s) +{ + int base = (flags & 16)? 0 : 10; + + switch( arg->r_type = (flags & 7) ) { + case 1: /* takes int argument */ + arg->r.ret_int = (int)strtol(s,NULL,base); + return 0; + case 3: /* takes long argument */ + arg->r.ret_long= strtol(s,NULL,base); + return 0; + case 4: /* takes ulong argument */ + arg->r.ret_ulong= strtoul(s,NULL,base); + return 0; + case 2: /* takes string argument */ + default: + arg->r.ret_str = s; + return 1; + } +} + + +static size_t +long_opt_strlen( ARGPARSE_OPTS *o ) +{ + size_t n = strlen(o->long_opt); + + if( o->description && *o->description == '|' ) { + const char *s; + + s=o->description+1; + if( *s != '=' ) + n++; + for(; *s && *s != '|'; s++ ) + n++; + } + return n; +} + +/**************** + * Print formatted help. The description string has some special + * meanings: + * - A description string which is "@" suppresses help output for + * this option + * - a description,ine which starts with a '@' and is followed by + * any other characters is printed as is; this may be used for examples + * ans such. + * - A description which starts with a '|' outputs the string between this + * bar and the next one as arguments of the long option. + */ +static void +show_help( ARGPARSE_OPTS *opts, unsigned flags ) +{ + const char *s; + + show_version(); + putchar('\n'); + s = strusage(41); + puts(s); + if( opts[0].description ) { /* auto format the option description */ + int i,j, indent; + /* get max. length of long options */ + for(i=indent=0; opts[i].short_opt; i++ ) { + if( opts[i].long_opt ) + if( !opts[i].description || *opts[i].description != '@' ) + if( (j=long_opt_strlen(opts+i)) > indent && j < 35 ) + indent = j; + } + /* example: " -v, --verbose Viele Sachen ausgeben" */ + indent += 10; + if( *opts[0].description != '@' ) + puts("Options:"); + for(i=0; opts[i].short_opt; i++ ) { + s = _( opts[i].description ); + if( s && *s== '@' && !s[1] ) /* hide this line */ + continue; + if( s && *s == '@' ) { /* unindented comment only line */ + for(s++; *s; s++ ) { + if( *s == '\n' ) { + if( s[1] ) + putchar('\n'); + } + else + putchar(*s); + } + putchar('\n'); + continue; + } + + j = 3; + if( opts[i].short_opt < 256 ) { + printf(" -%c", opts[i].short_opt ); + if( !opts[i].long_opt ) { + if(s && *s == '|' ) { + putchar(' '); j++; + for(s++ ; *s && *s != '|'; s++, j++ ) + putchar(*s); + if( *s ) + s++; + } + } + } + else + fputs(" ", stdout); + if( opts[i].long_opt ) { + j += printf("%c --%s", opts[i].short_opt < 256?',':' ', + opts[i].long_opt ); + if(s && *s == '|' ) { + if( *++s != '=' ) { + putchar(' '); + j++; + } + for( ; *s && *s != '|'; s++, j++ ) + putchar(*s); + if( *s ) + s++; + } + fputs(" ", stdout); + j += 3; + } + for(;j < indent; j++ ) + putchar(' '); + if( s ) { + if( *s && j > indent ) { + putchar('\n'); + for(j=0;j < indent; j++ ) + putchar(' '); + } + for(; *s; s++ ) { + if( *s == '\n' ) { + if( s[1] ) { + putchar('\n'); + for(j=0;j < indent; j++ ) + putchar(' '); + } + } + else + putchar(*s); + } + } + putchar('\n'); + } + if( flags & 32 ) + puts("\n(A single dash may be used instead of the double ones)"); + } + if( (s=strusage(19)) ) { /* bug reports to ... */ + putchar('\n'); + fputs(s, stdout); + } + fflush(stdout); + exit(0); +} + +static void +show_version() +{ + const char *s; + int i; + /* version line */ + fputs(strusage(11), stdout); + if( (s=strusage(12)) ) + printf(" (%s)", s ); + printf(" %s\n", strusage(13) ); + /* additional version lines */ + for(i=20; i < 30; i++ ) + if( (s=strusage(i)) ) + printf("%s\n", s ); + /* copyright string */ + if( (s=strusage(14)) ) + printf("%s\n", s ); + /* copying conditions */ + if( (s=strusage(15)) ) + fputs(s, stdout); + /* thanks */ + if( (s=strusage(18)) ) + fputs(s, stdout); + /* additional program info */ + for(i=30; i < 40; i++ ) + if( (s=strusage(i)) ) + fputs( (const byte*)s, stdout); + fflush(stdout); +} + + +void +usage( int level ) +{ + if( !level ) { + fprintf(stderr,"%s %s; %s\n", strusage(11), strusage(13), + strusage(14) ); + fflush(stderr); + } + else if( level == 1 ) { + fputs(strusage(40),stderr); + exit(2); + } + else if( level == 2 ) { + puts(strusage(41)); + exit(0); + } +} + +/* Level + * 0: Copyright String auf stderr ausgeben + * 1: Kurzusage auf stderr ausgeben und beenden + * 2: Langusage auf stdout ausgeben und beenden + * 11: name of program + * 12: optional name of package which includes this program. + * 13: version string + * 14: copyright string + * 15: Short copying conditions (with LFs) + * 16: Long copying conditions (with LFs) + * 17: Optional printable OS name + * 18: Optional thanks list (with LFs) + * 19: Bug report info + *20..29: Additional lib version strings. + *30..39: Additional program info (with LFs) + * 40: short usage note (with LF) + * 41: long usage note (with LF) + */ +const char * +default_strusage( int level ) +{ + const char *p = NULL; + switch( level ) { + case 11: p = "foo"; break; + case 13: p = "0.0"; break; + case 14: p = "Copyright (C) 2002 Free Software Foundation, Inc."; break; + case 15: p = +"This program comes with ABSOLUTELY NO WARRANTY.\n" +"This is free software, and you are welcome to redistribute it\n" +"under certain conditions. See the file COPYING for details.\n"; break; + case 16: p = +"This is free software; you can redistribute it and/or modify\n" +"it under the terms of the GNU General Public License as published by\n" +"the Free Software Foundation; either version 2 of the License, or\n" +"(at your option) any later version.\n\n" +"It is distributed in the hope that it will be useful,\n" +"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" +"GNU General Public License for more details.\n\n" +"You should have received a copy of the GNU General Public License\n" +"along with this program; if not, write to the Free Software\n" +"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"; + break; + case 40: /* short and long usage */ + case 41: p = ""; break; + } + + return p; +} + + + +#ifdef TEST +static struct { + int verbose; + int debug; + char *outfile; + char *crf; + int myopt; + int echo; + int a_long_one; +}opt; + +int +main(int argc, char **argv) +{ + ARGPARSE_OPTS opts[] = { + { 'v', "verbose", 0 , "Laut sein"}, + { 'e', "echo" , 0 , "Zeile ausgeben, damit wir sehen, was wir einegegeben haben"}, + { 'd', "debug", 0 , "Debug\nfalls mal etasws\nSchief geht"}, + { 'o', "output", 2 }, + { 'c', "cross-ref", 2|8, "cross-reference erzeugen\n" }, + { 'm', "my-option", 1|8 }, + { 500, "a-long-option", 0 }, + {0} }; + ARGPARSE_ARGS pargs = { &argc, &argv, 2|4|32 }; + int i; + + while( ArgParse( &pargs, opts) ) { + switch( pargs.r_opt ) { + case -1 : printf( "arg=`%s'\n", pargs.r.ret_str); break; + case 'v': opt.verbose++; break; + case 'e': opt.echo++; break; + case 'd': opt.debug++; break; + case 'o': opt.outfile = pargs.r.ret_str; break; + case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break; + case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break; + case 500: opt.a_long_one++; break; + default : pargs.err = 1; break; /* force warning output */ + } + } + for(i=0; i < argc; i++ ) + printf("%3d -> (%s)\n", i, argv[i] ); + puts("Options:"); + if( opt.verbose ) + printf(" verbose=%d\n", opt.verbose ); + if( opt.debug ) + printf(" debug=%d\n", opt.debug ); + if( opt.outfile ) + printf(" outfile=`%s'\n", opt.outfile ); + if( opt.crf ) + printf(" crffile=`%s'\n", opt.crf ); + if( opt.myopt ) + printf(" myopt=%d\n", opt.myopt ); + if( opt.a_long_one ) + printf(" a-long-one=%d\n", opt.a_long_one ); + if( opt.echo ) + printf(" echo=%d\n", opt.echo ); + return 0; +} +#endif + +/**** bottom of file ****/ diff --git a/util/dotlock.c b/util/dotlock.c new file mode 100644 index 000000000..fac825450 --- /dev/null +++ b/util/dotlock.c @@ -0,0 +1,420 @@ +/* dotlock.c - dotfile locking + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#if !defined (HAVE_DOSISH_SYSTEM) +#include +#endif +#include +#include +#include +#include +#include +#include "types.h" +#include "util.h" +#include "memory.h" + +struct dotlock_handle { + struct dotlock_handle *next; + char *tname; /* name of lockfile template */ + char *lockname; /* name of the real lockfile */ + int locked; /* lock status */ + int disable; /* locking */ +}; + + +static volatile DOTLOCK all_lockfiles; +static int never_lock; + +static int read_lockfile( const char *name ); + +void +disable_dotlock(void) +{ + never_lock = 1; +} + +/**************** + * Create a lockfile with the given name and return an object of + * type DOTLOCK which may be used later to actually do the lock. + * A cleanup routine gets installed to cleanup left over locks + * or other files used together with the lockmechanism. + * Althoug the function is called dotlock, this does not necessarily + * mean that real lockfiles are used - the function may decide to + * use fcntl locking. Calling the function with NULL only install + * the atexit handler and maybe used to assure that the cleanup + * is called after all other atexit handlers. + * + * Notes: This function creates a lock file in the same directory + * as file_to_lock with the name "file_to_lock.lock" + * A temporary file ".#lk..pid[.threadid] is used. + * This function does nothing for Windoze. + */ +DOTLOCK +create_dotlock( const char *file_to_lock ) +{ + static int initialized; + DOTLOCK h; + int fd = -1; + char pidstr[16]; + #if !defined (HAVE_DOSISH_SYSTEM) + struct utsname utsbuf; + #endif + const char *nodename; + const char *dirpart; + int dirpartlen; + + if( !initialized ) { + atexit( remove_lockfiles ); + initialized = 1; + } + if( !file_to_lock ) + return NULL; + + h = m_alloc_clear( sizeof *h ); + if( never_lock ) { + h->disable = 1; + #ifdef _REENTRANT + /* fixme: aquire mutex on all_lockfiles */ + #endif + h->next = all_lockfiles; + all_lockfiles = h; + return h; + } + + +#if !defined (HAVE_DOSISH_SYSTEM) + sprintf( pidstr, "%10d\n", (int)getpid() ); + /* fixme: add the hostname to the second line (FQDN or IP addr?) */ + + /* create a temporary file */ + if( uname( &utsbuf ) ) + nodename = "unknown"; + else + nodename = utsbuf.nodename; + +#ifdef __riscos__ + { + char *iter = (char *) nodename; + for (; iter[0]; iter++) + if (iter[0] == '.') + iter[0] = '/'; + } +#endif /* __riscos__ */ + + if( !(dirpart = strrchr( file_to_lock, DIRSEP_C )) ) { + dirpart = EXTSEP_S; + dirpartlen = 1; + } + else { + dirpartlen = dirpart - file_to_lock; + dirpart = file_to_lock; + } + + #ifdef _REENTRANT + /* fixme: aquire mutex on all_lockfiles */ + #endif + h->next = all_lockfiles; + all_lockfiles = h; + + h->tname = m_alloc( dirpartlen + 6+30+ strlen(nodename) + 11 ); +#ifndef __riscos__ + sprintf( h->tname, "%.*s/.#lk%p.%s.%d", + dirpartlen, dirpart, h, nodename, (int)getpid() ); +#else /* __riscos__ */ + sprintf( h->tname, "%.*s.lk%p/%s/%d", + dirpartlen, dirpart, h, nodename, (int)getpid() ); +#endif /* __riscos__ */ + + do { + errno = 0; + fd = open( h->tname, O_WRONLY|O_CREAT|O_EXCL, + S_IRUSR|S_IRGRP|S_IROTH|S_IWUSR ); + } while( fd == -1 && errno == EINTR ); + if( fd == -1 ) { + all_lockfiles = h->next; + log_error( "failed to create temporary file `%s': %s\n", + h->tname, strerror(errno)); + m_free(h->tname); + m_free(h); + return NULL; + } + if( write(fd, pidstr, 11 ) != 11 ) { + all_lockfiles = h->next; + #ifdef _REENTRANT + /* release mutex */ + #endif + log_fatal( "error writing to `%s': %s\n", h->tname, strerror(errno) ); + close(fd); + unlink(h->tname); + m_free(h->tname); + m_free(h); + return NULL; + } + if( close(fd) ) { + all_lockfiles = h->next; + #ifdef _REENTRANT + /* release mutex */ + #endif + log_error( "error closing `%s': %s\n", h->tname, strerror(errno)); + unlink(h->tname); + m_free(h->tname); + m_free(h); + return NULL; + } + + #ifdef _REENTRANT + /* release mutex */ + #endif +#endif + h->lockname = m_alloc( strlen(file_to_lock) + 6 ); + strcpy(stpcpy(h->lockname, file_to_lock), EXTSEP_S "lock"); + return h; +} + +static int +maybe_deadlock( DOTLOCK h ) +{ + DOTLOCK r; + + for( r=all_lockfiles; r; r = r->next ) { + if( r != h && r->locked ) + return 1; + } + return 0; +} + +/**************** + * Do a lock on H. A TIMEOUT of 0 returns immediately, + * -1 waits forever (hopefully not), other + * values are timeouts in milliseconds. + * Returns: 0 on success + */ +int +make_dotlock( DOTLOCK h, long timeout ) +{ +#if defined (HAVE_DOSISH_SYSTEM) + return 0; +#else + int pid; + const char *maybe_dead=""; + int backoff=0; + + if( h->disable ) { + return 0; + } + + if( h->locked ) { +#ifndef __riscos__ + log_debug("oops, `%s' is already locked\n", h->lockname ); +#endif /* !__riscos__ */ + return 0; + } + + for(;;) { +#ifndef __riscos__ + if( !link(h->tname, h->lockname) ) { + /* fixme: better use stat to check the link count */ + h->locked = 1; + return 0; /* okay */ + } + if( errno != EEXIST ) { + log_error( "lock not made: link() failed: %s\n", strerror(errno) ); + return -1; + } +#else /* __riscos__ */ + if( !renamefile(h->tname, h->lockname) ) { + h->locked = 1; + return 0; /* okay */ + } + if( errno != EEXIST ) { + log_error( "lock not made: rename() failed: %s\n", strerror(errno) ); + return -1; + } +#endif /* __riscos__ */ + if( (pid = read_lockfile(h->lockname)) == -1 ) { + if( errno != ENOENT ) { + log_info("cannot read lockfile\n"); + return -1; + } + log_info( "lockfile disappeared\n"); + continue; + } + else if( pid == getpid() ) { + log_info( "Oops: lock already held by us\n"); + h->locked = 1; + return 0; /* okay */ + } + else if( kill(pid, 0) && errno == ESRCH ) { +#ifndef __riscos__ + maybe_dead = " - probably dead"; + #if 0 /* we should not do this without checking the permissions */ + /* and the hostname */ + log_info( "removing stale lockfile (created by %d)", pid ); + #endif +#else /* __riscos__ */ + /* we are *pretty* sure that the other task is dead and therefore + we remove the other lock file */ + maybe_dead = " - probably dead - removing lock"; + unlink(h->lockname); +#endif /* __riscos__ */ + } + if( timeout == -1 ) { + struct timeval tv; + log_info( "waiting for lock (held by %d%s) %s...\n", + pid, maybe_dead, maybe_deadlock(h)? "(deadlock?) ":""); + + + /* can't use sleep, cause signals may be blocked */ + tv.tv_sec = 1 + backoff; + tv.tv_usec = 0; + select(0, NULL, NULL, NULL, &tv); + if( backoff < 10 ) + backoff++ ; + } + else + return -1; + } + /*not reached */ +#endif +} + + +/**************** + * release a lock + * Returns: 0 := success + */ +int +release_dotlock( DOTLOCK h ) +{ +#if defined (HAVE_DOSISH_SYSTEM) + return 0; +#else + int pid; + + if( h->disable ) { + return 0; + } + + if( !h->locked ) { + log_debug("oops, `%s' is not locked\n", h->lockname ); + return 0; + } + + pid = read_lockfile( h->lockname ); + if( pid == -1 ) { + log_error( "release_dotlock: lockfile error\n"); + return -1; + } + if( pid != getpid() ) { + log_error( "release_dotlock: not our lock (pid=%d)\n", pid); + return -1; + } +#ifndef __riscos__ + if( unlink( h->lockname ) ) { + log_error( "release_dotlock: error removing lockfile `%s'", + h->lockname); + return -1; + } +#else /* __riscos__ */ + if( renamefile(h->lockname, h->tname) ) { + log_error( "release_dotlock: error renaming lockfile `%s' to `%s'", + h->lockname, h->tname); + return -1; + } +#endif /* __riscos__ */ + /* fixme: check that the link count is now 1 */ + h->locked = 0; + return 0; +#endif +} + + +/**************** + * Read the lock file and return the pid, returns -1 on error. + */ +static int +read_lockfile( const char *name ) +{ + #if defined (HAVE_DOSISH_SYSTEM) + return 0; + #else + int fd, pid; + char pidstr[16]; + + if( (fd = open(name, O_RDONLY)) == -1 ) { + int e = errno; + log_debug("error opening lockfile `%s': %s\n", name, strerror(errno) ); + errno = e; + return -1; + } + if( read(fd, pidstr, 10 ) != 10 ) { /* Read 10 digits w/o newline */ + log_debug("error reading lockfile `%s'", name ); + close(fd); + errno = 0; + return -1; + } + pidstr[10] = 0; /* terminate pid string */ + close(fd); + pid = atoi(pidstr); +#ifndef __riscos__ + if( !pid || pid == -1 ) { +#else /* __riscos__ */ + if( (!pid && riscos_getpid()) || pid == -1 ) { +#endif /* __riscos__ */ + log_error("invalid pid %d in lockfile `%s'", pid, name ); + errno = 0; + return -1; + } + return pid; + #endif +} + + +void +remove_lockfiles() +{ + #if !defined (HAVE_DOSISH_SYSTEM) + DOTLOCK h, h2; + + h = all_lockfiles; + all_lockfiles = NULL; + + while( h ) { + h2 = h->next; + if( !h->disable ) { + if( h->locked ) + unlink( h->lockname ); + unlink(h->tname); + m_free(h->tname); + m_free(h->lockname); + } + m_free(h); + h = h2; + } + #endif +} + diff --git a/util/errors.c b/util/errors.c index d3eb2f172..25d5a088a 100644 --- a/util/errors.c +++ b/util/errors.c @@ -1,5 +1,5 @@ /* errors.c - error strings - * Copyright (C) 1998 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -23,7 +23,6 @@ #include #include -#include #include "errors.h" #include "i18n.h" @@ -43,12 +42,12 @@ strerror( int n ) #endif /* !HAVE_STRERROR */ const char * -gpg_errstr( int err ) +g10_errstr( int err ) { static char buf[50]; const char *p; - #define X(n,s) case GPGERR_##n : p = s; break; + #define X(n,s) case G10ERR_##n : p = s; break; switch( err ) { case -1: p = "eof"; break; case 0: p = "okay"; break; @@ -101,13 +100,12 @@ gpg_errstr( int err ) X(NETWORK ,N_("network error")) X(SELFTEST_FAILED,"selftest failed") X(NOT_ENCRYPTED ,N_("not encrypted")) - default: /* pass on to libgcrypt */ - if( err >= 0 ) /* pass on to libgcrypt */ - p = gcry_strerror(err); /* fimxe: how do we handle i18n? */ - else { - p = buf; sprintf(buf, "gpgerr=%d", err); break; - } - break; + X(NOT_PROCESSED ,N_("not processed")) + /* the key cannot be used for a specific usage */ + X(UNU_PUBKEY ,N_("unusable public key")) + X(UNU_SECKEY ,N_("unusable secret key")) + X(KEYSERVER ,N_("keyserver error")) + default: p = buf; sprintf(buf, "g10err=%d", err); break; } #undef X return _(p); diff --git a/util/fileutil.c b/util/fileutil.c index 39268da74..76eacfb80 100644 --- a/util/fileutil.c +++ b/util/fileutil.c @@ -25,7 +25,10 @@ #include #include #include -#include +#ifdef __riscos__ +#include +#include +#endif /* __riscos__ */ #include "util.h" #include "memory.h" #include "ttyio.h" @@ -40,16 +43,16 @@ make_basename(const char *filepath) { char *p; - if ( !(p=strrchr(filepath, '/')) ) + if ( !(p=strrchr(filepath, DIRSEP_C)) ) #ifdef HAVE_DRIVE_LETTERS if ( !(p=strrchr(filepath, '\\')) ) if ( !(p=strrchr(filepath, ':')) ) #endif { - return gcry_xstrdup(filepath); + return m_strdup(filepath); } - return gcry_xstrdup(p+1); + return m_strdup(p+1); } @@ -67,17 +70,17 @@ make_dirname(const char *filepath) int dirname_length; char *p; - if ( !(p=strrchr(filepath, '/')) ) + if ( !(p=strrchr(filepath, DIRSEP_C)) ) #ifdef HAVE_DRIVE_LETTERS if ( !(p=strrchr(filepath, '\\')) ) if ( !(p=strrchr(filepath, ':')) ) #endif { - return gcry_xstrdup("."); + return m_strdup(EXTSEP_S); } dirname_length = p-filepath; - dirname = gcry_xmalloc(dirname_length+1); + dirname = m_alloc(dirname_length+1); strncpy(dirname, filepath, dirname_length); dirname[dirname_length] = 0; @@ -104,20 +107,30 @@ make_filename( const char *first_part, ... ) n += strlen(s) + 1; va_end(arg_ptr); +#ifndef __riscos__ home = NULL; - if( *first_part == '~' && first_part[1] == '/' + if( *first_part == '~' && first_part[1] == DIRSEP_C && (home = getenv("HOME")) && *home ) n += strlen(home); - - name = gcry_xmalloc(n); + name = m_alloc(n); p = home ? stpcpy(stpcpy(name,home), first_part+1) : stpcpy(name, first_part); +#else /* __riscos__ */ + name = m_alloc(n); + p = stpcpy(name, first_part); +#endif /* __riscos__ */ va_start( arg_ptr, first_part ) ; while( (s=va_arg(arg_ptr, const char *)) ) - p = stpcpy(stpcpy(p,"/"), s); + p = stpcpy(stpcpy(p, DIRSEP_S), s); va_end(arg_ptr); +#ifndef __riscos__ return name; +#else /* __riscos__ */ + p = gstrans(name); + m_free(name); + return p; +#endif /* __riscos__ */ } @@ -127,11 +140,26 @@ compare_filenames( const char *a, const char *b ) /* ? check whether this is an absolute filename and * resolve symlinks? */ +#ifndef __riscos__ #ifdef HAVE_DRIVE_LETTERS - return stricmp(a,b); + return ascii_strcasecmp(a,b); #else return strcmp(a,b); #endif +#else /* __riscos__ */ + int c = 0; + char *abuf, *bbuf; + + abuf = gstrans(a); + bbuf = gstrans(b); + + c = strcasecmp (abuf, bbuf); + + m_free(abuf); + m_free(bbuf); + + return c; +#endif /* __riscos__ */ } @@ -156,4 +184,55 @@ print_fname_stdin( const char *s ) return s; } +/**************** + * Check if the file is compressed. + **/ +int +is_file_compressed( const char *s, int *ret_rc ) +{ + IOBUF a; + byte buf[4]; + int i, rc = 0; + + struct magic_compress_s { + size_t len; + byte magic[4]; + } magic[] = { + { 3, { 0x42, 0x5a, 0x68, 0x00 } }, /* bzip2 */ + { 3, { 0x1f, 0x8b, 0x08, 0x00 } }, /* gzip */ + { 4, { 0x50, 0x4b, 0x03, 0x04 } }, /* (pk)zip */ + }; + + if ( !s || *s == '-' || !ret_rc ) + return 0; /* We can't check stdin or no file was given */ + + a = iobuf_open( s ); + if ( a == NULL ) { + *ret_rc = G10ERR_OPEN_FILE; + return 0; + } + + if ( iobuf_get_filelength( a ) < 4 ) { + *ret_rc = 0; + goto leave; + } + + if ( iobuf_read( a, buf, 4 ) == -1 ) { + *ret_rc = G10ERR_READ_FILE; + goto leave; + } + + for ( i = 0; i < DIM( magic ); i++ ) { + if ( !memcmp( buf, magic[i].magic, magic[i].len ) ) { + *ret_rc = 0; + rc = 1; + break; + } + } + +leave: + iobuf_close( a ); + return rc; +} + diff --git a/util/g10u.c b/util/g10u.c new file mode 100644 index 000000000..2ce3a4e36 --- /dev/null +++ b/util/g10u.c @@ -0,0 +1,40 @@ +/* g10u.c - Wrapper for utility functions + * Copyright (C) 1998 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include "mpi.h" +#include "util.h" + + +/* FIXME: The modules should use functions from libgcrypt */ + +const char *g10u_revision_string(int dummy) { return "$Revision$"; } + + +void *g10_malloc( size_t n ) { return m_alloc( n ); } +void *g10_calloc( size_t n ) { return m_alloc_clear( n ); } +void *g10_malloc_secure( size_t n ) { return m_alloc_secure( n ); } +void *g10_calloc_secure( size_t n ) { return m_alloc_secure_clear( n ); } +void *g10_realloc( void *a, size_t n ) { return m_realloc( a, n ); } +void g10_free( void *p ) { m_free( p ); } +char *g10_strdup( const char * a) { return m_strdup( a ); } + diff --git a/util/http.c b/util/http.c index 81bf91ded..23556b7bd 100644 --- a/util/http.c +++ b/util/http.c @@ -1,5 +1,5 @@ /* http.c - HTTP protocol handler - * Copyright (C) 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1999, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -26,18 +26,18 @@ #include #include -#ifndef HAVE_DOSISH_SYSTEM /* fixme: add support W32 sockets */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include +#ifdef __MINGW32__ + #include +#else + #include + #include + #include + #include + #include + #include + #include + #include +#endif #include "util.h" #include "iobuf.h" @@ -45,6 +45,20 @@ #include "http.h" +#ifdef __riscos__ + #define HTTP_PROXY_ENV "GnuPG$HttpProxy" + #define HTTP_PROXY_ENV_PRINTABLE "" +#else + #define HTTP_PROXY_ENV "http_proxy" + #define HTTP_PROXY_ENV_PRINTABLE "$http_proxy" +#endif + +#ifdef __MINGW32__ +#define sock_close(a) closesocket(a) +#else +#define sock_close(a) close(a) +#endif + #define MAX_LINELEN 20000 /* max. length of a HTTP line */ #define VALID_URI_CHARS "abcdefghijklmnopqrstuvwxyz" \ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ @@ -69,6 +83,38 @@ static int parse_response( HTTP_HD hd ); static int connect_server( const char *server, ushort port ); static int write_server( int sock, const char *data, size_t length ); +#ifdef __MINGW32__ +static void +deinit_sockets (void) +{ + WSACleanup(); +} + +static void +init_sockets (void) +{ + static int initialized; + static WSADATA wsdata; + + if (initialized) + return; + + if( WSAStartup( 0x0101, &wsdata ) ) { + log_error ("error initializing socket library: ec=%d\n", + (int)WSAGetLastError () ); + return; + } + if( wsdata.wVersion < 0x0001 ) { + log_error ("socket library version is %x.%x - but 1.1 needed\n", + LOBYTE(wsdata.wVersion), HIBYTE(wsdata.wVersion)); + WSACleanup(); + return; + } + atexit ( deinit_sockets ); + initialized = 1; +} +#endif /*__MINGW32__*/ + int http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url, @@ -77,7 +123,7 @@ http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url, int rc; if( !(reqtype == HTTP_REQ_GET || reqtype == HTTP_REQ_POST) ) - return GPGERR_INV_ARG; + return G10ERR_INV_ARG; /* initialize the handle */ memset( hd, 0, sizeof *hd ); @@ -90,15 +136,15 @@ http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url, if( !rc ) { rc = send_request( hd ); if( !rc ) { - hd->fp_write = iobuf_fdopen( hd->sock , "w" ); + hd->fp_write = iobuf_sockopen( hd->sock , "w" ); if( hd->fp_write ) return 0; - rc = GPGERR_GENERAL; + rc = G10ERR_GENERAL; } } if( !hd->fp_read && !hd->fp_write && hd->sock != -1 ) - close( hd->sock ); + sock_close( hd->sock ); iobuf_close( hd->fp_read ); iobuf_close( hd->fp_write); release_parsed_uri( hd->uri ); @@ -111,8 +157,9 @@ http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url, void http_start_data( HTTP_HD hd ) { + iobuf_flush ( hd->fp_write ); if( !hd->in_data ) { - iobuf_put( hd->fp_write, '\n' ); + write_server (hd->sock, "\r\n", 2); hd->in_data = 1; } } @@ -124,19 +171,22 @@ http_wait_response( HTTP_HD hd, unsigned int *ret_status ) int rc; http_start_data( hd ); /* make sure that we are in the data */ - iobuf_flush( hd->fp_write ); - hd->sock = dup( hd->sock ); + #if 0 + hd->sock = dup( hd->sock ); if( hd->sock == -1 ) - return GPGERR_GENERAL; - iobuf_close( hd->fp_write ); + return G10ERR_GENERAL; + #endif + iobuf_ioctl (hd->fp_write, 1, 1, NULL); /* keep the socket open */ + iobuf_close (hd->fp_write); hd->fp_write = NULL; - shutdown( hd->sock, 1 ); + if ( !(hd->flags & HTTP_FLAG_NO_SHUTDOWN) ) + shutdown( hd->sock, 1 ); hd->in_data = 0; - hd->fp_read = iobuf_fdopen( hd->sock , "r" ); + hd->fp_read = iobuf_sockopen( hd->sock , "r" ); if( !hd->fp_read ) - return GPGERR_GENERAL; + return G10ERR_GENERAL; rc = parse_response( hd ); if( !rc && ret_status ) @@ -171,11 +221,11 @@ http_close( HTTP_HD hd ) if( !hd || !hd->initialized ) return; if( !hd->fp_read && !hd->fp_write && hd->sock != -1 ) - close( hd->sock ); + sock_close( hd->sock ); iobuf_close( hd->fp_read ); iobuf_close( hd->fp_write ); release_parsed_uri( hd->uri ); - gcry_free( hd->buffer ); + m_free( hd->buffer ); hd->initialized = 0; } @@ -189,7 +239,7 @@ http_close( HTTP_HD hd ) static int parse_uri( PARSED_URI *ret_uri, const char *uri ) { - *ret_uri = gcry_xcalloc( 1, sizeof(**ret_uri) + strlen(uri) ); + *ret_uri = m_alloc_clear( sizeof(**ret_uri) + strlen(uri) ); strcpy( (*ret_uri)->buffer, uri ); return do_parse_uri( *ret_uri, 0 ); } @@ -203,9 +253,9 @@ release_parsed_uri( PARSED_URI uri ) for( r = uri->query; r; r = r2 ) { r2 = r->next; - gcry_free( r ); + m_free( r ); } - gcry_free( uri ); + m_free( uri ); } } @@ -225,27 +275,28 @@ do_parse_uri( PARSED_URI uri, int only_local_part ) /* a quick validity check */ if( strspn( p, VALID_URI_CHARS) != n ) - return GPGERR_BAD_URI; /* invalid characters found */ + return G10ERR_BAD_URI; /* invalid characters found */ if( !only_local_part ) { /* find the scheme */ if( !(p2 = strchr( p, ':' ) ) || p2 == p ) - return GPGERR_BAD_URI; /* No scheme */ + return G10ERR_BAD_URI; /* No scheme */ *p2++ = 0; strlwr( p ); uri->scheme = p; + uri->port = 80; if( !strcmp( uri->scheme, "http" ) ) ; else if( !strcmp( uri->scheme, "x-hkp" ) ) /* same as HTTP */ - ; + uri->port = 11371; else - return GPGERR_INVALID_URI; /* Unsupported scheme */ + return G10ERR_INVALID_URI; /* Unsupported scheme */ p = p2; /* find the hostname */ if( *p != '/' ) - return GPGERR_INVALID_URI; /* does not start with a slash */ + return G10ERR_INVALID_URI; /* does not start with a slash */ p++; if( *p == '/' ) { /* there seems to be a hostname */ @@ -258,13 +309,12 @@ do_parse_uri( PARSED_URI uri, int only_local_part ) *p3++ = 0; uri->port = atoi( p3 ); } - else - uri->port = 80; + uri->host = p; if( (n = remove_escapes( uri->host )) < 0 ) - return GPGERR_BAD_URI; + return G10ERR_BAD_URI; if( n != strlen( p ) ) - return GPGERR_BAD_URI; /* hostname with a Nul in it */ + return G10ERR_BAD_URI; /* hostname with a Nul in it */ p = p2 ? p2 : NULL; } } /* end global URI part */ @@ -281,9 +331,9 @@ do_parse_uri( PARSED_URI uri, int only_local_part ) uri->path = p; if( (n = remove_escapes( p )) < 0 ) - return GPGERR_BAD_URI; + return G10ERR_BAD_URI; if( n != strlen( p ) ) - return GPGERR_BAD_URI; /* path with a Nul in it */ + return G10ERR_BAD_URI; /* path with a Nul in it */ p = p2 ? p2 : NULL; if( !p || !*p ) /* we don't have a query string */ @@ -297,7 +347,7 @@ do_parse_uri( PARSED_URI uri, int only_local_part ) if( (p2 = strchr( p, '&' )) ) *p2++ = 0; if( !(elem = parse_tuple( p )) ) - return GPGERR_BAD_URI; + return G10ERR_BAD_URI; *tail = elem; tail = &elem->next; @@ -397,7 +447,7 @@ parse_tuple( byte *string ) return NULL; /* bad URI */ if( n != strlen( p ) ) return NULL; /* name with a Nul in it */ - tuple = gcry_xcalloc( 1, sizeof *tuple ); + tuple = m_alloc_clear( sizeof *tuple ); tuple->name = p; if( !p2 ) { /* we have only the name, so we assume an empty value string */ @@ -406,7 +456,7 @@ parse_tuple( byte *string ) } else { /* name and value */ if( (n = remove_escapes( p2 )) < 0 ) { - gcry_free( tuple ); + m_free( tuple ); return NULL; /* bad URI */ } tuple->value = p2; @@ -433,14 +483,15 @@ send_request( HTTP_HD hd ) port = hd->uri->port? hd->uri->port : 80; if( (hd->flags & HTTP_FLAG_TRY_PROXY) - && (http_proxy = getenv( "http_proxy" )) ) { + && (http_proxy = getenv( HTTP_PROXY_ENV )) ) { PARSED_URI uri; rc = parse_uri( &uri, http_proxy ); if (rc) { - log_error("invalid $http_proxy: %s\n", gpg_errstr(rc)); + log_error("invalid " HTTP_PROXY_ENV_PRINTABLE ": %s\n", + g10_errstr(rc)); release_parsed_uri( uri ); - return GPGERR_NETWORK; + return G10ERR_NETWORK; } hd->sock = connect_server( *uri->host? uri->host : "localhost", uri->port? uri->port : 80 ); @@ -450,10 +501,10 @@ send_request( HTTP_HD hd ) hd->sock = connect_server( server, port ); if( hd->sock == -1 ) - return GPGERR_NETWORK; + return G10ERR_NETWORK; p = build_rel_path( hd->uri ); - request = gcry_xmalloc( strlen(p) + 20 ); + request = m_alloc( strlen(server) + strlen(p) + 50 ); if( http_proxy ) { sprintf( request, "%s http://%s:%hu%s%s HTTP/1.0\r\n", hd->req_type == HTTP_REQ_GET ? "GET" : @@ -468,10 +519,10 @@ send_request( HTTP_HD hd ) hd->req_type == HTTP_REQ_POST? "POST": "OOPS", *p == '/'? "":"/", p ); } - gcry_free(p); + m_free(p); rc = write_server( hd->sock, request, strlen(request) ); - gcry_free( request ); + m_free( request ); return rc; } @@ -502,7 +553,7 @@ build_rel_path( PARSED_URI uri ) n++; /* now allocate and copy */ - p = rel_path = gcry_xmalloc( n ); + p = rel_path = m_alloc( n ); n = insert_escapes( p, uri->path, "%;?&" ); p += n; /* todo: add params */ @@ -608,13 +659,13 @@ start_server() if( bind( fd, (struct sockaddr *)&mya, sizeof(mya)) ) { log_error("bind to port 11371 failed: %s\n", strerror(errno) ); - close( fd ); + sock_close( fd ); return -1; } if( listen( fd, 5 ) ) { log_error("listen failed: %s\n", strerror(errno) ); - close( fd ); + sock_close( fd ); return -1; } @@ -647,7 +698,7 @@ start_server() fclose(fp); exit(0); } - close( client ); + sock_close( client ); } @@ -660,9 +711,51 @@ start_server() static int connect_server( const char *server, ushort port ) { + int sd; +#ifdef __MINGW32__ + struct hostent *hp; + struct sockaddr_in ad; + unsigned long l; + + init_sockets (); + + memset (&ad, 0, sizeof(ad)); + ad.sin_family = AF_INET; + ad.sin_port = htons(port); + + if( (l = inet_addr (server)) != SOCKET_ERROR ) { + memcpy (&ad.sin_addr, &l, sizeof(l)); + } + else if( (hp = gethostbyname (server)) ) { + if( hp->h_addrtype != AF_INET ) { + log_error ("%s: unknown address family\n", server); + return -1; + } + if ( hp->h_length != 4 ) { + log_error ("%s: illegal address length\n", server); + return -1; + } + memcpy (&ad.sin_addr, hp->h_addr, hp->h_length); + } + else { + log_error ("%s: host not found: ec=%d\n", + server, (int)WSAGetLastError ()); + return -1; + } + + if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { + log_error ("error creating socket: ex=%d\n", + (int)WSAGetLastError ()); + return -1; + } + + if( connect (sd, (struct sockaddr *)&ad, sizeof (ad) ) ) { + sock_close (sd); + return -1; + } +#else struct sockaddr_in addr; struct hostent *host; - int sd; addr.sin_family = AF_INET; addr.sin_port = htons(port); @@ -677,10 +770,10 @@ connect_server( const char *server, ushort port ) return -1; if( connect( sd, (struct sockaddr *)&addr, sizeof addr) == -1 ) { - close(sd); + sock_close(sd); return -1; } - +#endif return sd; } @@ -688,11 +781,20 @@ connect_server( const char *server, ushort port ) static int write_server( int sock, const char *data, size_t length ) { - int nleft, nwritten; + int nleft; nleft = length; while( nleft > 0 ) { - nwritten = write( sock, data, nleft ); + #ifdef __MINGW32__ + int nwritten; + + nwritten = send (sock, data, nleft, 0); + if ( nwritten == SOCKET_ERROR ) { + log_info ("write failed: ec=%d\n", (int)WSAGetLastError ()); + return G10ERR_NETWORK; + } + #else + int nwritten = write( sock, data, nleft ); if( nwritten == -1 ) { if( errno == EINTR ) continue; @@ -705,8 +807,9 @@ write_server( int sock, const char *data, size_t length ) continue; } log_info("write failed: %s\n", strerror(errno)); - return GPGERR_NETWORK; + return G10ERR_NETWORK; } + #endif nleft -=nwritten; data += nwritten; } @@ -714,8 +817,6 @@ write_server( int sock, const char *data, size_t length ) return 0; } -#endif /* HAVE_DOSISH_SYSTEM */ - /**** Test code ****/ #ifdef TEST @@ -742,7 +843,7 @@ main(int argc, char **argv) rc = parse_uri( &uri, *argv ); if( rc ) { - log_error("`%s': %s\n", *argv, gpg_errstr(rc)); + log_error("`%s': %s\n", *argv, g10_errstr(rc)); release_parsed_uri( uri ); return 1; } @@ -767,7 +868,7 @@ main(int argc, char **argv) rc = http_open_document( &hd, *argv, 0 ); if( rc ) { - log_error("can't get `%s': %s\n", *argv, gpg_errstr(rc)); + log_error("can't get `%s': %s\n", *argv, g10_errstr(rc)); return 1; } log_info("open_http_document succeeded; status=%u\n", hd.status_code ); diff --git a/util/iobuf.c b/util/iobuf.c index 5f70694c2..5df2d6975 100644 --- a/util/iobuf.c +++ b/util/iobuf.c @@ -1,5 +1,5 @@ /* iobuf.c - file handling - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -23,33 +23,89 @@ #include #include #include +#include #include #include #include +#include #include -#include #ifdef HAVE_DOSISH_SYSTEM - #include /* for setmode() */ + #include #endif +#ifdef __riscos__ +#include +#include +#endif /* __riscos__ */ #include "memory.h" #include "util.h" #include "iobuf.h" +#undef FILE_FILTER_USES_STDIO -#if defined (HAVE_FOPEN64) && defined (HAVE_FSTAT64) - #define fopen(a,b) fopen64 ((a),(b)) - #define fstat(a,b) fstat64 ((a),(b)) +#ifdef HAVE_DOSISH_SYSTEM + #define USE_SETMODE 1 #endif +#ifdef FILE_FILTER_USES_STDIO + #define my_fileno(a) fileno ((a)) + #define my_fopen_ro(a,b) fopen ((a),(b)) + #define my_fopen(a,b) fopen ((a),(b)) + typedef FILE *FILEP_OR_FD; + #define INVALID_FP NULL + #define FILEP_OR_FD_FOR_STDIN (stdin) + #define FILEP_OR_FD_FOR_STDOUT (stdout) + typedef struct { + FILE *fp; /* open file handle */ + int keep_open; + int no_cache; + int print_only_name; /* flags indicating that fname is not a real file*/ + char fname[1]; /* name of the file */ + } file_filter_ctx_t ; +#else + #define my_fileno(a) (a) + #define my_fopen_ro(a,b) fd_cache_open ((a),(b)) + #define my_fopen(a,b) direct_open ((a),(b)) + #ifdef HAVE_DOSISH_SYSTEM + typedef HANDLE FILEP_OR_FD; + #define INVALID_FP ((HANDLE)-1) + #define FILEP_OR_FD_FOR_STDIN (GetStdHandle (STD_INPUT_HANDLE)) + #define FILEP_OR_FD_FOR_STDOUT (GetStdHandle (STD_OUTPUT_HANDLE)) + #undef USE_SETMODE + #else + typedef int FILEP_OR_FD; + #define INVALID_FP (-1) + #define FILEP_OR_FD_FOR_STDIN (0) + #define FILEP_OR_FD_FOR_STDOUT (1) + #endif + typedef struct { + FILEP_OR_FD fp; /* open file handle */ + int keep_open; + int no_cache; + int eof_seen; + int print_only_name; /* flags indicating that fname is not a real file*/ + char fname[1]; /* name of the file */ + } file_filter_ctx_t ; + struct close_cache_s { + struct close_cache_s *next; + FILEP_OR_FD fp; + char fname[1]; + }; + typedef struct close_cache_s *CLOSE_CACHE; + static CLOSE_CACHE close_cache; +#endif +#ifdef __MINGW32__ typedef struct { - FILE *fp; /* open file handle */ + int sock; + int keep_open; + int no_cache; + int eof_seen; int print_only_name; /* flags indicating that fname is not a real file*/ char fname[1]; /* name of the file */ -} file_filter_ctx_t ; - +} sock_filter_ctx_t ; +#endif /*__MINGW32__*/ /* The first partial length header block must be of size 512 * to make it easier (and efficienter) we use a min. block size of 512 @@ -68,8 +124,185 @@ typedef struct { int eof; } block_filter_ctx_t; +static int special_names_enabled; static int underflow(IOBUF a); +static int translate_file_handle ( int fd, int for_write ); + +#ifndef FILE_FILTER_USES_STDIO + +/* + * Invalidate (i.e. close) a cached iobuf + */ +static void +fd_cache_invalidate (const char *fname) +{ + CLOSE_CACHE cc; + + assert (fname); + if( DBG_IOBUF ) + log_debug ("fd_cache_invalidate (%s)\n", fname); + + for (cc=close_cache; cc; cc = cc->next ) { + if ( cc->fp != INVALID_FP && !strcmp (cc->fname, fname) ) { + if( DBG_IOBUF ) + log_debug (" did (%s)\n", cc->fname); + #ifdef HAVE_DOSISH_SYSTEM + CloseHandle (cc->fp); + #else + close(cc->fp); + #endif + cc->fp = INVALID_FP; + } + } +} + + + +static FILEP_OR_FD +direct_open (const char *fname, const char *mode) +{ +#ifdef HAVE_DOSISH_SYSTEM + unsigned long da, cd, sm; + HANDLE hfile; + + /* Note, that we do not handle all mode combinations */ + + /* According to the ReactOS source it seems that open() of the + * standard MSW32 crt does open the file in share mode which is + * something new for MS applications ;-) + */ + if ( strchr (mode, '+') ) { + fd_cache_invalidate (fname); + da = GENERIC_READ|GENERIC_WRITE; + cd = OPEN_EXISTING; + sm = FILE_SHARE_READ | FILE_SHARE_WRITE; + } + else if ( strchr (mode, 'w') ) { + fd_cache_invalidate (fname); + da = GENERIC_WRITE; + cd = CREATE_ALWAYS; + sm = FILE_SHARE_WRITE; + } + else { + da = GENERIC_READ; + cd = OPEN_EXISTING; + sm = FILE_SHARE_READ; + } + + hfile = CreateFile (fname, da, sm, NULL, cd, FILE_ATTRIBUTE_NORMAL, NULL); + return hfile; +#else + int oflag; + int cflag = S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH; + + /* Note, that we do not handle all mode combinations */ + if ( strchr (mode, '+') ) { + fd_cache_invalidate (fname); + oflag = O_RDWR; + } + else if ( strchr (mode, 'w') ) { + fd_cache_invalidate (fname); + oflag = O_WRONLY | O_CREAT | O_TRUNC; + } + else { + oflag = O_RDONLY; + } +#ifndef __riscos__ + return open (fname, oflag, cflag ); +#else + { + struct stat buf; + int rc = stat( fname, &buf ); + + /* Don't allow iobufs on directories */ + if( !rc && S_ISDIR(buf.st_mode) && !S_ISREG(buf.st_mode) ) + return __set_errno( EISDIR ); + else + return open( fname, oflag, cflag ); + } +#endif +#endif +} + + +/* + * Instead of closing an FD we keep it open and cache it for later reuse + * Note that this caching strategy only works if the process does not chdir. + */ +static void +fd_cache_close (const char *fname, FILEP_OR_FD fp) +{ + CLOSE_CACHE cc; + + assert (fp); + if ( !fname || !*fname ) { +#ifdef HAVE_DOSISH_SYSTEM + CloseHandle (fp); +#else + close(fp); +#endif + if( DBG_IOBUF ) + log_debug ("fd_cache_close (%p) real\n", (void*)fp); + return; + } + /* try to reuse a slot */ + for (cc=close_cache; cc; cc = cc->next ) { + if ( cc->fp == INVALID_FP && !strcmp (cc->fname, fname) ) { + cc->fp = fp; + if( DBG_IOBUF ) + log_debug ("fd_cache_close (%s) used existing slot\n", fname); + return; + } + } + /* add a new one */ + if( DBG_IOBUF ) + log_debug ("fd_cache_close (%s) new slot created\n", fname); + cc = m_alloc_clear (sizeof *cc + strlen (fname)); + strcpy (cc->fname, fname); + cc->fp = fp; + cc->next = close_cache; + close_cache = cc; +} + +/* + * Do an direct_open on FNAME but first try to reuse one from the fd_cache + */ +static FILEP_OR_FD +fd_cache_open (const char *fname, const char *mode) +{ + CLOSE_CACHE cc; + + assert (fname); + for (cc=close_cache; cc; cc = cc->next ) { + if ( cc->fp != INVALID_FP && !strcmp (cc->fname, fname) ) { + FILEP_OR_FD fp = cc->fp; + cc->fp = INVALID_FP; + if( DBG_IOBUF ) + log_debug ("fd_cache_open (%s) using cached fp\n", fname); + #ifdef HAVE_DOSISH_SYSTEM + if (SetFilePointer (fp, 0, NULL, FILE_BEGIN) == 0xffffffff ) { + log_error ("rewind file failed on handle %p: ec=%d\n", + fp, (int)GetLastError () ); + fp = INVALID_FP; + } + #else + if ( lseek (fp, 0, SEEK_SET) == (off_t)-1 ) { + log_error("can't rewind fd %d: %s\n", fp, strerror(errno) ); + fp = INVALID_FP; + } + #endif + return fp; + } + } + if( DBG_IOBUF ) + log_debug ("fd_cache_open (%s) not cached\n", fname); + return direct_open (fname, mode); +} + + +#endif /*FILE_FILTER_USES_STDIO*/ + /**************** * Read data from a file into buf which has an allocated length of *LEN. @@ -87,7 +320,7 @@ static int underflow(IOBUF a); * buffer, and should be set to the number of bytes * which were put into the buffer. The function * returns 0 to indicate success, -1 on EOF and - * GPGERR_xxxxx for other errors. + * G10ERR_xxxxx for other errors. * * IOBUFCTRL_FLUSH: called by iobuf_flush() to write out the collected stuff. * *RET_LAN is the number of bytes in BUF. @@ -99,59 +332,258 @@ static int file_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) { file_filter_ctx_t *a = opaque; - FILE *fp = a->fp; + FILEP_OR_FD f = a->fp; size_t size = *ret_len; size_t nbytes = 0; int rc = 0; +#ifdef FILE_FILTER_USES_STDIO if( control == IOBUFCTRL_UNDERFLOW ) { assert( size ); /* need a buffer */ - if ( feof(fp)) { /* On terminals you could easiely read as many EOFs as you call */ + if ( feof(f)) { /* On terminals you could easiely read as many EOFs as you call */ rc = -1; /* fread() or fgetc() repeatly. Every call will block until you press */ *ret_len = 0; /* CTRL-D. So we catch this case before we call fread() again. */ } else { - clearerr( fp ); - nbytes = fread( buf, 1, size, fp ); - if( feof(fp) && !nbytes ) + clearerr( f ); + nbytes = fread( buf, 1, size, f ); + if( feof(f) && !nbytes ) { rc = -1; /* okay: we can return EOF now. */ - else if( ferror(fp) && errno != EPIPE ) { + } + else if( ferror(f) && errno != EPIPE ) { log_error("%s: read error: %s\n", a->fname, strerror(errno)); - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; } *ret_len = nbytes; } } else if( control == IOBUFCTRL_FLUSH ) { if( size ) { - clearerr( fp ); - nbytes = fwrite( buf, 1, size, fp ); - if( ferror(fp) ) { + clearerr( f ); + nbytes = fwrite( buf, 1, size, f ); + if( ferror(f) ) { log_error("%s: write error: %s\n", a->fname, strerror(errno)); - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; } } *ret_len = nbytes; } else if( control == IOBUFCTRL_INIT ) { + a->keep_open = a->no_cache = 0; } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "file_filter"; } else if( control == IOBUFCTRL_FREE ) { - if( fp != stdin && fp != stdout ) { + if( f != stdin && f != stdout ) { if( DBG_IOBUF ) - log_debug("%s: close fd %d\n", a->fname, fileno(fp) ); - fclose(fp); + log_debug("%s: close fd %d\n", a->fname, fileno(f) ); + if (!a->keep_open) + fclose(f); } - fp = NULL; - gcry_free(a); /* we can free our context now */ + f = NULL; + m_free(a); /* we can free our context now */ } +#else /* !stdio implementation */ + if( control == IOBUFCTRL_UNDERFLOW ) { + assert( size ); /* need a buffer */ + if ( a->eof_seen) { + rc = -1; + *ret_len = 0; + } + else { + #ifdef HAVE_DOSISH_SYSTEM + unsigned long nread; + + nbytes = 0; + if ( !ReadFile ( f, buf, size, &nread, NULL ) ) { + int ec = (int)GetLastError (); + if ( ec != ERROR_BROKEN_PIPE ) { + log_error("%s: read error: ec=%d\n", a->fname, ec); + rc = G10ERR_READ_FILE; + } + } + else if ( !nread ) { + a->eof_seen = 1; + rc = -1; + } + else { + nbytes = nread; + } + + #else + + int n; + + nbytes = 0; + do { + n = read ( f, buf, size ); + } while (n == -1 && errno == EINTR ); + if ( n == -1 ) { /* error */ + if (errno != EPIPE) { + log_error("%s: read error: %s\n", + a->fname, strerror(errno)); + rc = G10ERR_READ_FILE; + } + } + else if ( !n ) { /* eof */ + a->eof_seen = 1; + rc = -1; + } + else { + nbytes = n; + } + #endif + *ret_len = nbytes; + } + } + else if( control == IOBUFCTRL_FLUSH ) { + if( size ) { + #ifdef HAVE_DOSISH_SYSTEM + byte *p = buf; + unsigned long n; + + nbytes = size; + do { + if ( size && !WriteFile ( f, p, nbytes, &n, NULL) ) { + int ec = (int)GetLastError (); + log_error("%s: write error: ec=%d\n", a->fname, ec); + rc = G10ERR_WRITE_FILE; + break; + } + p += n; + nbytes -= n; + } while ( nbytes ); + nbytes = p - buf; + #else + byte *p = buf; + int n; + + nbytes = size; + do { + do { + n = write ( f, p, nbytes ); + } while ( n == -1 && errno == EINTR ); + if ( n > 0 ) { + p += n; + nbytes -= n; + } + } while ( n != -1 && nbytes ); + if( n == -1 ) { + log_error("%s: write error: %s\n", a->fname, strerror(errno)); + rc = G10ERR_WRITE_FILE; + } + nbytes = p - buf; + #endif + } + *ret_len = nbytes; + } + else if ( control == IOBUFCTRL_INIT ) { + a->eof_seen = 0; + a->keep_open = 0; + a->no_cache = 0; + } + else if ( control == IOBUFCTRL_DESC ) { + *(char**)buf = "file_filter(fd)"; + } + else if ( control == IOBUFCTRL_FREE ) { + #ifdef HAVE_DOSISH_SYSTEM + if ( f != FILEP_OR_FD_FOR_STDIN && f != FILEP_OR_FD_FOR_STDOUT ) { + if( DBG_IOBUF ) + log_debug("%s: close handle %p\n", a->fname, f ); + if (!a->keep_open) + fd_cache_close (a->no_cache?NULL:a->fname, f); + } + #else + if ( (int)f != 0 && (int)f != 1 ) { + if( DBG_IOBUF ) + log_debug("%s: close fd %d\n", a->fname, f ); + if (!a->keep_open) + fd_cache_close (a->no_cache?NULL:a->fname, f); + } + f = INVALID_FP; + #endif + m_free (a); /* we can free our context now */ + } +#endif /* !stdio implementation */ return rc; } +#ifdef __MINGW32__ +/* Becuase sockets are an special object under Lose32 we have to + * use a special filter */ +static int +sock_filter (void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) +{ + sock_filter_ctx_t *a = opaque; + size_t size = *ret_len; + size_t nbytes = 0; + int rc = 0; + + if( control == IOBUFCTRL_UNDERFLOW ) { + assert( size ); /* need a buffer */ + if ( a->eof_seen) { + rc = -1; + *ret_len = 0; + } + else { + int nread; + + nread = recv ( a->sock, buf, size, 0 ); + if ( nread == SOCKET_ERROR ) { + int ec = (int)WSAGetLastError (); + log_error("socket read error: ec=%d\n", ec); + rc = G10ERR_READ_FILE; + } + else if ( !nread ) { + a->eof_seen = 1; + rc = -1; + } + else { + nbytes = nread; + } + *ret_len = nbytes; + } + } + else if( control == IOBUFCTRL_FLUSH ) { + if( size ) { + byte *p = buf; + int n; + + nbytes = size; + do { + n = send (a->sock, p, nbytes, 0); + if ( n == SOCKET_ERROR ) { + int ec = (int)WSAGetLastError (); + log_error("socket write error: ec=%d\n", ec); + rc = G10ERR_WRITE_FILE; + break; + } + p += n; + nbytes -= n; + } while ( nbytes ); + nbytes = p - buf; + } + *ret_len = nbytes; + } + else if ( control == IOBUFCTRL_INIT ) { + a->eof_seen = 0; + a->keep_open = 0; + a->no_cache = 0; + } + else if ( control == IOBUFCTRL_DESC ) { + *(char**)buf = "sock_filter"; + } + else if ( control == IOBUFCTRL_FREE ) { + if (!a->keep_open) + closesocket (a->sock); + m_free (a); /* we can free our context now */ + } + return rc; +} +#endif /*__MINGW32__*/ /**************** * This is used to implement the block write mode. @@ -191,7 +623,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) } else if( (c = iobuf_get(chain)) == -1 ) { log_error("block_filter: 1st length byte missing\n"); - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; break; } if( c < 192 ) { @@ -208,7 +640,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) a->size = (c - 192) * 256; if( (c = iobuf_get(chain)) == -1 ) { log_error("block_filter: 2nd length byte missing\n"); - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; break; } a->size += c + 192; @@ -226,7 +658,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) a->size |= iobuf_get(chain) << 8; if( (c = iobuf_get(chain)) == -1 ) { log_error("block_filter: invalid 4 byte length\n"); - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; break; } a->size |= c; @@ -243,7 +675,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) a->size |= c; if( c == -1 ) { log_error("block_filter: error reading length info\n"); - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; } if( !a->size ) { a->eof = 1; @@ -261,7 +693,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) if( c == -1 ) c = 0; log_error("block_filter %p: read error (size=%lu,a->size=%lu)\n", a, (ulong)size+c, (ulong)a->size+c); - rc = GPGERR_READ_FILE; + rc = G10ERR_READ_FILE; } else { size -= c; @@ -281,7 +713,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) if( nbytes < OP_MIN_PARTIAL_CHUNK ) { /* not enough to write a partial block out; so we store it*/ if( !a->buffer ) - a->buffer = gcry_xmalloc( OP_MIN_PARTIAL_CHUNK ); + a->buffer = m_alloc( OP_MIN_PARTIAL_CHUNK ); memcpy( a->buffer + a->buflen, buf, size ); a->buflen += size; } @@ -303,14 +735,14 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) if( (n=a->buflen) ) { /* write stuff from the buffer */ assert( n == OP_MIN_PARTIAL_CHUNK); if( iobuf_write(chain, a->buffer, n ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; a->buflen = 0; nbytes -= n; } if( (n = nbytes) > blen ) n = blen; if( n && iobuf_write(chain, p, n ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; p += n; nbytes -= n; } while( !rc && nbytes >= OP_MIN_PARTIAL_CHUNK ); @@ -319,7 +751,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) assert( !a->buflen ); assert( nbytes < OP_MIN_PARTIAL_CHUNK ); if( !a->buffer ) - a->buffer = gcry_xmalloc( OP_MIN_PARTIAL_CHUNK ); + a->buffer = m_alloc( OP_MIN_PARTIAL_CHUNK ); memcpy( a->buffer, p, nbytes ); a->buflen = nbytes; } @@ -348,7 +780,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) if( n > avail ) n = avail; if( iobuf_write(chain, p, n ) ) - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; a->count += n; p += n; size -= n; @@ -405,9 +837,9 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) rc = iobuf_write(chain, a->buffer, len ); if( rc ) { log_error("block_filter: write error: %s\n",strerror(errno)); - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; } - gcry_free( a->buffer ); a->buffer = NULL; a->buflen = 0; + m_free( a->buffer ); a->buffer = NULL; a->buflen = 0; } else { iobuf_writebyte(chain, 0); @@ -419,7 +851,7 @@ block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) } if( DBG_IOBUF ) log_debug("free block_filter %p\n", a ); - gcry_free(a); /* we can free our context now */ + m_free(a); /* we can free our context now */ } return rc; @@ -463,9 +895,9 @@ iobuf_alloc(int use, size_t bufsize) IOBUF a; static int number=0; - a = gcry_xcalloc( 1,sizeof *a); + a = m_alloc_clear(sizeof *a); a->use = use; - a->d.buf = gcry_xmalloc( bufsize ); + a->d.buf = m_alloc( bufsize ); a->d.size = bufsize; a->no = ++number; a->subno = 0; @@ -474,17 +906,16 @@ iobuf_alloc(int use, size_t bufsize) return a; } - int -iobuf_close( IOBUF a ) +iobuf_close ( IOBUF a ) { IOBUF a2; - size_t dummy_len = 0; + size_t dummy_len=0; int rc=0; if( a && a->directfp ) { fclose( a->directfp ); - gcry_free( a->real_fname ); + m_free( a->real_fname ); if( DBG_IOBUF ) log_debug("iobuf_close -> %p\n", a->directfp ); return 0; @@ -493,35 +924,37 @@ iobuf_close( IOBUF a ) for( ; a && !rc ; a = a2 ) { a2 = a->chain; if( a->use == 2 && (rc=iobuf_flush(a)) ) - log_error("iobuf_flush failed on close: %s\n", gpg_errstr(rc)); + log_error("iobuf_flush failed on close: %s\n", g10_errstr(rc)); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: close `%s'\n", a->no, a->subno, a->desc ); if( a->filter && (rc = a->filter(a->filter_ov, IOBUFCTRL_FREE, a->chain, NULL, &dummy_len)) ) - log_error("IOBUFCTRL_FREE failed on close: %s\n", gpg_errstr(rc) ); - gcry_free(a->real_fname); - gcry_free(a->d.buf); - gcry_free(a); + log_error("IOBUFCTRL_FREE failed on close: %s\n", g10_errstr(rc) ); + m_free(a->real_fname); + if (a->d.buf) { + memset (a->d.buf, 0, a->d.size); /* erase the buffer */ + m_free(a->d.buf); + } + m_free(a); } return rc; } - int iobuf_cancel( IOBUF a ) { const char *s; IOBUF a2; int rc; - #ifdef HAVE_DOSISH_SYSTEM + #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) char *remove_name = NULL; #endif if( a && a->use == 2 ) { s = iobuf_get_real_fname(a); if( s && *s ) { - #ifdef HAVE_DOSISH_SYSTEM + #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) remove_name = m_strdup ( s ); #else remove(s); @@ -538,7 +971,7 @@ iobuf_cancel( IOBUF a ) } rc = iobuf_close(a); - #ifdef HAVE_DOSISH_SYSTEM + #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) if ( remove_name ) { /* Argg, MSDOS does not allow to remove open files. So * we have to do it here */ @@ -549,6 +982,7 @@ iobuf_cancel( IOBUF a ) return rc; } + /**************** * create a temporary iobuf, which can be used to collect stuff * in an iobuf and later be written by iobuf_write_temp() to another @@ -576,6 +1010,32 @@ iobuf_temp_with_content( const char *buffer, size_t length ) return a; } +void +iobuf_enable_special_filenames ( int yes ) +{ + special_names_enabled = yes; +} + +/* + * see whether the filename has the for "-&nnnn", where n is a + * non-zero number. + * Returns this number or -1 if it is not the case. + */ +static int +check_special_filename ( const char *fname ) +{ + if ( special_names_enabled + && fname && *fname == '-' && fname[1] == '&' ) { + int i; + + fname += 2; + for (i=0; isdigit (fname[i]); i++ ) + ; + if ( !fname[i] ) + return atoi (fname); + } + return -1; +} /**************** * Create a head iobuf for reading from a file @@ -585,35 +1045,38 @@ IOBUF iobuf_open( const char *fname ) { IOBUF a; - FILE *fp; + FILEP_OR_FD fp; file_filter_ctx_t *fcx; size_t len; int print_only = 0; + int fd; if( !fname || (*fname=='-' && !fname[1]) ) { - fp = stdin; - #ifdef HAVE_DOSISH_SYSTEM - setmode ( fileno(fp) , O_BINARY ); + fp = FILEP_OR_FD_FOR_STDIN; + #ifdef USE_SETMODE + setmode ( my_fileno(fp) , O_BINARY ); #endif fname = "[stdin]"; print_only = 1; } - else if( !(fp = fopen(fname, "rb")) ) + else if ( (fd = check_special_filename ( fname )) != -1 ) + return iobuf_fdopen ( translate_file_handle (fd,0), "rb" ); + else if( (fp = my_fopen_ro(fname, "rb")) == INVALID_FP ) return NULL; a = iobuf_alloc(1, 8192 ); - fcx = gcry_xmalloc( sizeof *fcx + strlen(fname) ); + fcx = m_alloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; fcx->print_only_name = print_only; strcpy(fcx->fname, fname ); if( !print_only ) - a->real_fname = gcry_xstrdup( fname ); + a->real_fname = m_strdup( fname ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len ); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: open `%s' fd=%d\n", - a->no, a->subno, fname, fileno(fcx->fp) ); + a->no, a->subno, fname, (int)my_fileno(fcx->fp) ); return a; } @@ -626,14 +1089,18 @@ IOBUF iobuf_fdopen( int fd, const char *mode ) { IOBUF a; - FILE *fp; + FILEP_OR_FD fp; file_filter_ctx_t *fcx; size_t len; +#ifdef FILE_FILTER_USES_STDIO if( !(fp = fdopen(fd, mode)) ) return NULL; +#else + fp = (FILEP_OR_FD)fd; +#endif a = iobuf_alloc( strchr( mode, 'w')? 2:1, 8192 ); - fcx = gcry_xmalloc( sizeof *fcx + 20 ); + fcx = m_alloc( sizeof *fcx + 20 ); fcx->fp = fp; fcx->print_only_name = 1; sprintf(fcx->fname, "[fd %d]", fd ); @@ -643,7 +1110,34 @@ iobuf_fdopen( int fd, const char *mode ) file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len ); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: fdopen `%s'\n", a->no, a->subno, fcx->fname ); + iobuf_ioctl (a,3,1,NULL); /* disable fd caching */ + return a; +} + +IOBUF +iobuf_sockopen ( int fd, const char *mode ) +{ + IOBUF a; +#ifdef __MINGW32__ + sock_filter_ctx_t *scx; + size_t len; + + a = iobuf_alloc( strchr( mode, 'w')? 2:1, 8192 ); + scx = m_alloc( sizeof *scx + 25 ); + scx->sock = fd; + scx->print_only_name = 1; + sprintf(scx->fname, "[sock %d]", fd ); + a->filter = sock_filter; + a->filter_ov = scx; + sock_filter( scx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); + sock_filter( scx, IOBUFCTRL_INIT, NULL, NULL, &len ); + if( DBG_IOBUF ) + log_debug("iobuf-%d.%d: sockopen `%s'\n", a->no, a->subno, scx->fname); + iobuf_ioctl (a,3,1,NULL); /* disable fd caching */ +#else + a = iobuf_fdopen (fd, mode); +#endif return a; } @@ -654,28 +1148,31 @@ IOBUF iobuf_create( const char *fname ) { IOBUF a; - FILE *fp; + FILEP_OR_FD fp; file_filter_ctx_t *fcx; size_t len; int print_only = 0; + int fd; if( !fname || (*fname=='-' && !fname[1]) ) { - fp = stdout; - #ifdef HAVE_DOSISH_SYSTEM - setmode ( fileno(fp) , O_BINARY ); + fp = FILEP_OR_FD_FOR_STDOUT; + #ifdef USE_SETMODE + setmode ( my_fileno(fp) , O_BINARY ); #endif fname = "[stdout]"; print_only = 1; } - else if( !(fp = fopen(fname, "wb")) ) + else if ( (fd = check_special_filename ( fname )) != -1 ) + return iobuf_fdopen ( translate_file_handle (fd, 1), "wb" ); + else if( (fp = my_fopen(fname, "wb")) == INVALID_FP ) return NULL; a = iobuf_alloc(2, 8192 ); - fcx = gcry_xmalloc( sizeof *fcx + strlen(fname) ); + fcx = m_alloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; fcx->print_only_name = print_only; strcpy(fcx->fname, fname ); if( !print_only ) - a->real_fname = gcry_xstrdup( fname ); + a->real_fname = m_strdup( fname ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); @@ -689,7 +1186,9 @@ iobuf_create( const char *fname ) /**************** * append to an iobuf; if the file does not exist, create it. * cannot be used for stdout. + * Note: This is not used. */ +#if 0 /* not used */ IOBUF iobuf_append( const char *fname ) { @@ -700,13 +1199,13 @@ iobuf_append( const char *fname ) if( !fname ) return NULL; - else if( !(fp = fopen(fname, "ab")) ) + else if( !(fp = my_fopen(fname, "ab")) ) return NULL; a = iobuf_alloc(2, 8192 ); - fcx = gcry_xmalloc( sizeof *fcx + strlen(fname) ); + fcx = m_alloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; strcpy(fcx->fname, fname ); - a->real_fname = gcry_xstrdup( fname ); + a->real_fname = m_strdup( fname ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); @@ -716,24 +1215,25 @@ iobuf_append( const char *fname ) return a; } +#endif IOBUF iobuf_openrw( const char *fname ) { IOBUF a; - FILE *fp; + FILEP_OR_FD fp; file_filter_ctx_t *fcx; size_t len; if( !fname ) return NULL; - else if( !(fp = fopen(fname, "r+b")) ) + else if( (fp = my_fopen(fname, "r+b")) == INVALID_FP ) return NULL; a = iobuf_alloc(2, 8192 ); - fcx = gcry_xmalloc( sizeof *fcx + strlen(fname) ); + fcx = m_alloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; strcpy(fcx->fname, fname ); - a->real_fname = gcry_xstrdup( fname ); + a->real_fname = m_strdup( fname ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); @@ -745,41 +1245,61 @@ iobuf_openrw( const char *fname ) } - -/**************** - * You can overwrite the normal iobuf behaviour by using this function. - * If used the iobuf is a simple wrapper around stdio. - * NULL if an error occures and sets errno - */ -IOBUF -iobuf_fopen( const char *fname, const char *mode ) +int +iobuf_ioctl ( IOBUF a, int cmd, int intval, void *ptrval ) { - IOBUF a; - FILE *fp; - int print_only = 0; - - if( !fname || (*fname=='-' && !fname[1]) ) { - fp = stdin; - #ifdef HAVE_DOSISH_SYSTEM - setmode ( fileno(fp) , O_BINARY ); - #endif - fname = "[stdin]"; - print_only = 1; + if ( cmd == 1 ) { /* keep system filepointer/descriptor open */ + if( DBG_IOBUF ) + log_debug("iobuf-%d.%d: ioctl `%s' keep=%d\n", + a? a->no:-1, a?a->subno:-1, a?a->desc:"?", intval ); + for( ; a; a = a->chain ) + if( !a->chain && a->filter == file_filter ) { + file_filter_ctx_t *b = a->filter_ov; + b->keep_open = intval; + return 0; + } + #ifdef __MINGW32__ + else if( !a->chain && a->filter == sock_filter ) { + sock_filter_ctx_t *b = a->filter_ov; + b->keep_open = intval; + return 0; + } + #endif + } + else if ( cmd == 2 ) { /* invalidate cache */ + if( DBG_IOBUF ) + log_debug("iobuf-*.*: ioctl `%s' invalidate\n", + ptrval? (char*)ptrval:"?"); + if ( !a && !intval && ptrval ) { + #ifndef FILE_FILTER_USES_STDIO + fd_cache_invalidate (ptrval); + #endif + return 0; + } + } + else if ( cmd == 3 ) { /* disallow/allow caching */ + if( DBG_IOBUF ) + log_debug("iobuf-%d.%d: ioctl `%s' no_cache=%d\n", + a? a->no:-1, a?a->subno:-1, a?a->desc:"?", intval ); + for( ; a; a = a->chain ) + if( !a->chain && a->filter == file_filter ) { + file_filter_ctx_t *b = a->filter_ov; + b->no_cache = intval; + return 0; + } + #ifdef __MINGW32__ + else if( !a->chain && a->filter == sock_filter ) { + sock_filter_ctx_t *b = a->filter_ov; + b->no_cache = intval; + return 0; + } + #endif } - else if( !(fp = fopen(fname, mode) ) ) - return NULL; - a = iobuf_alloc(1, 8192 ); - a->directfp = fp; - a->real_fname = gcry_xstrdup( fname ); - if( DBG_IOBUF ) - log_debug("iobuf_fopen -> %p\n", a->directfp ); - - return a; + return -1; } - /**************** * Register an i/o filter. */ @@ -811,12 +1331,12 @@ iobuf_push_filter2( IOBUF a, * The contents of the buffers are transferred to the * new stream. */ - b = gcry_xmalloc(sizeof *b); + b = m_alloc(sizeof *b); memcpy(b, a, sizeof *b ); /* fixme: it is stupid to keep a copy of the name at every level * but we need the name somewhere because the name known by file_filter * may have been released when we need the name of the file */ - b->real_fname = a->real_fname? gcry_xstrdup(a->real_fname):NULL; + b->real_fname = a->real_fname? m_strdup(a->real_fname):NULL; /* remove the filter stuff from the new stream */ a->filter = NULL; a->filter_ov = NULL; @@ -826,12 +1346,12 @@ iobuf_push_filter2( IOBUF a, a->use = 2; /* make a write stream from a temp stream */ if( a->use == 2 ) { /* allocate a fresh buffer for the original stream */ - b->d.buf = gcry_xmalloc( a->d.size ); + b->d.buf = m_alloc( a->d.size ); b->d.len = 0; b->d.start = 0; } else { /* allocate a fresh buffer for the new stream */ - a->d.buf = gcry_xmalloc( a->d.size ); + a->d.buf = m_alloc( a->d.size ); a->d.len = 0; a->d.start = 0; } @@ -859,7 +1379,7 @@ iobuf_push_filter2( IOBUF a, /* now we can initialize the new function if we have one */ if( a->filter && (rc = a->filter(a->filter_ov, IOBUFCTRL_INIT, a->chain, NULL, &dummy_len)) ) - log_error("IOBUFCTRL_INIT failed: %s\n", gpg_errstr(rc) ); + log_error("IOBUFCTRL_INIT failed: %s\n", g10_errstr(rc) ); return rc; } @@ -882,10 +1402,10 @@ pop_filter( IOBUF a, int (*f)(void *opaque, int control, if( !a->filter ) { /* this is simple */ b = a->chain; assert(b); - gcry_free(a->d.buf); - gcry_free(a->real_fname); + m_free(a->d.buf); + m_free(a->real_fname); memcpy(a,b, sizeof *a); - gcry_free(b); + m_free(b); return 0; } for(b=a ; b; b = b->chain ) @@ -896,17 +1416,17 @@ pop_filter( IOBUF a, int (*f)(void *opaque, int control, /* flush this stream if it is an output stream */ if( a->use == 2 && (rc=iobuf_flush(b)) ) { - log_error("iobuf_flush failed in pop_filter: %s\n", gpg_errstr(rc)); + log_error("iobuf_flush failed in pop_filter: %s\n", g10_errstr(rc)); return rc; } /* and tell the filter to free it self */ if( b->filter && (rc = b->filter(b->filter_ov, IOBUFCTRL_FREE, b->chain, NULL, &dummy_len)) ) { - log_error("IOBUFCTRL_FREE failed: %s\n", gpg_errstr(rc) ); + log_error("IOBUFCTRL_FREE failed: %s\n", g10_errstr(rc) ); return rc; } if( b->filter_ov && b->filter_ov_owner ) { - gcry_free( b->filter_ov ); + m_free( b->filter_ov ); b->filter_ov = NULL; } @@ -919,10 +1439,10 @@ pop_filter( IOBUF a, int (*f)(void *opaque, int control, * a flush has been done on the to be removed entry */ b = a->chain; - gcry_free(a->d.buf); - gcry_free(a->real_fname); + m_free(a->d.buf); + m_free(a->real_fname); memcpy(a,b, sizeof *a); - gcry_free(b); + m_free(b); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: popped filter\n", a->no, a->subno ); } @@ -957,10 +1477,10 @@ underflow(IOBUF a) if( DBG_IOBUF ) log_debug("iobuf-%d.%d: pop `%s' in underflow\n", a->no, a->subno, a->desc ); - gcry_free(a->d.buf); - gcry_free(a->real_fname); + m_free(a->d.buf); + m_free(a->real_fname); memcpy(a, b, sizeof *a); - gcry_free(b); + m_free(b); print_chain(a); } else @@ -1011,9 +1531,9 @@ underflow(IOBUF a) /* and tell the filter to free itself */ if( (rc = a->filter(a->filter_ov, IOBUFCTRL_FREE, a->chain, NULL, &dummy_len)) ) - log_error("IOBUFCTRL_FREE failed: %s\n", gpg_errstr(rc) ); + log_error("IOBUFCTRL_FREE failed: %s\n", g10_errstr(rc) ); if( a->filter_ov && a->filter_ov_owner ) { - gcry_free( a->filter_ov ); + m_free( a->filter_ov ); a->filter_ov = NULL; } a->filter = NULL; @@ -1026,10 +1546,10 @@ underflow(IOBUF a) log_debug("iobuf-%d.%d: pop `%s' in underflow (!len)\n", a->no, a->subno, a->desc ); print_chain(a); - gcry_free(a->d.buf); - gcry_free(a->real_fname); + m_free(a->d.buf); + m_free(a->real_fname); memcpy(a,b, sizeof *a); - gcry_free(b); + m_free(b); print_chain(a); } } @@ -1063,16 +1583,15 @@ iobuf_flush(IOBUF a) if( a->directfp ) return 0; - /*log_debug("iobuf-%d.%d: flush\n", a->no, a->subno );*/ if( a->use == 3 ) { /* increase the temp buffer */ char *newbuf; size_t newsize = a->d.size + 8192; log_debug("increasing temp iobuf from %lu to %lu\n", (ulong)a->d.size, (ulong)newsize ); - newbuf = gcry_xmalloc( newsize ); + newbuf = m_alloc( newsize ); memcpy( newbuf, a->d.buf, a->d.len ); - gcry_free(a->d.buf); + m_free(a->d.buf); a->d.buf = newbuf; a->d.size = newsize; return 0; @@ -1085,7 +1604,7 @@ iobuf_flush(IOBUF a) rc = a->filter( a->filter_ov, IOBUFCTRL_FLUSH, a->chain, a->d.buf, &len ); if( !rc && len != a->d.len ) { log_info("iobuf_flush did not write all!\n"); - rc = GPGERR_WRITE_FILE; + rc = G10ERR_WRITE_FILE; } else if( rc ) a->error = 1; @@ -1108,7 +1627,7 @@ iobuf_readbyte(IOBUF a) if( a->unget.buf ) { if( a->unget.start < a->unget.len ) return a->unget.buf[a->unget.start++]; - gcry_free(a->unget.buf); + m_free(a->unget.buf); a->unget.buf = NULL; a->nofast &= ~2; } @@ -1301,7 +1820,7 @@ iobuf_flush_temp( IOBUF temp ) * Setting the limit to 0 disables this feature. */ void -iobuf_set_limit( IOBUF a, unsigned long nlimit ) +iobuf_set_limit( IOBUF a, off_t nlimit ) { if( nlimit ) a->nofast |= 1; @@ -1317,44 +1836,38 @@ iobuf_set_limit( IOBUF a, unsigned long nlimit ) /**************** * Return the length of an open file */ -u32 +off_t iobuf_get_filelength( IOBUF a ) { -#if defined (HAVE_FOPEN64) && defined (HAVE_FSTAT64) - struct stat64 st; -#else struct stat st; -#endif if( a->directfp ) { FILE *fp = a->directfp; - if( !fstat(fileno(fp), &st) ) { - #if defined (HAVE_FOPEN64) && defined (HAVE_FSTAT64) - if( st.st_size >= IOBUF_FILELENGTH_LIMIT ) - return IOBUF_FILELENGTH_LIMIT; - #endif - return (u32)st.st_size; - } + if( !fstat(fileno(fp), &st) ) + return st.st_size; log_error("fstat() failed: %s\n", strerror(errno) ); return 0; } - /* Hmmm: file_filter may have already been removed */ for( ; a; a = a->chain ) if( !a->chain && a->filter == file_filter ) { file_filter_ctx_t *b = a->filter_ov; - FILE *fp = b->fp; + FILEP_OR_FD fp = b->fp; - if( !fstat(fileno(fp), &st) ) { - #if defined (HAVE_FOPEN64) && defined (HAVE_FSTAT64) - if( st.st_size >= IOBUF_FILELENGTH_LIMIT ) - return IOBUF_FILELENGTH_LIMIT; - #endif + #if defined(HAVE_DOSISH_SYSTEM) && !defined(FILE_FILTER_USES_STDIO) + ulong size; + + if ( (size=GetFileSize (fp, NULL)) != 0xffffffff ) + return size; + log_error ("GetFileSize for handle %p failed: ec=%d\n", + fp, (int)GetLastError () ); + #else + if( !fstat(my_fileno(fp), &st) ) return st.st_size; - } log_error("fstat() failed: %s\n", strerror(errno) ); + #endif break; } @@ -1364,27 +1877,55 @@ iobuf_get_filelength( IOBUF a ) /**************** * Tell the file position, where the next read will take place */ -ulong +off_t iobuf_tell( IOBUF a ) { return a->ntotal + a->nbytes; } +#if !defined(HAVE_FSEEKO) && !defined(fseeko) + +#ifdef HAVE_LIMITS_H +# include +#endif +#ifndef LONG_MAX +# define LONG_MAX ((long) ((unsigned long) -1 >> 1)) +#endif +#ifndef LONG_MIN +# define LONG_MIN (-1 - LONG_MAX) +#endif + +/**************** + * A substitute for fseeko, for hosts that don't have it. + */ +static int +fseeko( FILE *stream, off_t newpos, int whence ) +{ + while( newpos != (long) newpos ) { + long pos = newpos < 0 ? LONG_MIN : LONG_MAX; + if( fseek( stream, pos, whence ) != 0 ) + return -1; + newpos -= pos; + whence = SEEK_CUR; + } + return fseek( stream, (long)newpos, whence ); +} +#endif /**************** * This is a very limited implementation. It simply discards all internal * buffering and removes all filters but the first one. */ int -iobuf_seek( IOBUF a, ulong newpos ) +iobuf_seek( IOBUF a, off_t newpos ) { file_filter_ctx_t *b = NULL; if( a->directfp ) { FILE *fp = a->directfp; - if( fseek( fp, newpos, SEEK_SET ) ) { - log_error("can't seek to %lu: %s\n", newpos, strerror(errno) ); + if( fseeko( fp, newpos, SEEK_SET ) ) { + log_error("can't seek: %s\n", strerror(errno) ); return -1; } clearerr(fp); @@ -1398,10 +1939,25 @@ iobuf_seek( IOBUF a, ulong newpos ) } if( !a ) return -1; - if( fseek( b->fp, newpos, SEEK_SET ) ) { - log_error("can't seek to %lu: %s\n", newpos, strerror(errno) ); - return -1; - } +#ifdef FILE_FILTER_USES_STDIO + if( fseeko( b->fp, newpos, SEEK_SET ) ) { + log_error("can't fseek: %s\n", strerror(errno) ); + return -1; + } +#else + #ifdef HAVE_DOSISH_SYSTEM + if (SetFilePointer (b->fp, newpos, NULL, FILE_BEGIN) == 0xffffffff ) { + log_error ("SetFilePointer failed on handle %p: ec=%d\n", + b->fp, (int)GetLastError () ); + return -1; + } + #else + if ( lseek (b->fp, newpos, SEEK_SET) == (off_t)-1 ) { + log_error("can't lseek: %s\n", strerror(errno) ); + return -1; + } + #endif +#endif } a->d.len = 0; /* discard buffer */ a->d.start = 0; @@ -1467,7 +2023,7 @@ iobuf_get_fname( IOBUF a ) void iobuf_set_block_mode( IOBUF a, size_t n ) { - block_filter_ctx_t *ctx = gcry_xcalloc( 1, sizeof *ctx ); + block_filter_ctx_t *ctx = m_alloc_clear( sizeof *ctx ); assert( a->use == 1 || a->use == 2 ); ctx->use = a->use; @@ -1489,7 +2045,7 @@ iobuf_set_block_mode( IOBUF a, size_t n ) void iobuf_set_partial_block_mode( IOBUF a, size_t len ) { - block_filter_ctx_t *ctx = gcry_xcalloc( 1, sizeof *ctx ); + block_filter_ctx_t *ctx = m_alloc_clear( sizeof *ctx ); assert( a->use == 1 || a->use == 2 ); ctx->use = a->use; @@ -1544,7 +2100,7 @@ iobuf_read_line( IOBUF a, byte **addr_of_buffer, if( !buffer ) { /* must allocate a new buffer */ length = 256; - buffer = gcry_xmalloc( length ); + buffer = m_alloc( length ); *addr_of_buffer = buffer; *length_of_buffer = length; } @@ -1564,7 +2120,7 @@ iobuf_read_line( IOBUF a, byte **addr_of_buffer, } length += 3; /* correct for the reserved byte */ length += length < 1024? 256 : 1024; - buffer = gcry_xrealloc( buffer, length ); + buffer = m_realloc( buffer, length ); *addr_of_buffer = buffer; *length_of_buffer = length; length -= 3; /* and reserve again */ @@ -1580,3 +2136,58 @@ iobuf_read_line( IOBUF a, byte **addr_of_buffer, return nbytes; } +/* This is the non iobuf specific function */ +int +iobuf_translate_file_handle ( int fd, int for_write ) +{ + #ifdef __MINGW32__ + { + int x; + + if ( fd <= 2 ) + return fd; /* do not do this for error, stdin, stdout, stderr */ + + x = _open_osfhandle ( fd, for_write? 1:0 ); + if (x==-1 ) + log_error ("failed to translate osfhandle %p\n", (void*)fd ); + else { + /*log_info ("_open_osfhandle %p yields %d%s\n", + (void*)fd, x, for_write? " for writing":"" );*/ + fd = x; + } + } + #endif + return fd; +} + +static int +translate_file_handle ( int fd, int for_write ) +{ + #ifdef __MINGW32__ + #ifdef FILE_FILTER_USES_STDIO + fd = iobuf_translate_file_handle (fd, for_write); + #else + { + int x; + + if ( fd == 0 ) + x = (int)GetStdHandle (STD_INPUT_HANDLE); + else if (fd == 1) + x = (int)GetStdHandle (STD_OUTPUT_HANDLE); + else if (fd == 2) + x = (int)GetStdHandle (STD_ERROR_HANDLE); + else + x = fd; + + if (x == -1) + log_debug ("GetStdHandle(%d) failed: ec=%d\n", + fd, (int)GetLastError () ); + + fd = x; + } + #endif + #endif + return fd; +} + + diff --git a/util/logger.c b/util/logger.c index ccf049f0c..a51455798 100644 --- a/util/logger.c +++ b/util/logger.c @@ -1,5 +1,5 @@ /* logger.c - log functions - * Copyright (C) 1998, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -24,7 +24,6 @@ #include #include #include -#include #include "util.h" #include "i18n.h" @@ -41,19 +40,17 @@ static FILE *logfp; void log_set_logfile( const char *name, int fd ) { + if( name ) + BUG(); + if( logfp && logfp != stderr && logfp != stdout ) - fclose( logfp ); - if( name ) { - logfp = fopen ( name, "a" ); - } - else { - if( fd == 1 ) - logfp = stdout; - else if( fd == 2 ) - logfp = stderr; - else - logfp = fdopen( fd, "a" ); - } + fclose( logfp ); + if( fd == 1 ) + logfp = stdout; + else if( fd == 2 ) + logfp = stderr; + else + logfp = fdopen( fd, "a" ); if( !logfp ) { logfp = stderr; log_fatal("can't open fd %d for logging: %s\n", fd, strerror(errno)); @@ -72,9 +69,9 @@ log_stream() void log_set_name( const char *name ) { - gcry_free(pgm_name); + m_free(pgm_name); if( name ) - pgm_name = gcry_xstrdup(name); + pgm_name = m_strdup(name); else pgm_name = NULL; } @@ -112,7 +109,7 @@ log_inc_errorcount() void -gpg_log_print_prefix(const char *text) +g10_log_print_prefix(const char *text) { if( !logfp ) logfp = stderr; @@ -120,6 +117,9 @@ gpg_log_print_prefix(const char *text) fprintf(logfp, "%s%s: %s", pgm_name, pidstring, text ); else fprintf(logfp, "?%s: %s", pidstring, text ); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } static void @@ -131,21 +131,27 @@ print_prefix_f(const char *text, const char *fname) fprintf(logfp, "%s%s:%s: %s", pgm_name, pidstring, fname, text ); else fprintf(logfp, "?%s:%s: %s", pidstring, fname, text ); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } void -gpg_log_info( const char *fmt, ... ) +g10_log_info( const char *fmt, ... ) { va_list arg_ptr ; - gpg_log_print_prefix(""); + g10_log_print_prefix(""); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } void -gpg_log_info_f( const char *fname, const char *fmt, ... ) +g10_log_info_f( const char *fname, const char *fmt, ... ) { va_list arg_ptr ; @@ -153,22 +159,28 @@ gpg_log_info_f( const char *fname, const char *fmt, ... ) va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } void -gpg_log_error( const char *fmt, ... ) +g10_log_error( const char *fmt, ... ) { va_list arg_ptr ; - gpg_log_print_prefix(""); + g10_log_print_prefix(""); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); errorcount++; +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } void -gpg_log_error_f( const char *fname, const char *fmt, ... ) +g10_log_error_f( const char *fname, const char *fmt, ... ) { va_list arg_ptr ; @@ -177,23 +189,29 @@ gpg_log_error_f( const char *fname, const char *fmt, ... ) vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); errorcount++; +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } void -gpg_log_fatal( const char *fmt, ... ) +g10_log_fatal( const char *fmt, ... ) { va_list arg_ptr ; - gpg_log_print_prefix("fatal: "); + g10_log_print_prefix("fatal: "); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); secmem_dump_stats(); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ exit(2); } void -gpg_log_fatal_f( const char *fname, const char *fmt, ... ) +g10_log_fatal_f( const char *fname, const char *fmt, ... ) { va_list arg_ptr ; @@ -202,16 +220,19 @@ gpg_log_fatal_f( const char *fname, const char *fmt, ... ) vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); secmem_dump_stats(); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ exit(2); } void -gpg_log_bug( const char *fmt, ... ) +g10_log_bug( const char *fmt, ... ) { va_list arg_ptr ; putc('\n', stderr ); - gpg_log_print_prefix("Ohhhh jeeee: "); + g10_log_print_prefix("Ohhhh jeeee: "); va_start( arg_ptr, fmt ) ; vfprintf(stderr,fmt,arg_ptr) ; va_end(arg_ptr); @@ -220,33 +241,37 @@ gpg_log_bug( const char *fmt, ... ) abort(); } -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) +#if defined (__riscos__) \ + || ( __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )) void -gpg_log_bug0( const char *file, int line, const char *func ) +g10_log_bug0( const char *file, int line, const char *func ) { log_bug(_("... this is a bug (%s:%d:%s)\n"), file, line, func ); } #else void -gpg_log_bug0( const char *file, int line ) +g10_log_bug0( const char *file, int line ) { log_bug(_("you found a bug ... (%s:%d)\n"), file, line); } #endif void -gpg_log_debug( const char *fmt, ... ) +g10_log_debug( const char *fmt, ... ) { va_list arg_ptr ; - gpg_log_print_prefix("DBG: "); + g10_log_print_prefix("DBG: "); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } void -gpg_log_debug_f( const char *fname, const char *fmt, ... ) +g10_log_debug_f( const char *fname, const char *fmt, ... ) { va_list arg_ptr ; @@ -254,19 +279,25 @@ gpg_log_debug_f( const char *fname, const char *fmt, ... ) va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } void -gpg_log_hexdump( const char *text, const char *buf, size_t len ) +g10_log_hexdump( const char *text, const char *buf, size_t len ) { int i; - gpg_log_print_prefix(text); + g10_log_print_prefix(text); for(i=0; i < len; i++ ) fprintf(logfp, " %02X", ((const byte*)buf)[i] ); fputc('\n', logfp); +#ifdef __riscos__ + fflush( logfp ); +#endif /* __riscos__ */ } diff --git a/util/memory.c b/util/memory.c new file mode 100644 index 000000000..9fab9ea3b --- /dev/null +++ b/util/memory.c @@ -0,0 +1,634 @@ +/* memory.c - memory allocation + * Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * + * We use our own memory allocation functions instead of plain malloc(), + * so that we can provide some special enhancements: + * a) functions to provide memory from a secure memory. + * b) by looking at the requested allocation size we + * can reuse memory very quickly (e.g. MPI storage) + * (really needed?) + * c) memory usage reporting if compiled with M_DEBUG + * d) memory checking if compiled with M_GUARD + */ + +#include +#include +#include +#include +#include + +#include "types.h" +#include "memory.h" +#include "util.h" + + +#define MAGIC_NOR_BYTE 0x55 +#define MAGIC_SEC_BYTE 0xcc +#define MAGIC_END_BYTE 0xaa + +/* This is a very crude alignment check which does not work on all CPUs + * IIRC, I once introduced it for testing on an Alpha. We should better + * replace this guard stuff with one provided by a modern malloc library + */ +#if SIZEOF_UNSIGNED_LONG == 8 + #define EXTRA_ALIGN 4 +#else + #define EXTRA_ALIGN 0 +#endif + +#if defined(M_DEBUG) || defined(M_GUARD) + static void membug( const char *fmt, ... ); +#endif + +#ifdef M_DEBUG + + #ifndef M_GUARD + #define M_GUARD 1 + #endif + #undef m_alloc + #undef m_alloc_clear + #undef m_alloc_secure + #undef m_alloc_secure_clear + #undef m_realloc + #undef m_free + #undef m_check + #undef m_strdup + #define FNAME(a) m_debug_ ##a + #define FNAMEPRT , const char *info + #define FNAMEARG , info + #ifndef __riscos__ + #define store_len(p,n,m) do { add_entry(p,n,m, \ + info, __FUNCTION__); } while(0) + #else + #define store_len(p,n,m) do { add_entry(p,n,m, \ + info, __func__ ); } while(0) + #endif +#else + #define FNAME(a) m_ ##a + #define FNAMEPRT + #define FNAMEARG + #define store_len(p,n,m) do { ((byte*)p)[EXTRA_ALIGN+0] = n; \ + ((byte*)p)[EXTRA_ALIGN+1] = n >> 8 ; \ + ((byte*)p)[EXTRA_ALIGN+2] = n >> 16 ; \ + ((byte*)p)[EXTRA_ALIGN+3] = m? MAGIC_SEC_BYTE \ + : MAGIC_NOR_BYTE; \ + } while(0) +#endif + + +#ifdef M_GUARD +static long used_memory; +#endif + +#ifdef M_DEBUG /* stuff used for memory debuging */ + +struct info_entry { + struct info_entry *next; + unsigned count; /* call count */ + const char *info; /* the reference to the info string */ +}; + +struct memtbl_entry { + const void *user_p; /* for reference: the pointer given to the user */ + size_t user_n; /* length requested by the user */ + struct memtbl_entry *next; /* to build a list of unused entries */ + const struct info_entry *info; /* points into the table with */ + /* the info strings */ + unsigned inuse:1; /* this entry is in use */ + unsigned count:31; +}; + + +#define INFO_BUCKETS 53 +#define info_hash(p) ( *(u32*)((p)) % INFO_BUCKETS ) +static struct info_entry *info_strings[INFO_BUCKETS]; /* hash table */ + +static struct memtbl_entry *memtbl; /* the table with the memory info */ +static unsigned memtbl_size; /* number of allocated entries */ +static unsigned memtbl_len; /* number of used entries */ +static struct memtbl_entry *memtbl_unused;/* to keep track of unused entries */ + +static void dump_table_at_exit(void); +static void dump_table(void); +static void check_allmem( const char *info ); + +/**************** + * Put the new P into the debug table and return a pointer to the table entry. + * mode is true for security. BY is the name of the function which called us. + */ +static void +add_entry( byte *p, unsigned n, int mode, const char *info, const char *by ) +{ + unsigned index; + struct memtbl_entry *e; + struct info_entry *ie; + + if( memtbl_len < memtbl_size ) + index = memtbl_len++; + else { + struct memtbl_entry *e; + /* look for a used entry in the table. We take the first one, + * so that freed entries remain as long as possible in the table + * (free appends a new one) + */ + if( (e = memtbl_unused) ) { + index = e - memtbl; + memtbl_unused = e->next; + e->next = NULL; + } + else { /* no free entries in the table: extend the table */ + if( !memtbl_size ) { /* first time */ + memtbl_size = 100; + if( !(memtbl = calloc( memtbl_size, sizeof *memtbl )) ) + membug("memory debug table malloc failed\n"); + index = 0; + memtbl_len = 1; + atexit( dump_table_at_exit ); + } + else { /* realloc */ + unsigned n = memtbl_size / 4; /* enlarge by 25% */ + if(!(memtbl = realloc(memtbl, (memtbl_size+n)*sizeof *memtbl))) + membug("memory debug table realloc failed\n"); + memset(memtbl+memtbl_size, 0, n*sizeof *memtbl ); + memtbl_size += n; + index = memtbl_len++; + } + } + } + e = memtbl+index; + if( e->inuse ) + membug("Ooops: entry %u is flagged as in use\n", index); + e->user_p = p + EXTRA_ALIGN + 4; + e->user_n = n; + e->count++; + if( e->next ) + membug("Ooops: entry is in free entry list\n"); + /* do we already have this info string */ + for( ie = info_strings[info_hash(info)]; ie; ie = ie->next ) + if( ie->info == info ) + break; + if( !ie ) { /* no: make a new entry */ + if( !(ie = malloc( sizeof *ie )) ) + membug("can't allocate info entry\n"); + ie->next = info_strings[info_hash(info)]; + info_strings[info_hash(info)] = ie; + ie->info = info; + ie->count = 0; + } + ie->count++; + e->info = ie; + e->inuse = 1; + + /* put the index at the start of the memory */ + p[EXTRA_ALIGN+0] = index; + p[EXTRA_ALIGN+1] = index >> 8 ; + p[EXTRA_ALIGN+2] = index >> 16 ; + p[EXTRA_ALIGN+3] = mode? MAGIC_SEC_BYTE : MAGIC_NOR_BYTE ; + if( DBG_MEMORY ) + log_debug( "%s allocates %u bytes using %s\n", info, e->user_n, by ); +} + + + +/**************** + * Check that the memory block is correct. The magic byte has already been + * checked. Checks which are done here: + * - see whether the index points into our memory table + * - see whether P is the same as the one stored in the table + * - see whether we have already freed this block. + */ +struct memtbl_entry * +check_mem( const byte *p, const char *info ) +{ + unsigned n; + struct memtbl_entry *e; + + n = p[EXTRA_ALIGN+0]; + n |= p[EXTRA_ALIGN+1] << 8; + n |= p[EXTRA_ALIGN+2] << 16; + + if( n >= memtbl_len ) + membug("memory at %p corrupted: index=%u table_len=%u (%s)\n", + p+EXTRA_ALIGN+4, n, memtbl_len, info ); + e = memtbl+n; + + if( e->user_p != p+EXTRA_ALIGN+4 ) + membug("memory at %p corrupted: reference mismatch (%s)\n", + p+EXTRA_ALIGN+4, info ); + if( !e->inuse ) + membug("memory at %p corrupted: marked as free (%s)\n", + p+EXTRA_ALIGN+4, info ); + + if( !(p[EXTRA_ALIGN+3] == MAGIC_NOR_BYTE + || p[EXTRA_ALIGN+3] == MAGIC_SEC_BYTE) ) + membug("memory at %p corrupted: underflow=%02x (%s)\n", + p+EXTRA_ALIGN+4, p[EXTRA_ALIGN+3], info ); + if( p[EXTRA_ALIGN+4+e->user_n] != MAGIC_END_BYTE ) + membug("memory at %p corrupted: overflow=%02x (%s)\n", + p+EXTRA_ALIGN+4, p[EXTRA_ALIGN+4+e->user_n], info ); + return e; +} + + +/**************** + * free the entry and the memory (replaces free) + */ +static void +free_entry( byte *p, const char *info ) +{ + struct memtbl_entry *e, *e2; + + check_allmem("add_entry"); + + e = check_mem(p, info); + if( DBG_MEMORY ) + log_debug( "%s frees %u bytes alloced by %s\n", + info, e->user_n, e->info->info ); + if( !e->inuse ) { + if( e->user_p == p + EXTRA_ALIGN+ 4 ) + membug("freeing an already freed pointer at %p\n", p+EXTRA_ALIGN+4 ); + else + membug("freeing pointer %p which is flagged as freed\n", p+EXTRA_ALIGN+4 ); + } + + e->inuse = 0; + e->next = NULL; + if( !memtbl_unused ) + memtbl_unused = e; + else { + for(e2=memtbl_unused; e2->next; e2 = e2->next ) + ; + e2->next = e; + } + if( m_is_secure(p+EXTRA_ALIGN+4) ) + secmem_free(p); + else { + memset(p,'f', e->user_n+5); + free(p); + } +} + +static void +dump_entry(struct memtbl_entry *e ) +{ + unsigned n = e - memtbl; + + fprintf(stderr, "mem %4u%c %5u %p %5u %s (%u)\n", + n, e->inuse?'a':'u', e->count, e->user_p, e->user_n, + e->info->info, e->info->count ); + + +} + + +static void +dump_table_at_exit( void) +{ + if( DBG_MEMSTAT ) + dump_table(); +} + +static void +dump_table( void) +{ + unsigned n; + struct memtbl_entry *e; + ulong sum = 0, chunks =0; + + for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) { + if(e->inuse) { + dump_entry(e); + sum += e->user_n; + chunks++; + } + } + fprintf(stderr, " memory used: %8lu bytes in %ld chunks\n", + sum, chunks ); +} + + +static void +check_allmem( const char *info ) +{ + unsigned n; + struct memtbl_entry *e; + + for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) { + if( e->inuse ) { + #ifndef __riscos__ + check_mem(e->user_p-4-EXTRA_ALIGN, info); + #else + check_mem((const byte *) e->user_p-4-EXTRA_ALIGN, info); + #endif + } + } +} + +#endif /* M_DEBUG */ + +#if defined(M_DEBUG) || defined(M_GUARD) +static void +membug( const char *fmt, ... ) +{ + va_list arg_ptr ; + + fprintf(stderr, "\nMemory Error: " ) ; + va_start( arg_ptr, fmt ) ; + vfprintf(stderr,fmt,arg_ptr) ; + va_end(arg_ptr); + fflush(stderr); + #ifdef M_DEBUG + if( DBG_MEMSTAT ) + dump_table(); + #endif + abort(); +} +#endif + +void +m_print_stats( const char *prefix ) +{ + #ifdef M_DEBUG + unsigned n; + struct memtbl_entry *e; + ulong sum = 0, chunks =0; + + for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) { + if(e->inuse) { + sum += e->user_n; + chunks++; + } + } + + log_debug( "%s%smemstat: %8lu bytes in %ld chunks used\n", + prefix? prefix:"", prefix? ": ":"", sum, chunks ); + #elif defined(M_GUARD) + log_debug( "%s%smemstat: %8ld bytes\n", + prefix? prefix:"", prefix? ": ":"", used_memory ); + #endif +} + +void +m_dump_table( const char *prefix ) +{ + #ifdef M_DEBUG + fprintf(stderr,"Memory-Table-Dump: %s\n", prefix); + dump_table(); + #endif + m_print_stats( prefix ); +} + + +static void +out_of_core(size_t n, int secure) +{ + log_error ("out of %s memory while allocating %u bytes\n", + secure? "secure":"" ,(unsigned)n ); + if (secure) { + /*secmem_dump_stats ();*/ + log_info ("(this may be caused by too many secret keys used " + "simultaneously or due to excessive large key sizes)\n"); + } + exit (2); +} + +/**************** + * Allocate memory of size n. + * This function gives up if we do not have enough memory + */ +void * +FNAME(alloc)( size_t n FNAMEPRT ) +{ + char *p; + + #ifdef M_GUARD + if(!n) + out_of_core(n,0); /* should never happen */ + if( !(p = malloc( n + EXTRA_ALIGN+5 )) ) + out_of_core(n,0); + store_len(p,n,0); + used_memory += n; + p[4+EXTRA_ALIGN+n] = MAGIC_END_BYTE; + return p+EXTRA_ALIGN+4; + #else + /* mallocing zero bytes is undefined by ISO-C, so we better make + sure that it won't happen */ + if (!n) + n = 1; + if( !(p = malloc( n )) ) + out_of_core(n,0); + return p; + #endif +} + +/**************** + * Allocate memory of size n from the secure memory pool. + * This function gives up if we do not have enough memory + */ +void * +FNAME(alloc_secure)( size_t n FNAMEPRT ) +{ + char *p; + + #ifdef M_GUARD + if(!n) + out_of_core(n,1); /* should never happen */ + if( !(p = secmem_malloc( n +EXTRA_ALIGN+ 5 )) ) + out_of_core(n,1); + store_len(p,n,1); + p[4+EXTRA_ALIGN+n] = MAGIC_END_BYTE; + return p+EXTRA_ALIGN+4; + #else + /* mallocing zero bytes is undefined by ISO-C, so we better make + sure that it won't happen */ + if (!n) + n = 1; + if( !(p = secmem_malloc( n )) ) + out_of_core(n,1); + return p; + #endif +} + +void * +FNAME(alloc_clear)( size_t n FNAMEPRT ) +{ + void *p; + p = FNAME(alloc)( n FNAMEARG ); + memset(p, 0, n ); + return p; +} + +void * +FNAME(alloc_secure_clear)( size_t n FNAMEPRT) +{ + void *p; + p = FNAME(alloc_secure)( n FNAMEARG ); + memset(p, 0, n ); + return p; +} + + +/**************** + * realloc and clear the old space + */ +void * +FNAME(realloc)( void *a, size_t n FNAMEPRT ) +{ + void *b; + + #ifdef M_GUARD + if( a ) { + unsigned char *p = a; + size_t len = m_size(a); + + if( len >= n ) /* we don't shrink for now */ + return a; + if( p[-1] == MAGIC_SEC_BYTE ) + b = FNAME(alloc_secure_clear)(n FNAMEARG); + else + b = FNAME(alloc_clear)(n FNAMEARG); + FNAME(check)(NULL FNAMEARG); + memcpy(b, a, len ); + FNAME(free)(p FNAMEARG); + } + else + b = FNAME(alloc)(n FNAMEARG); + #else + if( m_is_secure(a) ) { + if( !(b = secmem_realloc( a, n )) ) + out_of_core(n,1); + } + else { + if( !(b = realloc( a, n )) ) + out_of_core(n,0); + } + #endif + + return b; +} + + + +/**************** + * Free a pointer + */ +void +FNAME(free)( void *a FNAMEPRT ) +{ + byte *p = a; + + if( !p ) + return; + #ifdef M_DEBUG + free_entry(p-EXTRA_ALIGN-4, info); + #elif defined M_GUARD + m_check(p); + if( m_is_secure(a) ) + secmem_free(p-EXTRA_ALIGN-4); + else { + used_memory -= m_size(a); + free(p-EXTRA_ALIGN-4); + } + #else + if( m_is_secure(a) ) + secmem_free(p); + else + free(p); + #endif +} + + +void +FNAME(check)( const void *a FNAMEPRT ) +{ + #ifdef M_GUARD + const byte *p = a; + + #ifdef M_DEBUG + if( p ) + check_mem(p-EXTRA_ALIGN-4, info); + else + check_allmem(info); + #else + if( !p ) + return; + if( !(p[-1] == MAGIC_NOR_BYTE || p[-1] == MAGIC_SEC_BYTE) ) + membug("memory at %p corrupted (underflow=%02x)\n", p, p[-1] ); + else if( p[m_size(p)] != MAGIC_END_BYTE ) + membug("memory at %p corrupted (overflow=%02x)\n", p, p[-1] ); + #endif + #endif +} + + +size_t +m_size( const void *a ) +{ + #ifndef M_GUARD + log_debug("dummy m_size called\n"); + return 0; + #else + const byte *p = a; + size_t n; + + #ifdef M_DEBUG + n = check_mem(p-EXTRA_ALIGN-4, "m_size")->user_n; + #else + n = ((byte*)p)[-4]; + n |= ((byte*)p)[-3] << 8; + n |= ((byte*)p)[-2] << 16; + #endif + return n; + #endif +} + + +#if 0 /* not used */ +/**************** + * Make a copy of the memory block at a + */ +void * +FNAME(copy)( const void *a FNAMEPRT ) +{ + void *b; + size_t n; + + if( !a ) + return NULL; + + n = m_size(a); Aiiiih woher nehmen + if( m_is_secure(a) ) + b = FNAME(alloc_secure)(n FNAMEARG); + else + b = FNAME(alloc)(n FNAMEARG); + memcpy(b, a, n ); + return b; +} +#endif + +char * +FNAME(strdup)( const char *a FNAMEPRT ) +{ + size_t n = strlen(a); + char *p = FNAME(alloc)(n+1 FNAMEARG); + strcpy(p, a); + return p; +} + diff --git a/util/miscutil.c b/util/miscutil.c index 9b4a8379f..e1735cd59 100644 --- a/util/miscutil.c +++ b/util/miscutil.c @@ -1,5 +1,5 @@ /* miscutil.c - miscellaneous utilities - * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -27,7 +27,6 @@ #ifdef HAVE_LANGINFO_H #include #endif -#include #include "types.h" #include "util.h" #include "i18n.h" @@ -125,10 +124,15 @@ strtimestamp( u32 stamp ) static char buffer[11+5]; struct tm *tp; time_t atime = stamp; - - tp = gmtime( &atime ); - sprintf(buffer,"%04d-%02d-%02d", - 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); + + if (atime < 0) { + strcpy (buffer, "????" "-??" "-??"); + } + else { + tp = gmtime( &atime ); + sprintf(buffer,"%04d-%02d-%02d", + 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); + } return buffer; } @@ -145,6 +149,11 @@ asctimestamp( u32 stamp ) struct tm *tp; time_t atime = stamp; + if (atime < 0) { + strcpy (buffer, "????" "-??" "-??"); + return buffer; + } + tp = localtime( &atime ); #ifdef HAVE_STRFTIME #if defined(HAVE_NL_LANGINFO) @@ -173,7 +182,8 @@ void print_string( FILE *fp, const byte *p, size_t n, int delim ) { for( ; n; n--, p++ ) - if( iscntrl( *p ) || *p == delim ) { + if( *p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim || + (delim && *p=='\\')) { putc('\\', fp); if( *p == '\n' ) putc('n', fp); @@ -198,7 +208,7 @@ print_string( FILE *fp, const byte *p, size_t n, int delim ) * Print an UTF8 string to FP and filter all control characters out. */ void -print_utf8_string( FILE *fp, const byte *p, size_t n ) +print_utf8_string2 ( FILE *fp, const byte *p, size_t n, int delim ) { size_t i; char *buf; @@ -209,17 +219,24 @@ print_utf8_string( FILE *fp, const byte *p, size_t n ) break; } if( i < n ) { - buf = utf8_to_native( p, n ); + buf = utf8_to_native ( p, n, delim ); + /*(utf8 conversion already does the control character quoting)*/ fputs( buf, fp ); - gcry_free( buf ); + m_free( buf ); } else - print_string( fp, p, n, 0 ); + print_string( fp, p, n, delim ); +} + +void +print_utf8_string( FILE *fp, const byte *p, size_t n ) +{ + print_utf8_string2 (fp, p, n, 0); } /**************** * This function returns a string which is suitable for printing - * Caller must release it with gcry_free() + * Caller must release it with m_free() */ char * make_printable_string( const byte *p, size_t n, int delim ) @@ -230,7 +247,8 @@ make_printable_string( const byte *p, size_t n, int delim ) /* first count length */ for(save_n = n, save_p = p, buflen=1 ; n; n--, p++ ) { - if( iscntrl( *p ) || *p == delim ) { + if( *p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim || + (delim && *p=='\\')) { if( *p=='\n' || *p=='\r' || *p=='\f' || *p=='\v' || *p=='\b' || !*p ) buflen += 2; @@ -243,9 +261,10 @@ make_printable_string( const byte *p, size_t n, int delim ) p = save_p; n = save_n; /* and now make the string */ - d = buffer = gcry_xmalloc( buflen ); + d = buffer = m_alloc( buflen ); for( ; n; n--, p++ ) { - if( iscntrl( *p ) || *p == delim ) { + if( *p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim || + (delim && *p=='\\')) { *d++ = '\\'; if( *p == '\n' ) *d++ = 'n'; @@ -271,67 +290,72 @@ make_printable_string( const byte *p, size_t n, int delim ) return buffer; } +int +answer_is_yes_no_default( const char *s, int def_answer ) +{ + const char *long_yes = _("yes"); + const char *short_yes = _("yY"); + const char *long_no = _("no"); + const char *short_no = _("nN"); + + /* Note: we have to use the local dependent strcasecmp here */ + if( !strcasecmp(s, long_yes ) ) + return 1; + if( *s && strchr( short_yes, *s ) && !s[1] ) + return 1; + /* test for no strings to catch ambiguities for the next test */ + if( !strcasecmp(s, long_no ) ) + return 0; + if( *s && strchr( short_no, *s ) && !s[1] ) + return 0; + /* test for the english version (for those who are used to type yes) */ + if( !ascii_strcasecmp(s, "yes" ) ) + return 1; + if( *s && strchr( "yY", *s ) && !s[1] ) + return 1; + return def_answer; +} int answer_is_yes( const char *s ) { - char *long_yes = _("yes"); - char *short_yes = _("yY"); - char *long_no = _("no"); - char *short_no = _("nN"); - - if( !stricmp(s, long_yes ) ) - return 1; - if( strchr( short_yes, *s ) && !s[1] ) - return 1; - /* test for no strings to catch ambiguities for the next test */ - if( !stricmp(s, long_no ) ) - return 0; - if( strchr( short_no, *s ) && !s[1] ) - return 0; - /* test for the english version (for those who are used to type yes) */ - if( !stricmp(s, "yes" ) ) - return 1; - if( strchr( "yY", *s ) && !s[1] ) - return 1; - return 0; + return answer_is_yes_no_default(s,0); } - /**************** * Return 1 for yes, -1 for quit, or 0 for no */ int answer_is_yes_no_quit( const char *s ) { - char *long_yes = _("yes"); - char *long_no = _("no"); - char *long_quit = _("quit"); - char *short_yes = _("yY"); - char *short_no = _("nN"); - char *short_quit = _("qQ"); + const char *long_yes = _("yes"); + const char *long_no = _("no"); + const char *long_quit = _("quit"); + const char *short_yes = _("yY"); + const char *short_no = _("nN"); + const char *short_quit = _("qQ"); - if( !stricmp(s, long_no ) ) + /* Note: We have to use the locale dependent strcasecmp */ + if( !strcasecmp(s, long_no ) ) return 0; - if( !stricmp(s, long_yes ) ) + if( !strcasecmp(s, long_yes ) ) return 1; - if( !stricmp(s, long_quit ) ) + if( !strcasecmp(s, long_quit ) ) return -1; - if( strchr( short_no, *s ) && !s[1] ) + if( *s && strchr( short_no, *s ) && !s[1] ) return 0; - if( strchr( short_yes, *s ) && !s[1] ) + if( *s && strchr( short_yes, *s ) && !s[1] ) return 1; - if( strchr( short_quit, *s ) && !s[1] ) + if( *s && strchr( short_quit, *s ) && !s[1] ) return -1; - if( !stricmp(s, "yes" ) ) + /* but not here */ + if( !ascii_strcasecmp(s, "yes" ) ) return 1; - if( !stricmp(s, "quit" ) ) + if( !ascii_strcasecmp(s, "quit" ) ) return -1; - if( strchr( "yY", *s ) && !s[1] ) + if( *s && strchr( "yY", *s ) && !s[1] ) return 1; - if( strchr( "qQ", *s ) && !s[1] ) + if( *s && strchr( "qQ", *s ) && !s[1] ) return -1; return 0; } - - diff --git a/util/riscos.c b/util/riscos.c new file mode 100644 index 000000000..e0844a205 --- /dev/null +++ b/util/riscos.c @@ -0,0 +1,327 @@ +/* riscos.c - RISC OS stuff + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG for RISC OS. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef __RISCOS__C__ +#define __RISCOS__C__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "util.h" +#include "memory.h" + +#define __UNIXLIB_INTERNALS +#include +#undef __UNIXLIB_INTERNALS + +/* RISC OS specific defines that are not yet in UnixLib */ + +#define MimeMap_Translate 0x50B00 +#define MMM_TYPE_RISCOS 0 +#define MMM_TYPE_RISCOS_STRING 1 +#define MMM_TYPE_MIME 2 +#define MMM_TYPE_DOT_EXTN 3 + +/* RISC OS file open descriptor control list */ + +struct fds_item { + int fd; + struct fds_item *next; +}; +static struct fds_item *fds_list = NULL; +static int initialized = 0; + + +/* local RISC OS functions */ + +static int +is_read_only(const char *filename) +{ + _kernel_swi_regs r; + + r.r[0] = 17; + r.r[1] = (int) filename; + + if (_kernel_swi(OS_File, &r, &r)) + log_fatal("Can't get file attributes for %s!\n", filename); + + if (r.r[0] == 0) + log_fatal("Can't find file %s!\n", filename); + + r.r[0] = 4; + if (_kernel_swi(OS_File, &r, &r)) + return 1; + + return 0; +} + +static void +riscos_set_filetype_by_number(const char *filename, int type) +{ + _kernel_swi_regs r; + + r.r[0] = 18; + r.r[1] = (int) filename; + r.r[2] = type; + + if (_kernel_swi(OS_File, &r, &r)) + log_fatal("Can't set filetype for file %s!\n" + "Is the file on a read-only file system?\n", filename); +} + +/* exported RISC OS functions */ + +void +riscos_global_defaults() +{ + __riscosify_control = __RISCOSIFY_NO_PROCESS; + __feature_imagefs_is_file = 1; +} + +void +riscos_set_filetype(const char *filename, const char *mimetype) +{ + _kernel_swi_regs r; + + r.r[0] = MMM_TYPE_MIME; + r.r[1] = (int) mimetype; + r.r[2] = MMM_TYPE_RISCOS; + + if (_kernel_swi(MimeMap_Translate, &r, &r)) + log_fatal("Can't translate MIME type %s!\n", mimetype); + + riscos_set_filetype_by_number(filename, r.r[3]); +} + +pid_t +riscos_getpid(void) +{ + _kernel_swi_regs r; + + r.r[0] = 3; + if (_kernel_swi(Wimp_ReadSysInfo, &r, &r)) + log_fatal("Wimp_ReadSysInfo failed: Can't get WimpState (R0=3)!\n"); + + if (!r.r[0]) + return (pid_t) 0; + + r.r[0] = 5; + if (_kernel_swi(Wimp_ReadSysInfo, &r, &r)) + log_fatal("Wimp_ReadSysInfo failed: Can't get task handle (R0=5)!\n"); + + return (pid_t) r.r[0]; +} + +int +riscos_kill(pid_t pid, int sig) +{ + _kernel_swi_regs r; + int buf[4]; + + if (sig) + kill(pid, sig); + + r.r[0] = 0; + do { + r.r[1] = (int) buf; + r.r[2] = 16; + if (_kernel_swi(TaskManager_EnumerateTasks, &r, &r)) + log_fatal("TaskManager_EnumerateTasks failed!\n"); + if (buf[0] == pid) + return 0; + } while (r.r[0] >= 0); + + return __set_errno(ESRCH); +} + +int +riscos_access(const char *path, int amode) +{ + /* Do additional check, i.e. whether path is on write-protected floppy */ + if ((amode & W_OK) && is_read_only(path)) + return 1; + return access(path, amode); +} + +#ifdef DEBUG +void +dump_fdlist(void) +{ + struct fds_item *iter = fds_list; + printf("List of open file descriptors:\n"); + while (iter) { + printf(" %i\n", iter->fd); + iter = iter->next; + } +} +#endif /* DEBUG */ + +int +fdopenfile(const char *filename, const int allow_write) +{ + struct fds_item *h; + int fd; + if (allow_write) + fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR); + else + fd = open(filename, O_RDONLY); + if (fd == -1) + log_error("Can't open file %s: %i, %s!\n", filename, errno, strerror(errno)); + + if (!initialized) { + atexit (close_fds); + initialized = 1; + } + + h = fds_list; + fds_list = (struct fds_item *) m_alloc(sizeof(struct fds_item)); + fds_list->fd = fd; + fds_list->next = h; + + return fd; +} + +void +close_fds(void) +{ + FILE *fp; + struct fds_item *h = fds_list; + while( fds_list ) { + h = fds_list->next; + fp = fdopen (fds_list->fd, "a"); + if (fp) + fflush(fp); + close(fds_list->fd); + m_free(fds_list); + fds_list = h; + } +} + +int +renamefile(const char *old, const char *new) +{ + _kernel_swi_regs r; + _kernel_oserror *e; + + r.r[0] = 25; + r.r[1] = (int) old; + r.r[2] = (int) new; + if (e = _kernel_swi(OS_FSControl, &r, &r)) { + if (e->errnum == 214) + return __set_errno(ENOENT); + if (e->errnum == 176) + return __set_errno(EEXIST); + printf("Error during renaming: %i, %s!\n", e->errnum, e->errmess); + return __set_errno(EOPSYS); + } + return 0; +} + +char * +gstrans(const char *old) +{ + _kernel_swi_regs r; + int c = 0; + int size = 256; + char *buf, *tmp; + + buf = (char *) m_alloc(size); + if (!buf) + log_fatal("Can't claim memory for OS_GSTrans buffer!\n"); + do { + r.r[0] = (int) old; + r.r[1] = (int) buf; + r.r[2] = size; + _kernel_swi_c(OS_GSTrans, &r, &r, &c); + if (c) { + size += 256; + tmp = (char *) m_realloc(buf, size); + if (!tmp) + log_fatal("Can't claim memory for OS_GSTrans buffer!\n"); + buf = tmp; + } + } while (c); + + buf[r.r[2]] = '\0'; + tmp = (char *) m_realloc(buf, r.r[2] + 1); + if (!tmp) + log_fatal("Can't realloc memory after OS_GSTrans!\n"); + + return tmp; +} + +#ifdef DEBUG +void +list_openfiles(void) +{ + _kernel_swi_regs r; + char *name; + int i; + + for (i = 255; i >= 0; --i) { + r.r[0] = 7; + r.r[1] = i; + r.r[2] = 0; + r.r[5] = 0; + if (_kernel_swi(OS_Args, &r, &r)) + continue; + + name = (char *) m_alloc(1-r.r[5]); + if (!name) + log_fatal("Can't claim memory for OS_Args buffer!\n"); + + r.r[0] = 7; + r.r[1] = i; + r.r[2] = (int) name; + r.r[5] = 1-r.r[5]; + if (_kernel_swi(OS_Args, &r, &r)) { + m_free(name); + log_fatal("Error when calling OS_Args(7)!\n"); + } + + r.r[0] = 254; + r.r[1] = i; + if (_kernel_swi(OS_Args, &r, &r)) { + m_free(name); + log_fatal("Error when calling OS_Args(254)!\n"); + } + + printf("%3i: %s (%c%c)\n", i, name, + (r.r[0] & 0x40) ? 'R' : 0, + (r.r[0] & 0x80) ? 'W' : 0); + m_free(name); + } +} +#endif + +void +not_implemented(const char *feature) +{ + log_info("%s is not implemented in the RISC OS version!\n", feature); +} + +#endif /* !__RISCOS__C__ */ diff --git a/util/secmem.c b/util/secmem.c new file mode 100644 index 000000000..c808dfeea --- /dev/null +++ b/util/secmem.c @@ -0,0 +1,468 @@ +/* secmem.c - memory allocation from a secure heap + * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#if defined(HAVE_MLOCK) || defined(HAVE_MMAP) + #include + #include + #include + #ifdef USE_CAPABILITIES + #include + #endif + #ifdef HAVE_PLOCK + #include + #endif +#endif + +#include "types.h" +#include "memory.h" +#include "util.h" +#include "i18n.h" + +#if defined(MAP_ANON) && !defined(MAP_ANONYMOUS) + #define MAP_ANONYMOUS MAP_ANON +#endif +/* It seems that Slackware 7.1 does not know about EPERM */ +#if !defined(EPERM) && defined(ENOMEM) + #define EPERM ENOMEM +#endif + + +#define DEFAULT_POOLSIZE 16384 + +typedef struct memblock_struct MEMBLOCK; +struct memblock_struct { + unsigned size; + union { + MEMBLOCK *next; + PROPERLY_ALIGNED_TYPE aligned; + } u; +}; + + + +static void *pool; +static volatile int pool_okay; /* may be checked in an atexit function */ +static volatile int pool_is_mmapped; +static size_t poolsize; /* allocated length */ +static size_t poollen; /* used length */ +static MEMBLOCK *unused_blocks; +static unsigned max_alloced; +static unsigned cur_alloced; +static unsigned max_blocks; +static unsigned cur_blocks; +static int disable_secmem; +static int show_warning; +static int no_warning; +static int suspend_warning; + + +static void +print_warn(void) +{ + if (!no_warning) + { + log_info(_("Warning: using insecure memory!\n")); + log_info(_("please see http://www.gnupg.org/faq.html " + "for more information\n")); + } +} + + +static void +lock_pool( void *p, size_t n ) +{ + #if defined(USE_CAPABILITIES) && defined(HAVE_MLOCK) + int err; + + cap_set_proc( cap_from_text("cap_ipc_lock+ep") ); + err = mlock( p, n ); + if( err && errno ) + err = errno; + cap_set_proc( cap_from_text("cap_ipc_lock+p") ); + + if( err ) { + if( errno != EPERM + #ifdef EAGAIN /* OpenBSD returns this */ + && errno != EAGAIN + #endif + #ifdef ENOSYS /* Some SCOs return this (function not implemented) */ + && errno != ENOSYS + #endif + #ifdef ENOMEM /* Linux can return this */ + && errno != ENOMEM + #endif + ) + log_error("can't lock memory: %s\n", strerror(err)); + show_warning = 1; + } + + #elif defined(HAVE_MLOCK) + uid_t uid; + int err; + + uid = getuid(); + + #ifdef HAVE_BROKEN_MLOCK + /* ick. but at least we get secured memory. about to lock + entire data segment. */ + #ifdef HAVE_PLOCK + err = plock( DATLOCK ); + if( err && errno ) + err = errno; +#else /*!HAVE_PLOCK*/ + if( uid ) { + errno = EPERM; + err = errno; + } + else { + err = mlock( p, n ); + if( err && errno ) + err = errno; + } + #endif /*!HAVE_PLOCK*/ + #else + err = mlock( p, n ); + if( err && errno ) + err = errno; + #endif + + if( uid && !geteuid() ) { + /* check that we really dropped the privs. + * Note: setuid(0) should always fail */ + if( setuid( uid ) || getuid() != geteuid() || !setuid(0) ) + log_fatal("failed to reset uid: %s\n", strerror(errno)); + } + + if( err ) { + if( errno != EPERM + #ifdef EAGAIN /* OpenBSD returns this */ + && errno != EAGAIN + #endif + #ifdef ENOSYS /* Some SCOs return this (function not implemented) */ + && errno != ENOSYS + #endif + #ifdef ENOMEM /* Linux can return this */ + && errno != ENOMEM + #endif + ) + log_error("can't lock memory: %s\n", strerror(err)); + show_warning = 1; + } + + #elif defined ( __QNX__ ) + /* QNX does not page at all, so the whole secure memory stuff does + * not make much sense. However it is still of use because it + * wipes out the memory on a free(). + * Therefore it is sufficient to suppress the warning + */ + #elif defined (HAVE_DOSISH_SYSTEM) + /* It does not make sense to print such a warning, given the fact that + * this whole Windows !@#$% and their user base are inherently insecure + */ + #elif defined (__riscos__) + /* no virtual memory on RISC OS, so no pages are swapped to disc, + * besides we don't have mmap, so we don't use it! ;-) + * But don't complain, as explained above. + */ + #else + log_info("Please note that you don't have secure memory on this system\n"); + #endif +} + + +static void +init_pool( size_t n) +{ + size_t pgsize; + + poolsize = n; + + if( disable_secmem ) + log_bug("secure memory is disabled"); + + #ifdef HAVE_GETPAGESIZE + pgsize = getpagesize(); + #else + pgsize = 4096; + #endif + + #if HAVE_MMAP + poolsize = (poolsize + pgsize -1 ) & ~(pgsize-1); + #ifdef MAP_ANONYMOUS + pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE, + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + #else /* map /dev/zero instead */ + { int fd; + + fd = open("/dev/zero", O_RDWR); + if( fd == -1 ) { + log_error("can't open /dev/zero: %s\n", strerror(errno) ); + pool = (void*)-1; + } + else { + pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE, + MAP_PRIVATE, fd, 0); + } + } + #endif + if( pool == (void*)-1 ) + log_info("can't mmap pool of %u bytes: %s - using malloc\n", + (unsigned)poolsize, strerror(errno)); + else { + pool_is_mmapped = 1; + pool_okay = 1; + } + + #endif + if( !pool_okay ) { + pool = malloc( poolsize ); + if( !pool ) + log_fatal("can't allocate memory pool of %u bytes\n", + (unsigned)poolsize); + else + pool_okay = 1; + } + lock_pool( pool, poolsize ); + poollen = 0; +} + + +/* concatenate unused blocks */ +static void +compress_pool(void) +{ + /* fixme: we really should do this */ +} + +void +secmem_set_flags( unsigned flags ) +{ + int was_susp = suspend_warning; + + no_warning = flags & 1; + suspend_warning = flags & 2; + + /* and now issue the warning if it is not longer suspended */ + if( was_susp && !suspend_warning && show_warning ) { + show_warning = 0; + print_warn(); + } +} + +unsigned +secmem_get_flags(void) +{ + unsigned flags; + + flags = no_warning ? 1:0; + flags |= suspend_warning ? 2:0; + return flags; +} + +void +secmem_init( size_t n ) +{ + if( !n ) { +#ifndef __riscos__ + #ifdef USE_CAPABILITIES + /* drop all capabilities */ + cap_set_proc( cap_from_text("all-eip") ); + + #elif !defined(HAVE_DOSISH_SYSTEM) + uid_t uid; + + disable_secmem=1; + uid = getuid(); + if( uid != geteuid() ) { + if( setuid( uid ) || getuid() != geteuid() || !setuid(0) ) + log_fatal("failed to drop setuid\n" ); + } + #endif +#endif /* !__riscos__ */ + } + else { + if( n < DEFAULT_POOLSIZE ) + n = DEFAULT_POOLSIZE; + if( !pool_okay ) + init_pool(n); + else + log_error("Oops, secure memory pool already initialized\n"); + } +} + + +void * +secmem_malloc( size_t size ) +{ + MEMBLOCK *mb, *mb2; + int compressed=0; + + if( !pool_okay ) { + log_info( + _("operation is not possible without initialized secure memory\n")); + log_info(_("(you may have used the wrong program for this task)\n")); + exit(2); + } + if( show_warning && !suspend_warning ) { + show_warning = 0; + print_warn(); + } + + /* blocks are always a multiple of 32 */ + size += sizeof(MEMBLOCK); + size = ((size + 31) / 32) * 32; + + retry: + /* try to get it from the used blocks */ + for(mb = unused_blocks,mb2=NULL; mb; mb2=mb, mb = mb->u.next ) + if( mb->size >= size ) { + if( mb2 ) + mb2->u.next = mb->u.next; + else + unused_blocks = mb->u.next; + goto leave; + } + /* allocate a new block */ + if( (poollen + size <= poolsize) ) { + mb = (void*)((char*)pool + poollen); + poollen += size; + mb->size = size; + } + else if( !compressed ) { + compressed=1; + compress_pool(); + goto retry; + } + else + return NULL; + + leave: + cur_alloced += mb->size; + cur_blocks++; + if( cur_alloced > max_alloced ) + max_alloced = cur_alloced; + if( cur_blocks > max_blocks ) + max_blocks = cur_blocks; + + return &mb->u.aligned.c; +} + + +void * +secmem_realloc( void *p, size_t newsize ) +{ + MEMBLOCK *mb; + size_t size; + void *a; + + mb = (MEMBLOCK*)((char*)p - ((size_t) &((MEMBLOCK*)0)->u.aligned.c)); + size = mb->size; + if( newsize < size ) + return p; /* it is easier not to shrink the memory */ + a = secmem_malloc( newsize ); + if ( a ) { + memcpy(a, p, size); + memset((char*)a+size, 0, newsize-size); + secmem_free(p); + } + return a; +} + + +void +secmem_free( void *a ) +{ + MEMBLOCK *mb; + size_t size; + + if( !a ) + return; + + mb = (MEMBLOCK*)((char*)a - ((size_t) &((MEMBLOCK*)0)->u.aligned.c)); + size = mb->size; + /* This does not make much sense: probably this memory is held in the + * cache. We do it anyway: */ + memset(mb, 0xff, size ); + memset(mb, 0xaa, size ); + memset(mb, 0x55, size ); + memset(mb, 0x00, size ); + mb->size = size; + mb->u.next = unused_blocks; + unused_blocks = mb; + cur_blocks--; + cur_alloced -= size; +} + +int +m_is_secure( const void *p ) +{ + return p >= pool && p < (void*)((char*)pool+poolsize); +} + + + +/**************** + * Warning: This code might be called by an interrupt handler + * and frankly, there should really be such a handler, + * to make sure that the memory is wiped out. + * We hope that the OS wipes out mlocked memory after + * receiving a SIGKILL - it really should do so, otherwise + * there is no chance to get the secure memory cleaned. + */ +void +secmem_term() +{ + if( !pool_okay ) + return; + + memset( pool, 0xff, poolsize); + memset( pool, 0xaa, poolsize); + memset( pool, 0x55, poolsize); + memset( pool, 0x00, poolsize); + #if HAVE_MMAP + if( pool_is_mmapped ) + munmap( pool, poolsize ); + #endif + pool = NULL; + pool_okay = 0; + poolsize=0; + poollen=0; + unused_blocks=NULL; +} + + +void +secmem_dump_stats() +{ + if( disable_secmem ) + return; + fprintf(stderr, + "secmem usage: %u/%u bytes in %u/%u blocks of pool %lu/%lu\n", + cur_alloced, max_alloced, cur_blocks, max_blocks, + (ulong)poollen, (ulong)poolsize ); +} + diff --git a/util/simple-gettext.c b/util/simple-gettext.c index 80dbbfe0e..db229437d 100644 --- a/util/simple-gettext.c +++ b/util/simple-gettext.c @@ -1,5 +1,5 @@ /* simple-gettext.c - a simplified version of gettext. - * Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + * Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -19,7 +19,7 @@ */ /* This is a simplified version of gettext written by Ulrich Drepper. - * It is used for the Win32 version of GnuPG becuase all the overhead + * It is used for the Win32 version of GnuPG beucase all the overhead * of gettext is not needed and we have to do some special Win32 stuff. * I decided that this is far easier than to tweak gettext for the special * cases (I tried it but it is a lot of code). wk 15.09.99 @@ -27,8 +27,8 @@ #include #ifdef USE_SIMPLE_GETTEXT -#ifndef __MINGW32__ - #error This file can only be used with MinGW32 +#if !defined (__MINGW32__) && !defined (__CYGWIN32__) + #error This file can only be used with MingW32 or Cygwin32 #endif #include @@ -244,7 +244,7 @@ set_gettext_file( const char *filename ) /* absolute path - use it as is */ domain = load_domain( filename ); } - else { /* relative path - append ".mo" and get DIR from the Registry */ + else { /* relative path - append ".mo" and get dir from the environment */ char *buf = NULL; char *dir; diff --git a/util/strgutil.c b/util/strgutil.c index 89722f8e4..ff1ff5126 100644 --- a/util/strgutil.c +++ b/util/strgutil.c @@ -1,5 +1,5 @@ /* strgutil.c - string utilities - * Copyright (C) 1998, 2000 Free Software Foundation, Inc. + * Copyright (C) 1994, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -22,7 +22,6 @@ #include #include #include -#include #include "types.h" #include "util.h" #include "memory.h" @@ -66,29 +65,10 @@ static ushort latin2_unicode[128] = { 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 }; -static ushort ibm850_unicode[128] = { - 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7, - 0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x00ec,0x00c4,0x00c5, - 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00f2,0x00fb,0x00f9, - 0x00ff,0x00d6,0x00dc,0x00f8,0x00a3,0x00d8,0x00d7,0x0192, - 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba, - 0x00bf,0x00ae,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb, - 0x2591,0x2592,0x2593,0x2502,0x2524,0x00c1,0x00c2,0x00c0, - 0x00a9,0x2563,0x2551,0x2557,0x255d,0x00a2,0x00a5,0x2510, - 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x00e3,0x00c3, - 0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x00a4, - 0x00f0,0x00d0,0x00ca,0x00cb,0x00c8,0x0131,0x00cd,0x00ce, - 0x00cf,0x2518,0x250c,0x2588,0x2584,0x00a6,0x00cc,0x2580, - 0x00d3,0x00df,0x00d4,0x00d2,0x00f5,0x00d5,0x00b5,0x00fe, - 0x00de,0x00da,0x00db,0x00d9,0x00fd,0x00dd,0x00af,0x00b4, - 0x00ad,0x00b1,0x2017,0x00be,0x00b6,0x00a7,0x00f7,0x00b8, - 0x00b0,0x00a8,0x00b7,0x00b9,0x00b3,0x00b2,0x25a0,0x00a0, -}; -static int query_native_charset_done = 0; static const char *active_charset_name = "iso-8859-1"; static ushort *active_charset = NULL; - +static int no_translation = 0; void free_strlist( STRLIST sl ) @@ -97,7 +77,7 @@ free_strlist( STRLIST sl ) for(; sl; sl = sl2 ) { sl2 = sl->next; - gcry_free(sl); + m_free(sl); } } @@ -107,7 +87,7 @@ add_to_strlist( STRLIST *list, const char *string ) { STRLIST sl; - sl = gcry_xmalloc( sizeof *sl + strlen(string)); + sl = m_alloc( sizeof *sl + strlen(string)); sl->flags = 0; strcpy(sl->d, string); sl->next = *list; @@ -129,7 +109,7 @@ add_to_strlist2( STRLIST *list, const char *string, int is_utf8 ) else { char *p = native_to_utf8( string ); sl = add_to_strlist( list, p ); - gcry_free( p ); + m_free( p ); } return sl; } @@ -139,7 +119,7 @@ append_to_strlist( STRLIST *list, const char *string ) { STRLIST r, sl; - sl = gcry_xmalloc( sizeof *sl + strlen(string)); + sl = m_alloc( sizeof *sl + strlen(string)); sl->flags = 0; strcpy(sl->d, string); sl->next = NULL; @@ -163,7 +143,7 @@ append_to_strlist2( STRLIST *list, const char *string, int is_utf8 ) else { char *p = native_to_utf8( string ); sl = append_to_strlist( list, p ); - gcry_free( p ); + m_free( p ); } return sl; } @@ -188,6 +168,183 @@ strlist_last( STRLIST node ) return node; } +char * +pop_strlist( STRLIST *list ) +{ + char *str=NULL; + STRLIST sl=*list; + + if(sl) + { + str=m_alloc(strlen(sl->d)+1); + strcpy(str,sl->d); + + *list=sl->next; + m_free(sl); + } + + return str; +} + +/**************** + * look for the substring SUB in buffer and return a pointer to that + * substring in BUF or NULL if not found. + * Comparison is case-insensitive. + */ +const char * +memistr( const char *buf, size_t buflen, const char *sub ) +{ + const byte *t, *s ; + size_t n; + + for( t=buf, n=buflen, s=sub ; n ; t++, n-- ) + if( toupper(*t) == toupper(*s) ) { + for( buf=t++, buflen = n--, s++; + n && toupper(*t) == toupper(*s); t++, s++, n-- ) + ; + if( !*s ) + return buf; + t = buf; n = buflen; s = sub ; + } + + return NULL ; +} + +const char * +ascii_memistr( const char *buf, size_t buflen, const char *sub ) +{ + const byte *t, *s ; + size_t n; + + for( t=buf, n=buflen, s=sub ; n ; t++, n-- ) + if( ascii_toupper(*t) == ascii_toupper(*s) ) { + for( buf=t++, buflen = n--, s++; + n && ascii_toupper(*t) == ascii_toupper(*s); t++, s++, n-- ) + ; + if( !*s ) + return buf; + t = buf; n = buflen; s = sub ; + } + + return NULL ; +} + +/**************** + * Wie strncpy(), aber es werden maximal n-1 zeichen kopiert und ein + * '\0' angehängt. Ist n = 0, so geschieht nichts, ist Destination + * gleich NULL, so wird via m_alloc Speicher besorgt, ist dann nicht + * genügend Speicher vorhanden, so bricht die funktion ab. + */ +char * +mem2str( char *dest , const void *src , size_t n ) +{ + char *d; + const char *s; + + if( n ) { + if( !dest ) + dest = m_alloc( n ) ; + d = dest; + s = src ; + for(n--; n && *s; n-- ) + *d++ = *s++; + *d = '\0' ; + } + + return dest ; +} + + +/**************** + * remove leading and trailing white spaces + */ +char * +trim_spaces( char *str ) +{ + char *string, *p, *mark; + + string = str; + /* find first non space character */ + for( p=string; *p && isspace( *(byte*)p ) ; p++ ) + ; + /* move characters */ + for( (mark = NULL); (*string = *p); string++, p++ ) + if( isspace( *(byte*)p ) ) { + if( !mark ) + mark = string ; + } + else + mark = NULL ; + if( mark ) + *mark = '\0' ; /* remove trailing spaces */ + + return str ; +} + + + +unsigned int +trim_trailing_chars( byte *line, unsigned len, const char *trimchars ) +{ + byte *p, *mark; + unsigned n; + + for(mark=NULL, p=line, n=0; n < len; n++, p++ ) { + if( strchr(trimchars, *p ) ) { + if( !mark ) + mark = p; + } + else + mark = NULL; + } + + if( mark ) { + *mark = 0; + return mark - line; + } + return len; +} + +/**************** + * remove trailing white spaces and return the length of the buffer + */ +unsigned +trim_trailing_ws( byte *line, unsigned len ) +{ + return trim_trailing_chars( line, len, " \t\r\n" ); +} + +unsigned int +check_trailing_chars( const byte *line, unsigned int len, + const char *trimchars ) +{ + const byte *p, *mark; + unsigned int n; + + for(mark=NULL, p=line, n=0; n < len; n++, p++ ) { + if( strchr(trimchars, *p ) ) { + if( !mark ) + mark = p; + } + else + mark = NULL; + } + + if( mark ) { + return mark - line; + } + return len; +} + +/**************** + * remove trailing white spaces and return the length of the buffer + */ +unsigned int +check_trailing_ws( const byte *line, unsigned int len ) +{ + return check_trailing_chars( line, len, " \t\r\n" ); +} + int @@ -201,87 +358,41 @@ string_count_chr( const char *string, int c ) } -static const char* -query_native_charset(void) +int +set_native_charset( const char *newset ) { - #ifdef __MINGW32__ - unsigned int cp; - - cp = GetConsoleOutputCP(); - if( cp != GetConsoleCP() ) { - /* The input cgarset is not equal to the output charset - * our system depends on it and therefore we will set - * same the same (this won't work on Windows 95) */ - if( !SetConsoleCP( cp ) ) - log_info("can't set Input-CP to Output-CP: %d\n", - (int)GetLastError() ); + if( !ascii_strcasecmp( newset, "iso-8859-1" ) ) { + active_charset_name = "iso-8859-1"; + no_translation = 0; + active_charset = NULL; } - /* we could read the registry, but this seems to be too much work */ - switch( cp ) { - case 850: return "ibm850"; - case 437: return "ibm437"; - case 1252: return "iso-8859-1"; - default: - log_info("unknown MS-Windows CodePage %u " - "- trying to switch to Latin-1\n", cp ); - /* try to set latin-1 */ - if( !SetConsoleOutputCP( 1252 ) ) { - if( !SetConsoleCP( 1252 ) ) - return "iso-8859-1"; - else /* back off */ - SetConsoleOutputCP( cp ); - } - log_info("no information about MS-Windows CodePage %u\n", cp ); - return NULL; + else if( !ascii_strcasecmp( newset, "iso-8859-2" ) ) { + active_charset_name = "iso-8859-2"; + no_translation = 0; + active_charset = latin2_unicode; } - #else - return NULL; /* unknown */ - #endif + else if( !ascii_strcasecmp( newset, "koi8-r" ) ) { + active_charset_name = "koi8-r"; + no_translation = 0; + active_charset = koi8_unicode; + } + else if( !ascii_strcasecmp (newset, "utf8" ) + || !ascii_strcasecmp(newset, "utf-8") ) { + active_charset_name = "utf-8"; + no_translation = 1; + active_charset = NULL; + } + else + return G10ERR_GENERAL; + return 0; } - const char* get_native_charset() { - if( !query_native_charset_done ) { - const char *s; - - query_native_charset_done = 1; - s = query_native_charset(); - if( s ) - set_native_charset(s); - } - return active_charset_name; } - -int -set_native_charset( const char *newset ) -{ - query_native_charset_done = 1; /* don't do this when we want to set one*/ - if( !stricmp( newset, "iso-8859-1" ) ) { - active_charset_name = "iso-8859-1"; - active_charset = NULL; - } - else if( !stricmp( newset, "iso-8859-2" ) ) { - active_charset_name = "iso-8859-2"; - active_charset = latin2_unicode; - } - else if( !stricmp( newset, "koi8-r" ) ) { - active_charset_name = "koi8-r"; - active_charset = koi8_unicode; - } - else if( !stricmp( newset, "ibm850" ) || !stricmp( newset, "ibm437" ) ) { - active_charset_name = "ibm850"; - active_charset = ibm850_unicode; - } - else - return GPGERR_GENERAL; - return 0; -} - - /**************** * Convert string, which is in native encoding to UTF8 and return the * new allocated UTF8 string. @@ -294,13 +405,16 @@ native_to_utf8( const char *string ) byte *p; size_t length=0; - if( active_charset ) { + if (no_translation) { + buffer = m_strdup (string); + } + else if( active_charset ) { for(s=string; *s; s++ ) { length++; if( *s & 0x80 ) length += 2; /* we may need 3 bytes */ } - buffer = gcry_xmalloc( length + 1 ); + buffer = m_alloc( length + 1 ); for(p=buffer, s=string; *s; s++ ) { if( *s & 0x80 ) { ushort val = active_charset[ *s & 0x7f ]; @@ -325,7 +439,7 @@ native_to_utf8( const char *string ) if( *s & 0x80 ) length++; } - buffer = gcry_xmalloc( length + 1 ); + buffer = m_alloc( length + 1 ); for(p=buffer, s=string; *s; s++ ) { if( *s & 0x80 ) { *p++ = 0xc0 | ((*s >> 6) & 3); @@ -341,15 +455,17 @@ native_to_utf8( const char *string ) /**************** - * Convert string, which is in UTF8 to native encoding. - * illegal encodings by some "\xnn" and quote all control characters - */ + * Convert string, which is in UTF8 to native encoding. illegal + * encodings by some "\xnn" and quote all control characters. A + * character with value DELIM will always be quoted, it must be a + * vanilla ASCII character. + */ char * -utf8_to_native( const char *string, size_t length ) +utf8_to_native( const char *string, size_t length, int delim ) { int nleft; int i; - byte encbuf[7]; + byte encbuf[8]; int encidx; const byte *s; size_t n; @@ -376,7 +492,8 @@ utf8_to_native( const char *string, size_t length ) } if( !nleft ) { if( !(*s & 0x80) ) { /* plain ascii */ - if( iscntrl( *s ) ) { + if( *s < 0x20 || *s == 0x7f || *s == delim || + (delim && *s=='\\')) { n++; if( p ) *p++ = '\\'; @@ -387,11 +504,13 @@ utf8_to_native( const char *string, size_t length ) case '\v': n++; if( p ) *p++ = 'v'; break; case '\b': n++; if( p ) *p++ = 'b'; break; case 0 : n++; if( p ) *p++ = '0'; break; - default: n += 3; - sprintf( p, "x%02x", *s ); - if ( p ) - p += 3; - break; + default: + n += 3; + if ( p ) { + sprintf( p, "x%02x", *s ); + p += 3; + } + break; } } else { @@ -402,27 +521,32 @@ utf8_to_native( const char *string, size_t length ) else if( (*s & 0xe0) == 0xc0 ) { /* 110x xxxx */ val = *s & 0x1f; nleft = 1; - encbuf[encidx=0] = *s; + encidx = 0; + encbuf[encidx++] = *s; } else if( (*s & 0xf0) == 0xe0 ) { /* 1110 xxxx */ val = *s & 0x0f; nleft = 2; - encbuf[encidx=0] = *s; + encidx = 0; + encbuf[encidx++] = *s; } else if( (*s & 0xf8) == 0xf0 ) { /* 1111 0xxx */ val = *s & 0x07; nleft = 3; - encbuf[encidx=0] = *s; + encidx = 0; + encbuf[encidx++] = *s; } else if( (*s & 0xfc) == 0xf8 ) { /* 1111 10xx */ val = *s & 0x03; nleft = 4; - encbuf[encidx=0] = *s; + encidx = 0; + encbuf[encidx++] = *s; } else if( (*s & 0xfe) == 0xfc ) { /* 1111 110x */ val = *s & 0x01; nleft = 5; - encbuf[encidx=0] = *s; + encidx = 0; + encbuf[encidx++] = *s; } else { /* invalid encoding: print as \xnn */ if( p ) { @@ -435,19 +559,32 @@ utf8_to_native( const char *string, size_t length ) } else if( *s < 0x80 || *s >= 0xc0 ) { /* invalid */ if( p ) { + for(i=0; i < encidx; i++ ) { + sprintf(p, "\\x%02x", encbuf[i] ); + p += 4; + } sprintf(p, "\\x%02x", *s ); p += 4; } - n += 4; + n += 4 + 4*encidx; nleft = 0; + encidx = 0; resync = 1; } else { - encbuf[++encidx] = *s; + encbuf[encidx++] = *s; val <<= 6; val |= *s & 0x3f; if( !--nleft ) { /* ready */ - if( active_charset ) { /* table lookup */ + if (no_translation) { + if( p ) { + for(i=0; i < encidx; i++ ) + *p++ = encbuf[i]; + } + n += encidx; + encidx = 0; + } + else if( active_charset ) { /* table lookup */ for(i=0; i < 128; i++ ) { if( active_charset[i] == val ) break; @@ -464,6 +601,7 @@ utf8_to_native( const char *string, size_t length ) } } n += encidx*4; + encidx = 0; } } else { /* native set */ @@ -479,15 +617,15 @@ utf8_to_native( const char *string, size_t length ) } } n += encidx*4; + encidx = 0; } } - } } } if( !buffer ) { /* allocate the buffer after the first pass */ - buffer = p = gcry_xmalloc( n + 1 ); + buffer = p = m_alloc( n + 1 ); } else { *p = 0; /* make a string */ @@ -496,8 +634,262 @@ utf8_to_native( const char *string, size_t length ) } } +/**************************************************** + ******** locale insensitive ctype functions ******** + ****************************************************/ +/* FIXME: replace them by a table lookup and macros */ +int +ascii_isupper (int c) +{ + return c >= 'A' && c <= 'Z'; +} + +int +ascii_islower (int c) +{ + return c >= 'a' && c <= 'z'; +} + +int +ascii_toupper (int c) +{ + if (c >= 'a' && c <= 'z') + c &= ~0x20; + return c; +} + +int +ascii_tolower (int c) +{ + if (c >= 'A' && c <= 'Z') + c |= 0x20; + return c; +} +int +ascii_strcasecmp( const char *a, const char *b ) +{ + if (a == b) + return 0; + + for (; *a && *b; a++, b++) { + if (*a != *b && ascii_toupper(*a) != ascii_toupper(*b)) + break; + } + return *a == *b? 0 : (ascii_toupper (*a) - ascii_toupper (*b)); +} + +int +ascii_memcasecmp( const char *a, const char *b, size_t n ) +{ + if (a == b) + return 0; + for ( ; n; n--, a++, b++ ) { + if( *a != *b && ascii_toupper (*a) != ascii_toupper (*b) ) + return *a == *b? 0 : (ascii_toupper (*a) - ascii_toupper (*b)); + } + return 0; +} +/********************************************* + ********** missing string functions ********* + *********************************************/ + +#ifndef HAVE_STPCPY +char * +stpcpy(char *a,const char *b) +{ + while( *b ) + *a++ = *b++; + *a = 0; + + return (char*)a; +} +#endif + + +#ifndef HAVE_STRSEP +/* code taken from glibc-2.2.1/sysdeps/generic/strsep.c */ +char * +strsep (char **stringp, const char *delim) +{ + char *begin, *end; + + begin = *stringp; + if (begin == NULL) + return NULL; + + /* A frequent case is when the delimiter string contains only one + character. Here we don't need to call the expensive `strpbrk' + function and instead work using `strchr'. */ + if (delim[0] == '\0' || delim[1] == '\0') + { + char ch = delim[0]; + + if (ch == '\0') + end = NULL; + else + { + if (*begin == ch) + end = begin; + else if (*begin == '\0') + end = NULL; + else + end = strchr (begin + 1, ch); + } + } + else + /* Find the end of the token. */ + end = strpbrk (begin, delim); + + if (end) + { + /* Terminate the token and set *STRINGP past NUL character. */ + *end++ = '\0'; + *stringp = end; + } + else + /* No more delimiters; this is the last token. */ + *stringp = NULL; + + return begin; +} +#endif /*HAVE_STRSEP*/ + + +#ifndef HAVE_STRLWR +char * +strlwr(char *s) +{ + char *p; + for(p=s; *p; p++ ) + *p = tolower(*p); + return s; +} +#endif + +#ifndef HAVE_STRCASECMP +int +strcasecmp( const char *a, const char *b ) +{ + for( ; *a && *b; a++, b++ ) { + if( *a != *b && toupper(*a) != toupper(*b) ) + break; + } + return *(const byte*)a - *(const byte*)b; +} +#endif + +#ifndef HAVE_STRNCASECMP +int +strncasecmp( const char *a, const char *b, size_t n ) +{ + for( ; n && *a && *b; a++, b++, n--) { + if( *a != *b && toupper(*a) != toupper(*b) ) + break; + } + if (!n) + return 0; + return *(const byte*)a - *(const byte*)b; +} +#endif + + +#ifdef __MINGW32__ +/* + * Like vsprintf but provides a pointer to malloc'd storage, which + * must be freed by the caller (m_free). Taken from libiberty as + * found in gcc-2.95.2 and a little bit modernized. + * FIXME: Write a new CRT for W32. + */ +int +vasprintf ( char **result, const char *format, va_list args) +{ + const char *p = format; + /* Add one to make sure that it is never zero, which might cause malloc + to return NULL. */ + int total_width = strlen (format) + 1; + va_list ap; + + /* this is not really portable but works under Windows */ + memcpy ( &ap, &args, sizeof (va_list)); + + while (*p != '\0') + { + if (*p++ == '%') + { + while (strchr ("-+ #0", *p)) + ++p; + if (*p == '*') + { + ++p; + total_width += abs (va_arg (ap, int)); + } + else + { + char *endp; + total_width += strtoul (p, &endp, 10); + p = endp; + } + if (*p == '.') + { + ++p; + if (*p == '*') + { + ++p; + total_width += abs (va_arg (ap, int)); + } + else + { + char *endp; + total_width += strtoul (p, &endp, 10); + p = endp; + } + } + while (strchr ("hlL", *p)) + ++p; + /* Should be big enough for any format specifier except %s + and floats. */ + total_width += 30; + switch (*p) + { + case 'd': + case 'i': + case 'o': + case 'u': + case 'x': + case 'X': + case 'c': + (void) va_arg (ap, int); + break; + case 'f': + case 'e': + case 'E': + case 'g': + case 'G': + (void) va_arg (ap, double); + /* Since an ieee double can have an exponent of 307, we'll + make the buffer wide enough to cover the gross case. */ + total_width += 307; + + case 's': + total_width += strlen (va_arg (ap, char *)); + break; + case 'p': + case 'n': + (void) va_arg (ap, char *); + break; + } + } + } + *result = m_alloc (total_width); + if (*result != NULL) + return vsprintf (*result, format, args); + else + return 0; +} + +#endif /*__MINGW32__*/ diff --git a/util/ttyio.c b/util/ttyio.c index 6aaff000c..0a5df6099 100644 --- a/util/ttyio.c +++ b/util/ttyio.c @@ -1,5 +1,5 @@ /* ttyio.c - tty i/O functions - * Copyright (C) 1998, 2000 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -26,6 +26,11 @@ #include #ifdef HAVE_TCGETATTR #include + #ifdef __riscos__ + #include + #include + #undef HAVE_TCGETATTR + #endif /* __riscos__ */ #else #ifdef HAVE_TERMIO_H /* simulate termios with termio */ @@ -45,13 +50,16 @@ #endif #include #include -#include #include "util.h" #include "memory.h" #include "ttyio.h" #define CONTROL_D ('D' - 'A' + 1) - +#ifdef __VMS + #define TERMDEVICE "/dev/tty" +#else + #define TERMDEVICE "/dev/tty" +#endif #ifdef __MINGW32__ /* use the odd Win32 functions */ static struct { @@ -72,10 +80,16 @@ static int batchmode; static int no_terminal; #ifdef HAVE_TCGETATTR -static struct termios termsave; -static int restore_termios; + #ifdef __riscos__ + struct termios termsave; + int restore_termios; + #else + static struct termios termsave; + static int restore_termios; + #endif #endif + #ifdef HAVE_TCGETATTR static void cleanup(void) @@ -121,7 +135,7 @@ init_ttyfp(void) #elif defined(__EMX__) ttyfp = stdout; /* Fixme: replace by the real functions: see wklib */ #else - ttyfp = batchmode? stderr : fopen("/dev/tty", "r+"); + ttyfp = batchmode? stderr : fopen(TERMDEVICE, "r+"); if( !ttyfp ) { log_error("cannot open /dev/tty: %s\n", strerror(errno) ); exit(2); @@ -163,39 +177,21 @@ tty_printf( const char *fmt, ... ) va_start( arg_ptr, fmt ) ; #ifdef __MINGW32__ - { static char *buf; - static size_t bufsize; - int n; + { + char *buf = NULL; + int n; DWORD nwritten; - #if 0 /* the dox say, that there is a snprintf, but I didn't found - * it, so we use a static buffer for now */ - do { - if( n == -1 || !buf ) { - gcry_free(buf); - bufsize += 200; - /* better check the new size; (we use M$ functions) */ - if( bufsize > 50000 ) - log_bug("vsnprintf probably failed\n"); - buf = gcry_xmalloc( bufsize ); - } - n = _vsnprintf(buf, bufsize-1, fmt, arg_ptr); - } while( n == -1 ); - #else - if( !buf ) { - bufsize += 1000; - buf = gcry_xmalloc( bufsize ); - } - n = vsprintf(buf, fmt, arg_ptr); - if( n == -1 ) - log_bug("vsprintf() failed\n"); - #endif - + n = vasprintf(&buf, fmt, arg_ptr); + if( !buf ) + log_bug("vasprintf() failed\n"); + if( !WriteConsoleA( con.out, buf, n, &nwritten, NULL ) ) log_fatal("WriteConsole failed: rc=%d", (int)GetLastError() ); if( n != nwritten ) - log_fatal("WriteConsole failed: %d != %ld\n", n, nwritten ); + log_fatal("WriteConsole failed: %d != %d\n", n, (int)nwritten ); last_prompt_len += n; + m_free (buf); } #else last_prompt_len += vfprintf(ttyfp,fmt,arg_ptr) ; @@ -261,13 +257,13 @@ tty_print_utf8_string2( byte *p, size_t n, size_t max_n ) break; } if( i < n ) { - buf = utf8_to_native( p, n ); + buf = utf8_to_native( p, n, 0 ); if( strlen( buf ) > max_n ) { buf[max_n] = 0; } /*(utf8 conversion already does the control character quoting)*/ tty_printf("%s", buf ); - gcry_free( buf ); + m_free( buf ); } else { if( n > max_n ) { @@ -277,7 +273,6 @@ tty_print_utf8_string2( byte *p, size_t n, size_t max_n ) } } - void tty_print_utf8_string( byte *p, size_t n ) { @@ -285,13 +280,16 @@ tty_print_utf8_string( byte *p, size_t n ) } - - static char * do_get( const char *prompt, int hidden ) { char *buf; + #ifndef __riscos__ byte cbuf[1]; + #else + int carry; + _kernel_swi_regs r; + #endif int c, n, i; if( batchmode ) { @@ -308,8 +306,8 @@ do_get( const char *prompt, int hidden ) init_ttyfp(); last_prompt_len = 0; - tty_printf( prompt ); - buf = gcry_xmalloc(n=50); + tty_printf( "%s", prompt ); + buf = m_alloc(n=50); i = 0; #ifdef __MINGW32__ /* windoze version */ @@ -338,7 +336,7 @@ do_get( const char *prompt, int hidden ) continue; if( !(i < n-1) ) { n += 50; - buf = gcry_xrealloc( buf, n ); + buf = m_realloc( buf, n ); } buf[i++] = c; } @@ -346,6 +344,50 @@ do_get( const char *prompt, int hidden ) if( hidden ) SetConsoleMode(con.in, DEF_INPMODE ); + #elif defined(__riscos__) + do { + if (_kernel_swi_c(OS_ReadC, &r, &r, &carry)) + log_fatal("OS_ReadC failed: Couldn't read from keyboard!\n"); + c = r.r[0]; + if (carry != 0) + log_fatal("OS_ReadC failed: Return Code = %i!\n", c); + if (c == 0xa || c == 0xd) { /* Return || Enter */ + c = (int) '\n'; + } else if (c == 0x8 || c == 0x7f) { /* Backspace || Delete */ + if (i>0) { + i--; + if (!hidden) { + last_prompt_len--; + fputc(8, ttyfp); + fputc(32, ttyfp); + fputc(8, ttyfp); + fflush(ttyfp); + } + } else { + fputc(7, ttyfp); + fflush(ttyfp); + } + continue; + } else if (c == (int) '\t') { /* Tab */ + c = ' '; + } else if (c > 0xa0) { + ; /* we don't allow 0xa0, as this is a protected blank which may + * confuse the user */ + } else if (iscntrl(c)) { + continue; + } + if(!(i < n-1)) { + n += 50; + buf = m_realloc(buf, n); + } + buf[i++] = c; + if (!hidden) { + last_prompt_len++; + fputc(c, ttyfp); + fflush(ttyfp); + } + } while (c != '\n'); + i = (i>0) ? i-1 : 0; #else /* unix version */ if( hidden ) { #ifdef HAVE_TCGETATTR @@ -378,7 +420,7 @@ do_get( const char *prompt, int hidden ) continue; if( !(i < n-1) ) { n += 50; - buf = gcry_xrealloc( buf, n ); + buf = m_realloc( buf, n ); } buf[i++] = c; } @@ -450,7 +492,7 @@ tty_get_answer_is_yes( const char *prompt ) char *p = tty_get( prompt ); tty_kill_prompt(); yes = answer_is_yes(p); - gcry_free(p); + m_free(p); return yes; } diff --git a/util/w32reg.c b/util/w32reg.c index 362bcab8f..000ae07b7 100644 --- a/util/w32reg.c +++ b/util/w32reg.c @@ -19,7 +19,8 @@ */ #include -#ifdef __MINGW32__ /* This module is only used in this environment */ +#if defined (__MINGW32__) || defined (__CYGWIN32__) + /* This module is only used in this environment */ #include #include @@ -29,23 +30,13 @@ #include "util.h" #include "memory.h" - -/**************** - * Return a string from the Win32 Registry or NULL in case of - * error. Caller must release the return value. A NUKK for root - * is an alias fro HKEY_CURRENT_USER - * NOTE: The value is allocated with a plain malloc() - use free() and not - * the usual gcry_free()!!! - */ -char * -read_w32_registry_string( const char *root, const char *dir, const char *name ) +static HKEY +get_root_key(const char *root) { - HKEY root_key, key_handle; - DWORD n1, nbytes; - char *result = NULL; - + HKEY root_key; + if( !root ) - root_key = HKEY_CURRENT_USER; + root_key = HKEY_CURRENT_USER; else if( !strcmp( root, "HKEY_CLASSES_ROOT" ) ) root_key = HKEY_CLASSES_ROOT; else if( !strcmp( root, "HKEY_CURRENT_USER" ) ) @@ -59,6 +50,27 @@ read_w32_registry_string( const char *root, const char *dir, const char *name ) else if( !strcmp( root, "HKEY_CURRENT_CONFIG" ) ) root_key = HKEY_CURRENT_CONFIG; else + return NULL; + + return root_key; +} + + +/**************** + * Return a string from the Win32 Registry or NULL in case of + * error. Caller must release the return value. A NUKK for root + * is an alias fro HKEY_CURRENT_USER + * NOTE: The value is allocated with a plain malloc() - use free() and not + * the usual m_free()!!! + */ +char * +read_w32_registry_string( const char *root, const char *dir, const char *name ) +{ + HKEY root_key, key_handle; + DWORD n1, nbytes; + char *result = NULL; + + if ( !(root_key = get_root_key(root) ) ) return NULL; if( RegOpenKeyEx( root_key, dir, 0, KEY_READ, &key_handle ) ) @@ -82,7 +94,35 @@ read_w32_registry_string( const char *root, const char *dir, const char *name ) } +int +write_w32_registry_string(const char *root, const char *dir, + const char *name, const char *value) +{ + HKEY root_key, reg_key; + + if ( !(root_key = get_root_key(root) ) ) + return -1; + if ( RegOpenKeyEx( root_key, dir, 0, KEY_WRITE, ®_key ) + != ERROR_SUCCESS ) + return -1; + + if ( RegSetValueEx( reg_key, name, 0, REG_SZ, (BYTE *)value, + strlen( value ) ) != ERROR_SUCCESS ) { + if ( RegCreateKey( root_key, name, ®_key ) != ERROR_SUCCESS ) { + RegCloseKey(reg_key); + return -1; + } + if ( RegSetValueEx( reg_key, name, 0, REG_SZ, (BYTE *)value, + strlen( value ) ) != ERROR_SUCCESS ) { + RegCloseKey(reg_key); + return -1; + } + } + RegCloseKey( reg_key ); + + return 0; +} -#endif /* __MINGW32__ */ +#endif /* __MINGW32__ || __CYGWIN32__ */