(ghash->ops->done): Interface change. Passing in a null buffer pointer
authormdw <mdw>
Sun, 2 Jul 2000 18:27:42 +0000 (18:27 +0000)
committermdw <mdw>
Sun, 2 Jul 2000 18:27:42 +0000 (18:27 +0000)
uses a buffer internal to the ghash object.  The operation returns the
address of the buffer it used.  Clients of generic hashes no longer need
to use dynamically allocated memory for hash results.

ghash-def.h
ghash.h
hmac-def.h

index db87d1f..d8dfc3c 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: ghash-def.h,v 1.2 2000/06/17 11:22:03 mdw Exp $
+ * $Id: ghash-def.h,v 1.3 2000/07/02 18:27:42 mdw Exp $
  *
  * Definitions for generic hash interface
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: ghash-def.h,v $
+ * Revision 1.3  2000/07/02 18:27:42  mdw
+ * (ghash->ops->done): Interface change.  Passing in a null buffer pointer
+ * uses a buffer internal to the ghash object.  The operation returns the
+ * address of the buffer it used.  Clients of generic hashes no longer need
+ * to use dynamically allocated memory for hash results.
+ *
  * Revision 1.2  2000/06/17 11:22:03  mdw
  * Use secure arena for memory allocation.  Minor changes in the generic
  * hash interface.
@@ -75,6 +81,7 @@ static const ghash_ops gops;                                          \
 typedef struct gctx {                                                  \
   ghash h;                                                             \
   pre##_ctx c;                                                         \
+  octet buf[PRE##_HASHSZ];                                             \
 } gctx;                                                                        \
                                                                        \
 static ghash *ghinit(void)                                             \
@@ -91,10 +98,13 @@ static void ghhash(ghash *h, const void *p, size_t sz)                      \
   pre##_hash(&g->c, p, sz);                                            \
 }                                                                      \
                                                                        \
-static void ghdone(ghash *h, void *buf)                                        \
+static octet *ghdone(ghash *h, void *buf)                              \
 {                                                                      \
   gctx *g = (gctx *)h;                                                 \
+  if (!buf)                                                            \
+    buf = g->buf;                                                      \
   pre##_done(&g->c, buf);                                              \
+  return (buf);                                                                \
 }                                                                      \
                                                                        \
 static void ghdestroy(ghash *h)                                                \
diff --git a/ghash.h b/ghash.h
index 762444c..85b3d7f 100644 (file)
--- a/ghash.h
+++ b/ghash.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: ghash.h,v 1.2 2000/06/17 11:22:17 mdw Exp $
+ * $Id: ghash.h,v 1.3 2000/07/02 18:27:42 mdw Exp $
  *
  * Generic hash function interface
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: ghash.h,v $
+ * Revision 1.3  2000/07/02 18:27:42  mdw
+ * (ghash->ops->done): Interface change.  Passing in a null buffer pointer
+ * uses a buffer internal to the ghash object.  The operation returns the
+ * address of the buffer it used.  Clients of generic hashes no longer need
+ * to use dynamically allocated memory for hash results.
+ *
  * Revision 1.2  2000/06/17 11:22:17  mdw
  * Minor changes in the generic hash interface.
  *
@@ -58,7 +64,7 @@ typedef struct ghash {
 typedef struct ghash_ops {
   const struct gchash *c;              /* Pointer to hash class */
   void (*hash)(ghash */*h*/, const void */*p*/, size_t /*sz*/); /* Hash */
-  void (*done)(ghash */*h*/, void */*buf*/); /* Write result */
+  octet *(*done)(ghash */*h*/, void */*buf*/); /* Write result */
   void (*destroy)(ghash */*h*/);       /* Destroy hash block */
 } ghash_ops;
 
index 0972b68..38dd64a 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: hmac-def.h,v 1.2 2000/06/17 11:23:44 mdw Exp $
+ * $Id: hmac-def.h,v 1.3 2000/07/02 18:27:42 mdw Exp $
  *
  * Definitions for HMAC and NMAC
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: hmac-def.h,v $
+ * Revision 1.3  2000/07/02 18:27:42  mdw
+ * (ghash->ops->done): Interface change.  Passing in a null buffer pointer
+ * uses a buffer internal to the ghash object.  The operation returns the
+ * address of the buffer it used.  Clients of generic hashes no longer need
+ * to use dynamically allocated memory for hash results.
+ *
  * Revision 1.2  2000/06/17 11:23:44  mdw
  * Use secure arena for memory allocation.  Minor changes in the generic
  * hash interface.
@@ -212,6 +218,7 @@ typedef struct gkctx {                                                      \
 typedef struct gctx {                                                  \
   ghash h;                                                             \
   pre##_macctx c;                                                      \
+  octet buf[PRE##_HASHSZ];                                             \
 } gctx;                                                                        \
                                                                        \
 static ghash *gkinit(gmac *m)                                          \
@@ -237,10 +244,13 @@ static void ghhash(ghash *h, const void *p, size_t sz)                    \
   pre##_machash(&g->c, p, sz);                                         \
 }                                                                      \
                                                                        \
-static void ghdone(ghash *h, void *buf)                                        \
+static octet *ghdone(ghash *h, void *buf)                              \
 {                                                                      \
   gctx *g = (gctx *)h;                                                 \
+  if (!buf)                                                            \
+    buf = g->buf;                                                      \
   pre##_macdone(&g->c, buf);                                           \
+  return (buf);                                                                \
 }                                                                      \
                                                                        \
 static void ghdestroy(ghash *h)                                                \