diff --git a/files/o2.txt.otp.asc b/files/o2.txt.otp.asc deleted file mode 100644 index e19bc2a..0000000 --- a/files/o2.txt.otp.asc +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OTP MESSAGE----- -Version: v1.0.0 -Pad-ChkSum: d0aaeb745bfbc62b1ed8c0eca4f8dc016f4fd9ed49130979f2bb25a2a3c8192e -Pad-Offset: 128 - -6+JsEJWRpLI2Z62tSw3EMiIjyTWVk0IfSek1to0/nYPXrswMzCtlultBcA== ------END OTP MESSAGE----- diff --git a/files/out2.otp b/files/out2.otp deleted file mode 100644 index 577864c..0000000 Binary files a/files/out2.otp and /dev/null differ diff --git a/files/output.otp b/files/output.otp deleted file mode 100644 index bfca1c0..0000000 Binary files a/files/output.otp and /dev/null differ diff --git a/files/test_decrypt.txt b/files/test_decrypt.txt deleted file mode 100644 index a475e97..0000000 --- a/files/test_decrypt.txt +++ /dev/null @@ -1 +0,0 @@ -Test file content for decryption diff --git a/files/test_decrypt.txt.otp b/files/test_decrypt.txt.otp deleted file mode 100644 index 020bc5e..0000000 Binary files a/files/test_decrypt.txt.otp and /dev/null differ diff --git a/files/test_file.txt b/files/test_file.txt deleted file mode 100644 index e07046f..0000000 --- a/files/test_file.txt +++ /dev/null @@ -1 +0,0 @@ -Hello, this is a test file for encryption! diff --git a/files/test_file.txt.otp.asc b/files/test_file.txt.otp.asc deleted file mode 100644 index 779c9e5..0000000 --- a/files/test_file.txt.otp.asc +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OTP MESSAGE----- -Version: v0.2.29 -Pad-ChkSum: d0d4a489354348b08d8c7b324814d8c50010042e9da47f2c973f32a16a09101b -Pad-Offset: 57 - -05S8GfS0tFfczNMUz0xrieFGoPSREM4uo5QhFGoBCcOzjfTXTDMt3hRtAQ== ------END OTP MESSAGE----- diff --git a/files/test_files_dir.txt.otp b/files/test_files_dir.txt.otp deleted file mode 100644 index 211de8c..0000000 Binary files a/files/test_files_dir.txt.otp and /dev/null differ diff --git a/files/test_input.txt b/files/test_input.txt deleted file mode 100644 index 116b244..0000000 --- a/files/test_input.txt +++ /dev/null @@ -1 +0,0 @@ -This is a test file for encryption. diff --git a/files/toc.txt.otp b/files/toc.txt.otp deleted file mode 100644 index cf08a74..0000000 Binary files a/files/toc.txt.otp and /dev/null differ diff --git a/otp.c b/otp.c index 8fdfc20..cf81207 100644 --- a/otp.c +++ b/otp.c @@ -58,8 +58,8 @@ static char current_pads_dir[512] = DEFAULT_PADS_DIR; // Global variable for default pad path from preferences static char default_pad_path[1024] = ""; -// Global variable for pipe mode detection -static int is_pipe_mode = 0; +// Global variable for interactive mode detection +static int is_interactive_mode = 0; // Function prototypes int main(int argc, char* argv[]); @@ -199,19 +199,14 @@ int main(int argc, char* argv[]) { // Load preferences first load_preferences(); - // Check for all forms of piped input first (before any output) - is_pipe_mode = (argc == 1 && has_stdin_data()) || has_stdin_data(); - - // Check for decrypt command with piped input - int is_decrypt_pipe = (argc == 2 && - (strcmp(argv[1], "decrypt") == 0 || strcmp(argv[1], "-d") == 0) && - has_stdin_data()); + // Detect interactive mode: only true when running with no arguments + is_interactive_mode = (argc == 1); // Check for OTP thumb drive on startup char otp_drive_path[512]; if (detect_otp_thumb_drive(otp_drive_path, sizeof(otp_drive_path))) { - // Only show messages in non-pipe mode - if (!is_pipe_mode && !is_decrypt_pipe) { + // Only show messages in interactive mode + if (is_interactive_mode) { printf("Detected OTP thumb drive: %s\n", otp_drive_path); printf("Using as default pads directory for this session.\n\n"); } @@ -219,28 +214,7 @@ int main(int argc, char* argv[]) { current_pads_dir[sizeof(current_pads_dir) - 1] = '\0'; } - if (is_pipe_mode) { - // Check if this is a decrypt command with piped input - if (argc == 2 && (strcmp(argv[1], "decrypt") == 0 || strcmp(argv[1], "-d") == 0)) { - // Piped decrypt mode - read stdin and decrypt silently - char* piped_message = read_stdin_text(); - if (piped_message) { - int result = decrypt_text(NULL, piped_message); - free(piped_message); - return result; - } - } else { - // Regular pipe mode for encryption - char* piped_text = read_stdin_text(); - if (piped_text) { - int result = pipe_mode(argc, argv, piped_text); - free(piped_text); - return result; - } - } - // If reading stdin failed, fall back to interactive mode - return interactive_mode(); - } else if (argc == 1) { + if (is_interactive_mode) { return interactive_mode(); } else { return command_line_mode(argc, argv); @@ -278,6 +252,16 @@ int command_line_mode(int argc, char* argv[]) { return generate_pad(size, 1); // Use simplified pad generation } else if (strcmp(argv[1], "encrypt") == 0 || strcmp(argv[1], "-e") == 0) { + // Check for piped input first + if (has_stdin_data()) { + char* piped_text = read_stdin_text(); + if (piped_text) { + int result = pipe_mode(argc, argv, piped_text); + free(piped_text); + return result; + } + } + if (argc < 2 || argc > 4) { printf("Usage: %s encrypt|-e [pad_chksum_or_prefix] [text_to_encrypt]\n", argv[0]); return 1; @@ -480,7 +464,7 @@ int interactive_mode(void) { void show_main_menu(void) { - printf("\n=========================== Main Menu - OTP v0.2.107 ===========================\n\n"); + printf("\n=========================== Main Menu - OTP v0.2.108 ===========================\n\n"); printf(" \033[4mT\033[0mext encrypt\n"); //TEXT ENCRYPT printf(" \033[4mF\033[0mile encrypt\n"); //FILE ENCRYPT @@ -1324,15 +1308,15 @@ int encrypt_text(const char* pad_identifier, const char* input_text) { text_buffer[sizeof(text_buffer) - 1] = '\0'; } else { // Get input text from user (interactive mode) - if (!is_pipe_mode) { + if (is_interactive_mode) { printf("\nText input options:\n"); printf(" 1. Type text directly\n"); printf(" 2. Use text editor\n"); printf("Enter choice (1-2): "); } - char input_choice[10] = "1"; // Default to direct input in pipe mode - if (!is_pipe_mode) { + char input_choice[10] = "1"; // Default to direct input in non-interactive mode + if (is_interactive_mode) { if (!fgets(input_choice, sizeof(input_choice), stdin)) { printf("Error: Failed to read input\n"); free(pad_chksum); @@ -1340,10 +1324,10 @@ int encrypt_text(const char* pad_identifier, const char* input_text) { } } - if (!is_pipe_mode && atoi(input_choice) == 2) { + if (is_interactive_mode && atoi(input_choice) == 2) { // Use text editor if (launch_text_editor(NULL, text_buffer, sizeof(text_buffer)) != 0) { - if (!is_pipe_mode) { + if (is_interactive_mode) { printf("Falling back to direct text input.\n"); printf("Enter text to encrypt: "); } @@ -1363,7 +1347,7 @@ int encrypt_text(const char* pad_identifier, const char* input_text) { } } else { // Direct text input - if (!is_pipe_mode) { + if (is_interactive_mode) { printf("Enter text to encrypt: "); fflush(stdout); } @@ -1474,9 +1458,9 @@ int encrypt_text(const char* pad_identifier, const char* input_text) { } int decrypt_text(const char* pad_identifier, const char* encrypted_message) { - // Use universal decrypt function with mode based on global pipe detection + // Use universal decrypt function with mode based on global interactive mode detection (void)pad_identifier; // Suppress unused parameter warning - chksum comes from message - decrypt_mode_t mode = is_pipe_mode ? DECRYPT_MODE_SILENT : DECRYPT_MODE_INTERACTIVE; + decrypt_mode_t mode = is_interactive_mode ? DECRYPT_MODE_INTERACTIVE : DECRYPT_MODE_SILENT; return universal_decrypt(encrypted_message, NULL, mode); } @@ -3053,7 +3037,7 @@ int generate_ascii_armor(const char* chksum, uint64_t offset, const unsigned cha strcpy(*ascii_output, "-----BEGIN OTP MESSAGE-----\n"); char temp_line[256]; - snprintf(temp_line, sizeof(temp_line), "Version: v0.2.107\n"); + snprintf(temp_line, sizeof(temp_line), "Version: v0.2.108\n"); strcat(*ascii_output, temp_line); snprintf(temp_line, sizeof(temp_line), "Pad-ChkSum: %s\n", chksum); @@ -4610,7 +4594,7 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { } void print_usage(const char* program_name) { - printf("OTP Cipher - One Time Pad Implementation v0.2.107\n"); + printf("OTP Cipher - One Time Pad Implementation v0.2.108\n"); printf("Built for testing entropy system\n"); printf("Usage:\n"); printf(" %s - Interactive mode\n", program_name);