Category : C Source Code
Archive   : PGP20SRC.ZIP
Filename : PASSWD.C

 
Output of file : PASSWD.C contained in archive : PGP20SRC.ZIP
/* passwd.c - Password reading/hashing routines
(c) 1989 Philip Zimmermann. All rights reserved.
Implemented in Microsoft C.
Routines for getting a pass phrase from the user's console.
*/

#include /* for fprintf() */
#include /* for isdigit(), toupper(), etc. */
#include /* for strlen() */

#include "random.h" /* for getstring() */
#include "md5.h"
#include "language.h"
#include "pgp.h"

#define MAXKEYLEN 254 /* max byte length of pass phrase */

boolean showpass = FALSE;

/*
** hashpass - Hash pass phrase down to 128 bits (16 bytes).
** keylen must be less than 1024.
** Use the MD5 algorithm.
*/
void hashpass (char *keystring, int keylen, byte *hash)
{
MD5_CTX mdContext;
int i;

/* Calculate the hash */
MD5Init(&mdContext);
MD5Update(&mdContext, (unsigned char *) keystring, keylen);
MD5Final(&mdContext);
/* Copy it to return variable */
memcpy(hash, mdContext.digest, 16);
} /* hashpass */


/*
** getideakey - get pass phrase from user, hashes it to an IDEA key.
Parameters:
returns char *keystring as the pass phrase itself
return char *hash as the 16-byte hash of the pass phrase
using MD5.
byte noecho:
0=ask once, echo.
1=ask once, no echo.
2=ask twice, no echo.
Return 0 if no characters are input, else return 1.
If we return 0, the hashed key will not be useful.
*/
int getideakey(char *keystring, char *hash, boolean noecho)
{ char keystr2[MAXKEYLEN+2];
int len;

if (showpass)
noecho = 0;
while (TRUE) {
fprintf(pgpout,PSTR("\nEnter pass phrase: "));
getstring(keystring,MAXKEYLEN-1,!noecho);
if (noecho<2) /* no need to ask again if user can see it */
break;
fprintf(pgpout,PSTR("\nEnter same pass phrase again: "));
getstring(keystr2,MAXKEYLEN-1,!noecho);
if (strcmp(keystring,keystr2)==0)
break;
fprintf(pgpout,PSTR("\n\007Error: Pass phrases were different. Try again."));
}

len = strlen(keystring);
if (len == 0)
return 0;
INTERNAL(keystring);
hashpass (keystring, strlen(keystring), (byte *) hash);
return 1;
} /* getideakey */



  3 Responses to “Category : C Source Code
Archive   : PGP20SRC.ZIP
Filename : PASSWD.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/