1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-02-02 16:43:03 +01:00

Fixed a bugs; e.g. in --list-secret-keys

This commit is contained in:
Werner Koch 2001-03-27 09:23:14 +00:00
parent 3b866e74a8
commit e2c88461fc
9 changed files with 54 additions and 21 deletions

View File

@ -1,3 +1,18 @@
2001-03-27 Werner Koch <wk@gnupg.org>
* getkey.c (key_byname): Add new arg secmode and changed all
callers to request explicitly the mode. Deriving this information
from the other supplied parameters does not work if neither pk nor
sk are supplied.
2001-03-25 Werner Koch <wk@gnupg.org>
* packet.h (ctrlpkttype_t): New.
* mainproc.c (add_gpg_control,proc_plaintext,proc_tree): Use the
new enum values.
* pipemode.c (make_control): Ditto.
* armor.c (armor_filter): Ditto.
2001-03-24 Werner Koch <wk@gnupg.org>
* sign.c (do_sign): Verify the signature right after creation.

View File

@ -753,6 +753,9 @@ radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn,
}
else {
rc = 0;
/* FIXME: Here we should emit another control packet,
* so that we know in mainproc that we are processing
* a clearsign message */
#if 0
for(rc=0;!rc;) {
rc = 0 /*check_trailer( &fhdr, c )*/;
@ -866,7 +869,7 @@ armor_filter( void *opaque, int control,
buf[n++] = 0xff; /* new format, type 63, 1 length byte */
n++; /* see below */
memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen;
buf[n++] = 1; /* control type */
buf[n++] = CTRLPKT_CLEARSIGN_START;
buf[n++] = afx->not_dash_escaped? 0:1; /* sigclass */
if( hashes & 1 )
buf[n++] = DIGEST_ALGO_RMD160;

View File

@ -811,13 +811,14 @@ classify_user_id( const char *name, u32 *keyid, byte *fprint,
* first pubkey certificate which has the given name in a user_id.
* if pk/sk has the pubkey algo set, the function will only return
* a pubkey with that algo.
* The caller must provide storage for either the pk or the sk.
* If ret_kb is not NULL the funtion will return the keyblock there.
* The caller should provide storage for either the pk or the sk.
* If ret_kb is not NULL the function will return the keyblock there.
*/
static int
key_byname( GETKEY_CTX *retctx, STRLIST namelist,
PKT_public_key *pk, PKT_secret_key *sk, KBNODE *ret_kb )
PKT_public_key *pk, PKT_secret_key *sk, int secmode,
KBNODE *ret_kb )
{
int rc = 0;
int n;
@ -862,9 +863,11 @@ key_byname( GETKEY_CTX *retctx, STRLIST namelist,
if ( !ret_kb )
ret_kb = &help_kb;
if( sk ) {
if( secmode ) {
if (sk) {
ctx->req_algo = sk->req_algo;
ctx->req_usage = sk->req_usage;
}
rc = lookup( ctx, ret_kb, 1 );
if ( !rc && sk ) {
sk_from_block ( ctx, sk, *ret_kb );
@ -905,7 +908,7 @@ get_pubkey_byname( GETKEY_CTX *retctx, PKT_public_key *pk,
STRLIST namelist = NULL;
add_to_strlist( &namelist, name );
rc = key_byname( retctx, namelist, pk, NULL, ret_keyblock );
rc = key_byname( retctx, namelist, pk, NULL, 0, ret_keyblock );
free_strlist( namelist );
return rc;
}
@ -914,7 +917,7 @@ int
get_pubkey_bynames( GETKEY_CTX *retctx, PKT_public_key *pk,
STRLIST names, KBNODE *ret_keyblock )
{
return key_byname( retctx, names, pk, NULL, ret_keyblock );
return key_byname( retctx, names, pk, NULL, 0, ret_keyblock );
}
int
@ -1053,7 +1056,7 @@ get_seckey_byname2( GETKEY_CTX *retctx,
if( !name && opt.def_secret_key && *opt.def_secret_key ) {
add_to_strlist( &namelist, opt.def_secret_key );
rc = key_byname( retctx, namelist, NULL, sk, retblock );
rc = key_byname( retctx, namelist, NULL, sk, 1, retblock );
}
else if( !name ) { /* use the first one as default key */
struct getkey_ctx_s ctx;
@ -1073,7 +1076,7 @@ get_seckey_byname2( GETKEY_CTX *retctx,
}
else {
add_to_strlist( &namelist, name );
rc = key_byname( retctx, namelist, NULL, sk, retblock );
rc = key_byname( retctx, namelist, NULL, sk, 1, retblock );
}
free_strlist( namelist );
@ -1095,7 +1098,7 @@ int
get_seckey_bynames( GETKEY_CTX *retctx, PKT_secret_key *sk,
STRLIST names, KBNODE *ret_keyblock )
{
return key_byname( retctx, names, NULL, sk, ret_keyblock );
return key_byname( retctx, names, NULL, sk, 1, ret_keyblock );
}

View File

@ -696,7 +696,11 @@ reorder_keyblock (KBNODE keyblock)
static void
list_keyblock( KBNODE keyblock, int secret )
{
log_debug ("before reorder:\n");
dump_kbnode (keyblock);
reorder_keyblock (keyblock);
log_debug ("after reorder:\n");
dump_kbnode (keyblock);
if (opt.with_colons)
list_keyblock_colon (keyblock, secret );
else

View File

@ -136,12 +136,12 @@ add_onepass_sig( CTX c, PACKET *pkt )
static int
add_gpg_control( CTX c, PACKET *pkt )
{
if ( pkt->pkt.gpg_control->control == 1 ) {
if ( pkt->pkt.gpg_control->control == CTRLPKT_CLEARSIGN_START ) {
/* New clear text signature.
* Process the last one and reset everything */
release_list(c);
}
else if ( pkt->pkt.gpg_control->control == 2 ) {
else if ( pkt->pkt.gpg_control->control == CTRLPKT_PIPEMODE ) {
/* Pipemode control packet */
#warning the --pipemode does not yet work
/* FIXME: We have to do more sanity checks all over the place */
@ -485,13 +485,14 @@ proc_plaintext( CTX c, PACKET *pkt )
only_md5 = 0;
}
else if( n->pkt->pkttype == PKT_GPG_CONTROL
&& n->pkt->pkt.gpg_control->control == 1 ) {
&& n->pkt->pkt.gpg_control->control
== CTRLPKT_CLEARSIGN_START ) {
size_t datalen = n->pkt->pkt.gpg_control->datalen;
const byte *data = n->pkt->pkt.gpg_control->data;
/* check that we have at least the sigclass and one hash */
if ( datalen < 2 )
log_fatal("invalid control packet of type 1\n");
log_fatal("invalid control packet CTRLPKT_CLEARSIGN_START\n");
/* Note that we don't set the clearsig flag for not-dash-escaped
* documents */
clearsig = (*data == 0x01);
@ -1380,7 +1381,8 @@ proc_tree( CTX c, KBNODE node )
check_sig_and_print( c, n1 );
}
else if( node->pkt->pkttype == PKT_GPG_CONTROL
&& node->pkt->pkt.gpg_control->control == 1 ) {
&& node->pkt->pkt.gpg_control->control
== CTRLPKT_CLEARSIGN_START ) {
/* clear text signed message */
if( !c->have_data ) {
log_error("cleartext signature without data\n" );

View File

@ -257,7 +257,7 @@ get_session_marker( size_t *rlen )
static int initialized;
if ( !initialized ) {
volatile ulong aa, bb; /* we really want the unitialized value */
volatile ulong aa, bb; /* we really want the uninitialized value */
ulong a, b;
initialized = 1;

View File

@ -55,6 +55,13 @@ typedef enum {
typedef struct packet_struct PACKET;
/* PKT_GPG_CONTROL types */
enum {
CTRLPKT_CLEARSIGN_START = 1,
CTRLPKT_PIPEMODE = 2
} ctrlpkttype_t;
typedef struct {
int mode;
byte hash_algo;

View File

@ -1840,8 +1840,7 @@ parse_mdc( IOBUF inp, int pkttype, unsigned long pktlen,
* we first check that tehre is a unique tag in it.
* The format of such a control packet is:
* n byte session marker
* 1 byte control type: 1 = Clearsign hash info
* 2 = Pipemode control
* 1 byte control type CTRLPKT_xxxxx
* m byte control data
*/

View File

@ -72,7 +72,7 @@ make_control ( byte *buf, int code, int operation )
buf[n++] = 0xff; /* new format, type 63, 1 length byte */
n++; /* length will fixed below */
memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen;
buf[n++] = 2; /* control type: pipemode marker */
buf[n++] = CTRLPKT_PIPEMODE;
buf[n++] = code;
buf[n++] = operation;
buf[1] = n-2;