// Python Wrapper object static PyObject *Produce_Xor_From_Bitstring(PyObject *module, PyObject *args) { datastore_descriptor ds; int bitstringlength; char *bitstringbuffer; char *raw_resultbuffer; uint64_t *resultbuffer; if (!PyArg_ParseTuple(args, "is#", &ds, &bitstringbuffer, &bitstringlength)) { // Incorrect args... return NULL; } // Is the ds valid? if (!is_table_entry_used(ds)) { PyErr_SetString(PyExc_ValueError, "Bad index for Produce_Xor_From_Bitstring"); return NULL; } // Let's prepare a place to put this... raw_resultbuffer = malloc(xordatastoretable[ds].sizeofablock+sizeof(uint64_t)); // ...and zero it out... bzero(raw_resultbuffer, xordatastoretable[ds].sizeofablock+sizeof(uint64_t)); // ... now let's get a DWORD aligned offset resultbuffer = (uint64_t *) dword_align(raw_resultbuffer); // Let's actually calculate this! bitstring_xor_worker(ds, bitstringbuffer, bitstringlength, resultbuffer); // okay, let's put it in a buffer PyObject *return_str_obj = Py_BuildValue("s#",(char *)resultbuffer,xordatastoretable[ds].sizeofablock); // clear the buffer free(raw_resultbuffer); return return_str_obj; }
// Python Wrapper object static PyObject *Produce_Xor_From_Bitstring(PyObject *module, PyObject *args) { datastore_descriptor ds; int bitstringlength; char *bitstringbuffer; char *raw_resultbuffer; __m128i *resultbuffer; if (!PyArg_ParseTuple(args, "iy#", &ds, &bitstringbuffer, &bitstringlength)) { // Incorrect args... return NULL; } printf("ds %i . ", ds); // Is the ds valid? if (!is_table_entry_used(ds)) { PyErr_SetString(PyExc_ValueError, "Bad index for Produce_Xor_From_Bitstring"); return NULL; } // Let's prepare a place to put the answer (1 block + alignment) raw_resultbuffer = (char*) calloc(1, xordatastoretable[ds].sizeofablock + sizeof(__m128i)); // align it resultbuffer = (__m128i *) dword_align(raw_resultbuffer); // Let's actually calculate this! bitstring_xor_worker(ds, bitstringbuffer, bitstringlength, resultbuffer); // okay, let's put it in a buffer PyObject *return_str_obj = Py_BuildValue("y#",(char *)resultbuffer, xordatastoretable[ds].sizeofablock); // clear the buffer free(raw_resultbuffer); return return_str_obj; }