[OpenSEED-CVSlog] [Commit] py-openseed seedmodule.c
Status: Beta
Brought to you by:
perky
From: Chang <pe...@us...> - 2001-11-15 19:46:58
|
perky 01/11/15 11:46:57 Modified: . seedmodule.c Log: add decrypt method Revision Changes Path 1.3 +42 -9 py-openseed/seedmodule.c Index: seedmodule.c =================================================================== RCS file: /cvsroot/openseed/py-openseed/seedmodule.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- seedmodule.c 2001/11/15 18:59:21 1.2 +++ seedmodule.c 2001/11/15 19:46:57 1.3 @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: seedmodule.c,v 1.2 2001/11/15 18:59:21 perky Exp $ + * $Id: seedmodule.c,v 1.3 2001/11/15 19:46:57 perky Exp $ */ @@ -55,6 +55,8 @@ "new(key, mode[, IV]): Returns new ciphering object, using key and feedback mode mode."; static char Seed_encrypt___doc__[] = "encrypt (string): Encrypts a non-null string, using the key-dependent data in the object."; +static char Seed_decrypt___doc__[] = + "decrypt (string): Decrypts string, using the key-dependent data in the object."; static PyObject* seed_new_(PyObject *self, PyObject *args) @@ -104,7 +106,7 @@ return NULL; if ( plainlen % SEED_BLOCK ) { - PyErr_SetString(SeedError, "SEED can't encrypt string of this length." ); + PyErr_SetString(SeedError, "String doesn't fit on SEED block size." ); return NULL; } @@ -119,13 +121,7 @@ seed_ecb_encrypt(plainstr, outstr, plainlen, seedO->ks); break; case SEED_CBC: - if (seedO->iv) { - SEED_IV tiv; - tiv = seed_create_iv(seedO->iv); /* XXX: more simple copy method? */ - seed_cbc_encrypt(plainstr, outstr, plainlen, seedO->ks, tiv); - seed_destroy_iv(tiv); - } else - seed_cbc_encrypt(plainstr, outstr, plainlen, seedO->ks, NULL); + seed_cbc_encrypt(plainstr, outstr, plainlen, seedO->ks, seedO->iv); break; } rstr = PyString_FromStringAndSize(outstr, plainlen); @@ -134,8 +130,45 @@ return rstr; } +static PyObject* +SeedObject_decrypt(PyObject *self, PyObject *args) +{ + seed_SeedObject *seedO = (seed_SeedObject*)self; + PyObject *rstr; + int enclen; + char *encstr, *outstr; + + if ( !PyArg_ParseTuple( args, "s#", &encstr, &enclen ) ) + return NULL; + + if ( enclen % SEED_BLOCK ) { + PyErr_SetString(SeedError, "String doesn't fit on SEED block size." ); + return NULL; + } + + if (seedO->mode == SEED_CFB || seedO->mode == SEED_OFB) { + PyErr_SetString(PyExc_NotImplementedError, "This mode isn't implemented yet." ); + return NULL; + } + + outstr = (char*)PyMem_Malloc(sizeof(char)*enclen); + switch(seedO->mode) { + case SEED_ECB: + seed_ecb_decrypt(encstr, outstr, enclen, seedO->ks); + break; + case SEED_CBC: + seed_cbc_decrypt(encstr, outstr, enclen, seedO->ks, seedO->iv); + break; + } + rstr = PyString_FromStringAndSize(outstr, enclen); + PyMem_Free(outstr); + + return rstr; +} + static PyMethodDef SeedObject_Methods[] = { {"encrypt", SeedObject_encrypt, METH_VARARGS, Seed_encrypt___doc__}, + {"decrypt", SeedObject_decrypt, METH_VARARGS, Seed_decrypt___doc__}, {NULL, NULL, 0} }; |