I'm having trouble writing a modulo 2 modulus function. I need to divide a 260 byte unsigned integer by a 4 byte unsigned integer without carrying bits (modulo 2) and return the remainder. Currently I'm using loops to perform bitshift and logical operations and I'm thinking it might be cleaner if I wrote separate functions for performing binary operations on arbitrarily large amounts of data. The reason why I know my function isn't currently working is that if I divide a dividend by a divisor, then add the remainder to the dividend and divide again, the second remainder is not zero. I would appreciate some help getting this function working.
My current function is:
Code:
char *divide(char *message, char *divisor, char *remainder)
{
unsigned int *poly=divisor;
unsigned int *result=remainder;
int i, j;
for (i=0; i<260; i++)
{
for (j=7; j>=0; j--)
{
int action=(*result>>31)&1;
*result<<=1;
*result|=(*(message+i)>>j)&1;
*result^=action*i;
}
}
for (i=0; i<32; i++)
{
int action=(*result>>31)&1;
*result<<=1;
*result^=action*i;
}
unsigned int temp=(1<<31)-1;
return (*result & temp);
}
In case it helps, I uploaded my whole source to show some context.