Add an internal-representation no-op function.
[u/mdw/catacomb] / pkcs1.c
diff --git a/pkcs1.c b/pkcs1.c
index 2dbf6de..dd19569 100644 (file)
--- a/pkcs1.c
+++ b/pkcs1.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: pkcs1.c,v 1.1 2000/07/01 11:17:38 mdw Exp $
+ * $Id: pkcs1.c,v 1.3 2000/10/08 12:07:04 mdw Exp $
  *
  * PKCS#1 1.5 packing
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: pkcs1.c,v $
+ * Revision 1.3  2000/10/08 12:07:04  mdw
+ * Don't do arithmetic on @void *@ pointers.
+ *
+ * Revision 1.2  2000/07/05 17:49:48  mdw
+ * Fix decoding functions, so that they don't run off the end of the
+ * buffer.
+ *
  * Revision 1.1  2000/07/01 11:17:38  mdw
  * New support for PKCS#1 message encoding.
  *
@@ -119,7 +126,7 @@ int pkcs1_cryptdecode(const void *buf, size_t sz, dstr *d, void *p)
   if (pp->epsz + 11 > sz)
     return (-1);
   q = buf;
-  qq = buf + sz;
+  qq = q + sz;
 
   /* --- Ensure that the block looks OK --- */
 
@@ -131,7 +138,7 @@ int pkcs1_cryptdecode(const void *buf, size_t sz, dstr *d, void *p)
   i = 0;
   while (*q != 0 && q < qq)
     i++, q++;
-  if (i < 8 || q == qq)
+  if (i < 8 || qq - q < pp->epsz + 1)
     return (-1);
   q++;
 
@@ -215,7 +222,7 @@ int pkcs1_sigdecode(const void *buf, size_t sz, dstr *d, void *p)
   if (pp->epsz + 10 > sz)
     return (-1);
   q = buf;
-  qq = buf + sz;
+  qq = q + sz;
 
   /* --- Ensure that the block looks OK --- */
 
@@ -227,11 +234,8 @@ int pkcs1_sigdecode(const void *buf, size_t sz, dstr *d, void *p)
   i = 0;
   while (*q == 0xff && q < qq)
     i++, q++;
-  if (i < 8 || q == qq)
-    return (-1);
-  if (*q != 0)
+  if (i < 8 || qq - q < pp->epsz + 1 || *q++ != 0)
     return (-1);
-  q++;
 
   /* --- Check the encoding parameters --- */