|
|
|
@@ -271,7 +271,7 @@ int command_line_mode(int argc, char* argv[]) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void show_main_menu(void) {
|
|
|
|
|
printf("=== Main Menu ===\n\n");
|
|
|
|
|
printf("======================== Main Menu ========================\n");
|
|
|
|
|
printf("\033[4mT\033[0mext encrypt\n");
|
|
|
|
|
printf("\033[4mF\033[0mile encrypt\n");
|
|
|
|
|
printf("\033[4mD\033[0mecrypt\n");
|
|
|
|
@@ -461,16 +461,28 @@ int handle_encrypt_menu(void) {
|
|
|
|
|
|
|
|
|
|
int ascii_armor = (atoi(format_input) == 2) ? 1 : 0;
|
|
|
|
|
|
|
|
|
|
// Ask for custom output filename (optional)
|
|
|
|
|
printf("\nEnter output filename (or press Enter for default): ");
|
|
|
|
|
// Generate default output filename and use enhanced input function
|
|
|
|
|
char default_output[512];
|
|
|
|
|
snprintf(default_output, sizeof(default_output), "%s.decrypted", input_file);
|
|
|
|
|
|
|
|
|
|
// Remove common encrypted extensions to get a better default
|
|
|
|
|
if (strstr(default_output, ".otp.asc.decrypted")) {
|
|
|
|
|
// Replace .otp.asc.decrypted with original extension or no extension
|
|
|
|
|
char* ext_pos = strstr(default_output, ".otp.asc.decrypted");
|
|
|
|
|
*ext_pos = '\0';
|
|
|
|
|
} else if (strstr(default_output, ".otp.decrypted")) {
|
|
|
|
|
// Replace .otp.decrypted with original extension or no extension
|
|
|
|
|
char* ext_pos = strstr(default_output, ".otp.decrypted");
|
|
|
|
|
*ext_pos = '\0';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char output_file[512];
|
|
|
|
|
if (!fgets(output_file, sizeof(output_file), stdin)) {
|
|
|
|
|
if (get_filename_with_default("Output filename:", default_output, output_file, sizeof(output_file)) != 0) {
|
|
|
|
|
printf("Error: Failed to read input\n");
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
output_file[strcspn(output_file, "\n")] = 0;
|
|
|
|
|
|
|
|
|
|
const char* output_filename = (strlen(output_file) > 0) ? output_file : NULL;
|
|
|
|
|
const char* output_filename = output_file;
|
|
|
|
|
|
|
|
|
|
return encrypt_file(pad_input, input_file, output_filename, ascii_armor);
|
|
|
|
|
}
|
|
|
|
@@ -517,16 +529,32 @@ int handle_decrypt_menu(void) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Ask for custom output filename (optional)
|
|
|
|
|
printf("\nEnter output filename (or press Enter for default): ");
|
|
|
|
|
// Generate smart default output filename and use enhanced input function
|
|
|
|
|
char default_output[512];
|
|
|
|
|
strncpy(default_output, input_file, sizeof(default_output) - 1);
|
|
|
|
|
default_output[sizeof(default_output) - 1] = '\0';
|
|
|
|
|
|
|
|
|
|
// Remove common encrypted extensions to get a better default
|
|
|
|
|
if (strstr(default_output, ".otp.asc")) {
|
|
|
|
|
// Replace .otp.asc with original extension or no extension
|
|
|
|
|
char* ext_pos = strstr(default_output, ".otp.asc");
|
|
|
|
|
*ext_pos = '\0';
|
|
|
|
|
} else if (strstr(default_output, ".otp")) {
|
|
|
|
|
// Replace .otp with original extension or no extension
|
|
|
|
|
char* ext_pos = strstr(default_output, ".otp");
|
|
|
|
|
*ext_pos = '\0';
|
|
|
|
|
} else {
|
|
|
|
|
// No recognized encrypted extension, add .decrypted suffix
|
|
|
|
|
strncat(default_output, ".decrypted", sizeof(default_output) - strlen(default_output) - 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char output_file[512];
|
|
|
|
|
if (!fgets(output_file, sizeof(output_file), stdin)) {
|
|
|
|
|
if (get_filename_with_default("Output filename:", default_output, output_file, sizeof(output_file)) != 0) {
|
|
|
|
|
printf("Error: Failed to read input\n");
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
output_file[strcspn(output_file, "\n")] = 0;
|
|
|
|
|
|
|
|
|
|
const char* output_filename = (strlen(output_file) > 0) ? output_file : NULL;
|
|
|
|
|
const char* output_filename = output_file;
|
|
|
|
|
|
|
|
|
|
return decrypt_file(input_file, output_filename);
|
|
|
|
|
}
|
|
|
|
@@ -2447,7 +2475,7 @@ int get_filename_with_default(const char* prompt, const char* default_path, char
|
|
|
|
|
}
|
|
|
|
|
} else if (c >= 32 && c <= 126) {
|
|
|
|
|
// Printable character
|
|
|
|
|
if (buffer_len < sizeof(edit_buffer) - 1) {
|
|
|
|
|
if (buffer_len < (int)sizeof(edit_buffer) - 1) {
|
|
|
|
|
// Move everything after cursor one position right
|
|
|
|
|
memmove(&edit_buffer[cursor_pos + 1], &edit_buffer[cursor_pos], buffer_len - cursor_pos + 1);
|
|
|
|
|
edit_buffer[cursor_pos] = c;
|
|
|
|
|