From 5648279d54cdf28c1e99b8daf61e94999c753128 Mon Sep 17 00:00:00 2001 From: Lauris Kaplinski Date: Wed, 7 Jan 2026 11:29:13 +0200 Subject: [PATCH 1/3] Fixed CDoc2Writer, WIndows large file test, hide interactive pin Signed-off-by: Lauris Kaplinski --- cdoc/CDoc2Writer.cpp | 2 +- cdoc/cdoc-tool.cpp | 39 +++++++++++++++++++++++++++++++-------- test/pipe.h | 2 +- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/cdoc/CDoc2Writer.cpp b/cdoc/CDoc2Writer.cpp index 6c81f69..6694228 100644 --- a/cdoc/CDoc2Writer.cpp +++ b/cdoc/CDoc2Writer.cpp @@ -549,7 +549,7 @@ CDoc2Writer::encrypt(libcdoc::MultiDataSource& src, const std::vectoropen(name, size); result != libcdoc::OK) break; - if (result = tar->writeAll(src); result != libcdoc::OK) + if (result = tar->writeAll(src); result < 0) break; result = src.next(name, size); } diff --git a/cdoc/cdoc-tool.cpp b/cdoc/cdoc-tool.cpp index a3043dd..8ee2b6b 100644 --- a/cdoc/cdoc-tool.cpp +++ b/cdoc/cdoc-tool.cpp @@ -17,6 +17,10 @@ */ #include +#ifndef _WIN32 +#include +#include +#endif #include "CDocCipher.h" #include "ConsoleLogger.h" @@ -449,6 +453,31 @@ parse_key_data(LockData& ldata, const int& arg_idx, int argc, char *argv[]) return 0; } +static std::string +inputSecret(std::string_view text) +{ + cout << text; +#ifdef _WIN32 + HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); + DWORD mode = 0; + GetConsoleMode(hStdin, &mode); +#else + termios o {}; + tcgetattr(STDIN_FILENO, &o); + termios n = o; + n.c_lflag &= ~ECHO; + tcsetattr(STDIN_FILENO, TCSANOW, &n); +#endif + string result; + getline(std::cin, result); +#ifdef _WIN32 + SetConsoleMode(hStdin, mode); +#else + tcsetattr(STDIN_FILENO, TCSANOW, &o); +#endif + cout << endl; + return result; +} // // cdoc-tool decrypt ARGUMENTS FILE [OUTPU_DIR] @@ -504,14 +533,8 @@ static int ParseAndDecrypt(int argc, char *argv[]) // Ask secret if not provided if (ldata.secret[0] == '?') { - ldata.secret.clear(); - cout << "Enter secret: "; - int ch = std::getchar(); - while (ch != '\n') { - ldata.secret.push_back((uint8_t) ch); - ch = std::getchar(); - } - cout << std::endl; + std::string secret = inputSecret("Enter password: "); + ldata.secret.assign(secret.cbegin(), secret.cend()); } CDocCipher cipher; diff --git a/test/pipe.h b/test/pipe.h index ed124a7..5f1d4e5 100644 --- a/test/pipe.h +++ b/test/pipe.h @@ -77,7 +77,7 @@ struct PipeCrypto : public libcdoc::CryptoBackend { }; struct PipeWriter { - static constexpr size_t BUFSIZE = 1024 * 1024; + static constexpr size_t BUFSIZE = 1024 * 16; PipeWriter(libcdoc::CDocWriter *writer, const std::vector& files) : _writer(writer), _files(files), current(-1), cpos(0) {} From 09152e355bf5c21d3ac981959f89675bc294e04a Mon Sep 17 00:00:00 2001 From: lauris71 Date: Wed, 7 Jan 2026 12:36:36 +0200 Subject: [PATCH 2/3] Update cdoc/cdoc-tool.cpp Co-authored-by: Raul Metsma --- cdoc/cdoc-tool.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/cdoc/cdoc-tool.cpp b/cdoc/cdoc-tool.cpp index 8ee2b6b..309f902 100644 --- a/cdoc/cdoc-tool.cpp +++ b/cdoc/cdoc-tool.cpp @@ -461,6 +461,7 @@ inputSecret(std::string_view text) HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); DWORD mode = 0; GetConsoleMode(hStdin, &mode); + SetConsoleMode(hStdin, mode & ~ENABLE_ECHO_INPUT); #else termios o {}; tcgetattr(STDIN_FILENO, &o); From 3d68402518f1d00048484d9b9d4ad40433f030b3 Mon Sep 17 00:00:00 2001 From: lauris71 Date: Wed, 7 Jan 2026 12:44:12 +0200 Subject: [PATCH 3/3] Update cdoc/cdoc-tool.cpp Co-authored-by: Raul Metsma --- cdoc/cdoc-tool.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdoc/cdoc-tool.cpp b/cdoc/cdoc-tool.cpp index 309f902..12adf66 100644 --- a/cdoc/cdoc-tool.cpp +++ b/cdoc/cdoc-tool.cpp @@ -475,8 +475,8 @@ inputSecret(std::string_view text) SetConsoleMode(hStdin, mode); #else tcsetattr(STDIN_FILENO, TCSANOW, &o); -#endif cout << endl; +#endif return result; }