cvs-cvs
[Top][All Lists]
Advanced

[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);
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]