|
|
1.1 root 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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.