/ analysis / lfsr.c
lfsr.c
 1  #include <stdio.h>
 2  #include <stdint.h>
 3  #include <string.h>
 4  
 5  void lfsr(const uint8_t input[8], uint8_t output[8]) {
 6    uint8_t tmp, tmp1;
 7    memcpy(output,input,8);
 8    for(int i = 0; i<8; i++) {
 9      tmp = (output[0] ^ output[4]) >> 1 | (output[1] ^ output[5]) << 7;
10      for(int j = 7; j >= 0; j--) {
11        tmp1 = output[j];
12        output[j] = tmp;
13        tmp = tmp1;
14      }
15    }
16  }
17  
18  int main(void) {
19    uint8_t input[8] = "\x0d\x04\x04\x01\x01\x01\x01";
20    uint8_t output[8] = {0};
21    lfsr(input, output);
22    for(int i=0;i<8;i++) printf("%02x", output[i]);
23    printf("\n");
24  
25    return 0;
26  }