18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd - Plaintext password to NtPasswordHash
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2005, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "includes.h"
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "common.h"
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "crypto/ms_funcs.h"
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint main(int argc, char *argv[])
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned char password_hash[16];
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t i;
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	char *password, buf[64], *pos;
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (argc > 1)
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		password = argv[1];
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	else {
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		if (fgets(buf, sizeof(buf), stdin) == NULL) {
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			printf("Failed to read password\n");
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return 1;
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		}
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		buf[sizeof(buf) - 1] = '\0';
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		pos = buf;
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		while (*pos != '\0') {
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			if (*pos == '\r' || *pos == '\n') {
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				*pos = '\0';
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				break;
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			}
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			pos++;
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		}
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		password = buf;
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (nt_password_hash((u8 *) password, strlen(password), password_hash))
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return -1;
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (i = 0; i < sizeof(password_hash); i++)
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		printf("%02x", password_hash[i]);
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	printf("\n");
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return 0;
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
48