Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7e50727163 | |||
| f118c23c60 | |||
| b149175f24 |
69
otp.c
69
otp.c
@@ -99,6 +99,9 @@ int handle_text_encrypt(void);
|
|||||||
int handle_file_encrypt(void);
|
int handle_file_encrypt(void);
|
||||||
int handle_smart_decrypt(void);
|
int handle_smart_decrypt(void);
|
||||||
|
|
||||||
|
// Enhanced input functions
|
||||||
|
int get_filename_with_default(const char* prompt, const char* default_path, char* result, size_t result_size);
|
||||||
|
|
||||||
void print_usage(const char* program_name);
|
void print_usage(const char* program_name);
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
@@ -110,7 +113,7 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int interactive_mode(void) {
|
int interactive_mode(void) {
|
||||||
printf("=== OTP Cipher %s ===\n\n", get_version());
|
printf("\n\n\n\n=== OTP Cipher %s ===\n\n", get_version());
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
show_main_menu();
|
show_main_menu();
|
||||||
@@ -2297,6 +2300,59 @@ void simple_entropy_mix(unsigned char* urandom_buffer, size_t buffer_size,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enhanced input function for filename with directory separation
|
||||||
|
int get_filename_with_default(const char* prompt, const char* default_path, char* result, size_t result_size) {
|
||||||
|
// Find the last directory separator
|
||||||
|
char* last_slash = strrchr(default_path, '/');
|
||||||
|
char directory[1024] = "";
|
||||||
|
char filename[512] = "";
|
||||||
|
|
||||||
|
if (last_slash) {
|
||||||
|
// Extract directory path
|
||||||
|
size_t dir_len = last_slash - default_path + 1; // Include the trailing slash
|
||||||
|
if (dir_len < sizeof(directory)) {
|
||||||
|
strncpy(directory, default_path, dir_len);
|
||||||
|
directory[dir_len] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract filename
|
||||||
|
strncpy(filename, last_slash + 1, sizeof(filename) - 1);
|
||||||
|
filename[sizeof(filename) - 1] = '\0';
|
||||||
|
} else {
|
||||||
|
// No directory separator, treat as filename only
|
||||||
|
strncpy(filename, default_path, sizeof(filename) - 1);
|
||||||
|
filename[sizeof(filename) - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display the enhanced prompt with directory and filename separated by colon
|
||||||
|
printf("\n%s\n%s: %s", prompt, directory, filename);
|
||||||
|
fflush(stdout);
|
||||||
|
|
||||||
|
char input_buffer[512];
|
||||||
|
if (!fgets(input_buffer, sizeof(input_buffer), stdin)) {
|
||||||
|
return 1; // Error reading input
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove newline
|
||||||
|
input_buffer[strcspn(input_buffer, "\n")] = 0;
|
||||||
|
|
||||||
|
// If user just pressed Enter, use the default filename
|
||||||
|
if (strlen(input_buffer) == 0) {
|
||||||
|
strncpy(result, default_path, result_size - 1);
|
||||||
|
result[result_size - 1] = '\0';
|
||||||
|
} else {
|
||||||
|
// Combine directory with user input
|
||||||
|
if (strlen(directory) > 0) {
|
||||||
|
snprintf(result, result_size, "%s%s", directory, input_buffer);
|
||||||
|
} else {
|
||||||
|
strncpy(result, input_buffer, result_size - 1);
|
||||||
|
result[result_size - 1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; // Success
|
||||||
|
}
|
||||||
|
|
||||||
// Editor and file manager implementations
|
// Editor and file manager implementations
|
||||||
|
|
||||||
char* get_preferred_editor(void) {
|
char* get_preferred_editor(void) {
|
||||||
@@ -2560,24 +2616,21 @@ int handle_file_encrypt(void) {
|
|||||||
int ascii_armor = (atoi(format_input) == 2) ? 1 : 0;
|
int ascii_armor = (atoi(format_input) == 2) ? 1 : 0;
|
||||||
|
|
||||||
// Generate default output filename
|
// Generate default output filename
|
||||||
char default_output[512];
|
char default_output[1024]; // Increased buffer size to prevent truncation warnings
|
||||||
if (ascii_armor) {
|
if (ascii_armor) {
|
||||||
snprintf(default_output, sizeof(default_output), "%s.otp.asc", input_file);
|
snprintf(default_output, sizeof(default_output), "%s.otp.asc", input_file);
|
||||||
} else {
|
} else {
|
||||||
snprintf(default_output, sizeof(default_output), "%s.otp", input_file);
|
snprintf(default_output, sizeof(default_output), "%s.otp", input_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ask for output filename with pre-filled default
|
// Use enhanced input function for output filename
|
||||||
printf("\nOutput filename [%s]: ", default_output);
|
|
||||||
char output_file[512];
|
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");
|
printf("Error: Failed to read input\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
output_file[strcspn(output_file, "\n")] = 0;
|
|
||||||
|
|
||||||
// Use default if user just pressed Enter
|
const char* output_filename = output_file;
|
||||||
const char* output_filename = (strlen(output_file) > 0) ? output_file : default_output;
|
|
||||||
|
|
||||||
return encrypt_file(pad_input, input_file, output_filename, ascii_armor);
|
return encrypt_file(pad_input, input_file, output_filename, ascii_armor);
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
test.txt.otp
BIN
test.txt.otp
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
This is a test file for OTP encryption.
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
-----BEGIN OTP MESSAGE-----
|
|
||||||
Version: v0.2.15
|
|
||||||
Pad-ChkSum: 0c8e19fde996e683fdbd348d1052eec168ffe6f67a88bb1278d0d02e9341b87b
|
|
||||||
Pad-Offset: 210
|
|
||||||
|
|
||||||
mMIm7iVtUO6NbXbskMxtydI/A16UXEQUGTcIya/8Dja6PB3EC0MLdw==
|
|
||||||
-----END OTP MESSAGE-----
|
|
||||||
Binary file not shown.
BIN
tocEncrypted
BIN
tocEncrypted
Binary file not shown.
Reference in New Issue
Block a user