From bb46184a4921b43dd4b649ace732488e2a2666da Mon Sep 17 00:00:00 2001 From: Christopher Wellons Date: Fri, 3 Mar 2017 20:49:45 -0500 Subject: [PATCH] Add Windows passphrase prompt. --- UNLICENSE | 0 enchive.c | 34 +++++++++++++++++++++++++++++++++- sha256.h | 0 3 files changed, 33 insertions(+), 1 deletion(-) mode change 100644 => 100755 UNLICENSE mode change 100644 => 100755 enchive.c mode change 100644 => 100755 sha256.h diff --git a/UNLICENSE b/UNLICENSE old mode 100644 new mode 100755 diff --git a/enchive.c b/enchive.c old mode 100644 new mode 100755 index ad807e6..4f89da8 --- a/enchive.c +++ b/enchive.c @@ -111,8 +111,40 @@ get_passphrase(char *buf, size_t len, char *prompt) fatal("could not read passphrase from /dev/tty"); } } -#else +#elif defined(_WIN32) +#include + +static void +get_passphrase(char *buf, size_t len, char *prompt) +{ + DWORD orig; + HANDLE in = GetStdHandle(STD_INPUT_HANDLE); + if (!GetConsoleMode(in, &orig)) { + get_passphrase_dumb(buf, len, prompt); + } else { + size_t passlen; + size_t i = 0; + DWORD n; + SetConsoleMode(in, orig & ~ENABLE_ECHO_INPUT); + fputs(prompt, stderr); + if (!fgets(buf, len, stdin)) + fatal("could not read passphrase"); + fputc('\n', stderr); + passlen = strlen(buf); + if (buf[passlen - 1] < ' ') + buf[passlen - 1] = 0; + } +} + +/* fallback to standard open */ +static FILE * +secure_creat(char *file) +{ + return fopen(file, "wb"); +} + +#else /* fallback to standard open */ static FILE * secure_creat(char *file) diff --git a/sha256.h b/sha256.h old mode 100644 new mode 100755