diff options
author | Werner Koch <[email protected]> | 1997-12-02 19:36:53 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 1997-12-02 19:36:53 +0000 |
commit | cccf1efa4bcb97e2951a25ebd6250950d73d5169 (patch) | |
tree | ddf7e191b2782961c1494f0ab1e0c9ece0f0b6ca /g10/parse-packet.c | |
parent | List and check sigs works (diff) | |
download | gnupg-cccf1efa4bcb97e2951a25ebd6250950d73d5169.tar.gz gnupg-cccf1efa4bcb97e2951a25ebd6250950d73d5169.zip |
Sicherung
Diffstat (limited to 'g10/parse-packet.c')
-rw-r--r-- | g10/parse-packet.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/g10/parse-packet.c b/g10/parse-packet.c index dd049406b..6aef1b4fe 100644 --- a/g10/parse-packet.c +++ b/g10/parse-packet.c @@ -42,6 +42,8 @@ static int parse_publickey( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); static int parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, PKT_signature *sig ); +static int parse_onepass_sig( IOBUF inp, int pkttype, unsigned long pktlen, + PKT_onepass_sig *ops ); static int parse_certificate( IOBUF inp, int pkttype, unsigned long pktlen, byte *hdr, int hdrlen, PACKET *packet ); static int parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen, @@ -159,6 +161,10 @@ parse_packet( IOBUF inp, PACKET *pkt ) pkt->pkt.signature = m_alloc_clear(sizeof *pkt->pkt.signature ); rc = parse_signature(inp, pkttype, pktlen, pkt->pkt.signature ); break; + case PKT_ONEPASS_SIG: + pkt->pkt.onepass_sig = m_alloc_clear(sizeof *pkt->pkt.onepass_sig ); + rc = parse_onepass_sig(inp, pkttype, pktlen, pkt->pkt.onepass_sig ); + break; case PKT_USER_ID: rc = parse_user_id(inp, pkttype, pktlen, pkt ); break; @@ -340,6 +346,42 @@ parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, } +static int +parse_onepass_sig( IOBUF inp, int pkttype, unsigned long pktlen, + PKT_onepass_sig *ops ) +{ + int version; + unsigned n; + + if( pktlen < 13 ) { + log_error("packet(%d) too short\n", pkttype); + goto leave; + } + version = iobuf_get_noeof(inp); pktlen--; + if( version != 3 ) { + log_error("onepass_sig with unknown version %d\n", version); + goto leave; + } + ops->sig_class = iobuf_get_noeof(inp); pktlen--; + ops->digest_algo = iobuf_get_noeof(inp); pktlen--; + ops->pubkey_algo = iobuf_get_noeof(inp); pktlen--; + ops->keyid[0] = read_32(inp); pktlen -= 4; + ops->keyid[1] = read_32(inp); pktlen -= 4; + ops->last = iobuf_get_noeof(inp); pktlen--; + if( list_mode ) + printf(":onepass_sig packet: keyid %08lX%08lX\n" + "\tversion %d, sigclass %02x, digest %d, pubkey %d, last=%d\n", + ops->keyid[0], ops->keyid[1], + version, ops->sig_class, + ops->digest_algo, ops->pubkey_algo, ops->last ); + + + leave: + skip_rest(inp, pktlen); + return 0; +} + + static int |