123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #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;
- }
|