Advertisement
Guest User

Untitled

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