#include #include #include #include #include #include #include "../hashing_settings.h" int main() { bool echo_success = false; struct termios tios, tios_orig; int ret = tcgetattr(0, &tios_orig); if (ret == 0) { memcpy(&tios, &tios_orig, sizeof(struct termios)); tios.c_lflag &= ~ECHO; ret = tcsetattr(0, TCSANOW, &tios); if (ret == 0) echo_success = true; } if (!echo_success && isatty(0)) { fprintf(stderr, "WARNING: Cannot disable ECHO on stdin\n"); } printf("Password: "); fflush(stdout); char *password = NULL; size_t passlen = 0; ssize_t nr = getline(&password, &passlen, stdin); if (nr > 0) { printf("\n"); if (passlen > 0) password[--passlen] = '\0'; char result[crypto_pwhash_STRBYTES + 1]; ret = crypto_pwhash_str( result, password, passlen, PASSHASH_OPSLIMIT, PASSHASH_MEMLIMIT); if (ret == 0) { result[crypto_pwhash_STRBYTES] = '\0'; printf("Hashed: %s\n", result); } sodium_memzero(password, passlen); } if (echo_success) { ret = tcsetattr(0, TCSANOW, &tios_orig); if (ret != 0) { fprintf(stderr, "WARNING: Cannot reset original termios on stdin\n"); } } }