]> Savannah Git Hosting - gnulib.git/commitdiff
md2-buffer: New module.
authorBruno Haible <bruno@clisp.org>
Sat, 18 Sep 2021 23:29:33 +0000 (01:29 +0200)
committerBruno Haible <bruno@clisp.org>
Sat, 18 Sep 2021 23:29:33 +0000 (01:29 +0200)
* lib/md2-stream.c: New file, extracted from lib/md2.c.
* lib/md2.c: Don't include stdlib.h, unlocked-io.h.
(BLOCKSIZE, md2_stream): Moved to md2-stream.c.
* lib/md2.h: Reorder declarations.
* modules/crypto/md2-buffer: New file, based on modules/crypto/md2.
* modules/crypto/md2: Rewritten.

ChangeLog
lib/md2-stream.c [new file with mode: 0644]
lib/md2.c
lib/md2.h
modules/crypto/md2
modules/crypto/md2-buffer [new file with mode: 0644]

index 61a7e58e0436b6df751d9b5085013b883d97aa7c..ed35ce693b9901ce689e844cb60e70bee6018830 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2021-09-18  Bruno Haible  <bruno@clisp.org>
+
+       md2-buffer: New module.
+       * lib/md2-stream.c: New file, extracted from lib/md2.c.
+       * lib/md2.c: Don't include stdlib.h, unlocked-io.h.
+       (BLOCKSIZE, md2_stream): Moved to md2-stream.c.
+       * lib/md2.h: Reorder declarations.
+       * modules/crypto/md2-buffer: New file, based on modules/crypto/md2.
+       * modules/crypto/md2: Rewritten.
+
 2021-09-18  Bruno Haible  <bruno@clisp.org>
 
        string, wchar: Don't cause link errors for rpl_free (regr. 2021-09-07).
diff --git a/lib/md2-stream.c b/lib/md2-stream.c
new file mode 100644 (file)
index 0000000..83eb1d5
--- /dev/null
@@ -0,0 +1,109 @@
+/* Functions to compute MD2 message digest of files or memory blocks.
+   according to the definition of MD2 in RFC 1319 from April 1992.
+   Copyright (C) 1995-1997, 1999-2003, 2005-2006, 2008-2021 Free Software
+   Foundation, Inc.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Adapted by Simon Josefsson from public domain Libtomcrypt 1.06 by
+   Tom St Denis. */
+
+#include <config.h>
+
+/* Specification.  */
+#include "md2.h"
+
+#include <stdlib.h>
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+#define BLOCKSIZE 32768
+#if BLOCKSIZE % 64 != 0
+# error "invalid BLOCKSIZE"
+#endif
+
+/* Compute MD2 message digest for bytes read from STREAM.  The
+   resulting message digest number will be written into the 16 bytes
+   beginning at RESBLOCK.  */
+int
+md2_stream (FILE *stream, void *resblock)
+{
+  struct md2_ctx ctx;
+  size_t sum;
+
+  char *buffer = malloc (BLOCKSIZE + 72);
+  if (!buffer)
+    return 1;
+
+  /* Initialize the computation context.  */
+  md2_init_ctx (&ctx);
+
+  /* Iterate over full file contents.  */
+  while (1)
+    {
+      /* We read the file in blocks of BLOCKSIZE bytes.  One call of the
+         computation function processes the whole buffer so that with the
+         next round of the loop another block can be read.  */
+      size_t n;
+      sum = 0;
+
+      /* Read block.  Take care for partial reads.  */
+      while (1)
+        {
+          n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
+
+          sum += n;
+
+          if (sum == BLOCKSIZE)
+            break;
+
+          if (n == 0)
+            {
+              /* Check for the error flag IFF N == 0, so that we don't
+                 exit the loop after a partial read due to e.g., EAGAIN
+                 or EWOULDBLOCK.  */
+              if (ferror (stream))
+                {
+                  free (buffer);
+                  return 1;
+                }
+              goto process_partial_block;
+            }
+
+          /* We've read at least one byte, so ignore errors.  But always
+             check for EOF, since feof may be true even though N > 0.
+             Otherwise, we could end up calling fread after EOF.  */
+          if (feof (stream))
+            goto process_partial_block;
+        }
+
+      /* Process buffer with BLOCKSIZE bytes.  Note that
+         BLOCKSIZE % 64 == 0
+       */
+      md2_process_block (buffer, BLOCKSIZE, &ctx);
+    }
+
+process_partial_block:;
+
+  /* Process any remaining bytes.  */
+  if (sum > 0)
+    md2_process_bytes (buffer, sum, &ctx);
+
+  /* Construct result in desired memory.  */
+  md2_finish_ctx (&ctx, resblock);
+  free (buffer);
+  return 0;
+}
index 85b4d202919f3713201deabe5b4bf1e59d7e5ad8..5dc8119779aab60d0d4888ff7e2fbb1a5e8c32ac 100644 (file)
--- a/lib/md2.c
+++ b/lib/md2.c
 
 #include <config.h>
 
+/* Specification.  */
 #include "md2.h"
 
-#include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 
 #include <minmax.h>
 
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
-
-#define BLOCKSIZE 32768
-#if BLOCKSIZE % 64 != 0
-# error "invalid BLOCKSIZE"
-#endif
-
 static void md2_update_chksum (struct md2_ctx *md);
 static void md2_compress (struct md2_ctx *md);
 
@@ -87,79 +78,6 @@ md2_finish_ctx (struct md2_ctx *ctx, void *resbuf)
   return md2_read_ctx (ctx, resbuf);
 }
 
-/* Compute MD2 message digest for bytes read from STREAM.  The
-   resulting message digest number will be written into the 16 bytes
-   beginning at RESBLOCK.  */
-int
-md2_stream (FILE *stream, void *resblock)
-{
-  struct md2_ctx ctx;
-  size_t sum;
-
-  char *buffer = malloc (BLOCKSIZE + 72);
-  if (!buffer)
-    return 1;
-
-  /* Initialize the computation context.  */
-  md2_init_ctx (&ctx);
-
-  /* Iterate over full file contents.  */
-  while (1)
-    {
-      /* We read the file in blocks of BLOCKSIZE bytes.  One call of the
-         computation function processes the whole buffer so that with the
-         next round of the loop another block can be read.  */
-      size_t n;
-      sum = 0;
-
-      /* Read block.  Take care for partial reads.  */
-      while (1)
-        {
-          n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
-
-          sum += n;
-
-          if (sum == BLOCKSIZE)
-            break;
-
-          if (n == 0)
-            {
-              /* Check for the error flag IFF N == 0, so that we don't
-                 exit the loop after a partial read due to e.g., EAGAIN
-                 or EWOULDBLOCK.  */
-              if (ferror (stream))
-                {
-                  free (buffer);
-                  return 1;
-                }
-              goto process_partial_block;
-            }
-
-          /* We've read at least one byte, so ignore errors.  But always
-             check for EOF, since feof may be true even though N > 0.
-             Otherwise, we could end up calling fread after EOF.  */
-          if (feof (stream))
-            goto process_partial_block;
-        }
-
-      /* Process buffer with BLOCKSIZE bytes.  Note that
-         BLOCKSIZE % 64 == 0
-       */
-      md2_process_block (buffer, BLOCKSIZE, &ctx);
-    }
-
-process_partial_block:;
-
-  /* Process any remaining bytes.  */
-  if (sum > 0)
-    md2_process_bytes (buffer, sum, &ctx);
-
-  /* Construct result in desired memory.  */
-  md2_finish_ctx (&ctx, resblock);
-  free (buffer);
-  return 0;
-}
-
 /* Compute MD5 message digest for LEN bytes beginning at BUFFER.  The
    result is always in little endian byte order, so that a byte-wise
    output yields to the wanted ASCII representation of the message
index 078756a0076ebe50eb0ac80d456257e022c42ddb..f85799590ab2c86c99af7e595e236f5ef22057a6 100644 (file)
--- a/lib/md2.h
+++ b/lib/md2.h
@@ -66,11 +66,6 @@ extern void *md2_finish_ctx (struct md2_ctx *ctx, void *restrict resbuf);
 extern void *md2_read_ctx (const struct md2_ctx *ctx, void *restrict resbuf);
 
 
-/* Compute MD2 message digest for bytes read from STREAM.  The
-   resulting message digest number will be written into the 16 bytes
-   beginning at RESBLOCK.  */
-extern int md2_stream (FILE *stream, void *resblock);
-
 /* Compute MD2 message digest for LEN bytes beginning at BUFFER.  The
    result is always in little endian byte order, so that a byte-wise
    output yields to the wanted ASCII representation of the message
@@ -78,6 +73,13 @@ extern int md2_stream (FILE *stream, void *resblock);
 extern void *md2_buffer (const char *buffer, size_t len,
                          void *restrict resblock);
 
+
+/* Compute MD2 message digest for bytes read from STREAM.  The
+   resulting message digest number will be written into the 16 bytes
+   beginning at RESBLOCK.  */
+extern int md2_stream (FILE *stream, void *resblock);
+
+
 # ifdef __cplusplus
 }
 # endif
index d89eb9564c9831e6bcc81afbb143d00cfa1d422d..da418bc3bc3fa8005d4f0b7dd241daa42ffc64ad 100644 (file)
@@ -2,17 +2,15 @@ Description:
 Compute MD2 checksum.
 
 Files:
-lib/md2.h
-lib/md2.c
+lib/md2-stream.c
 
 Depends-on:
-minmax
+crypto/md2-buffer
 
 configure.ac:
-AC_REQUIRE([AC_C_RESTRICT])
 
 Makefile.am:
-lib_SOURCES += md2.c
+lib_SOURCES += md2-stream.c
 
 Include:
 "md2.h"
diff --git a/modules/crypto/md2-buffer b/modules/crypto/md2-buffer
new file mode 100644 (file)
index 0000000..d89eb95
--- /dev/null
@@ -0,0 +1,24 @@
+Description:
+Compute MD2 checksum.
+
+Files:
+lib/md2.h
+lib/md2.c
+
+Depends-on:
+minmax
+
+configure.ac:
+AC_REQUIRE([AC_C_RESTRICT])
+
+Makefile.am:
+lib_SOURCES += md2.c
+
+Include:
+"md2.h"
+
+License:
+LGPLv2+
+
+Maintainer:
+Simon Josefsson