summaryrefslogtreecommitdiff
path: root/src/XOR.c
diff options
context:
space:
mode:
authorDwayne C. Litzenberger <dlitz@dlitz.net>2009-08-02 13:48:09 -0400
committerDwayne C. Litzenberger <dlitz@dlitz.net>2009-08-02 14:05:53 -0400
commit1a84a552475584e776b0bd86f67699e31659cd26 (patch)
tree844c89faeb90fc869dca79d540301e2046925917 /src/XOR.c
parent670005e15c088f30973050c3933adabbc8a3005c (diff)
downloadpycrypto-1a84a552475584e776b0bd86f67699e31659cd26.tar.gz
src/XOR.c: Fix bug where keys longer than 32 bytes are silently truncated
Diffstat (limited to 'src/XOR.c')
-rw-r--r--src/XOR.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/XOR.c b/src/XOR.c
index f2c74af..1dc05fb 100644
--- a/src/XOR.c
+++ b/src/XOR.c
@@ -10,13 +10,17 @@
*
*/
+#include "Python.h"
+
#define MODULE_NAME XOR
#define BLOCK_SIZE 1
#define KEY_SIZE 0
+#define MAX_KEY_SIZE 32
+
typedef struct
{
- unsigned char key[32];
+ unsigned char key[MAX_KEY_SIZE];
int keylen, last_pos;
} stream_state;
@@ -24,8 +28,14 @@ static void
stream_init(stream_state *self, unsigned char *key, int len)
{
int i;
-
- if (32 <= len) len=32;
+
+ if (len > MAX_KEY_SIZE)
+ {
+ PyErr_Format(PyExc_ValueError,
+ "XOR key must be no longer than %d bytes",
+ MAX_KEY_SIZE);
+ return;
+ }
self->keylen = len;
self->last_pos = 0;