Made atatchment encryption faster.
authorWerner Koch <wk@gnupg.org>
Wed, 29 Oct 2008 13:01:28 +0000 (13:01 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 29 Oct 2008 13:01:28 +0000 (13:01 +0000)
NEWS
po/de.po
po/sv.po
src/ChangeLog
src/engine.c
src/mimemaker.c

diff --git a/NEWS b/NEWS
index f2dc289..0d0b9cf 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ Noteworthy changes for version 0.10.16
 
  * Fixed PGP cleartext signature verification.
 
+ * Encryption of attachments is now much faster.
+
 
 Noteworthy changes for version 0.10.15 (2008-08-06)
 ===================================================
index 1be885b..67c4586 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GpgOL 0.10.0\n"
 "Report-Msgid-Bugs-To: bug-gpgol@g10code.com\n"
-"POT-Creation-Date: 2008-10-27 18:31+0100\n"
+"POT-Creation-Date: 2008-10-27 18:36+0100\n"
 "PO-Revision-Date: 2008-10-27 18:32+0100\n"
 "Last-Translator: Werner Koch <wk@gnupg.org>\n"
 "Language-Team: de\n"
@@ -439,18 +439,18 @@ msgstr ""
 msgid "GpgOL - Message Information"
 msgstr "GpgOL - Informationen zu der Nachricht"
 
-#: src/message.cpp:538
+#: src/message.cpp:540
 msgid "Signature verification of an encrypted message is not possible."
 msgstr ""
 "Die Prüfung der Unterschrift ist bei einer verschlüsselten Nachrichten nicht "
 "möglich."
 
-#: src/message.cpp:549
+#: src/message.cpp:551
 msgid "Signature verification of this message class is not possible."
 msgstr ""
 "Die Prüfung der Unterschrift ist bei dieser Nachrichtenklasse nicht möglich."
 
-#: src/message.cpp:552
+#: src/message.cpp:554
 msgid ""
 "Signature verification of this S/MIME message is not possible.  Please check "
 "that S/MIME processing has been enabled."
@@ -459,15 +459,15 @@ msgstr ""
 "Bitte überprüfen Sie in den Einstellungen, daß die Verarbeitung von S/MIME "
 "eingeschaltet ist."
 
-#: src/message.cpp:556
+#: src/message.cpp:558
 msgid "This message has no signature."
 msgstr "Diese Nachricht hat keine Unterschrift."
 
-#: src/message.cpp:854
+#: src/message.cpp:856
 msgid "This message is not encrypted."
 msgstr "Diese Nachricht ist nicht verschlüsselt."
 
-#: src/message.cpp:1081
+#: src/message.cpp:1083
 #, c-format
 msgid ""
 "Decryption failed\n"
@@ -476,20 +476,20 @@ msgstr ""
 "Entschlüsselungsfehler\n"
 "(%s)"
 
-#: src/message.cpp:1228
+#: src/message.cpp:1230
 msgid "No recipients to encrypt to are given"
 msgstr "Empfänger zum Verschlüsseln wurde nicht angegeben"
 
-#: src/message.cpp:1241 src/message.cpp:1268
+#: src/message.cpp:1243 src/message.cpp:1270
 msgid "Encrypting or signing an empty message is not possible."
 msgstr "Eine leere Nachricht kann nicht signiert oder verschlüsselt werden."
 
-#: src/message.cpp:1250
+#: src/message.cpp:1252
 #, c-format
 msgid "Encryption failed (%s)"
 msgstr "Verschlüsselungsfehler (%s)"
 
-#: src/message.cpp:1277
+#: src/message.cpp:1279
 #, c-format
 msgid "Signing failed (%s)"
 msgstr "Unterschrifterstellungsfehler (%s)"
index 88cbb82..e0ef46b 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GPGol\n"
 "Report-Msgid-Bugs-To: bug-gpgol@g10code.com\n"
-"POT-Creation-Date: 2008-10-27 18:31+0100\n"
+"POT-Creation-Date: 2008-10-27 18:36+0100\n"
 "PO-Revision-Date: 2006-12-12 23:52+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -405,50 +405,50 @@ msgstr ""
 msgid "GpgOL - Message Information"
 msgstr ""
 
-#: src/message.cpp:538
+#: src/message.cpp:540
 msgid "Signature verification of an encrypted message is not possible."
 msgstr ""
 
-#: src/message.cpp:549
+#: src/message.cpp:551
 msgid "Signature verification of this message class is not possible."
 msgstr ""
 
-#: src/message.cpp:552
+#: src/message.cpp:554
 msgid ""
 "Signature verification of this S/MIME message is not possible.  Please check "
 "that S/MIME processing has been enabled."
 msgstr ""
 
-#: src/message.cpp:556
+#: src/message.cpp:558
 #, fuzzy
 msgid "This message has no signature."
 msgstr "Dekryptera meddelandet och validera signaturen"
 
-#: src/message.cpp:854
+#: src/message.cpp:856
 msgid "This message is not encrypted."
 msgstr ""
 
-#: src/message.cpp:1081
+#: src/message.cpp:1083
 #, fuzzy, c-format
 msgid ""
 "Decryption failed\n"
 "(%s)"
 msgstr "Kryptering misslyckades"
 
-#: src/message.cpp:1228
+#: src/message.cpp:1230
 msgid "No recipients to encrypt to are given"
 msgstr ""
 
-#: src/message.cpp:1241 src/message.cpp:1268
+#: src/message.cpp:1243 src/message.cpp:1270
 msgid "Encrypting or signing an empty message is not possible."
 msgstr ""
 
-#: src/message.cpp:1250
+#: src/message.cpp:1252
 #, fuzzy, c-format
 msgid "Encryption failed (%s)"
 msgstr "Kryptering misslyckades"
 
-#: src/message.cpp:1277
+#: src/message.cpp:1279
 #, fuzzy, c-format
 msgid "Signing failed (%s)"
 msgstr "Signering misslyckades"
index c53e9df..be69590 100644 (file)
@@ -1,3 +1,8 @@
+2008-10-29  Werner Koch  <wk@g10code.com>
+
+       * engine.c (engine_filter): Collect more data in the in buffer.
+       * mimemaker.c (write_b64): Buffer up to 2k of output.
+
 2008-10-27  Werner Koch  <wk@g10code.com>
 
        * mimemaker.c (mime_encrypt): Check for an empty message before
index 5b0205f..1b1975e 100644 (file)
@@ -555,13 +555,17 @@ engine_filter (engine_filter_t filter, const void *indata, size_t indatalen)
       /* Fill the input buffer, relinquish control to the callback
          processor and loop until all input data has been
          processed.  */
-      if (!filter->in.length && indatalen)
+      if (indatalen && filter->in.length < FILTER_BUFFER_SIZE )
         {
-          filter->in.length = (indatalen > FILTER_BUFFER_SIZE
-                               ? FILTER_BUFFER_SIZE : indatalen);
-          memcpy (filter->in.buffer, indata, filter->in.length);
-          indata    += filter->in.length;
-          indatalen -= filter->in.length;
+          size_t tmplen;
+
+          tmplen = FILTER_BUFFER_SIZE - filter->in.length;
+          tmplen = (indatalen > tmplen? tmplen : indatalen);
+
+          memcpy (filter->in.buffer+filter->in.length, indata, tmplen);
+          filter->in.length += tmplen;
+          indata    += tmplen;
+          indatalen -= tmplen;
           any = 1;
         }
       /* Terminate the loop if the filter queue is empty OR the filter
index 8358be3..2fa9206 100644 (file)
@@ -310,45 +310,62 @@ write_b64 (sink_t sink, const void *data, size_t datalen)
   const unsigned char *p;
   unsigned char inbuf[4];
   int idx, quads;
-  char outbuf[4];
+  char outbuf[2048];
+  size_t outlen;
 
   log_debug ("  writing base64 of length %d\n", (int)datalen);
   idx = quads = 0;
+  outlen = 0;
   for (p = data; datalen; p++, datalen--)
     {
       inbuf[idx++] = *p;
       if (idx > 2)
         {
-          outbuf[0] = bintoasc[(*inbuf>>2)&077];
-          outbuf[1] = bintoasc[(((*inbuf<<4)&060)|((inbuf[1] >> 4)&017))&077];
-          outbuf[2] = bintoasc[(((inbuf[1]<<2)&074)|((inbuf[2]>>6)&03))&077];
-          outbuf[3] = bintoasc[inbuf[2]&077];
-          if ((rc = write_buffer (sink, outbuf, 4)))
-            return rc;
+          /* We need space for a quad and a possible CR,LF.  */
+          if (outlen+4+2 >= sizeof outbuf)
+            {
+              if ((rc = write_buffer (sink, outbuf, outlen)))
+                return rc;
+              outlen = 0;
+            }
+          outbuf[outlen++] = bintoasc[(*inbuf>>2)&077];
+          outbuf[outlen++] = bintoasc[(((*inbuf<<4)&060)
+                                       |((inbuf[1] >> 4)&017))&077];
+          outbuf[outlen++] = bintoasc[(((inbuf[1]<<2)&074)
+                                       |((inbuf[2]>>6)&03))&077];
+          outbuf[outlen++] = bintoasc[inbuf[2]&077];
           idx = 0;
           if (++quads >= (64/4)) 
             {
               quads = 0;
-              if ((rc = write_buffer (sink, "\r\n", 2)))
-                return rc;
+              outbuf[outlen++] = '\r';
+              outbuf[outlen++] = '\n';
             }
         }
     }
 
+  /* We need space for a quad and a final CR,LF.  */
+  if (outlen+4+2 >= sizeof outbuf)
+    {
+      if ((rc = write_buffer (sink, outbuf, outlen)))
+        return rc;
+      outlen = 0;
+    }
   if (idx)
     {
-      outbuf[0] = bintoasc[(*inbuf>>2)&077];
+      outbuf[outlen++] = bintoasc[(*inbuf>>2)&077];
       if (idx == 1)
         {
-          outbuf[1] = bintoasc[((*inbuf<<4)&060)&077];
-          outbuf[2] = '=';
-          outbuf[3] = '=';
+          outbuf[outlen++] = bintoasc[((*inbuf<<4)&060)&077];
+          outbuf[outlen++] = '=';
+          outbuf[outlen++] = '=';
         }
       else 
         { 
-          outbuf[1] = bintoasc[(((*inbuf<<4)&060)|((inbuf[1]>>4)&017))&077];
-          outbuf[2] = bintoasc[((inbuf[1]<<2)&074)&077];
-          outbuf[3] = '=';
+          outbuf[outlen++] = bintoasc[(((*inbuf<<4)&060)
+                                    |((inbuf[1]>>4)&017))&077];
+          outbuf[outlen++] = bintoasc[((inbuf[1]<<2)&074)&077];
+          outbuf[outlen++] = '=';
         }
       if ((rc = write_buffer (sink, outbuf, 4)))
         return rc;
@@ -356,8 +373,16 @@ write_b64 (sink_t sink, const void *data, size_t datalen)
     }
 
   if (quads) 
-    if ((rc = write_buffer (sink, "\r\n", 2)))
-      return rc;
+    {
+      outbuf[outlen++] = '\r';
+      outbuf[outlen++] = '\n';
+    }
+
+  if (outlen)
+    {
+      if ((rc = write_buffer (sink, outbuf, outlen)))
+        return rc;
+    }
 
   return 0;
 }