Guest User

D411 scramble

a guest
Mar 10th, 2010
495
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2.  
  3. void printseed(unsigned char* data) {
  4.     int i;
  5.     for(i=1;i<16;i++) {
  6.         printf("%x ", data[i]);
  7.     }
  8.     printf("\n");
  9. }
  10.  
  11. void printstream(unsigned char* data, int restart) {
  12.     int i;
  13.     for(i=restart;i<16;i++) {
  14.         printf("%d ", data[i]&1);
  15.     }
  16.     printf("\n");
  17. }
  18.  
  19. void mangle(unsigned char* data) {
  20.     unsigned char a,x,temp,i,offset,carry=0;
  21.     a=data[0xf];
  22.     do {
  23.         x=a;
  24.         offset=1;
  25.         carry=1;
  26.         a+=data[offset]+carry;
  27.         data[offset]=a&0xf;
  28.         a=data[offset++];
  29.         a+=data[offset]+carry;
  30.         a=(~a)&0xf;
  31.         temp=a; a=data[offset]; data[offset++]=temp&0xf;
  32.         a+=data[offset]+carry;
  33.         if(a<0x10) {
  34.             temp=a; a=data[offset]; data[offset++]=temp&0xf;
  35.         }
  36.         a+=data[offset];
  37.         data[offset]=a&0xf;
  38.         a=data[offset++];
  39.         carry=0;
  40.         a+=data[offset]+carry;
  41.         temp=a; a=data[offset]; data[offset++]=temp&0xf;
  42.         a+=8;
  43.         if(a<0x10) {
  44.             a+=data[offset]+carry;
  45.         }
  46.         temp=a; a=data[offset]; data[offset++]=temp&0xf;
  47.    
  48.         while(offset<0x10) {
  49.             a++;
  50.             a+=data[offset]+carry;
  51.             data[offset]=a&0xf;
  52.             a=data[offset++];
  53.         }
  54.         offset &= 0xf;
  55.         a=x;
  56.         a+=0xf;
  57.         if(a>0x0f) {
  58.                         a &= 0xf;
  59.                         carry=1;
  60.                 } else carry=0;
  61.     } while(carry);
  62. }
  63.  
  64. int main(void) {
  65.     unsigned char restart=1;
  66.     unsigned char keyseed_data[16]= {0x0, // dummy
  67.                0xb,0x1,0x4,0xf,
  68.                0x4,0xb,0x5,0x7,
  69.                0xf,0xd,0x6,0x1,
  70.                0xe,0x9,0x8};
  71.     unsigned char lockseed_data[16]={0x0, // dummy
  72.                0x0,0x9,0xa,0x1,
  73.                0x8,0x5,0xf,0x1,
  74.                0x1,0xe,0x1,0x0,
  75.                0xd,0xe,0xc};
  76.  
  77.     unsigned char* keyseed=keyseed_data;
  78.     unsigned char* lockseed=lockseed_data;
  79.     printseed(keyseed);
  80.     printseed(lockseed);
  81.     printf("\n");
  82.  
  83.     while(1) {
  84.         printf("\n");
  85.         printstream(keyseed, restart);
  86.         printstream(lockseed, restart);
  87.         mangle(keyseed);
  88.         mangle(keyseed);
  89.         mangle(keyseed);
  90.         mangle(lockseed);
  91.         mangle(lockseed);
  92.         mangle(lockseed);
  93.  
  94.     //  printseed(keyseed);
  95.     //  printseed(lockseed);
  96.         restart=lockseed_data[7];
  97.         if(lockseed_data[7]&1) {
  98.             keyseed=lockseed_data;
  99.             lockseed=keyseed_data;
  100.         } else {
  101.             keyseed=keyseed_data;
  102.             lockseed=lockseed_data;
  103.         }
  104.         if(!restart)restart=1;
  105.     //  printf("send %d-15\n", restart);
  106.     }
  107.     return 0;
  108. }
RAW Paste Data