[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Cvs-cvs] ccvs/src ChangeLog gpg.c [signed-commits3]
From: |
Derek Robert Price |
Subject: |
[Cvs-cvs] ccvs/src ChangeLog gpg.c [signed-commits3] |
Date: |
Tue, 27 Dec 2005 20:43:36 +0000 |
CVSROOT: /cvsroot/cvs
Module name: ccvs
Branch: signed-commits3
Changes by: Derek Robert Price <address@hidden> 05/12/27 20:43:35
Modified files:
src : ChangeLog gpg.c
Log message:
* gpg.c (read_u32): New function.
(read_signature): Handle new style CTB packets.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/ChangeLog.diff?only_with_tag=signed-commits3&tr1=1.3328.2.1&tr2=1.3328.2.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/src/gpg.c.diff?only_with_tag=signed-commits3&tr1=1.1.6.1&tr2=1.1.6.2&r1=text&r2=text
Patches:
Index: ccvs/src/ChangeLog
diff -u ccvs/src/ChangeLog:1.3328.2.1 ccvs/src/ChangeLog:1.3328.2.2
--- ccvs/src/ChangeLog:1.3328.2.1 Wed Dec 21 13:25:09 2005
+++ ccvs/src/ChangeLog Tue Dec 27 20:43:35 2005
@@ -1,3 +1,8 @@
+2005-12-27 Derek Price <address@hidden>
+
+ * gpg.c (read_u32): New function.
+ (read_signature): Handle new style CTB packets.
+
2005-12-13 Derek Price <address@hidden>
* base.c (ibase_copy, base_merge): Remove signature files when using
Index: ccvs/src/gpg.c
diff -u ccvs/src/gpg.c:1.1.6.1 ccvs/src/gpg.c:1.1.6.2
--- ccvs/src/gpg.c:1.1.6.1 Wed Dec 21 13:25:10 2005
+++ ccvs/src/gpg.c Tue Dec 27 20:43:35 2005
@@ -128,6 +128,23 @@
+static int
+read_u32 (struct buffer *bpin, unsigned long *rn)
+{
+ size_t tmp;
+ int rc;
+
+ if ((rc = read_u16 (bpin, &tmp)))
+ return rc;
+ *rn = tmp << 16;
+ if ((rc = read_u16 (bpin, &tmp)))
+ return rc;
+ *rn |= tmp;
+ return 0;
+}
+
+
+
/* hdr must point to a buffer large enough to hold all header bytes */
static int
write_part (struct buffer *bpin, struct buffer *bpout, unsigned long pktlen,
@@ -217,34 +234,68 @@
return 1;
}
if ( (ctb & 0x40) )
- /* new CTB */
- pkttype = (ctb & 0x3f);
- else
- pkttype = (ctb>>2)&0xf;
+ {
+ /* new CTB */
+ pkttype = (ctb & 0x3f);
- if (pkttype != PKT_SIGNATURE)
- error (1, 0, "Inavlid OpenPGP packet type (%s)",
- pkttype_to_string (pkttype));
+ if ((rc = read_u8 (bpin, &c)))
+ return rc;
- lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
- if (!lenbytes )
- {
- pktlen = 0; /* don't know the value */
- partial = 2; /* the old GnuPG partial length encoding */
+ header[header_idx++] = c;
+
+ if ( c < 192 )
+ pktlen = c;
+ else if ( c < 224 )
+ {
+ pktlen = (c - 192) * 256;
+ if ((rc = read_u8 (bpin, &c)))
+ return rc;
+ header[header_idx++] = c;
+ pktlen += c + 192;
+ }
+ else if ( c == 255 )
+ {
+ if ((rc = read_u32 (bpin, &pktlen)))
+ return rc;
+ header[header_idx++] = pktlen >> 24;
+ header[header_idx++] = pktlen >> 16;
+ header[header_idx++] = pktlen >> 8;
+ header[header_idx++] = pktlen;
+ }
+ else
+ { /* partial body length */
+ pktlen = c;
+ partial = 1;
+ }
}
else
{
- for (; lenbytes; lenbytes--)
+ pkttype = (ctb>>2)&0xf;
+
+ lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
+ if (!lenbytes )
{
- pktlen <<= 8;
- if ((rc = read_u8 (bpin, &c)))
- return rc;
- header[header_idx++] = c;
-
- pktlen |= c;
+ pktlen = 0; /* don't know the value */
+ partial = 2; /* the old GnuPG partial length encoding */
+ }
+ else
+ {
+ for (; lenbytes; lenbytes--)
+ {
+ pktlen <<= 8;
+ if ((rc = read_u8 (bpin, &c)))
+ return rc;
+ header[header_idx++] = c;
+
+ pktlen |= c;
+ }
}
}
+ if (pkttype != PKT_SIGNATURE)
+ error (1, 0, "Inavlid OpenPGP packet type (%s)",
+ pkttype_to_string (pkttype));
+
return write_part (bpin, bpout, pktlen, pkttype, partial,
header, header_idx);
}
- [Cvs-cvs] ccvs/src ChangeLog gpg.c [signed-commits3],
Derek Robert Price <=