home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 1203.BASSLIB2.C < prev    next >
Text File  |  1991-05-25  |  2KB  |  76 lines

  1. /*    basslib2.c - Bassomatic encryption password routines.
  2.     (c) 1989 Philip Zimmermann.  All rights reserved.
  3.     Implemented in Microsoft C.
  4.     Routines for getting a Bassomatic-specific pass phrase from the 
  5.     user's console.
  6. */
  7.  
  8. #include    <stdio.h>    /* for fprintf() */
  9. #include    <ctype.h>    /* for isdigit(), toupper(), etc. */
  10. #include    <string.h>    /* for strlen() */
  11.  
  12. #include    "random.h"    /* for getstring() */
  13. #include    "basslib.h"
  14. #include    "basslib2.h"
  15.  
  16.  
  17. #define hexdigit(c) (isdigit((c))) ? ((c)-'0') : \
  18.     ( isxdigit((c)) ? (toupper((c))-'A'+10) : 0 )
  19.  
  20. static unsigned int gethex(char *p)
  21.     /* Evaluate hex digit string */
  22. {    unsigned int n;
  23.     n = 0;
  24.     while (isxdigit(*p)) {
  25.         n = (n << 4) | ((int) hexdigit(*p));
  26.         p++;
  27.     }
  28.     return (n);
  29. } /* gethex */
  30.  
  31.  
  32. /*
  33. **    getpassword - get Bassomatic pass phrase from user.
  34.     Parameters:
  35.         returns char *keystring
  36.         byte noecho:  
  37.             0=ask once, echo. 
  38.             1=ask once, no echo. 
  39.             2=ask twice, no echo.
  40.         int defaultc:  default key control byte, or -1 to prompt
  41.     returns length of resulting keystring
  42. */
  43. int getpassword(char *keystring, byte noecho, int defaultc)
  44. {    char keystr2[256];
  45.     char c;
  46.     if (defaultc == -1) {
  47.         fprintf(stderr,"\nEnter the Bassomatic key control byte in hex: ");
  48.         fprintf(stderr,"\n(default = 12 hex): ");
  49.         getstring(keystr2,48,TRUE);
  50.         c = (strlen(keystr2)==0) ? 0x12 : gethex(keystr2);
  51.     }
  52.     else    c = defaultc;
  53.  
  54.     *keystring++ = c;
  55.  
  56.     while (TRUE) {
  57.         fprintf(stderr,"\nEnter pass phrase: ");
  58.         if (!noecho) fputc('\n',stderr);
  59.         getstring(keystring,MAXKEYLEN-1,!noecho);
  60.         if (noecho<2)    /* no need to ask again if user can see it */
  61.             break;
  62.         fprintf(stderr,"\nEnter same pass phrase again: ");
  63.         if (!noecho) fputc('\n',stderr);
  64.         getstring(keystr2,MAXKEYLEN-1,!noecho);
  65.         if (strcmp(keystring,keystr2)==0)
  66.             break;
  67.         fprintf(stderr,"\n\aError: Pass phrases were different.  Try again.");
  68.     }
  69.  
  70.     /* if (strlen(keystring)==0)
  71.         strcpy(keystring," "); */ /* guarantee nonzero length */
  72.  
  73.     return(strlen(keystring));
  74. }    /* getpassword */
  75.  
  76.