aboutsummaryrefslogtreecommitdiffstats
path: root/g10/parse-packet.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1997-12-02 19:36:53 +0000
committerWerner Koch <[email protected]>1997-12-02 19:36:53 +0000
commitcccf1efa4bcb97e2951a25ebd6250950d73d5169 (patch)
treeddf7e191b2782961c1494f0ab1e0c9ece0f0b6ca /g10/parse-packet.c
parentList and check sigs works (diff)
downloadgnupg-cccf1efa4bcb97e2951a25ebd6250950d73d5169.tar.gz
gnupg-cccf1efa4bcb97e2951a25ebd6250950d73d5169.zip
Sicherung
Diffstat (limited to 'g10/parse-packet.c')
-rw-r--r--g10/parse-packet.c42
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