/* -*-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.
*
if (pp->epsz + 11 > sz)
return (-1);
q = buf;
- qq = buf + sz;
+ qq = q + sz;
/* --- Ensure that the block looks OK --- */
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++;
if (pp->epsz + 10 > sz)
return (-1);
q = buf;
- qq = buf + sz;
+ qq = q + sz;
/* --- Ensure that the block looks OK --- */
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 --- */