diff options
author | Werner Koch <wk@gnupg.org> | 1998-08-11 19:29:34 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 1998-08-11 19:29:34 +0200 |
commit | 3e0e8f884f1ed37e120beeb57aa7cd79e3c145a0 (patch) | |
tree | dfff62df60f917addc9df4e83a1ed73e31041bab | |
parent | rel 0.3.3 (diff) | |
download | gnupg2-3e0e8f884f1ed37e120beeb57aa7cd79e3c145a0.tar.xz gnupg2-3e0e8f884f1ed37e120beeb57aa7cd79e3c145a0.zip |
bug fix releaseV0-3-4
-rw-r--r-- | NEWS | 8 | ||||
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | TODO | 9 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | checks/ChangeLog | 4 | ||||
-rwxr-xr-x | checks/genkey1024.test | 122 | ||||
-rw-r--r-- | cipher/random.c | 2 | ||||
-rw-r--r-- | g10/ChangeLog | 45 | ||||
-rw-r--r-- | g10/OPTIONS | 8 | ||||
-rw-r--r-- | g10/armor.c | 21 | ||||
-rw-r--r-- | g10/build-packet.c | 3 | ||||
-rw-r--r-- | g10/comment.c | 14 | ||||
-rw-r--r-- | g10/compress.c | 8 | ||||
-rw-r--r-- | g10/dearmor.c | 9 | ||||
-rw-r--r-- | g10/encode.c | 59 | ||||
-rw-r--r-- | g10/export.c | 5 | ||||
-rw-r--r-- | g10/g10.c | 137 | ||||
-rw-r--r-- | g10/getkey.c | 72 | ||||
-rw-r--r-- | g10/import.c | 9 | ||||
-rw-r--r-- | g10/keyedit.c | 32 | ||||
-rw-r--r-- | g10/keygen.c | 9 | ||||
-rw-r--r-- | g10/keyid.c | 2 | ||||
-rw-r--r-- | g10/main.h | 3 | ||||
-rw-r--r-- | g10/openfile.c | 21 | ||||
-rw-r--r-- | g10/options.h | 2 | ||||
-rw-r--r-- | g10/parse-packet.c | 7 | ||||
-rw-r--r-- | g10/passphrase.c | 3 | ||||
-rw-r--r-- | g10/pkclist.c | 15 | ||||
-rw-r--r-- | g10/revoke.c | 4 | ||||
-rw-r--r-- | g10/seckey-cert.c | 25 | ||||
-rw-r--r-- | g10/sign.c | 32 | ||||
-rw-r--r-- | g10/status.c | 18 | ||||
-rw-r--r-- | g10/trustdb.c | 5 | ||||
-rw-r--r-- | include/errors.h | 1 | ||||
-rw-r--r-- | po/ChangeLog | 4 | ||||
-rw-r--r-- | po/POTFILES.in | 3 | ||||
-rw-r--r-- | po/de.po | 58 | ||||
-rw-r--r-- | po/en.po | 2 | ||||
-rw-r--r-- | po/it.po | 1533 | ||||
-rw-r--r-- | util/ChangeLog | 4 | ||||
-rw-r--r-- | util/errors.c | 2 | ||||
-rw-r--r-- | util/miscutil.c | 11 | ||||
-rw-r--r-- | zlib/Makefile | 2 |
43 files changed, 1822 insertions, 514 deletions
@@ -1,3 +1,11 @@ +Noteworthy changes in version 0.3.4 +----------------------------------- + * New options --comment and --set-filename; see g10/OPTIONS + + * yes/no, y/n localized. + + * Fixed some bugs. + Noteworthy changes in version 0.3.3 ----------------------------------- * IMPORTANT: I found yet another bug in the way the secret keys @@ -4,6 +4,7 @@ code. Here is a list of those people. Help me keep it complete and free of errors. Anand Kumria wildfire@progsoc.uts.edu.au +Ariel T Glenn ariel@columbia.edu Brian Warner warner@lothar.com Caskey L. Dickson caskey@technocage.com Charles Levert charles@comm.polymtl.ca @@ -26,9 +26,6 @@ * rewrite --list-packets or put it into another tool. - * add usage arguments to get_key_byname or return a PKC_LIST with - all keys and add a selection. - * Burn the buffers used by fopen(), or use read(2). Does this really make sense? @@ -51,5 +48,9 @@ * Is it okay to use gettext for the help system??? - * There are still problems with old v3 keys after passphrase change. + * configure checks two times for gcc + + * update gettext + + * Add some stuff for DU cc @@ -1 +1 @@ -0.3.3 +0.3.4 diff --git a/checks/ChangeLog b/checks/ChangeLog index 6e1cb4187..2adfc1b59 100644 --- a/checks/ChangeLog +++ b/checks/ChangeLog @@ -1,3 +1,7 @@ +Mon Aug 10 21:33:38 1998 Werner Koch (wk@(none)) + + * genkey1024.test: Ariel fixed this. + Wed Jul 8 10:43:47 1998 Werner Koch (wk@isil.d.shuttle.de) * seat.test: New. diff --git a/checks/genkey1024.test b/checks/genkey1024.test index faaea2d1b..ee282b28e 100755 --- a/checks/genkey1024.test +++ b/checks/genkey1024.test @@ -2,59 +2,95 @@ . defs.inc || exit 3 -info "This expect script does not yet work" -info "Please, all those expect gurus, can you help me with it?" -exit 0 - expect - <<EOF -set timeout -1 +#set timeout -1 +set timeout 5 match_max 100000 spawn ../g10/gpg --no-batch --quick-random --homedir . --gen-key -expect -exact "Please select the algorithm to use:\r - (1) ElGamal is the suggested one.\r - (2) DSA can only be used for signatures.\r -Your selection? (1,2) " -send -- "1\r" -expect -exact "1\r -\r \rAbout to generate a new ElGamal keypair.\r - minimum keysize is 768 bits\r - default keysize is 1024 bits\r +expect { + -exact "Please select what kind of key you want:\r + (1) DSA and ElGamal (default)\r + (2) ElGamal (sign and encrypt)\r + (3) ElGamal (encrypt only)\r + (4) DSA (sign only)\r + (5) ElGamal in a v3 packet\r +Your selection? " { send -- "1\r" } + timeout { exit 1 } } +expect { + -exact "1\r +\r \rDSA keypair will have 1024 bits.\r +About to generate a new ELG-E keypair.\r + minimum keysize is 768 bits\r + default keysize is 1024 bits\r highest suggested keysize is 2048 bits\r -What keysize do you want? (1024) " -send -- "\r" -expect -exact "\r -\r \rRequested keysize is 1024 bits\r -\r +What keysize do you want? (1024) " { send -- "\r" } + timeout { exit 1 } } +expect { + -exact "\r +\r \rRequested keysize is 1024 bits\r +Please specify how long the key should be valid.\r + 0 = key does not expire\r + <n> = key expires in n days\r + <n>w = key expires in n weeks\r + <n>m = key expires in n months\r + <n>y = key expires in n years\r +Key is valid for? (0) " { send -- "1\r" } + timeout { exit 1 } } +expect { + -exact "1\r +\r \rKey expires at " { } + timeout { exit 1 } } +expect { + -re "(.*)\r +" {} + timeout { exit 1 } } +expect { + -exact "Is this correct (y/n)? " { send -- "y\r" } + timeout { exit 1 } } +expect { + -exact "y\r +\r \r\r You need a User-ID to identify your key; the software constructs the user id\r from Real Name, Comment and Email Address in this form:\r - \"Heinrich Heine (Der Dichter) <heinrichh@uni-duesseldorf.de>\"\r + \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\r \r -Real name: " -send -- "Harry H.\r" -expect -exact "Harry H.\r -\r \rEmail address: " -send -- "hh@ddorf.de\r" -expect -exact "hh@ddorf.de\r -\r \rComment: " -send -- "a test\r" -expect -exact "a test\r -\r \rYou selected this USER-ID:\r +Real name: " { send -- "Harry H.\r" } + timeout { exit 1 } } +expect { + -exact "Harry H.\r +\r \rEmail address: " { send -- "hh@ddorf.de\r" } + timeout { exit 1 } } +expect { + -exact "hh@ddorf.de\r +\r \rComment: " { send -- "a test\r" } + timeout { exit 1 } } +expect { + -exact "a test\r +\r \rYou selected this USER-ID:\r \"Harry H. (a test) <hh@ddorf.de> (INSECURE!)\"\r \r -Edit (N)ame, (C)omment, (E)mail or (O)kay? " -send -- "o\r" -expect -exact "o\r -\r \rYou need a Passphrase to protect your secret key.\r +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " { send -- "o\r" } + timeout { exit 1 } } +expect { + -exact "o\r +\r \rYou need a Passphrase to protect your secret key.\r \r -Enter pass phrase: " -send -- "abc\r" -expect -ex "abc\r\n" -expect -ex "\r \rRepeat pass phrase:\ " -send -- "abc\r" -expect -ex "abc\r\n" -expect { - -ex "public and secret key created and signed.\r" - eof abort +Enter pass phrase: " { sleep 1; send -- "abc\r" } + timeout { exit 1 } } +expect { + -ex "\r \rRepeat pass phrase: " { sleep 1; send -- "abc\r" } + timeout { exit 1 } } +expect { + -ex "\r \rWe need to generate a lot of random bytes. It is a good idea to perform\r +some other action (work in another window, move the mouse, utilize the\r +network and the disks) during the prime generation; this gives the random\r +number generator a better chance to gain enough entropy.\r" {} + timeout { exit 1 } } +set timeout 120 +expect { + -ex "public and secret key created and signed.\r" { exit 0 } + eof { exit 1 } } +exit 1 EOF diff --git a/cipher/random.c b/cipher/random.c index 29b82ee7c..e22f3d70c 100644 --- a/cipher/random.c +++ b/cipher/random.c @@ -124,6 +124,8 @@ get_random_bits( size_t nbits, int level, int secure ) byte *buf; size_t nbytes = (nbits+7)/8; + if( quick_test && level > 1 ) + level = 1; MASK_LEVEL(level); buf = secure && secure_alloc ? m_alloc_secure( nbytes ) : m_alloc( nbytes ); read_pool( buf, nbytes, level ); diff --git a/g10/ChangeLog b/g10/ChangeLog index 6aef10371..526cf152d 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,48 @@ +Tue Aug 11 17:54:50 1998 Werner Koch (wk@(none)) + + * build-packet.c (do_secret_key): Fixed handling of old keys. + + * getkey.c (compare_name): Fixed exact and email matching + + * openfile.c (open_outfile): Changed arguments and all callers. + +Tue Aug 11 09:14:35 1998 Werner Koch (wk@(none)) + + * encode.c (encode_simple): Applied option set-filename and comment. + (encode_crypt): Ditto. + * sign.c (sign_file): Ditto. + * armor.c (armor_filter): Applied option comment. + + * encode.c (encode_crypt): Moved init_packet to the begin. + (encode_simple): add an init_packet(). + + * comment (write_comment): Now enforces a hash sign as the 1st byte. + + * import.c (import_one): Add explanation for "no user ids". + + * compress.c (do_uncompress): Applied Brian Warner's patch to support + zlib 1.1.3 etc. + + * trustdb.c (check_trust): Fixed a problem after inserting new keys. + + * getkey (lookup): do not return the primary key if usage is given + (lookup_sk): Ditto and take usage into account. + + * status.c (cpr_get_answer_is_yes): add display_help. + +Mon Aug 10 10:11:28 1998 Werner Koch (wk@(none)) + + * getkey.c (lookup_sk): Now always returns the primary if arg + primary is true. + (lookup): Likewise. + (get_pubkey_byname): Now returns the primary key + (get_seckey_byname): Ditto. + + +Mon Aug 10 08:34:03 1998 Werner Koch (wk@(none)) + + * keyid.c (pubkey_letter): ELG_E is now a small g. + Sat Aug 8 17:26:12 1998 Werner Koch (wk@(none)) * openfile (overwrite_filep): Changed semantics and all callers. diff --git a/g10/OPTIONS b/g10/OPTIONS index 2e933f57e..9555ce06a 100644 --- a/g10/OPTIONS +++ b/g10/OPTIONS @@ -50,3 +50,11 @@ run-as-shm-coprocess [request-locked-shm-size] # very special :-) # You will have to use "--status-fd" too + +set-filename <name> +# Set <name> as the filename into the plaintext packet + +comment <string> +# Add <string> as comment to the output + + diff --git a/g10/armor.c b/g10/armor.c index 45f962f01..f5116acd0 100644 --- a/g10/armor.c +++ b/g10/armor.c @@ -1002,8 +1002,25 @@ armor_filter( void *opaque, int control, iobuf_writestr(a, "-----\n"); iobuf_writestr(a, "Version: GNUPG v" VERSION " (" PRINTABLE_OS_NAME ")\n"); - iobuf_writestr(a, - "Comment: Get GNUPG from ftp://ftp.guug.de/pub/gcrypt/\n"); + + if( opt.comment_string ) { + const char *s = opt.comment_string; + iobuf_writestr(a, "Comment: " ); + for( ; *s; s++ ) { + if( *s == '\n' ) + iobuf_writestr(a, "\\n" ); + else if( *s == '\r' ) + iobuf_writestr(a, "\\r" ); + else if( *s == '\v' ) + iobuf_writestr(a, "\\v" ); + else + iobuf_put(a, *s ); + } + iobuf_put(a, '\n' ); + } + else + iobuf_writestr(a, + "Comment: Get GNUPG from ftp://ftp.guug.de/pub/gcrypt/\n"); if( afx->hdrlines ) iobuf_writestr(a, afx->hdrlines); iobuf_put(a, '\n'); diff --git a/g10/build-packet.c b/g10/build-packet.c index 6373e0cbd..a7c709302 100644 --- a/g10/build-packet.c +++ b/g10/build-packet.c @@ -291,7 +291,8 @@ do_secret_key( IOBUF out, int ctb, PKT_secret_key *sk ) for(i=0; i < npkey; i++ ) mpi_write(a, sk->skey[i] ); if( sk->is_protected ) { - if( is_RSA(sk->pubkey_algo) && sk->version < 4 ) { + if( is_RSA(sk->pubkey_algo) && sk->version < 4 + && !sk->protect.s2k.mode ) { iobuf_put(a, sk->protect.algo ); iobuf_write(a, sk->protect.iv, 8 ); } diff --git a/g10/comment.c b/g10/comment.c index fef831cc7..71d524c40 100644 --- a/g10/comment.c +++ b/g10/comment.c @@ -44,9 +44,17 @@ write_comment( IOBUF out, const char *s ) int rc=0; pkt.pkttype = PKT_COMMENT; - pkt.pkt.comment = m_alloc( sizeof *pkt.pkt.comment + n - 1 ); - pkt.pkt.comment->len = n; - strcpy(pkt.pkt.comment->data, s); + if( *s != '#' ) { + 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 = 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", g10_errstr(rc) ); free_packet( &pkt ); diff --git a/g10/compress.c b/g10/compress.c index ca5adaebd..917a96033 100644 --- a/g10/compress.c +++ b/g10/compress.c @@ -151,19 +151,23 @@ do_uncompress( compress_filter_context_t *zfx, z_stream *zs, if( DBG_FILTER ) log_debug("call inflate: avail_in=%u, avail_out=%u\n", (unsigned)zs->avail_in, (unsigned)zs->avail_out); + #ifdef Z_SYNC_FLUSH + zrc = inflate( zs, Z_SYNC_FLUSH ); + #else zrc = inflate( zs, Z_PARTIAL_FLUSH ); + #endif if( DBG_FILTER ) log_debug("inflate returned: avail_in=%u, avail_out=%u, zrc=%d\n", (unsigned)zs->avail_in, (unsigned)zs->avail_out, zrc); if( zrc == Z_STREAM_END ) rc = -1; /* eof */ - else if( zrc != Z_OK ) { + 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 ); } - } while( zs->avail_out && zrc != Z_STREAM_END ); + } while( zs->avail_out && zrc != Z_STREAM_END && zrc != Z_BUF_ERROR ); *ret_len = zfx->outbufsize - zs->avail_out; if( DBG_FILTER ) log_debug("do_uncompress: returning %u bytes\n", (unsigned)*ret_len ); diff --git a/g10/dearmor.c b/g10/dearmor.c index 5fa038255..6b15f491b 100644 --- a/g10/dearmor.c +++ b/g10/dearmor.c @@ -58,10 +58,9 @@ dearmor_file( const char *fname ) iobuf_push_filter( inp, armor_filter, &afx ); - if( !(out = open_outfile( fname, 0 )) ) { - rc = G10ERR_CREATE_FILE; + if( (rc = open_outfile( fname, 0, &out )) ) goto leave; - } + while( (c = iobuf_get(inp)) != -1 ) @@ -100,10 +99,8 @@ enarmor_file( const char *fname ) } - if( !(out = open_outfile( fname, 1 )) ) { - rc = G10ERR_CREATE_FILE; + if( (rc = open_outfile( fname, 1, &out )) ) goto leave; - } afx.what = 4; afx.hdrlines = "Comment: Use \"gpgm --dearmor\" for unpacking\n"; diff --git a/g10/encode.c b/g10/encode.c index 142a5e201..1d505500a 100644 --- a/g10/encode.c +++ b/g10/encode.c @@ -80,6 +80,7 @@ encode_simple( const char *filename, int mode ) memset( &cfx, 0, sizeof cfx); memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); + init_packet(&pkt); /* prepare iobufs */ if( !(inp = iobuf_open(filename)) ) { @@ -107,19 +108,21 @@ encode_simple( const char *filename, int mode ) } } - if( !(out = open_outfile( filename, opt.armor? 1:0 )) ) { + if( (rc = open_outfile( filename, opt.armor? 1:0, &out )) ) { iobuf_close(inp); m_free(cfx.dek); m_free(s2k); - return G10ERR_CREATE_FILE; /* or user said: do not overwrite */ + return rc; } if( opt.armor ) iobuf_push_filter( out, armor_filter, &afx ); - else + else { write_comment( out, "#created by GNUPG v" VERSION " (" PRINTABLE_OS_NAME ")"); - + if( opt.comment_string ) + write_comment( out, opt.comment_string ); + } if( s2k && !opt.rfc1991 ) { PKT_symkey_enc *enc = m_alloc_clear( sizeof *enc ); enc->version = 4; @@ -133,18 +136,22 @@ encode_simple( const char *filename, int mode ) } /* setup the inner packet */ - if( filename ) { - pt = m_alloc( sizeof *pt + strlen(filename) - 1 ); - pt->namelen = strlen(filename); - memcpy(pt->name, filename, pt->namelen ); - if( !(filesize = iobuf_get_filelength(inp)) ) - log_info(_("%s: warning: empty file\n"), filename ); + if( filename || opt.set_filename ) { + const char *s = 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 ); } else { /* no filename */ pt = m_alloc( sizeof *pt - 1 ); pt->namelen = 0; - filesize = 0; /* stdin */ } + if( filename ) { + if( !(filesize = iobuf_get_filelength(inp)) ) + log_info(_("%s: warning: empty file\n"), filename ); + } + else + filesize = 0; /* stdin */ pt->timestamp = make_timestamp(); pt->mode = 'b'; pt->len = filesize; @@ -194,6 +201,7 @@ encode_crypt( const char *filename, STRLIST remusr ) memset( &cfx, 0, sizeof cfx); memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); + init_packet(&pkt); if( (rc=build_pk_list( remusr, &pk_list, PUBKEY_USAGE_ENC)) ) return rc; @@ -208,16 +216,18 @@ encode_crypt( const char *filename, STRLIST remusr ) else if( opt.verbose ) log_info(_("reading from '%s'\n"), filename? filename: "[stdin]"); - if( !(out = open_outfile( filename, opt.armor? 1:0 )) ) { - rc = G10ERR_CREATE_FILE; /* or user said: do not overwrite */ + if( (rc = open_outfile( filename, opt.armor? 1:0, &out )) ) goto leave; - } + if( opt.armor ) iobuf_push_filter( out, armor_filter, &afx ); - else + else { write_comment( out, "#created by GNUPG v" VERSION " (" PRINTABLE_OS_NAME ")"); + if( opt.comment_string ) + write_comment( out, opt.comment_string ); + } /* create a session key */ cfx.dek = m_alloc_secure( sizeof *cfx.dek ); @@ -237,24 +247,27 @@ encode_crypt( const char *filename, STRLIST remusr ) goto leave; /* setup the inner packet */ - if( filename ) { - pt = m_alloc( sizeof *pt + strlen(filename) - 1 ); - pt->namelen = strlen(filename); - memcpy(pt->name, filename, pt->namelen ); - if( !(filesize = iobuf_get_filelength(inp)) ) - log_info(_("%s: warning: empty file\n"), filename ); + if( filename || opt.set_filename ) { + const char *s = 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 ); } else { /* no filename */ pt = m_alloc( sizeof *pt - 1 ); pt->namelen = 0; - filesize = 0; /* stdin */ } + if( filename ) { + if( !(filesize = iobuf_get_filelength(inp)) ) + log_info(_("%s: warning: empty file\n"), filename ); + } + else + filesize = 0; /* stdin */ pt->timestamp = make_timestamp(); pt->mode = 'b'; pt->len = filesize; pt->new_ctb = !pt->len && !opt.rfc1991; pt->buf = inp; - init_packet(&pkt); pkt.pkttype = PKT_PLAINTEXT; pkt.pkt.plaintext = pt; cfx.datalen = filesize && !opt.compress? calc_packet_length( &pkt ) : 0; diff --git a/g10/export.c b/g10/export.c index 2c824d2b0..301cb5ece 100644 --- a/g10/export.c +++ b/g10/export.c @@ -71,10 +71,9 @@ do_export( STRLIST users, int secret ) memset( &zfx, 0, sizeof zfx); init_packet( &pkt ); - if( !(out = open_outfile( NULL, 0 )) ) { - rc = G10ERR_CREATE_FILE; + if( (rc = open_outfile( NULL, 0, &out )) ) goto leave; - } + if( opt.armor ) { afx.what = secret?5:1; @@ -47,18 +47,68 @@ #endif +enum cmd_and_opt_values { aNull = 0, + oArmor = 'a', + aDetachedSign = 'b', + aSym = 'c', + aDecrypt = 'd', + aEncr = 'e', + oKOption = 'k', + oDryRun = 'n', + oOutput = 'o', + oRemote = 'r', + aSign = 's', + oTextmode = 't', + oUser = 'u', + oVerbose = 'v', + oCompress = 'z', + oBatch = 500, + aClearsign = 539, + aStore, + aKeygen, + aSignEncr, + aSignKey, + aListPackets, + aEditKey, + aDeleteKey, + aDeleteSecretKey, + aKMode, + aKModeC, + aImport, + aVerify, + aListKeys, + aListSigs, + aListSecretKeys, + aExport, + aExportSecret, + aCheckKeys, + aGenRevoke, + aPrimegen, + aPrintMD, + aPrintMDs, + aCheckTrustDB, + aListTrustDB, + aListTrustPath, + aExportOwnerTrust, + aImportOwnerTrust, + aDeArmor, + aEnArmor, + aGenRandom, +aTest }; + + static ARGPARSE_OPTS opts[] = { { 300, NULL, 0, N_("@Commands:\n ") }, #ifdef IS_G10 - { 's', "sign", 256, N_("|[file]|make a signature")}, - { 539, "clearsign", 256, N_("|[file]|make a clear text signature") }, - { 'b', "detach-sign", 256, N_("make a detached signature")}, - { 'e', "encrypt", 256, N_("encrypt data")}, - { 'c', "symmetric", 256, N_("encryption only with symmetric cipher")}, + { aSign, "sign", 256, N_("|[file]|make a signature")}, + { 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")}, + { aSym, "symmetric", 256, N_("encryption only with symmetric cipher")}, { 507, "store", 256, N_("store only")}, - { 'd', "decrypt", 256, N_("decrypt data (default)")}, + { aDecrypt, "decrypt", 256, N_("decrypt data (default)")}, { 550, "verify" , 256, N_("verify a signature")}, #endif { 551, "list-keys", 256, N_("list keys")}, @@ -93,17 +143,17 @@ static ARGPARSE_OPTS opts[] = { { 301, NULL, 0, N_("@\nOptions:\n ") }, - { 'a', "armor", 0, N_("create ascii armored output")}, + { oArmor, "armor", 0, N_("create ascii armored output")}, #ifdef IS_G10 - { 'u', "local-user",2, N_("use this user-id to sign or decrypt")}, - { 'r', "remote-user", 2, N_("use this user-id for encryption")}, - { 'z', NULL, 1, N_("|N|set compress level N (0 disables)") }, - { 't', "textmode", 0, N_("use canonical text mode")}, + { oUser, "local-user",2, N_("use this user-id to sign or decrypt")}, + { oRemote, "remote-user", 2, N_("use this user-id for encryption")}, + { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") }, + { oTextmode, "textmode", 0, N_("use canonical text mode")}, #endif - { 'o', "output", 2, N_("use as output file")}, - { 'v', "verbose", 0, N_("verbose") }, - { 'n', "dry-run", 0, N_("do not make any changes") }, - { 500, "batch", 0, N_("batch mode: never ask")}, + { oOutput, "output", 2, N_("use as output file")}, + { oVerbose, "verbose", 0, N_("verbose") }, + /* { oDryRun, "dry-run", 0, N_("do not make any changes") }, */ + { oBatch, "batch", 0, N_("batch mode: never ask")}, { 501, "yes", 0, N_("assume yes on most questions")}, { 502, "no", 0, N_("assume no on most questions")}, { 509, "keyring" ,2, N_("add this keyring to the list of keyrings")}, @@ -147,7 +197,7 @@ static ARGPARSE_OPTS opts[] = { { 533, "list-trust-path",0, "@"}, #endif #ifdef IS_G10 - { 'k', NULL, 0, "@"}, + { oKOption, NULL, 0, "@"}, { 504, "delete-secret-key",0, "@" }, { 524, "edit-sig" ,0, "@"}, /* alias for edit-key */ { 523, "passphrase-fd",1, "@" }, @@ -173,27 +223,18 @@ static ARGPARSE_OPTS opts[] = { { 559, "always-trust", 0, "@"}, { 562, "emulate-checksum-bug", 0, "@"}, { 554, "run-as-shm-coprocess", 4, "@" }, - /* 568 unused */ + { 568, "set-filename", 2, "@" }, + { 569, "comment", 2, "@" }, {0} }; -enum cmd_values { aNull = 0, - aSym, aStore, aEncr, aKeygen, aSign, aSignEncr, - aSignKey, aClearsign, aListPackets, aEditKey, aDeleteKey, aDeleteSecretKey, - aKMode, aKModeC, aImport, aVerify, aDecrypt, aListKeys, - aListSigs, aListSecretKeys, aExport, aExportSecret, - aCheckKeys, aGenRevoke, aPrimegen, aPrintMD, aPrintMDs, - aCheckTrustDB, aListTrustDB, aListTrustPath, - aExportOwnerTrust, aImportOwnerTrust, - aDeArmor, aEnArmor, aGenRandom, -aTest }; static int maybe_setuid = 1; static char *build_list( const char *text, const char *(*mapf)(int), int (*chkf)(int) ); -static void set_cmd( enum cmd_values *ret_cmd, - enum cmd_values new_cmd ); +static void set_cmd( enum cmd_and_opt_values *ret_cmd, + enum cmd_and_opt_values new_cmd ); #ifdef IS_G10MAINT static void print_hex( byte *p, size_t n ); static void print_mds( const char *fname, int algo ); @@ -337,9 +378,9 @@ set_debug(void) static void -set_cmd( enum cmd_values *ret_cmd, enum cmd_values new_cmd ) +set_cmd( enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd ) { - enum cmd_values cmd = *ret_cmd; + enum cmd_and_opt_values cmd = *ret_cmd; if( !cmd || cmd == new_cmd ) cmd = new_cmd; @@ -383,7 +424,7 @@ main( int argc, char **argv ) int errors=0; int default_keyring = 1; int greeting = 1; - enum cmd_values cmd = 0; + enum cmd_and_opt_values cmd = 0; const char *trustdb_name = NULL; char *def_cipher_string = NULL; char *def_digest_string = NULL; @@ -478,27 +519,27 @@ main( int argc, char **argv ) &pargs, opts) ) { switch( pargs.r_opt ) { - case 'a': opt.armor = 1; opt.no_armor=0; break; + case oArmor: opt.armor = 1; opt.no_armor=0; break; #ifdef IS_G10 - case 'b': detached_sig = 1; set_cmd( &cmd, aSign ); break; - case 'c': set_cmd( &cmd, aSym); break; - case 'd': set_cmd( &cmd, aDecrypt); break; - case 'e': set_cmd( &cmd, aEncr); break; - case 'r': /* store the remote users */ + 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 aEncr: set_cmd( &cmd, aEncr); break; + case oRemote: /* store the remote users */ sl = m_alloc( sizeof *sl + strlen(pargs.r.ret_str)); strcpy(sl->d, pargs.r.ret_str); sl->next = remusr; remusr = sl; break; - case 's': set_cmd( &cmd, aSign ); break; - case 't': opt.textmode=1; break; - case 'u': /* store the local users */ + case aSign: set_cmd( &cmd, aSign ); break; + case oTextmode: opt.textmode=1; break; + case oUser: /* store the local users */ sl = m_alloc( sizeof *sl + strlen(pargs.r.ret_str)); strcpy(sl->d, pargs.r.ret_str); sl->next = locusr; locusr = sl; break; - case 'z': opt.compress = pargs.r.ret_int; break; + case oCompress: opt.compress = pargs.r.ret_int; break; case 503: set_cmd( &cmd, aKeygen); break; case 504: set_cmd( &cmd, aDeleteSecretKey); break; case 505: set_cmd( &cmd, aDeleteKey); break; @@ -508,7 +549,7 @@ main( int argc, char **argv ) case 524: set_cmd( &cmd, aEditKey); break; case 527: def_cipher_string = m_strdup(pargs.r.ret_str); break; case 529: def_digest_string = m_strdup(pargs.r.ret_str); break; - case 539: set_cmd( &cmd, aClearsign); break; + case aClearsign: set_cmd( &cmd, aClearsign); break; case 540: secmem_set_flags( secmem_get_flags() | 1 ); break; case 542: set_cmd( &cmd, aGenRevoke); break; case 550: set_cmd( &cmd, aVerify); break; @@ -536,12 +577,12 @@ main( int argc, char **argv ) case 525: set_cmd( &cmd, aImportOwnerTrust); break; #endif /* IS_G10MAINT */ - case 'o': opt.outfile = pargs.r.ret_str; break; - case 'v': g10_opt_verbose++; + case oOutput: opt.outfile = pargs.r.ret_str; break; + case oVerbose: g10_opt_verbose++; opt.verbose++; opt.list_sigs=1; break; - case 'k': set_cmd( &cmd, aKMode ); break; + case oKOption: set_cmd( &cmd, aKMode ); break; - case 500: opt.batch = 1; greeting = 0; break; + case oBatch: opt.batch = 1; greeting = 0; break; case 501: opt.answer_yes = 1; break; case 502: opt.answer_no = 1; break; case 508: set_cmd( &cmd, aCheckKeys); break; @@ -598,6 +639,8 @@ main( int argc, char **argv ) log_error("shared memory coprocessing is not available\n"); #endif break; + case 568: opt.set_filename = pargs.r.ret_str; break; + case 569: opt.comment_string = pargs.r.ret_str; break; default : errors++; pargs.err = configfp? 1:2; break; } } diff --git a/g10/getkey.c b/g10/getkey.c index 72bb3d990..10899a6df 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -71,9 +71,9 @@ static int pk_cache_entries; /* number of entries in pk cache */ static int lookup( PKT_public_key *pk, int mode, u32 *keyid, const char *name, - KBNODE *ret_keyblock ); + KBNODE *ret_keyblock, int primary ); static int lookup_sk( PKT_secret_key *sk, - int mode, u32 *keyid, const char *name ); + int mode, u32 *keyid, const char *name, int primary ); /* note this function may be called before secure memory is * available @@ -263,7 +263,7 @@ get_pubkey( PKT_public_key *pk, u32 *keyid ) /* do a lookup */ - rc = lookup( pk, 11, keyid, NULL, NULL ); + rc = lookup( pk, 11, keyid, NULL, NULL, 0 ); if( !rc ) goto leave; @@ -321,15 +321,13 @@ hextobyte( const byte *s ) * on the length a short or complete one. * - If the username starts with 32,33,40 or 41 hex-digits (the first one * must be in the range 0..9), this is considered a fingerprint. - * (Not yet implemented) * - If the username starts with a left angle, we assume it is a complete * email address and look only at this part. * - If the username starts with a '.', we assume it is the ending * part of an email address * - If the username starts with an '@', we assume it is a part of an * email address - * - If the userid start with an '=' an exact compare is done; this may - * also follow the keyid in which case both parts are matched. + * - If the userid start with an '=' an exact compare is done. * - If the userid starts with a '*' a case insensitive substring search is * done (This is also the default). */ @@ -436,16 +434,16 @@ key_byname( int secret, sk = m_alloc_clear( sizeof *sk ); internal++; } - rc = mode < 16? lookup_sk( sk, mode, keyid, name ) - : lookup_sk( sk, mode, keyid, fprint ); + rc = mode < 16? lookup_sk( sk, mode, keyid, s, 1 ) + : lookup_sk( sk, mode, keyid, fprint, 1 ); } else { if( !pk ) { pk = m_alloc_clear( sizeof *pk ); internal++; } - rc = mode < 16? lookup( pk, mode, keyid, name, NULL ) - : lookup( pk, mode, keyid, fprint, NULL ); + rc = mode < 16? lookup( pk, mode, keyid, s, NULL, 1 ) + : lookup( pk, mode, keyid, fprint, NULL, 1 ); } @@ -473,7 +471,7 @@ get_pubkey_byfprint( PKT_public_key *pk, const byte *fprint, size_t fprint_len) int rc; if( fprint_len == 20 || fprint_len == 16 ) - rc = lookup( pk, fprint_len, NULL, fprint, NULL ); + rc = lookup( pk, fprint_len, NULL, fprint, NULL, 0 ); else rc = G10ERR_GENERAL; /* Oops */ return rc; @@ -491,7 +489,7 @@ get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint, PKT_public_key *pk = m_alloc_clear( sizeof *pk ); if( fprint_len == 20 || fprint_len == 16 ) - rc = lookup( pk, fprint_len, NULL, fprint, ret_keyblock ); + rc = lookup( pk, fprint_len, NULL, fprint, ret_keyblock, 0 ); else rc = G10ERR_GENERAL; /* Oops */ @@ -507,7 +505,7 @@ get_seckey( PKT_secret_key *sk, u32 *keyid ) { int rc; - rc = lookup_sk( sk, 11, keyid, NULL ); + rc = lookup_sk( sk, 11, keyid, NULL, 0 ); if( !rc ) { /* check the secret key (this may prompt for a passprase to * unlock the secret key @@ -530,7 +528,7 @@ seckey_available( u32 *keyid ) int rc; sk = m_alloc_clear( sizeof *sk ); - rc = lookup_sk( sk, 11, keyid, NULL ); + rc = lookup_sk( sk, 11, keyid, NULL, 0 ); free_secret_key( sk ); return rc; } @@ -549,7 +547,7 @@ get_seckey_byname( PKT_secret_key *sk, const char *name, int unprotect ) if( !name && opt.def_secret_key && *opt.def_secret_key ) rc = key_byname( 1, NULL, sk, opt.def_secret_key ); else if( !name ) /* use the first one as default key */ - rc = lookup_sk( sk, 15, NULL, NULL ); + rc = lookup_sk( sk, 15, NULL, NULL, 1 ); else rc = key_byname( 1, NULL, sk, name ); if( !rc && unprotect ) @@ -587,7 +585,7 @@ compare_name( const char *uid, size_t uidlen, const char *name, int mode ) if( i < uidlen ) { i = se - s; if( mode == 3 ) { /* exact email address */ - if( strlen(name) == i && !memicmp( s, name, i) ) + if( strlen(name)-2 == i && !memicmp( s, name+1, i) ) return 0; } else if( mode == 4 ) { /* email substring */ @@ -679,7 +677,7 @@ add_stuff_from_selfsig( KBNODE keyblock, KBNODE knode ) */ static int lookup( PKT_public_key *pk, int mode, u32 *keyid, - const char *name, KBNODE *ret_keyblock ) + const char *name, KBNODE *ret_keyblock, int primary ) { int rc; KBNODE keyblock = NULL; @@ -705,7 +703,7 @@ lookup( PKT_public_key *pk, int mode, u32 *keyid, && !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 */ - for(kk=keyblock; kk; kk = kk->next ) + for(kk=keyblock; kk; kk = kk->next ) { if( ( kk->pkt->pkttype == PKT_PUBLIC_KEY || kk->pkt->pkttype == PKT_PUBLIC_SUBKEY ) && ( !pk->pubkey_algo @@ -716,7 +714,8 @@ lookup( PKT_public_key *pk, int mode, u32 *keyid, kk->pkt->pkt.public_key->pubkey_algo, pk->pubkey_usage )) ) - break; + break; + } if( kk ) { u32 aki[2]; keyid_from_pk( kk->pkt->pkt.public_key, aki ); @@ -805,9 +804,17 @@ lookup( PKT_public_key *pk, int mode, u32 *keyid, if( k ) { /* found */ assert( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ); - copy_public_key_new_namehash( pk, k->pkt->pkt.public_key, - use_namehash? namehash:NULL); - add_stuff_from_selfsig( keyblock, k ); + assert( keyblock->pkt->pkttype == PKT_PUBLIC_KEY ); + if( primary && !pk->pubkey_usage ) { + copy_public_key_new_namehash( pk, keyblock->pkt->pkt.public_key, + use_namehash? namehash:NULL); + add_stuff_from_selfsig( keyblock, keyblock ); + } + else { + copy_public_key_new_namehash( pk, k->pkt->pkt.public_key, + use_namehash? namehash:NULL); + add_stuff_from_selfsig( keyblock, k ); + } if( ret_keyblock ) { *ret_keyblock = keyblock; keyblock = NULL; @@ -833,7 +840,8 @@ lookup( PKT_public_key *pk, int mode, u32 *keyid, * Ditto for secret keys */ static int -lookup_sk( PKT_secret_key *sk, int mode, u32 *keyid, const char *name ) +lookup_sk( PKT_secret_key *sk, int mode, u32 *keyid, const char *name, + int primary ) { int rc; KBNODE keyblock = NULL; @@ -857,13 +865,19 @@ lookup_sk( PKT_secret_key *sk, int mode, u32 *keyid, const char *name ) && !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 */ - for(kk=keyblock; kk; kk = kk->next ) + for(kk=keyblock; kk; kk = kk->next ) { if( ( kk->pkt->pkttype == PKT_SECRET_KEY || kk->pkt->pkttype == PKT_SECRET_SUBKEY ) && ( !sk->pubkey_algo || sk->pubkey_algo - == kk->pkt->pkt.secret_key->pubkey_algo)) - break; + == kk->pkt->pkt.secret_key->pubkey_algo) + && ( !sk->pubkey_usage + || !check_pubkey_algo2( + kk->pkt->pkt.secret_key->pubkey_algo, + sk->pubkey_usage )) + ) + break; + } if( kk ) { u32 aki[2]; keyid_from_sk( kk->pkt->pkt.secret_key, aki ); @@ -936,7 +950,11 @@ lookup_sk( PKT_secret_key *sk, int mode, u32 *keyid, const char *name ) if( k ) { /* found */ assert( k->pkt->pkttype == PKT_SECRET_KEY || k->pkt->pkttype == PKT_SECRET_SUBKEY ); - copy_secret_key( sk, k->pkt->pkt.secret_key ); + assert( keyblock->pkt->pkttype == PKT_SECRET_KEY ); + if( primary && !sk->pubkey_usage ) + copy_secret_key( sk, keyblock->pkt->pkt.secret_key ); + else + copy_secret_key( sk, k->pkt->pkt.secret_key ); break; /* enumeration */ } release_kbnode( keyblock ); diff --git a/g10/import.c b/g10/import.c index c5eaf9ba8..73e04cb3d 100644 --- a/g10/import.c +++ b/g10/import.c @@ -246,6 +246,7 @@ import_one( const char *fname, KBNODE keyblock ) KBPOS kbpos; u32 keyid[2]; int rc = 0; + int new_key = 0; /* get the key and print some info about it */ node = find_kbnode( keyblock, PKT_PUBLIC_KEY ); @@ -279,6 +280,7 @@ import_one( const char *fname, KBNODE keyblock ) if( !delete_inv_parts( fname, keyblock, keyid ) ) { log_info_f( fname, _("key %08lX: no valid user ids\n"), (ulong)keyid[1]); + log_info(_("this may be caused by a missing self-signature\n")); return 0; } @@ -307,6 +309,7 @@ import_one( const char *fname, KBNODE keyblock ) unlock_keyblock( &kbpos ); /* we are ready */ log_info_f( fname, _("key %08lX: public key imported\n"), (ulong)keyid[1]); + new_key = 1; } else { /* merge */ int n_uids, n_sigs, n_subk; @@ -382,11 +385,11 @@ import_one( const char *fname, KBNODE keyblock ) log_info_f(fname, _("key %08lX: not changed\n"), (ulong)keyid[1] ); } if( !rc ) { - rc = query_trust_record( pk_orig ); + rc = query_trust_record( new_key? pk : pk_orig ); if( rc && rc != -1 ) log_error("trustdb error: %s\n", g10_errstr(rc) ); - else if( rc == -1 ) { - rc = insert_trust_record( pk_orig ); + else if( rc == -1 ) { /* not found trustdb */ + rc = insert_trust_record( new_key? pk : pk_orig ); if( rc ) log_error("key %08lX: trustdb insert failed: %s\n", (ulong)keyid[1], g10_errstr(rc) ); diff --git a/g10/keyedit.c b/g10/keyedit.c index c991be101..a0a62526d 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -264,15 +264,11 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified ) "with your key: \"")); p = get_user_id( sk_keyid, &n ); tty_print_string( p, n ); + m_free(p); p = NULL; tty_printf("\"\n\n"); - m_free(p); - p = cpr_get(N_("sign_uid.okay"), _("Really sign? ")); - cpr_kill_prompt(); - if( !answer_is_yes(p) ) { - m_free(p); - continue; /* No */ - } - m_free(p); + + if( !cpr_get_answer_is_yes(N_("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; @@ -328,6 +324,7 @@ delete_key( const char *username, int secret ) PKT_secret_key *sk = NULL; u32 keyid[2]; int okay=0; + int yes; /* search the userid */ rc = secret? find_secret_keyblock_byname( &kbpos, username ) @@ -376,11 +373,11 @@ delete_key( const char *username, int secret ) if( rc ) rc = 0; else if( opt.batch && secret ) - log_error(_("can't do that in batch-mode\n")); + log_error(_("can't do that in batchmode\n")); else if( opt.batch && opt.answer_yes ) okay++; else if( opt.batch ) - log_error(_("can't do that in batch-mode without \"--yes\"\n")); + log_error(_("can't do that in batchmode without \"--yes\"\n")); else { char *p; size_t n; @@ -400,23 +397,20 @@ delete_key( const char *username, int secret ) m_free(p); tty_printf("\n\n"); - p = cpr_get( secret? N_("delete_key.secret.okay") + yes = cpr_get_answer_is_yes( secret? N_("delete_key.secret.okay") : N_("delete_key.okay"), _("Delete this key from the keyring? ")); - cpr_kill_prompt(); - if( !cpr_enabled() && secret && answer_is_yes(p)) { + if( !cpr_enabled() && secret && yes ) { /* I think it is not required to check a passphrase; if * the user is so stupid as to let others access his secret keyring * (and has no backup) - it is up him to read some very * basic texts about security. */ - m_free(p); - p = cpr_get(N_("delete_key.secret.okay"), + yes = cpr_get_answer_is_yes(N_("delete_key.secret.okay"), _("This is a secret key! - really delete? ")); } - if( answer_is_yes(p) ) + if( yes ) okay++; - m_free(p); } @@ -596,7 +590,7 @@ keyedit_menu( const char *username, STRLIST locusr ) if( opt.batch ) { - log_error(_("can't do that in batch-mode\n")); + log_error(_("can't do that in batchmode\n")); goto leave; } @@ -735,7 +729,7 @@ keyedit_menu( const char *username, STRLIST locusr ) case cmdSIGN: /* sign (only the public key) */ if( count_uids(keyblock) > 1 && !count_selected_uids(keyblock) ) { - if( !cpr_get_answer_is_yes(N_("keyedit.signall.okay"), + if( !cpr_get_answer_is_yes(N_("keyedit.sign_all.okay"), _("Really sign all user ids? ")) ) { tty_printf(_("Hint: Select the user ids to sign\n")); break; diff --git a/g10/keygen.c b/g10/keygen.c index 90a6c712d..afe5bb4f9 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -444,8 +444,9 @@ ask_keysize( int algo ) else if( nbits < 768 ) tty_printf(_("keysize too small; 768 is smallest value allowed.\n")); else if( nbits > 2048 && !cpr_enabled() ) { - tty_printf(_("Keysizes larger than 2048 are not suggested because " - "computations take REALLY long!\n")); + tty_printf( + _("Keysizes larger than 2048 are not suggested because\n" + "computations take REALLY long!\n")); if( cpr_get_answer_is_yes(N_("keygen.size.huge.okay"),_( "Are you sure that you want this keysize? ")) ) { tty_printf(_("Okay, but keep in mind that your monitor " @@ -625,8 +626,10 @@ ask_user_id( int mode ) tty_printf(_("You selected this USER-ID:\n \"%s\"\n\n"), uid); /* fixme: add a warning if this user-id already exists */ for(;;) { - char *ansstr = N_("NnCcEeOoQq"); + char *ansstr = _("NnCcEeOoQq"); + if( strlen(ansstr) != 10 ) + BUG(); if( cpr_enabled() ) { answer = m_strdup(ansstr+6); answer[1] = 0; diff --git a/g10/keyid.c b/g10/keyid.c index 349356406..2de67ccf2 100644 --- a/g10/keyid.c +++ b/g10/keyid.c @@ -40,7 +40,7 @@ pubkey_letter( int algo ) 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: + case PUBKEY_ALGO_ELGAMAL_E: return 'g'; case PUBKEY_ALGO_ELGAMAL: return 'G' ; case PUBKEY_ALGO_DSA: return 'D' ; default: return '?'; diff --git a/g10/main.h b/g10/main.h index 573158a73..bba90ef5a 100644 --- a/g10/main.h +++ b/g10/main.h @@ -82,7 +82,7 @@ int generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock ); /*-- openfile.c --*/ int overwrite_filep( const char *fname ); -IOBUF open_outfile( const char *fname, int mode ); +int open_outfile( const char *iname, int mode, IOBUF *a ); IOBUF open_sigfile( const char *iname ); /*-- seskey.c --*/ @@ -124,5 +124,6 @@ int hash_datafiles( MD_HANDLE md, STRLIST files, const char *sigfilename, /*-- signal.c --*/ void init_signals(void); +void pause_on_sigusr( int which ); #endif /*G10_MAIN_H*/ diff --git a/g10/openfile.c b/g10/openfile.c index b8a6825a3..763ac2f9a 100644 --- a/g10/openfile.c +++ b/g10/openfile.c @@ -65,19 +65,22 @@ overwrite_filep( const char *fname ) /**************** * Make an output filename for the inputfile INAME. - * Returns an IOBUF + * Returns an IOBUF and an errorcode * Mode 0 = use ".gpg" * 1 = use ".asc" * 2 = use ".sig" */ -IOBUF -open_outfile( const char *iname, int mode ) +int +open_outfile( const char *iname, int mode, IOBUF *a ) { - IOBUF a = NULL; + int rc = 0; + *a = NULL; if( (!iname || (*iname=='-' && !iname[1])) && !opt.outfile ) { - if( !(a = iobuf_create(NULL)) ) + if( !(*a = iobuf_create(NULL)) ) { log_error("can't open [stdout]: %s\n", strerror(errno) ); + rc = G10ERR_CREATE_FILE; + } else if( opt.verbose ) log_info("writing to stdout\n"); } @@ -94,14 +97,18 @@ open_outfile( const char *iname, int mode ) name = buf; } if( overwrite_filep( name ) ) { - if( !(a = iobuf_create( name )) ) + if( !(*a = iobuf_create( name )) ) { log_error("can't create %s: %s\n", name, strerror(errno) ); + rc = G10ERR_CREATE_FILE; + } else if( opt.verbose ) log_info("writing to '%s'\n", name ); } + else + rc = G10ERR_FILE_EXISTS; m_free(buf); } - return a; + return rc; } diff --git a/g10/options.h b/g10/options.h index 630e43f44..4c8ec6138 100644 --- a/g10/options.h +++ b/g10/options.h @@ -52,6 +52,8 @@ struct { int rfc1991; unsigned emulate_bugs; /* bug emulation flags EMUBUG_xxxx */ int shm_coprocess; + const char *set_filename; + const char *comment_string; } opt; diff --git a/g10/parse-packet.c b/g10/parse-packet.c index f534cbbdd..bc7aca510 100644 --- a/g10/parse-packet.c +++ b/g10/parse-packet.c @@ -1068,15 +1068,14 @@ parse_key( IOBUF inp, int pkttype, unsigned long pktlen, sk->protect.s2k.count = iobuf_get(inp); pktlen--; } - } else { /* old version; no S2K, so we set mode to 0, hash MD5 */ sk->protect.s2k.mode = 0; /* We need a kludge to cope with old GNUPG versions */ sk->protect.s2k.hash_algo = - ( sk->protect.algo == CIPHER_ALGO_BLOWFISH160 - && algorithm == PUBKEY_ALGO_ELGAMAL_E ) ? - DIGEST_ALGO_RMD160 : DIGEST_ALGO_MD5; + ( sk->protect.algo == CIPHER_ALGO_BLOWFISH160 + && algorithm == PUBKEY_ALGO_ELGAMAL_E ) ? + DIGEST_ALGO_RMD160 : DIGEST_ALGO_MD5; if( list_mode ) printf( "\tprotect algo: %d (hash algo: %d)\n", sk->protect.algo, sk->protect.s2k.hash_algo ); diff --git a/g10/passphrase.c b/g10/passphrase.c index b9f41510f..7dbaeb466 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -223,8 +223,9 @@ hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create ) count -= len2; } if( count ) { - if( count < 8 ) + if( count < 8 ) { md_write( md, s2k->salt, count ); + } else { md_write( md, s2k->salt, 8 ); count -= 8; diff --git a/g10/pkclist.c b/g10/pkclist.c index 59cc9b7d3..e85b289f5 100644 --- a/g10/pkclist.c +++ b/g10/pkclist.c @@ -81,9 +81,17 @@ edit_ownertrust( ulong lid, int mode ) " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" -" s = please show me more information\n\n") ); +" s = please show me more information\n") ); + if( mode ) + tty_printf(_(" m = back to the main menu\n")); + tty_printf("\n"); for(;;) { + /* a string with valid answers */ + char *ans = _("sSmM"); + + if( strlen(ans) != 4 ) + BUG(); p = cpr_get(N_("edit_ownertrust.value"),_("Your decision? ")); trim_spaces(p); cpr_kill_prompt(); @@ -102,9 +110,12 @@ edit_ownertrust( ulong lid, int mode ) changed++; break; } - else if( *p == 's' || *p == 'S' ) { + else if( *p == ans[0] || *p == ans[1] ) { tty_printf(_("You will see a list of signators etc. here\n")); } + else if( mode && (*p == ans[2] || *p == ans[3]) ) { + break ; /* back to the menu */ + } m_free(p); p = NULL; } m_free(p); diff --git a/g10/revoke.c b/g10/revoke.c index c78d79c85..278bdca35 100644 --- a/g10/revoke.c +++ b/g10/revoke.c @@ -142,10 +142,8 @@ gen_revoke( const char *uname ) if( !opt.armor ) tty_printf("ASCII armored output forced.\n"); - if( !(out = open_outfile( NULL, 0 )) ) { - rc = G10ERR_CREATE_FILE; + if( (rc = open_outfile( NULL, 0, &out )) ) goto leave; - } afx.what = 1; afx.hdrlines = "Comment: A revocation certificate should follow\n"; diff --git a/g10/seckey-cert.c b/g10/seckey-cert.c index 78673dfdc..df5c2b9b8 100644 --- a/g10/seckey-cert.c +++ b/g10/seckey-cert.c @@ -51,10 +51,12 @@ do_check( PKT_secret_key *sk ) if( sk->protect.algo == CIPHER_ALGO_NONE ) BUG(); - if( check_cipher_algo( sk->protect.algo ) ) - return G10ERR_CIPHER_ALGO; /* unsupported protection algorithm */ - if( cipher_get_blocksize( sk->protect.algo ) != 8 ) - return G10ERR_CIPHER_ALGO; /* unsupported protection algorithm */ + if( check_cipher_algo( sk->protect.algo ) + || cipher_get_blocksize( sk->protect.algo ) != 8 ) { + log_info(_("protection algorithm %d is not supported\n"), + sk->protect.algo ); + return G10ERR_CIPHER_ALGO; + } keyid_from_sk( sk, keyid ); dek = passphrase_to_dek( keyid, sk->protect.algo, &sk->protect.s2k, 0 ); @@ -164,21 +166,6 @@ check_secret_key( PKT_secret_key *sk ) if( i ) log_error(_("Invalid passphrase; please try again ...\n")); rc = do_check( sk ); - #if 0 /* set to 1 to enable the workaround */ - if( rc == G10ERR_BAD_PASS && sk->is_protected - && sk->protect.algo == CIPHER_ALGO_BLOWFISH - && sk->pubkey_algo != PUBKEY_ALGO_ELGAMAL ) { - /* Workaround for a bug in 0.2.16 which still used - * a 160 bit key for BLOWFISH. */ - log_info("trying workaround for 0.2.16 passphrase bug ...\n"); - log_info("If you don't need this, uncomment it in g10/seckey-cert.c\n\n"); - sk->protect.algo = CIPHER_ALGO_BLOWFISH160; - rc = do_check( sk ); - if( rc ) - rc = G10ERR_BAD_PASS; - sk->protect.algo = CIPHER_ALGO_BLOWFISH; - } - #endif if( get_passphrase_fd() != -1 ) break; } diff --git a/g10/sign.c b/g10/sign.c index a5034c702..d3f49e1df 100644 --- a/g10/sign.c +++ b/g10/sign.c @@ -156,6 +156,7 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, int compr_algo = -1; /* unknown */ + memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); memset( &mfx, 0, sizeof mfx); @@ -203,10 +204,8 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, else if( opt.verbose ) log_info("writing to '%s'\n", outfile ); } - else if( !(out = open_outfile( fname, opt.armor? 1: detached? 2:0 )) ) { - rc = G10ERR_CREATE_FILE; + else if( (rc = open_outfile( fname, opt.armor? 1: detached? 2:0, &out ))) goto leave; - } /* prepare to calculate the MD over the input */ if( opt.textmode && !outfile ) @@ -223,9 +222,12 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, if( opt.armor && !outfile ) iobuf_push_filter( out, armor_filter, &afx ); - else + else { write_comment( out, "#created by GNUPG v" VERSION " (" PRINTABLE_OS_NAME ")"); + if( opt.comment_string ) + write_comment( out, opt.comment_string ); + } if( encrypt ) { efx.pk_list = pk_list; /* fixme: set efx.cfx.datalen if known */ @@ -312,10 +314,17 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, } } else { + if( fname || opt.set_filename ) { + const char *s = 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 ); + } + else { /* no filename */ + pt = m_alloc( sizeof *pt - 1 ); + pt->namelen = 0; + } if( fname ) { - pt = m_alloc( sizeof *pt + strlen(fname) - 1 ); - pt->namelen = strlen(fname); - memcpy(pt->name, fname, pt->namelen ); if( !(filesize = iobuf_get_filelength(inp)) ) log_info("warning: '%s' is an empty file\n", fname ); @@ -329,11 +338,8 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr, if( opt.textmode && !outfile ) filesize = 0; } - else { /* no filename */ - pt = m_alloc( sizeof *pt - 1 ); - pt->namelen = 0; + else filesize = 0; /* stdin */ - } pt->timestamp = make_timestamp(); pt->mode = opt.textmode && !outfile ? 't':'b'; pt->len = filesize; @@ -533,10 +539,8 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) else if( opt.verbose ) log_info("writing to '%s'\n", outfile ); } - else if( !(out = open_outfile( fname, 1 )) ) { - rc = G10ERR_CREATE_FILE; + else if( (rc = open_outfile( fname, 1, &out )) ) goto leave; - } iobuf_writestr(out, "-----BEGIN PGP SIGNED MESSAGE-----\n" ); diff --git a/g10/status.c b/g10/status.c index 6eb074909..3c22c0d1c 100644 --- a/g10/status.c +++ b/g10/status.c @@ -286,10 +286,26 @@ cpr_kill_prompt(void) int cpr_get_answer_is_yes( const char *keyword, const char *prompt ) { + int yes; + char *p; + #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) return !!do_shm_get( keyword, 0, 1 ); #endif - return tty_get_answer_is_yes( prompt ); + for(;;) { + p = tty_get( prompt ); + trim_spaces(p); /* it is okay to do this here */ + if( *p == '?' && !p[1] ) { + m_free(p); + display_help( keyword ); + } + else { + tty_kill_prompt(); + yes = answer_is_yes(p); + m_free(p); + return yes; + } + } } diff --git a/g10/trustdb.c b/g10/trustdb.c index cc94ad8e1..642d1b5e9 100644 --- a/g10/trustdb.c +++ b/g10/trustdb.c @@ -1617,6 +1617,11 @@ check_trust( PKT_public_key *pk, unsigned *r_trustlevel ) } log_info(_("key %08lX.%lu: inserted into trustdb\n"), keyid[1], pk->local_id ); + /* and re-read the dir record */ + if( tdbio_read_record( pk->local_id, &rec, RECTYPE_DIR ) ) { + log_error("check_trust: reread dir record failed\n"); + return G10ERR_TRUSTDB; + } } } cur_time = make_timestamp(); diff --git a/include/errors.h b/include/errors.h index 1633478c1..b1182ba1f 100644 --- a/include/errors.h +++ b/include/errors.h @@ -61,6 +61,7 @@ #define G10ERR_UNEXPECTED 39 #define G10ERR_TIME_CONFLICT 40 #define G10ERR_WR_PUBKEY_ALGO 41 /* unusabe pubkey algo */ +#define G10ERR_FILE_EXISTS 42 #ifndef HAVE_STRERROR diff --git a/po/ChangeLog b/po/ChangeLog index d37483946..61c1c9753 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +Tue Aug 11 12:28:11 1998 Werner Koch (wk@(none)) + + * it.po: New file from Marco. + Thu Jul 9 21:14:51 1998 Werner Koch (wk@isil.d.shuttle.de) * de.po: Fixed typos and added new translations. diff --git a/po/POTFILES.in b/po/POTFILES.in index ffb9ff311..bce0769ab 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -4,6 +4,7 @@ # utility util/secmem.c util/argparse.c +util/miscutil.c # cipher cipher/random.c @@ -32,6 +33,6 @@ g10/trustdb.c g10/verify.c g10/status.c g10/pubkey-enc.c - +g10/openfile.c #---end-- @@ -13,6 +13,15 @@ msgstr "" "(Um dies zu vermeiden, kann das Programm suid(root) installiert werden;\n" " bitte wenden Sie sich hierzu an den Systemadministrator.)\n" +#: util/miscutil.c:87 +msgid "yes" +msgstr "ja" + +#: util/miscutil.c:88 +msgid "yY" +msgstr "jJ" + + #: cipher/rand-dummy.c:106 msgid "warning: using insecure random number generator!!\n" msgstr "Der Zufallszahlengenerator erzeugt keine sicheren Zufallszahlen!\n" @@ -467,7 +476,6 @@ msgid "" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" -"\n" msgstr "" "\"\n" "\n" @@ -480,7 +488,14 @@ msgstr "" " 3 = Ich vertraue ihm normalerweise\n" " 4 = Ich vertraue ihm immer\n" " s = Bitte weitere Information anzeigen\n" -"\n" + +msgid " m = back to the main menu\n" +msgstr " m = Zurück zum Menü\n" + +# valid user replies (not including 1..4) +msgid "sSmM" +msgstr "sSmM" + #: g10/pkclist.c:84 msgid "Your decision? " @@ -517,6 +532,11 @@ msgid "" "\n" msgstr "Keine \"Owner trust\" Werte ge\344ndert.\n" +#: g10/pkclist.c:186 g10/pkclist.c:273 +msgid "Use this key anyway? " +msgstr "Den Schlüssel trotzdem benutzen?" + + #: g10/pkclist.c:268 msgid "" "It is NOT certain that the key belongs to its owner.\n" @@ -719,7 +739,7 @@ msgstr "Der Schl\374ssel verf\344llt am %s\n" #: g10/keygen.c:528 msgid "Is this correct (y/n)? " -msgstr "Ist dies richtig? (y/n) " +msgstr "Ist dies richtig? (j/n) " #: g10/keygen.c:557 msgid "" @@ -923,7 +943,7 @@ msgstr "Sch\374ssel %08lX: \326ffentlicher Schlüssel importiert\n" #: g10/import.c:317 msgid "key %08lX: doesn't match our copy\n" -msgstr "Sch\374ssel %08lX: Stimmt nicht mit unserer Kopie \374berein" +msgstr "Sch\374ssel %08lX: Stimmt nicht mit unserer Kopie \374berein\n" #: g10/import.c:330 g10/import.c:501 msgid "key %08lX: can't locate original keyblock: %s\n" @@ -1116,11 +1136,11 @@ msgid "use option \"--delete-secret-key\" to delete it first.\n" msgstr "Benutzen Sie das Kommando \"--delete-decret-key\", um ihn vorab zu entfernen.\n" #: g10/keyedit.c:508 -msgid "can't do that in batch-mode\n" +msgid "can't do that in batchmode\n" msgstr "Dies kann im Batchmodus nicht durchgef\374hrt werden.\n" #: g10/keyedit.c:512 -msgid "can't do that in batch-mode without \"--yes\"\n" +msgid "can't do that in batchmode without \"--yes\"\n" msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgef\374hrt werden.\n" #: g10/keyedit.c:532 @@ -1287,3 +1307,29 @@ msgstr "" msgid "keyedit.cmd" msgstr "Geben Sie bitte \"help\" ein." +#: g10/status.c:207 +msgid "No help available" +msgstr "Keine Hilfe vorhanden." + +#: g10/status.c:213 +msgid "No help available for '%s'" +msgstr "Keine Hilfe für '%s' vorhanden." + +#: g10/pubkey-enc.c:138 +msgid "note: cipher algorithm %d not found in preferences\n" +msgstr "" +"Hinweis: Algorithmus %d ist kein bevorzugtes Verschlüsselungsverfahren\n" + + +#: g10/openfile.c:58 +msgid "File '%s' exists. " +msgstr "Datei '%s' exsitier bereits. " + +#: g10/openfile.c:59 +msgid "openfile.overwrite.okay" +msgstr "Geben Sie \"ja\" ein, wenn Sie die Datei überschreiben möchten" + +#: g10/openfile.c:60 +msgid "Overwrite (y/N)? " +msgstr "Überschreiben (j/N)? " + @@ -104,7 +104,7 @@ msgid "keyedit.cancel.okay" msgstr "" #: g10/keyedit.c:738 -msgid "keyedit.signall.okay" +msgid "keyedit.sign_all.okay" msgstr "" #: g10/keyedit.c:772 @@ -1,17 +1,55 @@ msgid "" msgstr "" -"POT-Creation-Date: 1998-06-25 22:06+0200\n" +"POT-Creation-Date: 1998-08-09 11:28+0200\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Date: 1998-03-07 12:16:14+0100\n" "From: Marco d'Itri <md@linux.it>\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 cipher/random.c g10/g10.c g10/pkclist.c g10/keygen.c\n" -#: util/secmem.c:180 +#: util/secmem.c:191 msgid "Warning: using insecure memory!\n" msgstr "Attenzione: si sta usando memoria insicura!\n" -#: g10/g10.c:51 + +#: util/miscutil.c:87 +msgid "yes" +msgstr "sì" + +#: util/miscutil.c:88 +msgid "yY" +msgstr "sS" + + + +#: cipher/rand-dummy.c:106 +msgid "warning: using insecure random number generator!!\n" +msgstr "" +"Attenzione: si sta usando un generatore di numeri casuali non sicuro!!\n" + +#: cipher/rand-dummy.c:107 +msgid "" +"The random number generator is only a kludge to let\n" +"it compile - it is in no way a strong RNG!\n" +"\n" +"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" +"\n" +msgstr "Il generatore di numeri casuali è solo un ripiego per fare\n" +"compilare il programma - non è assolutamente un RNG forte!\n" + +#: cipher/rand-unix.c:149 +#, 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 ci sono abbastanza byte casuali disponibili. Per favore fai qualche\n" +"altra cosa per dare all'OS la possibilità di raccogliere altra entropia!\n" +"(Servono ancora %d altri byte)\n" + +#: g10/g10.c:52 msgid "" "@Commands:\n" " " @@ -19,87 +57,75 @@ msgstr "" "@Comandi:\n" " " -#: g10/g10.c:54 +#: g10/g10.c:55 msgid "|[file]|make a signature" msgstr "|[file]|fai una firma" -#: g10/g10.c:55 +#: g10/g10.c:56 msgid "|[file]|make a clear text signature" msgstr "|[file]|fai una firma mantenendo il testo in chiaro" -#: g10/g10.c:56 +#: g10/g10.c:57 msgid "make a detached signature" msgstr "fai una firma separata" -#: g10/g10.c:57 +#: g10/g10.c:58 msgid "encrypt data" msgstr "cifra dati" -#: g10/g10.c:58 +#: g10/g10.c:59 msgid "encryption only with symmetric cipher" msgstr "cifra solo con un cifrario simmetrico" -#: g10/g10.c:59 +#: g10/g10.c:60 msgid "store only" msgstr "immagazzina soltanto" -#: g10/g10.c:60 +#: g10/g10.c:61 msgid "decrypt data (default)" msgstr "decifra dati (predefinito)" -#: g10/g10.c:61 +#: g10/g10.c:62 msgid "verify a signature" msgstr "verifica una firma" -#: g10/g10.c:63 +#: g10/g10.c:64 msgid "list keys" msgstr "elenca le chiavi" -#: g10/g10.c:64 +#: g10/g10.c:65 msgid "list keys and signatures" msgstr "elenca le chiavi e le firme" -#: g10/g10.c:65 +#: g10/g10.c:66 msgid "check key signatures" msgstr "controlla le firme delle chiavi" -#: g10/g10.c:66 +#: g10/g10.c:67 msgid "list keys and fingerprints" msgstr "elenca le chiavi e le impronte digitali" -#: g10/g10.c:67 +#: g10/g10.c:68 msgid "list secret keys" msgstr "elenca le chiavi segrete" -#: g10/g10.c:69 +#: g10/g10.c:70 msgid "generate a new key pair" msgstr "genera una nuova coppia di chiavi" -#: g10/g10.c:70 -msgid "add a subkey to a key pair" -msgstr "aggiungi una sottochiave a una coppia di chiavi" - #: g10/g10.c:71 -msgid "make a signature on a key in the keyring" -msgstr "firma una chiave nel portachiavi" - -#: g10/g10.c:72 msgid "remove key from the public keyring" msgstr "rimuove una chiave dal portachiavi pubblico" -#: g10/g10.c:73 -msgid "edit a key signature" -msgstr "modifica la firma di una chiave" - -#: g10/g10.c:74 -msgid "change the passphrase of your secret keyring" -msgstr "cambia la passphrase del tuo portachiavi segreto" +#: g10/g10.c:72 +msgid "sign or edit a key" +msgstr "firma o modifica una chiave" -#: g10/g10.c:75 +#: g10/g10.c:73 msgid "generate a revocation certificate" msgstr "genera un certificato di revoca" -#: g10/g10.c:77 +#: g10/g10.c:75 msgid "export keys" msgstr "esporta delle chiavi" @@ -112,22 +138,34 @@ msgid "list only the sequence of packets" msgstr "elenca solo la sequenza dei pacchetti" #: g10/g10.c:81 +msgid "export the ownertrust values" +msgstr "esporta i valori di fiducia" + +#: g10/g10.c:82 +msgid "import ownertrust values" +msgstr "importa i valori di fiducia" + +#: g10/g10.c:83 +msgid "|[NAMES]|check the trust database" +msgstr "|[NAMES]|controlla il TrustDB" + +#: g10/g10.c:84 msgid "De-Armor a file or stdin" msgstr "rimuovi l'armatura a un file o a stdin" -#: g10/g10.c:82 +#: g10/g10.c:85 msgid "En-Armor a file or stdin" msgstr "crea l'armatura a un file o a stdin" -#: g10/g10.c:83 +#: g10/g10.c:86 msgid "|algo [files]|print message digests" msgstr "|algo [files]|stampa tutti i message digests" -#: g10/g10.c:84 +#: g10/g10.c:87 msgid "print all message digests" msgstr "stampa tutti i message digests" -#: g10/g10.c:89 +#: g10/g10.c:94 msgid "" "@\n" "Options:\n" @@ -137,111 +175,111 @@ msgstr "" "Opzioni:\n" " " -#: g10/g10.c:91 +#: g10/g10.c:96 msgid "create ascii armored output" msgstr "crea un output ascii con armatura" -#: g10/g10.c:93 +#: g10/g10.c:98 msgid "use this user-id to sign or decrypt" msgstr "usa questo user-id per firmare o decifrare" -#: g10/g10.c:94 +#: g10/g10.c:99 msgid "use this user-id for encryption" msgstr "usa questo user-id per cifrare" -#: g10/g10.c:95 +#: g10/g10.c:100 msgid "|N|set compress level N (0 disables)" msgstr "|N|imposta il livello di compressione (0 disabilita)" -#: g10/g10.c:96 +#: g10/g10.c:101 msgid "use canonical text mode" msgstr "usa il modo testo canonico" -#: g10/g10.c:98 +#: g10/g10.c:103 msgid "use as output file" msgstr "usa come file di output" -#: g10/g10.c:99 +#: g10/g10.c:104 msgid "verbose" msgstr "prolisso" -#: g10/g10.c:100 +#: g10/g10.c:105 msgid "do not make any changes" msgstr "non fare cambiamenti" -#: g10/g10.c:101 +#: g10/g10.c:106 msgid "batch mode: never ask" msgstr "modo batch: non fare domande" -#: g10/g10.c:102 +#: g10/g10.c:107 msgid "assume yes on most questions" -msgstr "assumi \"s\354\" a quasi tutte le domande" +msgstr "assumi \"sì\" a quasi tutte le domande" -#: g10/g10.c:103 +#: g10/g10.c:108 msgid "assume no on most questions" msgstr "assumi \"no\" a quasi tutte le domande" -#: g10/g10.c:104 +#: g10/g10.c:109 msgid "add this keyring to the list of keyrings" msgstr "aggiungi questo portachiavi alla lista" -#: g10/g10.c:105 +#: g10/g10.c:110 msgid "add this secret keyring to the list" msgstr "aggiungi questo portachiavi segreto alla lista" -#: g10/g10.c:106 +#: g10/g10.c:111 +msgid "|NAME|use NAME as default secret key" +msgstr "|NOME|usa NOME come chiave segreta predefinita" + +#: g10/g10.c:112 msgid "read options from file" msgstr "leggi le opzioni dal file" -#: g10/g10.c:108 +#: g10/g10.c:114 msgid "set debugging flags" msgstr "imposta i flag di debugging" -#: g10/g10.c:109 +#: g10/g10.c:115 msgid "enable full debugging" msgstr "abilita il debugging completo" -#: g10/g10.c:110 +#: g10/g10.c:116 msgid "|FD|write status info to this FD" msgstr "|FD|scrivi le informazioni di stato su questo fd" -#: g10/g10.c:111 +#: g10/g10.c:117 msgid "do not write comment packets" msgstr "non scrivere pacchetti di commento" -#: g10/g10.c:112 +#: g10/g10.c:118 msgid "(default is 1)" -msgstr "(predefinito \350 1)" +msgstr "(predefinito è 1)" -#: g10/g10.c:113 +#: g10/g10.c:119 msgid "(default is 3)" -msgstr "(predefinito \350 3)" +msgstr "(predefinito è 3)" -#: g10/g10.c:114 +#: g10/g10.c:120 msgid "|file|load extension module" msgstr "|file|carica un modulo di estensione" -#: g10/g10.c:115 +#: g10/g10.c:121 msgid "emulate the mode described in RFC1991" msgstr "emula il modo descritto nel RFC1991" -#: g10/g10.c:117 +#: g10/g10.c:123 msgid "|NAME|use cipher algorithm NAME" -msgstr "|NAME|seleziona l'algoritmo di cifratura predefinito" - -#: g10/g10.c:118 -msgid "|NAME|use public key algorithm NAME" -msgstr "|NAME|seleziona l'algoritmo a chiave pubblica predefinito" +msgstr "|NAME|usa l'algoritmo di cifratura NOME" -#: g10/g10.c:119 +#: g10/g10.c:124 msgid "|NAME|use message digest algorithm NAME" -msgstr "|NAME|seleziona l'algoritmo di message digest predefinito" +msgstr "|NAME|usa l'algoritmo di message digest NOME" -#: g10/g10.c:120 +#: g10/g10.c:125 msgid "|N|use compress algorithm N" msgstr "|N|usa l'algoritmo di compressione N" -#: g10/g10.c:129 +#: g10/g10.c:133 msgid "" "@\n" "Examples:\n" @@ -261,19 +299,19 @@ msgstr "" " -k [userid] mostra le chiavi\n" " -kc [userid] mostra le impronte digitali\n" -#: g10/g10.c:210 +#: g10/g10.c:218 msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n" msgstr "Per favore segnala i bug a <gnupg-bugs@gnu.org>.\n" -#: g10/g10.c:215 +#: g10/g10.c:223 msgid "Usage: gpgm [options] [files] (-h for help)" msgstr "Uso: gpgm [opzioni] [file] (-h per l'aiuto)" -#: g10/g10.c:217 +#: g10/g10.c:225 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opzioni] [file] (-h per l'aiuto)" -#: g10/g10.c:222 +#: g10/g10.c:230 msgid "" "Syntax: gpgm [options] [files]\n" "GNUPG maintenance utility\n" @@ -281,7 +319,7 @@ msgstr "" "Sintassi: gpgm [opzioni] [file]\n" "Utility di manutenzione di GNUPG\n" -#: g10/g10.c:225 +#: g10/g10.c:233 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" @@ -291,161 +329,161 @@ msgstr "" "firma, controlla, cifra o decifra\n" "l'operazione predefinita dipende dai dati di input\n" -#: g10/g10.c:302 +#: g10/g10.c:313 msgid "usage: gpgm [options] " msgstr "uso: gpgm [options] " -#: g10/g10.c:304 +#: g10/g10.c:315 msgid "usage: gpg [options] " msgstr "uso: gpg [options] " -#: g10/g10.c:345 +#: g10/g10.c:356 msgid "conflicting commands\n" msgstr "comandi in conflitto\n" -#: g10/g10.c:358 -msgid "selected cipher algorithm is invalid\n" -msgstr "l'algoritmo di cifratura selezionato non \350 valido\n" +# , c-format +#: g10/g10.c:462 +#, c-format +msgid "note: no default option file '%s'\n" +msgstr "nota: nessun file con opzioni predefinite '%s'\n" -#: g10/g10.c:360 -msgid "selected pubkey algorithm is invalid\n" -msgstr "l'algoritmo a chiave pubblica selezionato non \350 valido\n" +# , c-format +#: g10/g10.c:466 +#, c-format +msgid "option file '%s': %s\n" +msgstr "file con opzioni predefinite '%s': %s\n" -#: g10/g10.c:362 +# , c-format +#: g10/g10.c:473 +#, c-format +msgid "reading options from '%s'\n" +msgstr "lettura delle opzioni da '%s'\n" + +#: g10/g10.c:644 +msgid "selected cipher algorithm is invalid\n" +msgstr "l'algoritmo di cifratura selezionato non è valido\n" + +#: g10/g10.c:650 msgid "selected digest algorithm is invalid\n" -msgstr "l'algoritmo di digest selezionato non \350 valido\n" +msgstr "l'algoritmo di digest selezionato non è valido\n" # , c-format -#: g10/g10.c:364 +#: g10/g10.c:653 +#, 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/g10.c:366 +#: g10/g10.c:655 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve essere maggiore di 0\n" -#: g10/g10.c:368 +#: g10/g10.c:657 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve essere maggiore di 1\n" # , c-format -#: g10/g10.c:465 -msgid "note: no default option file '%s'\n" -msgstr "nota: nessun file con opzioni predefinite '%s'\n" - -# , c-format -#: g10/g10.c:469 -msgid "option file '%s': %s\n" -msgstr "file con opzioni predefinite '%s': %s\n" - -# , c-format -#: g10/g10.c:476 -msgid "reading options from '%s'\n" -msgstr "lettura delle opzioni da '%s'\n" - -# , c-format -#: g10/g10.c:696 +#: g10/g10.c:740 +#, c-format msgid "failed to initialize the TrustDB: %s\n" -msgstr "inizializzazione del TrustDB fallita: %s\n" +msgstr "inizializzazione del trustdb fallita: %s\n" -#: g10/g10.c:702 +#: g10/g10.c:746 msgid "--store [filename]" msgstr "--store [nomefile]" -#: g10/g10.c:710 +#: g10/g10.c:754 msgid "--symmetric [filename]" msgstr "--symmetric [nomefile]" -#: g10/g10.c:718 +#: g10/g10.c:762 msgid "--encrypt [filename]" msgstr "--encrypt [nomefile]" -#: g10/g10.c:731 +#: g10/g10.c:775 msgid "--sign [filename]" msgstr "--sign [nomefile]" -#. sign and encrypt the given file -#: g10/g10.c:744 +#: g10/g10.c:788 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nomefile]" -#: g10/g10.c:758 +#: g10/g10.c:802 msgid "--clearsign [filename]" msgstr "--clearsign [nomefile]" -#: g10/g10.c:770 +#: g10/g10.c:814 msgid "--decrypt [filename]" msgstr "--decrypt [nomefile]" -#: g10/g10.c:778 -msgid "--sign-key username" -msgstr "" - -#. Edit a key signature -#: g10/g10.c:786 -msgid "--edit-sig username" -msgstr "" +#: g10/g10.c:823 +msgid "--edit-key username" +msgstr "--edit-key nomeutente" -#: g10/g10.c:794 +#: g10/g10.c:829 msgid "--delete-secret-key username" -msgstr "" +msgstr "--delete-secret-key nomeutente" -#: g10/g10.c:797 +#: g10/g10.c:832 msgid "--delete-key username" -msgstr "" - -#: g10/g10.c:805 -msgid "--change-passphrase [username]" -msgstr "" +msgstr "--delete-key nomeutente" # , c-format -#. -kv userid keyring -#: g10/g10.c:829 +#: g10/encode.c:203 g10/g10.c:856 g10/keylist.c:79 +#, c-format msgid "can't open %s: %s\n" msgstr "impossibile aprire '%s': %s\n" -#: g10/g10.c:840 +#: g10/g10.c:867 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [userid] [portachiavi]" # , c-format -#: g10/g10.c:892 +#: g10/g10.c:922 +#, c-format msgid "dearmoring failed: %s\n" msgstr "rimozione dell'armatura fallita: %s\n" # , c-format -#: g10/g10.c:900 +#: g10/g10.c:930 +#, c-format msgid "enarmoring failed: %s\n" msgstr "creazione dell'armatura fallita: %s\n" # , c-format -#: g10/g10.c:956 +#: g10/g10.c:991 +#, c-format msgid "invalid hash algorithm '%s'\n" -msgstr "" +msgstr "algoritmo di hash non valido '%s'\n" -#: g10/g10.c:1006 +#: g10/g10.c:1061 msgid "[filename]" msgstr "[nomefile]" # , c-format -#: g10/g10.c:1008 +#: g10/decrypt.c:59 g10/g10.c:1063 g10/verify.c:66 +#, c-format msgid "can't open '%s'\n" msgstr "impossibile aprire '%s'\n" -# #### Md ??? +#: g10/g10.c:1108 +msgid "" +"RSA keys are deprecated; please consider creating a new key and use this key " +"in the future\n" +msgstr "" +"L'uso di chiavi RSA è deprecato; per favore in futuro considera di creare e\n" +"usare una nuova chiave.\n" + # , c-format -#: g10/pkclist.c:65 +#: g10/pkclist.c:67 msgid "" -"No ownertrust defined for %lu:\n" +"No owner trust defined for %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Nessun valore di fiducia del proprietario definito per %lu:\n" "%4u%c/%08lX %s \"" -#: g10/pkclist.c:72 +#: g10/pkclist.c:77 msgid "" -"\"\n" -"\n" "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" @@ -455,12 +493,9 @@ msgid "" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" -"\n" msgstr "" -"\"\n" -"\n" -"Per favore decidi quanto hai fiducia di questo utente perch\350 firmi\n" -"correttamente le chiavi di altri utenti (guardando il suo passaporto,\n" +"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" "\n" " 1 = Non lo so\n" @@ -468,27 +503,31 @@ msgstr "" " 3 = Mi fido marginalmente\n" " 4 = Mi fido completamente\n" " s = mostrami ulteriori informazioni\n" -"\n" -#: g10/pkclist.c:83 -msgid "Your decision? " -msgstr "Cosa hai deciso? " -#: g10/pkclist.c:90 -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.\n" +msgid " m = back to the main menu\n" msgstr "" -"\310 compito tuo assegnare qui un valore; questo valore non sar\340 mai esportato\n" -"ad alcuna terza persona. Serve per implementare la ragnatela-di-fiducia; non\n" -"ha nulla a che fare con la ragnatela-di-certificati (creata implicitamente).\n" -#: g10/pkclist.c:108 +# valid user replies (not including 1..4) +# [Marco, you can change 'm' and 's' to whatever letters you like] +msgid "sSmM" +msgstr "sSmM" + + + +#: g10/pkclist.c:87 +msgid "edit_ownertrust.value" +msgstr "" + +#: g10/pkclist.c:87 +msgid "Your decision? " +msgstr "Cosa hai deciso? " + +#: g10/pkclist.c:106 msgid "You will see a list of signators etc. here\n" msgstr "Qui vedrai una lista di firmatari, ecc.\n" -#: g10/pkclist.c:132 +#: g10/pkclist.c:130 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" @@ -498,31 +537,83 @@ msgstr "" "se possiamo assegnare qualche valore di fiducia del proprietario mancante.\n" "\n" -#: g10/pkclist.c:157 +#: g10/pkclist.c:155 msgid "" -"No ownertrust values changed.\n" +"No owner trust values changed.\n" "\n" msgstr "" "Nessun valore di fiducia del proprietario modificato.\n" "\n" -#: g10/pkclist.c:267 +#: g10/pkclist.c:174 +msgid "revoked_key.override" +msgstr "" + +#: g10/pkclist.c:175 g10/pkclist.c:262 +msgid "Use this key anyway? " +msgstr "Uso lo stesso questa chiave? " + +#: g10/pkclist.c:257 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 \350 sicuro che la chiave appartenga al suo proprietario.\n" -"Se *veramente* sai cosa stai facendo, puoi rispondere s\354 alla\n" +"NON è sicuro che la chiave appartenga al suo proprietario.\n" +"Se *veramente* sai cosa stai facendo, puoi rispondere sì alla\n" "prossima domanda.\n" "\n" -#: g10/pkclist.c:278 +#: g10/pkclist.c:261 +msgid "untrusted_key.override" +msgstr "" + +#: g10/pkclist.c:266 msgid "WARNING: Using untrusted key!\n" +msgstr "ATTENZIONE: uso di una chiave non fidata!\n" + +#: g10/pkclist.c:302 +msgid "WARNING: This key has been revoked by its owner!\n" +msgstr "ATTENZIONE: questa chiave è stata revocata dal suo proprietario!\n" + +#: g10/pkclist.c:303 +msgid " This could mean that the signature is forgery.\n" +msgstr " Questo può significare che la firma è stata falsificata.\n" + +#: g10/pkclist.c:324 +msgid "Note: This key has expired!\n" +msgstr "Nota: questa chiave è scaduta!\n" + +#: g10/pkclist.c:331 +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:333 +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:348 +msgid "WARNING: We do NOT trust this key!\n" +msgstr "ATTENZIONE: NON ci fidiamo di questa chiave!\n" + +#: g10/pkclist.c:349 +msgid " The signature is probably a FORGERY.\n" +msgstr " La firma è probabilmente un FALSO.\n" + +#: g10/pkclist.c:356 +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:308 +#: g10/pkclist.c:359 +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:404 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" @@ -530,57 +621,89 @@ msgstr "" "Non hai specificato un user ID. (puoi usare \"-r\")\n" "\n" -#: g10/pkclist.c:312 +#: g10/pkclist.c:408 +msgid "pklist.user_id.enter" +msgstr "" + +#: g10/pkclist.c:409 msgid "Enter the user ID: " msgstr "Inserisci l'user ID: " -#: g10/keygen.c:122 +#: g10/pkclist.c:420 +msgid "No such user ID.\n" +msgstr "User ID inesistente.\n" + +#: g10/pkclist.c:454 g10/pkclist.c:481 +#, c-format +msgid "%s: skipped: %s\n" +msgstr "%s: saltata: %s\n" + +#: g10/pkclist.c:462 +#, c-format +msgid "%s: error checking key: %s\n" +msgstr "%s: errore nel controllare la chiave: %s\n" + +#: g10/pkclist.c:488 +msgid "no valid addressees\n" +msgstr "nessun indirizzo valido\n" + +#: g10/keygen.c:123 msgid "writing self signature\n" msgstr "scrittura della autofirma\n" -#: g10/keygen.c:160 +#: g10/keygen.c:161 msgid "writing key binding signature\n" msgstr "scrittura della autofirma\n" -#: g10/keygen.c:382 +#: g10/keygen.c:383 msgid "Please select what kind of key you want:\n" msgstr "Per favore scegli che tipo di chiave vuoi:\n" # , c-format -#: g10/keygen.c:384 +#: g10/keygen.c:385 +#, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA e ElGamal (default)\n" # , c-format -#: g10/keygen.c:385 +#: g10/keygen.c:386 +#, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (firma e crittografa)\n" # , c-format -#: g10/keygen.c:386 +#: g10/keygen.c:387 +#, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (crittografa solo)\n" # , c-format -#: g10/keygen.c:387 +#: g10/keygen.c:388 +#, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (firma solo)\n" # , c-format -#: g10/keygen.c:388 +#: g10/keygen.c:389 +#, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal in un pacchetto v3\n" -#: g10/keygen.c:392 +#: g10/keygen.c:393 +msgid "keygen.algo" +msgstr "" + +#: g10/keygen.c:393 msgid "Your selection? " msgstr "Cosa scegli? " -#: g10/keygen.c:418 +#: g10/keygen.c:419 msgid "Invalid selection.\n" msgstr "Scelta non valida.\n" # , c-format -#: g10/keygen.c:430 +#: g10/keygen.c:431 +#, c-format msgid "" "About to generate a new %s keypair.\n" " minimum keysize is 768 bits\n" @@ -588,49 +711,72 @@ msgid "" " highest suggested keysize is 2048 bits\n" msgstr "" "Sto per generare una nuova coppia di chiavi %s.\n" -" la dimensione minima \350 768 bit\n" -" la dimensione predefinita \350 1024 bit\n" -" la dimensione massima suggerita \350 2048 bit\n" +" la dimensione minima è 768 bit\n" +" la dimensione predefinita è 1024 bit\n" +" la dimensione massima consigliata è 2048 bit\n" -#: g10/keygen.c:436 +#: g10/keygen.c:437 +msgid "keygen.size" +msgstr "" + +#: g10/keygen.c:438 msgid "What keysize do you want? (1024) " msgstr "Di che dimensioni vuoi la chiave? (1024) " -#: g10/keygen.c:441 +#: g10/keygen.c:443 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permette solo chiavi di dimensioni da 512 a 1024\n" -#: g10/keygen.c:443 -msgid "keysize too small; 768 is smallest value allowed.\n" -msgstr "la chiave \350 troppo corta; 768 \350 il minimo valore permesso.\n" - #: g10/keygen.c:445 -msgid "Keysizes larger than 2048 are not suggested, because computations take REALLY long!\n" -msgstr "Chiavi pi\371 lunghe di 2048 non sono consigliate, perch\350 i calcoli sono VERAMENTE lunghi!\n" +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "la chiave è troppo corta; 768 è il minimo valore permesso.\n" #: g10/keygen.c:447 -msgid "Are you sure, that you want this keysize? " +msgid "" +"Keysizes larger than 2048 are not suggested because\n" +"computations take REALLY long!\n" +msgstr "" +"Chiavi più lunghe di 2048 non sono consigliate perchè i calcoli sono \n" +"VERAMENTE lunghi!\n" + +#: g10/keygen.c:449 +msgid "keygen.size.huge.okay" +msgstr "" + +#: g10/keygen.c:450 +#, fuzzy +msgid "Are you sure that you want this keysize? " msgstr "Sei sicuro che vuoi una chiave di queste dimensioni? " #: g10/keygen.c:451 -msgid "Okay, but keep in mind that your monitor and keyboard radiation is also very vulnerable to attacks!\n" -msgstr "Va bene, ma ricordati che anche le radiazioni emesse dal tuo monitor e dalla tua tastiera sono molto vulnerabili ad attacchi!\n" +msgid "" +"Okay, but keep in mind that your monitor and keyboard radiation is also very " +"vulnerable to attacks!\n" +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:458 +msgid "keygen.size.large.okay" +msgstr "" #: g10/keygen.c:459 msgid "Do you really need such a large keysize? " -msgstr "Ti serve davvero una chiave cos\354 lunga? " +msgstr "Ti serve davvero una chiave così lunga? " # , c-format -#: g10/keygen.c:470 +#: g10/keygen.c:465 +#, c-format msgid "Requested keysize is %u bits\n" msgstr "Le dimensioni della chiave richieste sono %u bit\n" # , c-format -#: g10/keygen.c:473 g10/keygen.c:477 +#: g10/keygen.c:468 g10/keygen.c:472 +#, c-format msgid "rounded up to %u bits\n" msgstr "arrotondate a %u bit\n" -#: g10/keygen.c:489 +#: g10/keygen.c:484 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" @@ -639,82 +785,106 @@ msgid "" " <n>m = key expires in n months\n" " <n>y = key expires in n years\n" msgstr "" -"Per favore specifica per quanto la chiave sar\340 valida.\n" -" 0 = la chiave non scadr\340\n" -" <n>w = la chiave scadr\340 dopo n giorni\n" -" <n>m = la chiave scadr\340 dopo n mesi\n" -" <n>y = la chiave scadr\340 dopo n anni\n" +"Per favore specifica per quanto la chiave sarà valida.\n" +" 0 = la chiave non scadrà\n" +" <n>w = la chiave scadrà dopo n giorni\n" +" <n>m = la chiave scadrà dopo n mesi\n" +" <n>y = la chiave scadrà dopo n anni\n" + +#: g10/keygen.c:499 +msgid "keygen.valid" +msgstr "" -#: g10/keygen.c:504 +#: g10/keygen.c:499 msgid "Key is valid for? (0) " msgstr "Chiave valida per? (0) " -#: g10/keygen.c:515 +#: g10/keygen.c:510 msgid "invalid value\n" msgstr "valore non valido\n" -#: g10/keygen.c:520 +#: g10/keygen.c:515 msgid "Key does not expire at all\n" msgstr "La chiave non scade\n" # , c-format #. print the date when the key expires -#: g10/keygen.c:523 +#: g10/keygen.c:518 +#, c-format msgid "Key expires at %s\n" -msgstr "La chiave scadr\340 il %s\n" +msgstr "La chiave scadrà il %s\n" + +#: g10/keygen.c:523 +msgid "keygen.valid.okay" +msgstr "" -#: g10/keygen.c:528 +#: g10/keygen.c:524 msgid "Is this correct (y/n)? " -msgstr "\310 giusto (y/n)? " +msgstr "È giusto (s/n)? " -#: g10/keygen.c:557 +#: g10/keygen.c:552 msgid "" "\n" -"You need a User-ID to identify your key; the software constructs the user id\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) <heinrichh@duesseldorf.de>\"\n" "\n" msgstr "" "\n" -"Ti serve un User ID per identificare la tua chiave; il software costruisce l'user id a partire da Nome e Cognome, Commento e Indirizzo di Email indicati in questa forma:\n" +"Ti serve un User ID per identificare la tua chiave; il software costruisce " +"l'user id a partire da Nome e Cognome, Commento e Indirizzo di Email " +"indicati in questa forma:\n" " \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n" "\n" -#: g10/keygen.c:568 +#: g10/keygen.c:563 +msgid "keygen.name" +msgstr "" + +#: g10/keygen.c:563 msgid "Real name: " msgstr "Nome e Cognome: " -#: g10/keygen.c:572 +#: g10/keygen.c:567 msgid "Invalid character in name\n" msgstr "Carattere non valido nel nome\n" -#: g10/keygen.c:574 +#: g10/keygen.c:569 msgid "Name may not start with a digit\n" -msgstr "Il nome non pu\362 iniziare con una cifra\n" +msgstr "Il nome non può iniziare con una cifra\n" -#: g10/keygen.c:576 +#: g10/keygen.c:571 msgid "Name must be at least 5 characters long\n" msgstr "Il nome deve essere lungo almeno 5 caratteri\n" -#: g10/keygen.c:584 +#: g10/keygen.c:579 +msgid "keygen.email" +msgstr "" + +#: g10/keygen.c:579 msgid "Email address: " msgstr "Indirizzo di Email: " -#: g10/keygen.c:596 +#: g10/keygen.c:591 msgid "Not a valid email address\n" -msgstr "L'indirizzo di email non \350 valido\n" +msgstr "L'indirizzo di email non è valido\n" + +#: g10/keygen.c:599 +msgid "keygen.comment" +msgstr "" -#: g10/keygen.c:604 +#: g10/keygen.c:599 msgid "Comment: " msgstr "Commento: " -#. no comment is okay -#: g10/keygen.c:610 +#: g10/keygen.c:605 msgid "Invalid character in comment\n" msgstr "Carattere non valido nel commento\n" # , c-format -#: g10/keygen.c:630 +#: g10/keygen.c:625 +#, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" @@ -724,11 +894,20 @@ msgstr "" " \"%s\"\n" "\n" -#: g10/keygen.c:633 -msgid "Edit (N)ame, (C)omment, (E)mail or (O)kay? " -msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay? " +#: g10/keygen.c:628 +msgid "NnCcEeOoQq" +msgstr "" + +#: g10/keygen.c:635 +msgid "keygen.userid.cmd" +msgstr "" + +#: g10/keygen.c:636 +#, fuzzy +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:672 +#: g10/keygen.c:683 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" @@ -736,71 +915,905 @@ msgstr "" "Ti serve una passphrase per proteggere la tua chiave segreta.\n" "\n" -#: g10/keygen.c:680 +#: g10/keyedit.c:495 g10/keygen.c:691 msgid "passphrase not correctly repeated; try again.\n" msgstr "passphrase non ripetuta correttamente; riprova.\n" -#: g10/keygen.c:686 +#: g10/keygen.c:697 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 \"--change-passphrase\"\n" +"using this program with the option \"--edit-key\".\n" "\n" msgstr "" -"Non hai specificato una passphrase - questa \350 probabilmente una *cattiva*\n" -"idea! Lo far\362 io comunque. Puoi cambiarla in ogni momento, usando questo\n" -"programma con l'opzione \"--change-passphrase\"\n" +"Non hai specificato una passphrase - questa è probabilmente una *cattiva*\n" +"idea! Lo farò io comunque. Puoi cambiarla in ogni momento, usando questo\n" +"programma con l'opzione \"--edit-key\".\n" "\n" -#: g10/keygen.c:707 +#: g10/keygen.c:718 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (work in another window, move the mouse, utilize the\n" "network and the disks) during the prime generation; this gives the random\n" "number generator a better chance to gain enough entropy.\n" msgstr "" -"Dobbiamo generare un mucchio di byte casuali. \310 una buona idea eseguire\n" -"qualche altra azione (lavorare in un'altra finestra, muovere il mouse, usare\n" -"la rete e i dischi) durante la generazione dei numeri primi; questo d\340 al\n" -"generatore di numeri casuali la possibilit\340 di raccogliere abbastanza\n" +"Dobbiamo generare un mucchio di byte casuali. È una buona idea eseguire\n" +"qualche altra azione (lavorare in un'altra finestra, muovere il mouse, " +"usare\n" +"la rete e i dischi) durante la generazione dei numeri primi; questo dà al\n" +"generatore di numeri casuali la possibilità di raccogliere abbastanza\n" "entropia.\n" -#: g10/keygen.c:753 g10/keygen.c:901 +#: g10/keygen.c:785 msgid "Key generation can only be used in interactive mode\n" -msgstr "Una chiave pu\362 essere generata solo in modo interattivo\n" +msgstr "Una chiave può essere generata solo in modo interattivo\n" -#: g10/keygen.c:761 +#: g10/keygen.c:793 msgid "DSA keypair will have 1024 bits.\n" -msgstr "La coppia DSA avr\340 1024 bit.\n" +msgstr "La coppia DSA avrà 1024 bit.\n" + +#: g10/keygen.c:799 +msgid "Key generation cancelled.\n" +msgstr "Generazione della chiave annullata.\n" # , c-format -#: g10/keygen.c:773 +#: g10/keygen.c:809 +#, c-format msgid "writing public certificate to '%s'\n" msgstr "scrittura del certificato pubblico in '%s'\n" # , c-format -#: g10/keygen.c:774 +#: g10/keygen.c:810 +#, c-format msgid "writing secret certificate to '%s'\n" msgstr "scrittura del certificato privato in '%s'\n" -#: g10/keygen.c:852 +#: g10/keygen.c:887 msgid "public and secret key created and signed.\n" msgstr "chiavi pubbliche e segrete create e firmate.\n" -#: g10/keygen.c:854 +#: g10/keygen.c:889 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--add-key\" to generate a secondary key for this purpose.\n" msgstr "" -"Nota che questa chiave non pu\362 essere usata per la crittografia. Forse\n" +"Nota che questa chiave non può essere usata per la crittografia. Forse\n" "vorrai usare il comando \"--add-key\" per generare una chiave secondaria\n" "per questo scopo.\n" # , c-format -#: g10/keygen.c:868 g10/keygen.c:1020 +#: g10/keygen.c:903 g10/keygen.c:987 +#, c-format msgid "Key generation failed: %s\n" msgstr "Generazione della chiave fallita: %s\n" -#: g10/keygen.c:1015 -msgid "public and secret subkey created.\n" -msgstr "sottochiavi pubbliche e segrete create.\n" +#: g10/keygen.c:964 +msgid "keygen.sub.okay" +msgstr "" + +#: g10/keygen.c:965 +msgid "Really create? " +msgstr "Crea davvero? " + +# , c-format +#: g10/encode.c:86 +#, c-format +msgid "%s: can't open: %s\n" +msgstr "%s: impossibile aprire: %s\n" + +#: g10/encode.c:105 +#, c-format +msgid "error creating passphrase: %s\n" +msgstr "errore nella creazione della passhprase: %s\n" + +#: g10/encode.c:141 g10/encode.c:245 +#, c-format +msgid "%s: warning: empty file\n" +msgstr "%s: attenzione: file vuoto\n" + +# , c-format +#: g10/encode.c:209 +#, c-format +msgid "reading from '%s'\n" +msgstr "lettura da '%s'\n" + +#: g10/encode.c:376 +#, c-format +msgid "%s encrypted for: %s\n" +msgstr "%s crittografato per: %s\n" + +# , c-format +#: g10/import.c:105 g10/trustdb.c:1342 +#, c-format +msgid "can't open file: %s\n" +msgstr "impossibile aprire il file: %s\n" + +#: g10/import.c:121 +#, c-format +msgid "skipping block of type %d\n" +msgstr "salto un blocco di tipo %d\n" + +#: g10/import.c:131 g10/trustdb.c:1420 +#, c-format +msgid "read error: %s\n" +msgstr "errore di lettura: %s\n" + +#: g10/import.c:270 g10/import.c:436 +#, c-format +msgid "key %08lX: no user id\n" +msgstr "chiave %08lX: nessun user id\n" + +#: g10/import.c:280 +#, c-format +msgid "key %08lX: no valid user ids\n" +msgstr "chiave %08lX: nessun user id valido\n" + +#: g10/import.c:289 g10/import.c:503 +#, c-format +msgid "key %08lX: public key not found: %s\n" +msgstr "chiave %08lX: chiave pubblica non trovata: %s\n" + +#: g10/import.c:295 +msgid "no default public keyring\n" +msgstr "nessun portachiavi pubblico predefinito\n" + +# , c-format +#: g10/import.c:299 +#, c-format +msgid "writing to '%s'\n" +msgstr "scrittura in '%s'\n" + +# , c-format +#: g10/import.c:303 g10/import.c:356 g10/import.c:557 +#, c-format +msgid "can't lock public keyring: %s\n" +msgstr "impossibile bloccare il portachiavi pubblico: %s\n" + +# , c-format +#: g10/import.c:306 +#, c-format +msgid "can't write to keyring: %s\n" +msgstr "impossibile scrivere sul portachiavi pubblico: %s\n" + +#. we are ready +#: g10/import.c:309 +#, c-format +msgid "key %08lX: public key imported\n" +msgstr "chiave %08lX: chiave pubblica importata\n" + +#: g10/import.c:317 +#, c-format +msgid "key %08lX: doesn't match our copy\n" +msgstr "chiave %08lX: non corrisponde alla nostra copia\n" + +#: g10/import.c:330 g10/import.c:512 +#, 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:337 g10/import.c:519 +#, 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:353 g10/import.c:451 g10/import.c:554 +msgid "writing keyblock\n" +msgstr "scrittura del keyblock\n" + +# , c-format +#: g10/import.c:359 g10/import.c:560 +#, c-format +msgid "can't write keyblock: %s\n" +msgstr "impossibile aprire il keyblock: %s\n" + +#: g10/import.c:363 +#, c-format +msgid "key %08lX: 1 new user-id\n" +msgstr "chiave %08lX: un nuovo user id\n" + +#: g10/import.c:366 +#, c-format +msgid "key %08lX: %d new user-ids\n" +msgstr "chiave %08lX: %d nuovi user id\n" + +#: g10/import.c:369 +#, c-format +msgid "key %08lX: 1 new signature\n" +msgstr "chiave %08lX: una nuova firma\n" + +#: g10/import.c:372 +#, c-format +msgid "key %08lX: %d new signatures\n" +msgstr "chiave %08lX: %d nuove firme\n" + +#: g10/import.c:375 +#, c-format +msgid "key %08lX: 1 new subkey\n" +msgstr "chiave %08lX: una nuova subchiave\n" + +#: g10/import.c:378 +#, c-format +msgid "key %08lX: %d new subkeys\n" +msgstr "chiave %08lX: %d nuove subchiavi\n" + +#: g10/import.c:382 +#, c-format +msgid "key %08lX: not changed\n" +msgstr "chiave %08lX: non cambiata\n" + +#: g10/import.c:454 +#, c-format +msgid "can't lock secret keyring: %s\n" +msgstr "impossibile bloccare il portachiavi segreto: %s\n" + +#: g10/import.c:457 +msgid "can't write keyring\n" +msgstr "impossibile scrivere il portachiavi\n" + +#. we are ready +#: g10/import.c:460 +#, 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:463 +#, c-format +msgid "key %08lX: already in secret keyring\n" +msgstr "chiave %08lX: già nel portachiavi segreto\n" + +#: g10/import.c:467 +#, c-format +msgid "key %08lX: secret key not found: %s\n" +msgstr "chiave %08lX: chiave segreta non trovata: %s\n" + +#: g10/import.c:497 +#, 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:530 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - rejected\n" +msgstr "chiave %08lX: certificato di revoca non valido: %s - rifiutato\n" + +#. we are ready +#: g10/import.c:563 +#, c-format +msgid "key %08lX: revocation certificate imported\n" +msgstr "chiave %08lX: certificato di revoca importato\n" + +#: g10/import.c:593 +#, c-format +msgid "key %08lX: no user-id for signature\n" +msgstr "chiave %08lX: nessun user id per la firma\n" + +#: g10/import.c:600 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n" + +#: g10/import.c:601 +#, c-format +msgid "key %08lX: invalid self-signature\n" +msgstr "chiave %08lX: autofirma non valida\n" + +#: g10/import.c:630 +#, c-format +msgid "key %08lX: skipped userid '" +msgstr "chiave %08lX: saltato l'user id '" + +#: g10/import.c:653 +#, 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:660 +#, 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:722 +#, c-format +msgid "key %08lX: revocation certificate added\n" +msgstr "chiave %08lX: certificato di revoca aggiunto\n" + +#: g10/import.c:785 g10/import.c:821 +#, c-format +msgid "key %08lX: our copy has no self-signature\n" +msgstr "chiave %08lX: la nostra copia non ha autofirma\n" + +#: g10/keyedit.c:80 g10/keyedit.c:336 +#, c-format +msgid "%s: user not found\n" +msgstr "%s: utente non trovato\n" + +#: g10/keyedit.c:160 +msgid "[self-signature]" +msgstr "[autofirma]" + +#: g10/keyedit.c:178 +msgid "1 bad signature\n" +msgstr "una firma non corretta\n" + +#: g10/keyedit.c:180 +#, c-format +msgid "%d bad signatures\n" +msgstr "%d firme non corrette\n" + +#: g10/keyedit.c:182 +msgid "1 signature not checked due to a missing key\n" +msgstr "1 firma non controllata per mancanza della chiave\n" + +#: g10/keyedit.c:184 +#, 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:186 +msgid "1 signature not checked due to an error\n" +msgstr "1 firma non controllata a causa di un errore\n" + +#: g10/keyedit.c:188 +#, c-format +msgid "%d signatures not checked due to errors\n" +msgstr "%d firme non controllate a causa di errori\n" + +#: g10/keyedit.c:190 +msgid "1 user id without valid self-signature detected\n" +msgstr "Trovato 1 user id senza autofirma valida\n" + +#: g10/keyedit.c:192 +#, c-format +msgid "%d user ids without valid self-signatures detected\n" +msgstr "Trovati %d user id senza autofirme valide\n" + +#: g10/keyedit.c:246 +#, c-format +msgid "Already signed by key %08lX\n" +msgstr "Già firmato dalla chiave %08lX\n" + +#: g10/keyedit.c:254 +#, c-format +msgid "Nothing to sign with key %08lX\n" +msgstr "Niente da firmare con la chiave %08lX\n" + +#: g10/keyedit.c:263 +msgid "" +"Are you really sure that you want to sign this key\n" +"with your key: \"" +msgstr "" +"Sei davvero sicuro di volere firmare questa chiave\n" +"con la tua chiave: \"" + +#: g10/keyedit.c:269 +msgid "sign_uid.okay" +msgstr "" + +#: g10/keyedit.c:269 +msgid "Really sign? " +msgstr "Firmo davvero? " + +# , c-format +#: g10/keyedit.c:295 +#, c-format +msgid "signing failed: %s\n" +msgstr "firma fallita: %s\n" + +#: g10/keyedit.c:365 +msgid "there is a secret key for this public key!\n" +msgstr "c'è una chiave segreta per questa chiave pubblica!\n" + +#: g10/keyedit.c:367 +msgid "use option \"--delete-secret-key\" to delete it first.\n" +msgstr "prima usa l'opzione \"--delete-secret-key\" per cancellarla.\n" + +#: g10/keyedit.c:379 g10/keyedit.c:599 +msgid "can't do that in batchmode\n" +msgstr "impossibile fare questo in batch mode\n" + +#: g10/keyedit.c:383 +msgid "can't do that in batchmode without \"--yes\"\n" +msgstr "impossibile fare questo in batch mode senza \"--yes\"\n" + +#: g10/keyedit.c:403 g10/keyedit.c:414 +msgid "delete_key.secret.okay" +msgstr "" + +#: g10/keyedit.c:404 +msgid "delete_key.okay" +msgstr "" + +#: g10/keyedit.c:405 +msgid "Delete this key from the keyring? " +msgstr "Cancello questa chiave dal portachiavi? " + +#: g10/keyedit.c:415 +msgid "This is a secret key! - really delete? " +msgstr "Questa è una chiave segreta! - la cancello davvero? " + +#: g10/keyedit.c:462 +msgid "This key is not protected.\n" +msgstr "Questa chiave non è protetta.\n" + +#: g10/keyedit.c:465 +msgid "Key is protected.\n" +msgstr "La chiave è protetta.\n" + +# , c-format +#: g10/keyedit.c:482 +#, c-format +msgid "Can't edit this key: %s\n" +msgstr "Impossibile modificare questa chiave: %s\n" + +#: g10/keyedit.c:487 +msgid "" +"Enter the new passphrase for this secret key.\n" +"\n" +msgstr "Inserisci la nuova passphrase per questa chiave segreta.\n" +"\n" + +#: g10/keyedit.c:499 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"\n" +msgstr "" +"Non vuoi una passphrase - questa è probabilmente una *cattiva* idea!\n" +"\n" + +#: g10/keyedit.c:501 +msgid "change_passwd.empty.okay" +msgstr "" + +#: g10/keyedit.c:502 +msgid "Do you really want to do this? " +msgstr "Vuoi veramente farlo?" + +#: g10/keyedit.c:557 +msgid "quit" +msgstr "" + +#: g10/keyedit.c:557 +msgid "quit this menu" +msgstr "abbandona questo menù" + +#: g10/keyedit.c:558 +msgid "q" +msgstr "" + +#: g10/keyedit.c:559 +msgid "save" +msgstr "" + +#: g10/keyedit.c:559 +msgid "save and quit" +msgstr "salva ed esci" + +#: g10/keyedit.c:560 +msgid "help" +msgstr "" + +#: g10/keyedit.c:560 +msgid "show this help" +msgstr "mostra questo aiuto" + +#: g10/keyedit.c:562 +msgid "fpr" +msgstr "" + +#: g10/keyedit.c:562 +msgid "show fingerprint" +msgstr "mostra le impronte digitali" + +#: g10/keyedit.c:563 +msgid "list" +msgstr "" + +#: g10/keyedit.c:563 +msgid "list key and user ids" +msgstr "elenca le chiavi e gli user id" + +#: g10/keyedit.c:564 +msgid "l" +msgstr "" + +#: g10/keyedit.c:565 +msgid "uid" +msgstr "" + +#: g10/keyedit.c:565 +msgid "select user id N" +msgstr "scegli l'user id N" + +#: g10/keyedit.c:566 +msgid "key" +msgstr "" + +#: g10/keyedit.c:566 +msgid "select secondary key N" +msgstr "scegli la chiave secondaria N" + +#: g10/keyedit.c:567 +msgid "check" +msgstr "" + +#: g10/keyedit.c:567 +msgid "list signatures" +msgstr "elenca le firme" + +#: g10/keyedit.c:568 +msgid "c" +msgstr "" + +#: g10/keyedit.c:569 +msgid "sign" +msgstr "" + +#: g10/keyedit.c:569 +msgid "sign the key" +msgstr "firma la chiave" + +#: g10/keyedit.c:570 +msgid "s" +msgstr "" + +#: g10/keyedit.c:571 +msgid "debug" +msgstr "" + +#: g10/keyedit.c:572 +msgid "adduid" +msgstr "" + +#: g10/keyedit.c:572 +msgid "add a user id" +msgstr "aggiungi un user id" + +#: g10/keyedit.c:573 +msgid "deluid" +msgstr "" + +#: g10/keyedit.c:573 +msgid "delete user id" +msgstr "cancella un user id" + +#: g10/keyedit.c:574 +msgid "addkey" +msgstr "" + +#: g10/keyedit.c:574 +msgid "add a secondary key" +msgstr "aggiungi una chiave secondaria" + +#: g10/keyedit.c:575 +msgid "delkey" +msgstr "" + +#: g10/keyedit.c:575 +msgid "delete a secondary key" +msgstr "cancella una chiave secondaria" + +#: g10/keyedit.c:576 +msgid "toggle" +msgstr "" + +#: g10/keyedit.c:576 +msgid "toggle between secret and public key listing" +msgstr "cambia tra visualizzare la chiave segreta e la chiave pubblica" + +#: g10/keyedit.c:578 +msgid "t" +msgstr "" + +#: g10/keyedit.c:579 +msgid "pref" +msgstr "" + +#: g10/keyedit.c:579 +msgid "list preferences" +msgstr "elenca le impostazioni" + +#: g10/keyedit.c:580 +msgid "passwd" +msgstr "" + +#: g10/keyedit.c:580 +msgid "change the passphrase" +msgstr "cambia la passphrase" + +#: g10/keyedit.c:581 +msgid "trust" +msgstr "" + +#: g10/keyedit.c:581 +msgid "change the ownertrust" +msgstr "" + +#. check that they match +#. FIXME: check that they both match +#: g10/keyedit.c:621 +msgid "Secret key is available.\n" +msgstr "È disponibile una chiave segreta.\n" + +#: g10/keyedit.c:637 +msgid "keyedit.cmd" +msgstr "" + +#: g10/keyedit.c:637 +msgid "Command> " +msgstr "Comando> " + +#: g10/keyedit.c:660 +msgid "Need the secret key to to this.\n" +msgstr "Per fare questo serve la chiave segreta.\n" + +#: g10/keyedit.c:679 +msgid "keyedit.save.okay" +msgstr "" + +#: g10/keyedit.c:680 +msgid "Save changes? " +msgstr "Salvo i cambiamenti? " + +#: g10/keyedit.c:682 +msgid "keyedit.cancel.okay" +msgstr "" + +#: g10/keyedit.c:683 +msgid "Quit without saving? " +msgstr "Esco senza salvare? " + +# , c-format +#: g10/keyedit.c:693 +#, c-format +msgid "update failed: %s\n" +msgstr "aggiornamento fallito: %s\n" + +# , c-format +#: g10/keyedit.c:700 +#, c-format +msgid "update secret failed: %s\n" +msgstr "aggiornamento della chiave segreta fallito: %s\n" + +#: g10/keyedit.c:708 +msgid "Key not changed so no update needed.\n" +msgstr "La chiave non è cambiata quindi non sono necessari aggiornamenti.\n" + +#: g10/keyedit.c:738 +msgid "keyedit.sign_all.okay" +msgstr "" + +#: g10/keyedit.c:739 +msgid "Really sign all user ids? " +msgstr "Firmo davvero tutti gli user id? " + +#: g10/keyedit.c:740 +msgid "Hint: Select the user ids to sign\n" +msgstr "Suggerimento: seleziona gli user id da firmare\n" + +#: g10/keyedit.c:768 +msgid "You must select at least one user id.\n" +msgstr "Devi selezionare almeno un user id.\n" + +#: g10/keyedit.c:770 +msgid "You can't delete the last user id!\n" +msgstr "Non puoi cancellare l'ultimo user id!\n" + +#: g10/keyedit.c:772 +msgid "keyedit.remove.uid.okay" +msgstr "" + +#: g10/keyedit.c:773 +msgid "Really remove all selected user ids? " +msgstr "Tolgo davvero tutti gli user id selezionati? " + +#: g10/keyedit.c:774 +msgid "Really remove this user id? " +msgstr "Tolgo davvero questo user id? " + +#: g10/keyedit.c:797 +msgid "You must select at least one key.\n" +msgstr "Devi selezionare almeno una chiave.\n" + +#: g10/keyedit.c:799 +msgid "keyedit.remove.subkey.okay" +msgstr "" + +#: g10/keyedit.c:801 +msgid "Do you really want to delete the selected keys? " +msgstr "Vuoi davvero cancellare le chiavi selezionate? " + +#: g10/keyedit.c:802 +msgid "Do you really want to delete this key? " +msgstr "Vuoi davvero cancellare questa chiave? " + +#: g10/keyedit.c:839 +msgid "Invalid command (try \"help\")\n" +msgstr "Comando non valido (prova \"help\")\n" + +#: g10/keyedit.c:1219 +#, c-format +msgid "No user id with index %d\n" +msgstr "Nessun user id con l'indice %d\n" + +#: g10/keyedit.c:1264 +#, c-format +msgid "No secondary key with index %d\n" +msgstr "Nessuna chiave secondaria con l'indice %d\n" + +# , c-format +#: g10/mainproc.c:198 +#, c-format +msgid "public key decryption failed: %s\n" +msgstr "Decifratura della chiave pubblica fallita: %s\n" + +# , c-format +#: g10/mainproc.c:228 +#, c-format +msgid "decryption failed: %s\n" +msgstr "decifratura fallita: %s\n" + +#: g10/mainproc.c:843 +#, c-format +msgid "Signature made %.*s using %s key ID %08lX\n" +msgstr "Firma fatta %.*s usando %s key ID %08lX\n" + +#: g10/mainproc.c:849 +msgid "BAD signature from \"" +msgstr "Firma NON corretta da \"" + +#: g10/mainproc.c:850 +msgid "Good signature from \"" +msgstr "Buona firma da \"" + +#: g10/mainproc.c:861 +#, c-format +msgid "Can't check signature: %s\n" +msgstr "Impossibile controllare la firma: %s\n" + +#: g10/passphrase.c:117 +#, fuzzy +msgid "" +"\n" +"You need a passphrase to unlock the secret key for\n" +"user: \"" +msgstr "" +"Ti serve una passphrase per proteggere la tua chiave segreta.\n" +"\n" + +#: g10/passphrase.c:126 +#, c-format +# "(chiave %s di %u-bit, ID %08lX, creata il %s)\n" +msgid "(%u-bit %s key, ID %08lX, created %s)\n" +msgstr "(%u-bit, chiave %s, ID %08lX, creata il %s)\n" + +#: g10/passphrase.c:167 +msgid "passphrase.enter" +msgstr "" + +#: g10/passphrase.c:167 +msgid "Enter pass phrase: " +msgstr "Inserisci la passphrase: " + +#: g10/passphrase.c:170 +msgid "passphrase.repeat" +msgstr "" + +#: g10/passphrase.c:171 +msgid "Repeat pass phrase: " +msgstr "Ripeti la passphrase: " + +#: g10/plaintext.c:210 +msgid "detached_signature.filename" +msgstr "" + +#: g10/plaintext.c:211 +msgid "Please enter name of data file: " +msgstr "Inserisci il nome del file di dati: " + +# , c-format +#: g10/plaintext.c:295 +#, c-format +msgid "can't open signed data '%s'\n" +msgstr "impossibile aprire i dati firmati '%s'\n" + +#: g10/seckey-cert.c:165 +msgid "Invalid passphrase; please try again ...\n" +msgstr "Passphrase non valida; riprova...\n" + +#: g10/sig-check.c:165 +msgid "public key created in future (time warp or clock problem)\n" +msgstr "chiave pubblica creata nel futuro (salto nel tempo o problema con\n" +"l'orologio)\n" + +#: g10/sig-check.c:171 +#, c-format +msgid "warning: signature key expired %s\n" +msgstr "attenzione: firma della chiave scaduta il %s\n" + +# , c-format +#: g10/trustdb.c:316 +#, c-format +msgid "error reading sigrec: %s\n" +msgstr "" + +#: g10/trustdb.c:321 +#, c-format +msgid "chained sigrec %lu has a wrong owner\n" +msgstr "" + +#: g10/trustdb.c:364 +#, c-format +msgid "key %08lX: secret key without public key\n" +msgstr "key %08lX: chiave segreta senza chiave pubblica\n" + +#: g10/trustdb.c:369 +#, c-format +msgid "key %08lX: secret and public key don't match\n" +msgstr "key %08lX: le chiavi segreta e pubblica non corrispondono\n" + +#: g10/trustdb.c:380 +#, c-format +msgid "key %08lX: can't put it into the trustdb\n" +msgstr "key %08lX: impossibile metterla nel trustdb\n" + +#: g10/trustdb.c:386 +#, c-format +msgid "key %08lX: query record failed\n" +msgstr "key %08lX: richiesta del record fallita\n" + +#: g10/trustdb.c:395 +#, c-format +msgid "key %08lX: already in ultikey_table\n" +msgstr "key %08lX: già in ultikey_table\n" + +# , c-format +#: g10/trustdb.c:402 +#, c-format +msgid "enum_secret_keys failed: %s\n" +msgstr "enum_secret_keys fallito: %s\n" + +#: g10/trustdb.c:1614 +#, c-format +msgid "key %08lX: insert trust record failed: %s\n" +msgstr "key %08lX: inserimento del record della fiducia fallito: %s\n" + +#: g10/trustdb.c:1618 +#, c-format +msgid "key %08lX.%lu: inserted into trustdb\n" +msgstr "key %08lX.%lu: inserita nel trustdb\n" + +#: g10/trustdb.c:1624 +#, c-format +msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +msgstr "key %08lX.%lu: creata nel futuro (salto nel tempo o problema\n" +"con l'orologio)\n" + +# , c-format +#: g10/trustdb.c:1632 +#, c-format +msgid "key %08lX.%lu: expired at %s\n" +msgstr "key %08lX.%lu: scaduta il %s\n" + +#: g10/trustdb.c:1641 +#, c-format +msgid "key %08lX.%lu: trust check failed: %s\n" +msgstr "key %08lX.%lu: controllo della fiducia fallito: %s\n" + +#: g10/status.c:207 +msgid "No help available" +msgstr "Nessun aiuto disponibile" + +#: g10/status.c:213 +#, c-format +msgid "No help available for '%s'" +msgstr "Nessun aiuto disponibile per '%s'" + +#: g10/pubkey-enc.c:138 +#, c-format +msgid "note: cipher algorithm %d not found in preferences\n" +msgstr "nota: algoritmo di cifratura %d non trovato nelle impostazioni\n" + diff --git a/util/ChangeLog b/util/ChangeLog index c249e8d67..9ef232582 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,7 @@ +Tue Aug 11 15:12:35 1998 Werner Koch (wk@(none)) + + * miscutil.c (answer_is_yes): i18ned + Sat Aug 8 18:35:00 1998 Werner Koch (wk@(none)) * ttyio.c (cleanup): New. diff --git a/util/errors.c b/util/errors.c index 6b72576b5..54671a297 100644 --- a/util/errors.c +++ b/util/errors.c @@ -91,7 +91,7 @@ g10_errstr( int err ) X(UNEXPECTED ,"Unexpected data") X(TIME_CONFLICT ,"Timestamp conflict") X(WR_PUBKEY_ALGO ,"Unusable pubkey algorithm") - + X(FILE_EXISTS ,"File exists") default: p = buf; sprintf(buf, "g10err=%d", err); break; } #undef X diff --git a/util/miscutil.c b/util/miscutil.c index e4c2cf1ae..041c6faa5 100644 --- a/util/miscutil.c +++ b/util/miscutil.c @@ -25,6 +25,7 @@ #include <ctype.h> #include "types.h" #include "util.h" +#include "i18n.h" u32 make_timestamp() @@ -79,14 +80,16 @@ print_string( FILE *fp, byte *p, size_t n, int delim ) putc(*p, fp); } + int answer_is_yes( const char *s ) { - if( !stricmp(s, "yes") ) - return 1; - if( *s == 'y' && !s[1] ) + char *long_yes = _("yes"); + char *short_yes = _("yY"); + + if( !stricmp(s, long_yes ) ) return 1; - if( *s == 'Y' && !s[1] ) + if( strchr( short_yes, *s ) && !s[1] ) return 1; return 0; } diff --git a/zlib/Makefile b/zlib/Makefile index 96197a80c..c01b193b8 100644 --- a/zlib/Makefile +++ b/zlib/Makefile @@ -92,7 +92,7 @@ POSUB = po RANLIB = ranlib USE_INCLUDED_LIBINTL = yes USE_NLS = yes -VERSION = 0.3.3 +VERSION = 0.3.4 ZLIBS = l = |