home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 1213.LFSR.H < prev    next >
Text File  |  1990-12-16  |  1KB  |  47 lines

  1. /*    lfsr.h - C header include file for lfsr.c
  2. **    Linear Feedback Shift Register (LFSR) routines
  3. **    (c) 1988 Philip Zimmermann.  All rights reserved.
  4. */
  5.  
  6.  
  7. /* Elaborate protection mechanisms to assure no redefinitions of types...*/
  8. #ifndef BYTESTUFF
  9. #define BYTESTUFF
  10. typedef unsigned char byte;    /* values are 0-255 */
  11. typedef byte *byteptr;    /* pointer to byte */
  12. typedef char *string;    /* pointer to ASCII character string */
  13. #endif    /* if BYTESTUFF not already defined */
  14.  
  15.  
  16. /*
  17. **    steplfsr256 - Step big linear feedback shift register (LFSR)
  18. **    256 cycles.  Use primitive polynomial:  X^255 + X^82 + X^0
  19. **    Actually runs 8 LFSR's in parallel, outputting a whole byte
  20. **    with each step.
  21. */
  22. void steplfsr256(register byteptr lfsr);
  23.  
  24. /*
  25. **    getlfsr - get 1 byte from lfsr buffer.  Must be macro, not function.
  26. **    Calls steplfsr256() if necessary to replenish lfsr buffer.
  27. */
  28. #define getlfsr(lfsr,rtail) (rtail ? lfsr[--rtail] : \
  29.                 (steplfsr256(lfsr),lfsr[--rtail]))
  30.  
  31.  
  32. /*
  33. **    initlfsr - initialize linear feedback shift register
  34. */
  35. void initlfsr(byteptr seed, short size, byteptr lfsr, byte *rtail);
  36.  
  37. /*
  38. **    stomplfsr - inverts about half the bits in an LFSR.
  39. **
  40. **    If the LFSR has a "rail" of almost all 0's or almost all 1's in
  41. **    the same bit position, it will perform poorly as a random number
  42. **    generator.  This function will probably fix this condition.
  43. */
  44. void stomplfsr(byteptr lfsr);
  45.  
  46.  
  47.