projects
/
u
/
mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
New cipher Noekeon added.
[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-*-
*
/* -*-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
*
*
* PKCS#1 1.5 packing
*
@@
-30,6
+30,13
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: pkcs1.c,v $
/*----- 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.
*
* 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;
if (pp->epsz + 11 > sz)
return (-1);
q = buf;
- qq =
buf
+ sz;
+ qq =
q
+ sz;
/* --- Ensure that the block looks OK --- */
/* --- 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++;
i = 0;
while (*q != 0 && q < qq)
i++, q++;
- if (i < 8 || q
== qq
)
+ if (i < 8 || q
q - q < pp->epsz + 1
)
return (-1);
q++;
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;
if (pp->epsz + 10 > sz)
return (-1);
q = buf;
- qq =
buf
+ sz;
+ qq =
q
+ sz;
/* --- Ensure that the block looks OK --- */
/* --- 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++;
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);
return (-1);
- q++;
/* --- Check the encoding parameters --- */
/* --- Check the encoding parameters --- */