sd2snes/cic/mangle.c
Maximilian Rehkopf 00800dbaba 12F629
2010-03-15 21:41:37 +01:00

102 lines
1.8 KiB
C

#include <stdio.h>
void printseed(unsigned char* data) {
int i;
for(i=1;i<16;i++) {
printf("%x ", data[i]);
}
printf("\n");
}
void printstream(unsigned char* data, int restart) {
int i;
for(i=restart;i<16;i++) {
printf("%d ", data[i]&1);
}
printf("\n");
}
#define CARRY if(a>0x0f) {\
a &= 0xf;\
carry=1;\
} else carry=0;
void mangle(unsigned char* data) {
unsigned char a,x,temp,i,offset,carry=0;
a=data[0xf];
do {
x=a;
offset=1;
carry=1;
a+=data[offset]+carry;
data[offset]=a&0xf;
a=data[offset++];
a+=data[offset]+carry;
a=(~a)&0xf;
temp=a; a=data[offset]; data[offset++]=temp&0xf;
a+=data[offset]+carry;
if(a<0x10) {
temp=a; a=data[offset]; data[offset++]=temp&0xf;
}
a+=data[offset];
data[offset]=a&0xf;
a=data[offset++];
carry=0;
a+=data[offset]+carry;
temp=a; a=data[offset]; data[offset++]=temp&0xf;
a+=8;
if(a<0x10) {
a+=data[offset]+carry;
}
temp=a; a=data[offset]; data[offset++]=temp&0xf;
while(offset<0x10) {
a++;
a+=data[offset]+carry;
data[offset]=a&0xf;
a=data[offset++];
}
offset &= 0xf;
a=x;
a+=0xf;
CARRY;
} while(carry);
}
int main(void) {
unsigned char restart=1;
unsigned char keyseed[16]= {0x0, // dummy
0xb,0x1,0x4,0xf,
0x4,0xb,0x5,0x7,
0xf,0xd,0x6,0x1,
0xe,0x9,0x8};
unsigned char lockseed[16]={0x0, // dummy
0x0,0x9,0xa,0x1,
0x8,0x5,0xf,0x1,
0x1,0xe,0x1,0x0,
0xd,0xe,0xc};
printseed(keyseed);
printseed(lockseed);
printf("\n");
while(1) {
printf("\n");
printstream(keyseed, restart);
printstream(lockseed, restart);
mangle(keyseed);
mangle(keyseed);
mangle(keyseed);
mangle(lockseed);
mangle(lockseed);
mangle(lockseed);
// printseed(keyseed);
// printseed(lockseed);
restart=lockseed[7];
// lockseed[3]=lockseed[7];
if(!restart)restart=1;
// printf("send %d-15\n", restart);
}
return 0;
}