wrapper.c

来自「symbian 发送短信例子 S60 SMS Sample」· C语言 代码 · 共 98 行

C
98
字号

#include <Python.h>
#include "s60crypt.h"

static PyObject* pycrypt_simplecrypt(PyObject* self, PyObject* args)
{
   char* data;
   int datalen;
   char* key;
   int keylen;
   char* out;
   int i;
   PyObject* result;

   if (!PyArg_ParseTuple(args, "s#s#", &data, &datalen, &key, &keylen))
     return NULL;

   out = (char*)malloc(datalen);
   if (!out)
     return PyErr_NoMemory();

   for(i=0; i<datalen; ++i) 
     out[i] = data[i] ^ key[i % keylen];

   result = Py_BuildValue("s#", out, datalen);
   free(out);
   if (!result)
     return PyErr_NoMemory();

   return result;
}

static PyObject* pycrypt_encrypt(PyObject* self, PyObject* args)
{
   char* data;
   int datalen;
   char* pw;
   int pwlen;
   char* out;
   PyObject* result;

   if (!PyArg_ParseTuple(args, "s#s#", &data, &datalen, &pw, &pwlen))
     return NULL;

   out = (char*)malloc(datalen);
   if (!out)
     return PyErr_NoMemory();

   s60_encrypt(datalen, data, out, pw, pwlen);

   result = Py_BuildValue("s#", out, datalen);
   free(out);
   if (!result)
     return PyErr_NoMemory();

   return result;
}

static PyObject* pycrypt_decrypt(PyObject* self, PyObject* args)
{
   char* data;
   int datalen;
   char* pw;
   int pwlen;
   char* out;
   PyObject* result;

   if (!PyArg_ParseTuple(args, "s#s#", &data, &datalen, &pw, &pwlen))
     return NULL;

   out = (char*)malloc(datalen);
   if (!out)
     return PyErr_NoMemory();

   s60_decrypt(datalen, data, out, pw, pwlen);

   result = Py_BuildValue("s#", out, datalen);
   free(out);
   if (!result)
     return PyErr_NoMemory();

   return result;
}


static const PyMethodDef PyCryptMethods[] =
{
  {"simplecrypt", pycrypt_simplecrypt, METH_VARARGS},
  {"encrypt", pycrypt_encrypt, METH_VARARGS},
  {"decrypt", pycrypt_decrypt, METH_VARARGS},
  {NULL, NULL}
};

DL_EXPORT(void) initpycrypt(void)
{
   (void)Py_InitModule("pycrypt", PyCryptMethods);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?