Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. void LFSR(uint32_t* data, uint8_t* polynomial_degrees, uint32_t degrees_quantity, uint32_t iterations);
  5. void to_bin (void * number, unsigned char num_size, char *string);
  6.  
  7. int main (int argv, char *argc[]) {
  8. uint32_t data = 0xFFFF0000;
  9. uint8_t degrees[] = {31, 25, 23, 20};
  10. char string[8 * sizeof(uint32_t) + 1];
  11. to_bin((void*) &data, sizeof(uint32_t), string);
  12. printf("%s\n", string);
  13. LFSR(&data, degrees, 4, 50);
  14. to_bin((void*) &data, sizeof(uint32_t), string);
  15. printf("%s\n", string);
  16. return 0;
  17. }
  18.  
  19. void to_bin (void * number, unsigned char num_size, char *string) {
  20. int i, e, f;
  21. unsigned char *num;
  22. for(f = 0, e = 8 * num_size -1; f < num_size; f++) {
  23. num = number + f;
  24. for(i = 0; i < 8; i++, e--) string[e] = ((*num >> i) & 1) ? '1' : '0';
  25. }
  26. string[8 * num_size] = '\0';
  27. }
  28.  
  29. void LFSR(uint32_t* data, uint8_t* polynomial_degrees, uint32_t degrees_quantity, uint32_t iterations) {
  30. uint32_t i, e, polynomial = 0, temp = 0, xors;
  31. char string[8 * sizeof(uint32_t) + 1];
  32. for(i = 0; i < degrees_quantity; i++) polynomial = polynomial | (1 << polynomial_degrees[i]);
  33. for(i = 0; i < iterations; i++) {
  34. temp = *data & polynomial;
  35. xors = 0;
  36. for(e = 0; e < degrees_quantity; e++) xors = xors ^ ((temp << 31-polynomial_degrees[e]) & 0x80000000);
  37. *data = (*data >> 1) | xors;
  38. }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement