summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>1996-12-23 23:36:24 (GMT)
committerBarry Warsaw <barry@python.org>1996-12-23 23:36:24 (GMT)
commitaeb207c6b69a0efaab686d5257be6fe1dfe2a179 (patch)
tree0e725530cbb2ba185ae2a3fda0f9962fa2489d6f
parentf308c0f1fc079189b5d3b27ef86e0e27a5c9ac42 (diff)
downloadcpython-aeb207c6b69a0efaab686d5257be6fe1dfe2a179.zip
cpython-aeb207c6b69a0efaab686d5257be6fe1dfe2a179.tar.gz
cpython-aeb207c6b69a0efaab686d5257be6fe1dfe2a179.tar.bz2
Reworked to check for memory problems (one potential found),
non-checked error return values, and where appropriate, PyArg_ParseTuple() style argument parsing. I also changed some function names and converted all malloc/free calls to PyMem_NEW/PyMem_DEL. Some stylistic changes and formatting standardization.
-rw-r--r--Modules/rotormodule.c449
1 files changed, 245 insertions, 204 deletions
diff --git a/Modules/rotormodule.c b/Modules/rotormodule.c
index 6988f88..d0da590 100644
--- a/Modules/rotormodule.c
+++ b/Modules/rotormodule.c
@@ -56,7 +56,6 @@ NOTE: you MUST use the SAME key in rotor.newrotor()
/* Rotor objects */
#include "Python.h"
-
#include "mymath.h"
#define TRUE 1
@@ -70,22 +69,23 @@ typedef struct {
int size;
int size_mask;
int rotors;
- unsigned char *e_rotor; /* [num_rotors][size] */
- unsigned char *d_rotor; /* [num_rotors][size] */
- unsigned char *positions; /* [num_rotors] */
- unsigned char *advances; /* [num_rotors] */
-} PyRotorObject;
+ unsigned char *e_rotor; /* [num_rotors][size] */
+ unsigned char *d_rotor; /* [num_rotors][size] */
+ unsigned char *positions; /* [num_rotors] */
+ unsigned char *advances; /* [num_rotors] */
+} Rotorobj;
-staticforward PyTypeObject PyRotor_Type;
+staticforward PyTypeObject Rotor_Type;
-#define PyRotor_Check(v) ((v)->ob_type == &PyRotor_Type)
+#define is_rotor(v) ((v)->ob_type == &Rotor_Type)
/*
This defines the necessary routines to manage rotor objects
*/
-static void set_seed( r )
-PyRotorObject *r;
+static void
+set_seed(r)
+ Rotorobj *r;
{
r->seed[0] = r->key[0];
r->seed[1] = r->key[1];
@@ -94,8 +94,9 @@ PyRotorObject *r;
}
/* Return the next random number in the range [0.0 .. 1.0) */
-static float r_random( r )
-PyRotorObject *r;
+static float
+r_random(r)
+ Rotorobj *r;
{
int x, y, z;
float val, term;
@@ -117,29 +118,32 @@ PyRotorObject *r;
r->seed[2] = z;
term = (float)(
- (((float)x)/(float)30269.0) +
- (((float)y)/(float)30307.0) +
- (((float)z)/(float)30323.0)
- );
+ (((float)x)/(float)30269.0) +
+ (((float)y)/(float)30307.0) +
+ (((float)z)/(float)30323.0)
+ );
val = term - (float)floor((double)term);
- if (val >= 1.0) val = 0.0;
+ if (val >= 1.0)
+ val = 0.0;
return val;
}
-static short r_rand(r,s)
-PyRotorObject *r;
-short s;
+static short
+r_rand(r, s)
+ Rotorobj *r;
+ short s;
{
/*short tmp = (short)((int)(r_random(r) * (float)32768.0) % 32768);*/
short tmp = (short)((short)(r_random(r) * (float)s) % s);
return tmp;
}
-static void set_key(r, key)
-PyRotorObject *r;
-char *key;
+static void
+set_key(r, key)
+ Rotorobj *r;
+ char *key;
{
#ifdef BUGGY_CODE_BW_COMPAT
/* See comments below */
@@ -148,8 +152,8 @@ char *key;
unsigned long k1=995, k2=576, k3=767, k4=671, k5=463;
#endif
int i;
- int len=strlen(key);
- for (i=0;i<len;i++) {
+ int len = strlen(key);
+ for (i = 0; i < len; i++) {
#ifdef BUGGY_CODE_BW_COMPAT
/* This is the code as it was originally released.
It causes warnings on many systems and can generate
@@ -181,13 +185,14 @@ char *key;
}
/* These define the interface to a rotor object */
-static PyRotorObject *
-PyRotor_New(num_rotors, key)
+static Rotorobj *
+rotorobj_new(num_rotors, key)
int num_rotors;
char *key;
{
- PyRotorObject *xp;
- xp = PyObject_NEW(PyRotorObject, &PyRotor_Type);
+ Rotorobj *xp;
+
+ xp = PyObject_NEW(Rotorobj, &Rotor_Type);
if (xp == NULL)
return NULL;
set_key(xp, key);
@@ -201,48 +206,48 @@ PyRotor_New(num_rotors, key)
xp->positions = NULL;
xp->advances = NULL;
- xp->e_rotor =
- (unsigned char *)malloc((num_rotors * (xp->size * sizeof(char))));
- if (xp->e_rotor == (unsigned char *)NULL)
- goto fail;
- xp->d_rotor =
- (unsigned char *)malloc((num_rotors * (xp->size * sizeof(char))));
- if (xp->d_rotor == (unsigned char *)NULL)
- goto fail;
- xp->positions = (unsigned char *)malloc(num_rotors * sizeof(char));
- if (xp->positions == (unsigned char *)NULL)
- goto fail;
- xp->advances = (unsigned char *)malloc(num_rotors * sizeof(char));
- if (xp->advances == (unsigned char *)NULL)
- goto fail;
+ if (!(xp->e_rotor = PyMem_NEW(unsigned char, num_rotors * xp->size)))
+ goto finally;
+ if (!(xp->d_rotor = PyMem_NEW(unsigned char, num_rotors * xp->size)))
+ goto finally;
+ if (!(xp->positions = PyMem_NEW(unsigned char, num_rotors)))
+ goto finally;
+ if (!(xp->advances = PyMem_NEW(unsigned char, num_rotors)))
+ goto finally;
+
return xp;
-fail:
+
+ finally:
+ PyMem_XDEL(xp->e_rotor);
+ PyMem_XDEL(xp->d_rotor);
+ PyMem_XDEL(xp->positions);
+ PyMem_XDEL(xp->advances);
Py_DECREF(xp);
- return (PyRotorObject *)PyErr_NoMemory();
+ return (Rotorobj*)PyErr_NoMemory();
}
/* These routines impliment the rotor itself */
-/* Here is a fairly sofisticated {en,de}cryption system. It is bassed
-on the idea of a "rotor" machine. A bunch of rotors, each with a
-different permutation of the alphabet, rotate around a different
-amount after encrypting one character. The current state of the
-rotors is used to encrypt one character.
+/* Here is a fairly sofisticated {en,de}cryption system. It is based
+ on the idea of a "rotor" machine. A bunch of rotors, each with a
+ different permutation of the alphabet, rotate around a different amount
+ after encrypting one character. The current state of the rotors is
+ used to encrypt one character.
- The code is smart enought to tell if your alphabet has a number of
-characters equal to a power of two. If it does, it uses logical
-operations, if not it uses div and mod (both require a division).
+ The code is smart enought to tell if your alphabet has a number of
+ characters equal to a power of two. If it does, it uses logical
+ operations, if not it uses div and mod (both require a division).
- You will need to make two changes to the code 1) convert to c, and
-customize for an alphabet of 255 chars 2) add a filter at the
-begining, and end, which subtracts one on the way in, and adds one on
-the way out.
+ You will need to make two changes to the code 1) convert to c, and
+ customize for an alphabet of 255 chars 2) add a filter at the begining,
+ and end, which subtracts one on the way in, and adds one on the way
+ out.
- You might wish to do some timing studies. Another viable
-alternative is to "byte stuff" the encrypted data of a normal (perhaps
-this one) encryption routine.
+ You might wish to do some timing studies. Another viable alternative
+ is to "byte stuff" the encrypted data of a normal (perhaps this one)
+ encryption routine.
-j'
+ j'
*/
/*(defun RTR-make-id-rotor (rotor)
@@ -251,14 +256,16 @@ j'
(while (< j RTR-size)
(aset rotor j j)
(setq j (+ 1 j)))
- rotor))*/
-static void RTR_make_id_rotor(r, rtr)
- PyRotorObject *r;
+ rotor))
+*/
+static void
+RTR_make_id_rotor(r, rtr)
+ Rotorobj *r;
unsigned char *rtr;
{
register int j;
register int size = r->size;
- for (j=0;j<size;j++) {
+ for (j = 0; j < size; j++) {
rtr[j] = (unsigned char)j;
}
}
@@ -274,13 +281,15 @@ static void RTR_make_id_rotor(r, rtr)
(aset rv i tr)
(setq i (+ 1 i)))
rv)
- "The current set of encryption rotors")*/
-static void RTR_e_rotors(r)
- PyRotorObject *r;
+ "The current set of encryption rotors")
+*/
+static void
+RTR_e_rotors(r)
+ Rotorobj *r;
{
int i;
- for (i=0;i<r->rotors;i++) {
- RTR_make_id_rotor(r,&(r->e_rotor[(i*r->size)]));
+ for (i = 0; i < r->rotors; i++) {
+ RTR_make_id_rotor(r, &(r->e_rotor[(i*r->size)]));
}
}
@@ -297,43 +306,49 @@ static void RTR_e_rotors(r)
(aset rv i tr)
(setq i (+ 1 i)))
rv)
- "The current set of decryption rotors")*/
-static void RTR_d_rotors(r)
- PyRotorObject *r;
+ "The current set of decryption rotors")
+*/
+static void
+RTR_d_rotors(r)
+ Rotorobj *r;
{
register int i, j;
- for (i=0;i<r->rotors;i++) {
- for (j=0;j<r->size;j++) {
+ for (i = 0; i < r->rotors; i++) {
+ for (j = 0; j < r->size; j++) {
r->d_rotor[((i*r->size)+j)] = (unsigned char)j;
}
}
}
/*(defvar RTR-positions (make-vector RTR-number-of-rotors 1)
- "The positions of the rotors at this time")*/
-static void RTR_positions(r)
- PyRotorObject *r;
+ "The positions of the rotors at this time")
+*/
+static void
+RTR_positions(r)
+ Rotorobj *r;
{
int i;
- for (i=0;i<r->rotors;i++) {
+ for (i = 0; i < r->rotors; i++) {
r->positions[i] = 1;
}
}
/*(defvar RTR-advances (make-vector RTR-number-of-rotors 1)
- "The number of positions to advance the rotors at a time")*/
-static void RTR_advances(r)
- PyRotorObject *r;
+ "The number of positions to advance the rotors at a time")
+*/
+static void
+RTR_advances(r)
+ Rotorobj *r;
{
int i;
- for (i=0;i<r->rotors;i++) {
+ for (i = 0; i < r->rotors; i++) {
r->advances[i] = 1;
}
}
/*(defun RTR-permute-rotor (e d)
"Permute the E rotor, and make the D rotor its inverse"
- ;; see Knuth for explaination of algorythm.
+ ;; see Knuth for explaination of algorithm.
(RTR-make-id-rotor e)
(let ((i RTR-size)
q j)
@@ -345,9 +360,11 @@ static void RTR_advances(r)
(aset e i j)
(aset d j i))
(aset e 0 (aref e 0)) ; don't forget e[0] and d[0]
- (aset d (aref e 0) 0)))*/
-static void RTR_permute_rotor(r, e, d)
- PyRotorObject *r;
+ (aset d (aref e 0) 0)))
+*/
+static void
+RTR_permute_rotor(r, e, d)
+ Rotorobj *r;
unsigned char *e;
unsigned char *d;
{
@@ -378,9 +395,11 @@ Set the advancement, position, and permutation of the rotors"
(aset RTR-advances i (+ 1 (* 2 (fair16 (/ RTR-size 2)))))
(message "Initializing rotor %d..." i)
(RTR-permute-rotor (aref RTR-e-rotors i) (aref RTR-d-rotors i))
- (setq i (+ 1 i)))))*/
-static void RTR_init(r)
- PyRotorObject *r;
+ (setq i (+ 1 i)))))
+*/
+static void
+RTR_init(r)
+ Rotorobj *r;
{
int i;
set_seed(r);
@@ -388,10 +407,12 @@ static void RTR_init(r)
RTR_advances(r);
RTR_e_rotors(r);
RTR_d_rotors(r);
- for(i=0;i<r->rotors;i++) {
+ for (i = 0; i < r->rotors; i++) {
r->positions[i] = r_rand(r,r->size);
r->advances[i] = (1+(2*(r_rand(r,r->size/2))));
- RTR_permute_rotor(r,&(r->e_rotor[(i*r->size)]),&(r->d_rotor[(i*r->size)]));
+ RTR_permute_rotor(r,
+ &(r->e_rotor[(i*r->size)]),
+ &(r->d_rotor[(i*r->size)]));
}
r->isinited = TRUE;
}
@@ -416,13 +437,15 @@ static void RTR_init(r)
(< i (- RTR-number-of-rotors 1)))
(aset RTR-positions (+ i 1)
(+ 1 (aref RTR-positions (+ i 1)))))
- (setq i (+ i 1))))))*/
-static void RTR_advance(r)
- PyRotorObject *r;
+ (setq i (+ i 1))))))
+*/
+static void
+RTR_advance(r)
+ Rotorobj *r;
{
register int i=0, temp=0;
if (r->size_mask) {
- while (i<r->rotors) {
+ while (i < r->rotors) {
temp = r->positions[i] + r->advances[i];
r->positions[i] = temp & r->size_mask;
if ((temp >= r->size) && (i < (r->rotors - 1))) {
@@ -431,7 +454,7 @@ static void RTR_advance(r)
i++;
}
} else {
- while (i<r->rotors) {
+ while (i < r->rotors) {
temp = r->positions[i] + r->advances[i];
r->positions[i] = temp%r->size;
if ((temp >= r->size) && (i < (r->rotors - 1))) {
@@ -459,21 +482,27 @@ static void RTR_advance(r)
RTR-size)))
(setq i (+ 1 i))))
(RTR-advance)
- p))*/
-static unsigned char RTR_e_char(r, p)
- PyRotorObject *r;
+ p))
+*/
+static unsigned char
+RTR_e_char(r, p)
+ Rotorobj *r;
unsigned char p;
{
register int i=0;
register unsigned char tp=p;
if (r->size_mask) {
while (i < r->rotors) {
- tp = r->e_rotor[(i*r->size)+(((r->positions[i] ^ tp) & r->size_mask))];
+ tp = r->e_rotor[(i*r->size) +
+ (((r->positions[i] ^ tp) &
+ r->size_mask))];
i++;
}
} else {
while (i < r->rotors) {
- tp = r->e_rotor[(i*r->size)+(((r->positions[i] ^ tp) % (unsigned int) r->size))];
+ tp = r->e_rotor[(i*r->size) +
+ (((r->positions[i] ^ tp) %
+ (unsigned int) r->size))];
i++;
}
}
@@ -498,21 +527,27 @@ static unsigned char RTR_e_char(r, p)
RTR-size))
(setq i (- i 1))))
(RTR-advance)
- c))*/
-static unsigned char RTR_d_char(r, c)
- PyRotorObject *r;
+ c))
+*/
+static unsigned char
+RTR_d_char(r, c)
+ Rotorobj *r;
unsigned char c;
{
- register int i=r->rotors - 1;
- register unsigned char tc=c;
+ register int i = r->rotors - 1;
+ register unsigned char tc = c;
+
if (r->size_mask) {
while (0 <= i) {
- tc = (r->positions[i] ^ r->d_rotor[(i*r->size)+tc]) & r->size_mask;
+ tc = (r->positions[i] ^
+ r->d_rotor[(i*r->size)+tc]) & r->size_mask;
i--;
}
} else {
while (0 <= i) {
- tc = (r->positions[i] ^ r->d_rotor[(i*r->size)+tc]) % (unsigned int) r->size;
+ tc = (r->positions[i] ^
+ r->d_rotor[(i*r->size)+tc]) %
+ (unsigned int) r->size;
i--;
}
}
@@ -530,9 +565,11 @@ static unsigned char RTR_d_char(r, c)
(while (< (point) end)
(let ((fc (following-char)))
(insert-char (RTR-e-char fc) 1)
- (delete-char 1))))))*/
-static void RTR_e_region(r, beg, len, doinit)
- PyRotorObject *r;
+ (delete-char 1))))))
+*/
+static void
+RTR_e_region(r, beg, len, doinit)
+ Rotorobj *r;
unsigned char *beg;
int len;
int doinit;
@@ -540,8 +577,8 @@ static void RTR_e_region(r, beg, len, doinit)
register int i;
if (doinit || r->isinited == FALSE)
RTR_init(r);
- for (i=0;i<len;i++) {
- beg[i]=RTR_e_char(r,beg[i]);
+ for (i = 0; i < len; i++) {
+ beg[i] = RTR_e_char(r, beg[i]);
}
}
@@ -554,9 +591,11 @@ static void RTR_e_region(r, beg, len, doinit)
(while (< (point) end)
(let ((fc (following-char)))
(insert-char (RTR-d-char fc) 1)
- (delete-char 1))))))*/
-static void RTR_d_region(r, beg, len, doinit)
- PyRotorObject *r;
+ (delete-char 1))))))
+*/
+static void
+RTR_d_region(r, beg, len, doinit)
+ Rotorobj *r;
unsigned char *beg;
int len;
int doinit;
@@ -564,8 +603,8 @@ static void RTR_d_region(r, beg, len, doinit)
register int i;
if (doinit || r->isinited == FALSE)
RTR_init(r);
- for (i=0;i<len;i++) {
- beg[i]=RTR_d_char(r,beg[i]);
+ for (i = 0; i < len; i++) {
+ beg[i] = RTR_d_char(r, beg[i]);
}
}
@@ -594,7 +633,7 @@ static void RTR_d_region(r, beg, len, doinit)
(interactive "r\nsKey:")
(RTR-e-region beg end (RTR-key-string-to-ints key)))*/
static void encrypt_region(r, region, len)
- PyRotorObject *r;
+ Rotorobj *r;
unsigned char *region;
int len;
{
@@ -606,19 +645,19 @@ static void encrypt_region(r, region, len)
(interactive "r\nsKey:")
(RTR-d-region beg end (RTR-key-string-to-ints key)))*/
static void decrypt_region(r, region, len)
- PyRotorObject *r;
+ Rotorobj *r;
unsigned char *region;
int len;
{
RTR_d_region(r,region,len,TRUE);
}
-#endif
+#endif /* 0 */
/* Rotor methods */
static void
-PyRotor_Dealloc(xp)
- PyRotorObject *xp;
+rotor_dealloc(xp)
+ Rotorobj *xp;
{
PyMem_XDEL(xp->e_rotor);
PyMem_XDEL(xp->d_rotor);
@@ -628,143 +667,149 @@ PyRotor_Dealloc(xp)
}
static PyObject *
-PyRotor_Encrypt(self, args)
- PyRotorObject *self;
+rotorobj_encrypt(self, args)
+ Rotorobj *self;
PyObject * args;
{
- char *string = (char *)NULL;
+ char *string = NULL;
int len = 0;
- PyObject * rtn = (PyObject * )NULL;
+ PyObject *rtn = NULL;
char *tmp;
- if (!PyArg_Parse(args,"s#",&string, &len))
+ if (!PyArg_Parse(args, "s#", &string, &len))
return NULL;
- if (!(tmp = (char *)malloc(len+5))) {
+ if (!(tmp = PyMem_NEW(char, len+5))) {
PyErr_NoMemory();
return NULL;
}
- memset(tmp,'\0',len+1);
- memcpy(tmp,string,len);
- RTR_e_region(self,(unsigned char *)tmp,len, TRUE);
- rtn = PyString_FromStringAndSize(tmp,len);
- free(tmp);
+ memset(tmp, '\0', len+1);
+ memcpy(tmp, string, len);
+ RTR_e_region(self, (unsigned char *)tmp, len, TRUE);
+ rtn = PyString_FromStringAndSize(tmp, len);
+ PyMem_DEL(tmp);
return(rtn);
}
static PyObject *
-PyRotor_EncryptMore(self, args)
- PyRotorObject *self;
+rotorobj_encrypt_more(self, args)
+ Rotorobj *self;
PyObject * args;
{
- char *string = (char *)NULL;
+ char *string = NULL;
int len = 0;
- PyObject * rtn = (PyObject * )NULL;
+ PyObject *rtn = NULL;
char *tmp;
- if (!PyArg_Parse(args,"s#",&string, &len))
+ if (!PyArg_Parse(args, "s#", &string, &len))
return NULL;
- if (!(tmp = (char *)malloc(len+5))) {
+ if (!(tmp = PyMem_NEW(char, len+5))) {
PyErr_NoMemory();
return NULL;
}
- memset(tmp,'\0',len+1);
- memcpy(tmp,string,len);
- RTR_e_region(self,(unsigned char *)tmp,len, FALSE);
- rtn = PyString_FromStringAndSize(tmp,len);
- free(tmp);
+ memset(tmp, '\0', len+1);
+ memcpy(tmp, string, len);
+ RTR_e_region(self, (unsigned char *)tmp, len, FALSE);
+ rtn = PyString_FromStringAndSize(tmp, len);
+ PyMem_DEL(tmp);
return(rtn);
}
static PyObject *
-PyRotor_Decrypt(self, args)
- PyRotorObject *self;
+rotorobj_decrypt(self, args)
+ Rotorobj *self;
PyObject * args;
{
- char *string = (char *)NULL;
+ char *string = NULL;
int len = 0;
- PyObject * rtn = (PyObject * )NULL;
+ PyObject *rtn = NULL;
char *tmp;
- if (!PyArg_Parse(args,"s#",&string, &len))
+ if (!PyArg_Parse(args, "s#", &string, &len))
return NULL;
- if (!(tmp = (char *)malloc(len+5))) {
+ if (!(tmp = PyMem_NEW(char, len+5))) {
PyErr_NoMemory();
return NULL;
}
- memset(tmp,'\0',len+1);
- memcpy(tmp,string,len);
- RTR_d_region(self,(unsigned char *)tmp,len, TRUE);
- rtn = PyString_FromStringAndSize(tmp,len);
- free(tmp);
+ memset(tmp, '\0', len+1);
+ memcpy(tmp, string, len);
+ RTR_d_region(self, (unsigned char *)tmp, len, TRUE);
+ rtn = PyString_FromStringAndSize(tmp, len);
+ PyMem_DEL(tmp);
return(rtn);
}
static PyObject *
-PyRotor_DecryptMore(self, args)
- PyRotorObject *self;
+rotorobj_decrypt_more(self, args)
+ Rotorobj *self;
PyObject * args;
{
- char *string = (char *)NULL;
+ char *string = NULL;
int len = 0;
- PyObject * rtn = (PyObject * )NULL;
+ PyObject *rtn = NULL;
char *tmp;
- if (!PyArg_Parse(args,"s#",&string, &len))
+ if (!PyArg_Parse(args, "s#", &string, &len))
return NULL;
- if (!(tmp = (char *)malloc(len+5))) {
+ if (!(tmp = PyMem_NEW(char, len+5))) {
PyErr_NoMemory();
return NULL;
}
- memset(tmp,'\0',len+1);
- memcpy(tmp,string,len);
- RTR_d_region(self,(unsigned char *)tmp,len, FALSE);
- rtn = PyString_FromStringAndSize(tmp,len);
- free(tmp);
+ memset(tmp, '\0', len+1);
+ memcpy(tmp, string, len);
+ RTR_d_region(self, (unsigned char *)tmp, len, FALSE);
+ rtn = PyString_FromStringAndSize(tmp, len);
+ PyMem_DEL(tmp);
return(rtn);
}
static PyObject *
-PyRotor_SetKey(self, args)
- PyRotorObject *self;
+rotorobj_setkey(self, args)
+ Rotorobj *self;
PyObject * args;
{
- char *string;
+ char *string = NULL;
+
+ if (!PyArg_ParseTuple(args, "|s", &string))
+ return NULL;
+
+ if (string)
+ set_key(self, string);
- if (PyArg_Parse(args,"s",&string))
- set_key(self,string);
Py_INCREF(Py_None);
return Py_None;
}
-static struct PyMethodDef PyRotor_Methods[] = {
- {"encrypt", (PyCFunction)PyRotor_Encrypt},
- {"encryptmore", (PyCFunction)PyRotor_EncryptMore},
- {"decrypt", (PyCFunction)PyRotor_Decrypt},
- {"decryptmore", (PyCFunction)PyRotor_DecryptMore},
- {"setkey", (PyCFunction)PyRotor_SetKey},
+static struct PyMethodDef
+rotorobj_methods[] = {
+ {"encrypt", (PyCFunction)rotorobj_encrypt},
+ {"encryptmore", (PyCFunction)rotorobj_encrypt_more},
+ {"decrypt", (PyCFunction)rotorobj_decrypt},
+ {"decryptmore", (PyCFunction)rotorobj_decrypt_more},
+ {"setkey", (PyCFunction)rotorobj_setkey, 1},
{NULL, NULL} /* sentinel */
};
/* Return a rotor object's named attribute. */
static PyObject *
-PyRotor_GetAttr(s, name)
- PyRotorObject *s;
+rotorobj_getattr(s, name)
+ Rotorobj *s;
char *name;
{
- return Py_FindMethod(PyRotor_Methods, (PyObject * ) s, name);
+ return Py_FindMethod(rotorobj_methods, (PyObject*)s, name);
}
-statichere PyTypeObject PyRotor_Type = {
+
+statichere PyTypeObject Rotor_Type = {
PyObject_HEAD_INIT(&PyType_Type)
0, /*ob_size*/
"rotor", /*tp_name*/
- sizeof(PyRotorObject), /*tp_size*/
+ sizeof(Rotorobj), /*tp_size*/
0, /*tp_itemsize*/
/* methods */
- (destructor)PyRotor_Dealloc, /*tp_dealloc*/
+ (destructor)rotor_dealloc, /*tp_dealloc*/
0, /*tp_print*/
- (getattrfunc)PyRotor_GetAttr, /*tp_getattr*/
+ (getattrfunc)rotorobj_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
@@ -773,29 +818,27 @@ statichere PyTypeObject PyRotor_Type = {
static PyObject *
-PyRotor_Rotor(self, args)
+rotor_rotor(self, args)
PyObject * self;
PyObject * args;
{
+ Rotorobj *r;
char *string;
- PyRotorObject *r;
int len;
- int num_rotors;
+ int num_rotors = 6;
- if (PyArg_Parse(args,"s#", &string, &len)) {
- num_rotors = 6;
- } else {
- PyErr_Clear();
- if (!PyArg_Parse(args,"(s#i)", &string, &len, &num_rotors))
- return NULL;
- }
- r = PyRotor_New(num_rotors, string);
- return (PyObject * )r;
+ if (!PyArg_ParseTuple(args, "s#|i", &string, &len, &num_rotors))
+ return NULL;
+
+ r = rotorobj_new(num_rotors, string);
+ return (PyObject *)r;
}
-static struct PyMethodDef PyRotor_Rotor_Methods[] = {
- {"newrotor", (PyCFunction)PyRotor_Rotor},
- {NULL, NULL} /* Sentinel */
+
+static struct PyMethodDef
+rotor_methods[] = {
+ {"newrotor", rotor_rotor, 1},
+ {NULL, NULL} /* sentinel */
};
@@ -807,7 +850,5 @@ static struct PyMethodDef PyRotor_Rotor_Methods[] = {
void
initrotor()
{
- PyObject * m;
-
- m = Py_InitModule("rotor", PyRotor_Rotor_Methods);
+ (void)Py_InitModule("rotor", rotor_methods);
}