mangle.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #include <stdio.h>
  2. void printseed(unsigned char* data) {
  3. int i;
  4. for(i=1;i<16;i++) {
  5. printf("%x ", data[i]);
  6. }
  7. printf("\n");
  8. }
  9. void printstream(unsigned char* data, int restart) {
  10. int i;
  11. for(i=restart;i<16;i++) {
  12. printf("%d ", data[i]&1);
  13. }
  14. printf("\n");
  15. }
  16. #define CARRY if(a>0x0f) {\
  17. a &= 0xf;\
  18. carry=1;\
  19. } else carry=0;
  20. void mangle(unsigned char* data) {
  21. unsigned char a,x,temp,i,offset,carry=0;
  22. a=data[0xf];
  23. do {
  24. x=a;
  25. offset=1;
  26. carry=1;
  27. a+=data[offset]+carry;
  28. data[offset]=a&0xf;
  29. a=data[offset++];
  30. a+=data[offset]+carry;
  31. a=(~a)&0xf;
  32. temp=a; a=data[offset]; data[offset++]=temp&0xf;
  33. a+=data[offset]+carry;
  34. if(a<0x10) {
  35. temp=a; a=data[offset]; data[offset++]=temp&0xf;
  36. }
  37. a+=data[offset];
  38. data[offset]=a&0xf;
  39. a=data[offset++];
  40. carry=0;
  41. a+=data[offset]+carry;
  42. temp=a; a=data[offset]; data[offset++]=temp&0xf;
  43. a+=8;
  44. if(a<0x10) {
  45. a+=data[offset]+carry;
  46. }
  47. temp=a; a=data[offset]; data[offset++]=temp&0xf;
  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. CARRY;
  58. } while(carry);
  59. }
  60. int main(void) {
  61. unsigned char restart=1;
  62. unsigned char keyseed[16]= {0x0, // dummy
  63. 0xb,0x1,0x4,0xf,
  64. 0x4,0xb,0x5,0x7,
  65. 0xf,0xd,0x6,0x1,
  66. 0xe,0x9,0x8};
  67. unsigned char lockseed[16]={0x0, // dummy
  68. 0x0,0x9,0xa,0x1,
  69. 0x8,0x5,0xf,0x1,
  70. 0x1,0xe,0x1,0x0,
  71. 0xd,0xe,0xc};
  72. printseed(keyseed);
  73. printseed(lockseed);
  74. printf("\n");
  75. while(1) {
  76. printf("\n");
  77. printstream(keyseed, restart);
  78. printstream(lockseed, restart);
  79. mangle(keyseed);
  80. mangle(keyseed);
  81. mangle(keyseed);
  82. mangle(lockseed);
  83. mangle(lockseed);
  84. mangle(lockseed);
  85. // printseed(keyseed);
  86. // printseed(lockseed);
  87. restart=lockseed[7];
  88. // lockseed[3]=lockseed[7];
  89. if(!restart)restart=1;
  90. // printf("send %d-15\n", restart);
  91. }
  92. return 0;
  93. }