home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 1201.BASSLIB.H < prev    next >
Text File  |  1991-01-18  |  4KB  |  121 lines

  1. /*    basslib.h - include file for BassOmatic encipherment functions.
  2.  
  3.     (c) Copyright 1988 by Philip Zimmermann.  All rights reserved.  
  4.     This software may not be copied without the written permission of 
  5.     Philip Zimmermann.  The author assumes no liability for damages
  6.     resulting from the use of this software, even if the damage results
  7.     from defects in this software.  No warranty is expressed or implied.
  8. */
  9.  
  10. /* Elaborate protection mechanisms to assure no redefinitions of types...*/
  11. #ifndef BOOLSTUFF
  12. #define BOOLSTUFF
  13. #ifndef TRUE
  14. #define FALSE 0
  15. #define TRUE (!FALSE)
  16. #endif    /* if TRUE not already defined */
  17. typedef unsigned char boolean;    /* values are TRUE or FALSE */
  18. #endif    /* if BOOLSTUFF not already defined */
  19. #ifndef BYTESTUFF
  20. #define BYTESTUFF
  21. typedef unsigned char byte;    /* values are 0-255 */
  22. typedef byte *byteptr;    /* pointer to byte */
  23. typedef char *string;    /* pointer to ASCII character string */
  24. #endif    /* if BYTESTUFF not already defined */
  25. #ifndef WORDSTUFF
  26. #define WORDSTUFF
  27. typedef unsigned short word16;    /* values are 0-65536 */
  28. typedef unsigned long word32;    /* values are 0-4294967296 */
  29. #endif    /* if WORDSTUFF not already defined */
  30. #ifndef min    /* if min macro not already defined */
  31. #define min(a,b) ( (a)<(b) ? (a) : (b) )
  32. #define max(a,b) ( (a)>(b) ? (a) : (b) )
  33. #endif    /* if min macro not already defined */
  34.  
  35.  
  36. #define MAXKEYLEN 254    /* max byte length of BassOmatic key */
  37.  
  38. #define NTABLES 8        /* number of random permutation vectors */
  39.  
  40. typedef struct {
  41.     boolean    initialized;    /* determines whether key context is defined */
  42.     byteptr    tlist[NTABLES];    /* list of permutation table pointers */
  43.     byte    bitmasks[NTABLES]; /* bitshredder bitmasks with 50% bits set */
  44.     byteptr    iv; /* CFB Initialization Vector used by initcfb and basscfb */
  45.     boolean cfbuncryp;    /* TRUE means decrypting (in CFB mode) */
  46.     boolean uncryp;        /* TRUE means decrypting (in ECB mode) */
  47. /* The following parameters are computed from the key control byte...*/
  48.     char    nrounds;    /* specifies number of rounds thru BassOmatic */
  49.     boolean hardrand;    /* means regenerate tables with BassOmatic */
  50.     boolean shred8ways;    /* means use 8-way bit shredding */
  51.     boolean rerand;        /* means replenish tables with every block */
  52.     byteptr    lfsr;        /* Linear Feedback Shift Register */
  53.     byte    rtail;        /* rtail is an index into LFSR buffer */
  54.     } KEYCONTEXT;
  55.  
  56.  
  57. /*
  58. **    initbassrand - initialize bassrand, BassOmatic random number generator.
  59. **        Must close via closebass().
  60. */
  61. void initbassrand(byteptr key, short keylen, byteptr seed, short seedlen);
  62.  
  63.  
  64. /*
  65. **    bassrand - BassOmatic pseudo-random number generator.
  66. */
  67. byte bassrand(void);
  68.  
  69.  
  70. /*
  71. **    bass_save - saves BassOmatic key context in context structure.
  72. */
  73. void bass_save(KEYCONTEXT *context);
  74.  
  75.  
  76. /*
  77. **    bass_restore - restore BassOmatic key context from context structure.
  78. */
  79. void bass_restore(KEYCONTEXT *context);
  80.  
  81.  
  82. /*
  83. **    closebass - end the current BassOmatic key context, freeing its buffers.
  84. */
  85. void closebass(void);
  86.  
  87. int initkey(byteptr key, short keylen, boolean decryp);
  88.     /* Sets up key schedule for BassOmatic. */
  89.  
  90. void bassomatic(byteptr in, byteptr out);
  91.     /* Encipher 1 block with the BassOmatic ECB mode. */
  92.  
  93. /*
  94. **    initcfb - Initializes the BassOmatic key schedule tables via key,
  95. **    and initializes the Cipher Feedback mode IV.
  96. */
  97. int initcfb(byteptr iv0, byteptr key, short keylen, boolean decryp);
  98.  
  99.  
  100. /*
  101. **    basscfb - encipher 1 block with BassOmatic enciphering algorithm,
  102. **        using Cipher Feedback (CFB) mode.
  103. **
  104. **    Assumes initcfb has already been called.  References global iv byteptr.
  105. */
  106. void basscfb(byteptr buf, int count);
  107.  
  108.  
  109. /*
  110. **    fillbuf(dst,count,c) - fill byte buffer dst with byte c
  111. */
  112. void fillbuf(register byteptr dst, register short count, register byte c);
  113.  
  114.  
  115. /*
  116. **    crc() - compute CRC-16 of buffer
  117. */
  118. word16 crc(register byteptr buf, int count);
  119.  
  120.  
  121.