summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>1998-08-11 19:29:34 +0200
committerWerner Koch <wk@gnupg.org>1998-08-11 19:29:34 +0200
commit3e0e8f884f1ed37e120beeb57aa7cd79e3c145a0 (patch)
treedfff62df60f917addc9df4e83a1ed73e31041bab
parentrel 0.3.3 (diff)
downloadgnupg2-3e0e8f884f1ed37e120beeb57aa7cd79e3c145a0.tar.xz
gnupg2-3e0e8f884f1ed37e120beeb57aa7cd79e3c145a0.zip
bug fix releaseV0-3-4
-rw-r--r--NEWS8
-rw-r--r--THANKS1
-rw-r--r--TODO9
-rw-r--r--VERSION2
-rw-r--r--checks/ChangeLog4
-rwxr-xr-xchecks/genkey1024.test122
-rw-r--r--cipher/random.c2
-rw-r--r--g10/ChangeLog45
-rw-r--r--g10/OPTIONS8
-rw-r--r--g10/armor.c21
-rw-r--r--g10/build-packet.c3
-rw-r--r--g10/comment.c14
-rw-r--r--g10/compress.c8
-rw-r--r--g10/dearmor.c9
-rw-r--r--g10/encode.c59
-rw-r--r--g10/export.c5
-rw-r--r--g10/g10.c137
-rw-r--r--g10/getkey.c72
-rw-r--r--g10/import.c9
-rw-r--r--g10/keyedit.c32
-rw-r--r--g10/keygen.c9
-rw-r--r--g10/keyid.c2
-rw-r--r--g10/main.h3
-rw-r--r--g10/openfile.c21
-rw-r--r--g10/options.h2
-rw-r--r--g10/parse-packet.c7
-rw-r--r--g10/passphrase.c3
-rw-r--r--g10/pkclist.c15
-rw-r--r--g10/revoke.c4
-rw-r--r--g10/seckey-cert.c25
-rw-r--r--g10/sign.c32
-rw-r--r--g10/status.c18
-rw-r--r--g10/trustdb.c5
-rw-r--r--include/errors.h1
-rw-r--r--po/ChangeLog4
-rw-r--r--po/POTFILES.in3
-rw-r--r--po/de.po58
-rw-r--r--po/en.po2
-rw-r--r--po/it.po1533
-rw-r--r--util/ChangeLog4
-rw-r--r--util/errors.c2
-rw-r--r--util/miscutil.c11
-rw-r--r--zlib/Makefile2
43 files changed, 1822 insertions, 514 deletions
diff --git a/NEWS b/NEWS
index a3546be2f..b2e229f36 100644
--- a/NEWS
+++ b/NEWS
@@ -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
diff --git a/THANKS b/THANKS
index 7c04f6aee..8cbda750b 100644
--- a/THANKS
+++ b/THANKS
@@ -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
diff --git a/TODO b/TODO
index e254d228d..ac98f08cf 100644
--- a/TODO
+++ b/TODO
@@ -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
diff --git a/VERSION b/VERSION
index 1c09c74e2..42045acae 100644
--- a/VERSION
+++ b/VERSION
@@ -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;
diff --git a/g10/g10.c b/g10/g10.c
index 27cc86503..d230ad9b1 100644
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -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--
diff --git a/po/de.po b/po/de.po
index 85b207742..32fecfe22 100644
--- a/po/de.po
+++ b/po/de.po
@@ -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)? "
+
diff --git a/po/en.po b/po/en.po
index a7aaf457d..99654ca38 100644
--- a/po/en.po
+++ b/po/en.po
@@ -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
diff --git a/po/it.po b/po/it.po
index 64755f5b5..5d5e516b8 100644
--- a/po/it.po
+++ b/po/it.po
@@ -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 =