Some attempt to clear the passphrase command-line argument from the memory.
This commit is contained in:
parent
3683d2c450
commit
15a091cc49
@ -16,6 +16,7 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
#define BUFF_SIZE 4096U
|
#define BUFF_SIZE 4096U
|
||||||
|
|
||||||
static const CHR *const ENVV_PASSWD_NAME = T("MCRYPT_PASSWD");
|
static const CHR *const ENVV_PASSWD_NAME = T("MCRYPT_PASSWD");
|
||||||
static volatile int g_interrupted = 0;
|
static volatile int g_interrupted = 0;
|
||||||
|
|
||||||
@ -114,6 +115,7 @@ static int encrypt(const char* const passphrase, const CHR* const input_path, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
FPUTS(T("Encrypting file contents, please be patient... "), stderr);
|
FPUTS(T("Encrypting file contents, please be patient... "), stderr);
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
uint64_t seed;
|
uint64_t seed;
|
||||||
if (mcrypt_generate_seed(&seed) != MCRYPT_SUCCESS)
|
if (mcrypt_generate_seed(&seed) != MCRYPT_SUCCESS)
|
||||||
@ -140,6 +142,7 @@ static int encrypt(const char* const passphrase, const CHR* const input_path, co
|
|||||||
uint8_t buffer[BUFF_SIZE];
|
uint8_t buffer[BUFF_SIZE];
|
||||||
|
|
||||||
FPRINTF(stderr, T("%5.1f%% "), 0.0);
|
FPRINTF(stderr, T("%5.1f%% "), 0.0);
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
while (bytes_read < file_size)
|
while (bytes_read < file_size)
|
||||||
{
|
{
|
||||||
@ -248,6 +251,7 @@ static int decrypt(const char* const passphrase, const CHR* const input_path, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
FPUTS(T("Decrypting file contents, please be patient... "), stderr);
|
FPUTS(T("Decrypting file contents, please be patient... "), stderr);
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
uint64_t seed;
|
uint64_t seed;
|
||||||
if (fread(&seed, sizeof(uint64_t), 1U, file_in) < 1U)
|
if (fread(&seed, sizeof(uint64_t), 1U, file_in) < 1U)
|
||||||
@ -269,6 +273,7 @@ static int decrypt(const char* const passphrase, const CHR* const input_path, co
|
|||||||
const uint64_t read_limit = file_size - sizeof(uint64_t);
|
const uint64_t read_limit = file_size - sizeof(uint64_t);
|
||||||
|
|
||||||
FPRINTF(stderr, T("%5.1f%% "), 0.0);
|
FPRINTF(stderr, T("%5.1f%% "), 0.0);
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
while (bytes_read < read_limit)
|
while (bytes_read < read_limit)
|
||||||
{
|
{
|
||||||
@ -444,13 +449,15 @@ static int self_test(void)
|
|||||||
const char* const test_data[] = { TEST_DATA_0, TEST_DATA_1, TEST_DATA_2, TEST_DATA_3, NULL };
|
const char* const test_data[] = { TEST_DATA_0, TEST_DATA_1, TEST_DATA_2, TEST_DATA_3, NULL };
|
||||||
|
|
||||||
size_t completed = 0U;
|
size_t completed = 0U;
|
||||||
FPRINTF(stderr, T("Self-test is running, please be patient... %2u/%2u"), (unsigned int)completed, (unsigned int)total);
|
FPRINTF(stderr, T("Self-test is running, please be patient... %2u/%2u "), (unsigned int)completed, (unsigned int)total);
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
for (size_t i = 0U; i < 8U; ++i)
|
for (size_t i = 0U; i < 8U; ++i)
|
||||||
{
|
{
|
||||||
for (size_t j = 0U; test_data[j]; ++j)
|
for (size_t j = 0U; test_data[j]; ++j)
|
||||||
{
|
{
|
||||||
FPRINTF(stderr, T("\b\b\b\b\b%2u/%2u"), (unsigned int)++completed, (unsigned int)total);
|
FPRINTF(stderr, T("\b\b\b\b\b\b%2u/%2u "), (unsigned int)++completed, (unsigned int)total);
|
||||||
|
fflush(stderr);
|
||||||
if (run_test(test_data[j]))
|
if (run_test(test_data[j]))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
@ -545,6 +552,8 @@ int MAIN(int argc, CHR* argv[])
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mcrypt_bzero((CHR*)passphrase, STRLEN(passphrase) * sizeof(CHR));
|
||||||
|
|
||||||
if (strlen(passphrase_buffer) < 12U)
|
if (strlen(passphrase_buffer) < 12U)
|
||||||
{
|
{
|
||||||
FPUTS(T("Warning: Using a *short* passphrase; a length of 12 characters or more is recommended!\n\n"), stderr);
|
FPUTS(T("Warning: Using a *short* passphrase; a length of 12 characters or more is recommended!\n\n"), stderr);
|
||||||
@ -587,6 +596,5 @@ exiting:
|
|||||||
free(passphrase_buffer);
|
free(passphrase_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
mcrypt_bzero((CHR*)passphrase, STRLEN(passphrase) * sizeof(CHR));
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
#define S_IFMT _S_IFMT
|
#define S_IFMT _S_IFMT
|
||||||
#define S_IFDIR _S_IFDIR
|
#define S_IFDIR _S_IFDIR
|
||||||
#define S_IFIFO _S_IFIFO
|
#define S_IFIFO _S_IFIFO
|
||||||
|
extern char *const _acmdln;
|
||||||
|
extern wchar_t *const _wcmdln;
|
||||||
#else
|
#else
|
||||||
#if defined(__USE_LARGEFILE64) && (__USE_LARGEFILE64)
|
#if defined(__USE_LARGEFILE64) && (__USE_LARGEFILE64)
|
||||||
#define STAT_T struct stat64
|
#define STAT_T struct stat64
|
||||||
@ -40,6 +42,8 @@ void init_terminal(void)
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||||
_setmode(_fileno(stderr), _O_U8TEXT);
|
_setmode(_fileno(stderr), _O_U8TEXT);
|
||||||
|
if (_acmdln) SecureZeroMemory(_acmdln, strlen(_acmdln) * sizeof(char));
|
||||||
|
if (_wcmdln) SecureZeroMemory(_wcmdln, wcslen(_wcmdln) * sizeof(wchar_t));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user