Version v0.2.109 - Simplify command line mode
This commit is contained in:
@@ -1,7 +0,0 @@
|
|||||||
-----BEGIN OTP MESSAGE-----
|
|
||||||
Version: v1.0.0
|
|
||||||
Pad-ChkSum: d0aaeb745bfbc62b1ed8c0eca4f8dc016f4fd9ed49130979f2bb25a2a3c8192e
|
|
||||||
Pad-Offset: 128
|
|
||||||
|
|
||||||
6+JsEJWRpLI2Z62tSw3EMiIjyTWVk0IfSek1to0/nYPXrswMzCtlultBcA==
|
|
||||||
-----END OTP MESSAGE-----
|
|
||||||
BIN
files/out2.otp
BIN
files/out2.otp
Binary file not shown.
BIN
files/output.otp
BIN
files/output.otp
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
Test file content for decryption
|
|
||||||
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
Hello, this is a test file for encryption!
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
-----BEGIN OTP MESSAGE-----
|
|
||||||
Version: v0.2.29
|
|
||||||
Pad-ChkSum: d0d4a489354348b08d8c7b324814d8c50010042e9da47f2c973f32a16a09101b
|
|
||||||
Pad-Offset: 57
|
|
||||||
|
|
||||||
05S8GfS0tFfczNMUz0xrieFGoPSREM4uo5QhFGoBCcOzjfTXTDMt3hRtAQ==
|
|
||||||
-----END OTP MESSAGE-----
|
|
||||||
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
This is a test file for encryption.
|
|
||||||
Binary file not shown.
72
otp.c
72
otp.c
@@ -58,8 +58,8 @@ static char current_pads_dir[512] = DEFAULT_PADS_DIR;
|
|||||||
// Global variable for default pad path from preferences
|
// Global variable for default pad path from preferences
|
||||||
static char default_pad_path[1024] = "";
|
static char default_pad_path[1024] = "";
|
||||||
|
|
||||||
// Global variable for pipe mode detection
|
// Global variable for interactive mode detection
|
||||||
static int is_pipe_mode = 0;
|
static int is_interactive_mode = 0;
|
||||||
|
|
||||||
// Function prototypes
|
// Function prototypes
|
||||||
int main(int argc, char* argv[]);
|
int main(int argc, char* argv[]);
|
||||||
@@ -199,19 +199,14 @@ int main(int argc, char* argv[]) {
|
|||||||
// Load preferences first
|
// Load preferences first
|
||||||
load_preferences();
|
load_preferences();
|
||||||
|
|
||||||
// Check for all forms of piped input first (before any output)
|
// Detect interactive mode: only true when running with no arguments
|
||||||
is_pipe_mode = (argc == 1 && has_stdin_data()) || has_stdin_data();
|
is_interactive_mode = (argc == 1);
|
||||||
|
|
||||||
// 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());
|
|
||||||
|
|
||||||
// Check for OTP thumb drive on startup
|
// Check for OTP thumb drive on startup
|
||||||
char otp_drive_path[512];
|
char otp_drive_path[512];
|
||||||
if (detect_otp_thumb_drive(otp_drive_path, sizeof(otp_drive_path))) {
|
if (detect_otp_thumb_drive(otp_drive_path, sizeof(otp_drive_path))) {
|
||||||
// Only show messages in non-pipe mode
|
// Only show messages in interactive mode
|
||||||
if (!is_pipe_mode && !is_decrypt_pipe) {
|
if (is_interactive_mode) {
|
||||||
printf("Detected OTP thumb drive: %s\n", otp_drive_path);
|
printf("Detected OTP thumb drive: %s\n", otp_drive_path);
|
||||||
printf("Using as default pads directory for this session.\n\n");
|
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';
|
current_pads_dir[sizeof(current_pads_dir) - 1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_pipe_mode) {
|
if (is_interactive_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) {
|
|
||||||
return interactive_mode();
|
return interactive_mode();
|
||||||
} else {
|
} else {
|
||||||
return command_line_mode(argc, argv);
|
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
|
return generate_pad(size, 1); // Use simplified pad generation
|
||||||
}
|
}
|
||||||
else if (strcmp(argv[1], "encrypt") == 0 || strcmp(argv[1], "-e") == 0) {
|
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) {
|
if (argc < 2 || argc > 4) {
|
||||||
printf("Usage: %s encrypt|-e [pad_chksum_or_prefix] [text_to_encrypt]\n", argv[0]);
|
printf("Usage: %s encrypt|-e [pad_chksum_or_prefix] [text_to_encrypt]\n", argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
@@ -480,7 +464,7 @@ int interactive_mode(void) {
|
|||||||
void show_main_menu(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[4mT\033[0mext encrypt\n"); //TEXT ENCRYPT
|
||||||
printf(" \033[4mF\033[0mile encrypt\n"); //FILE 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';
|
text_buffer[sizeof(text_buffer) - 1] = '\0';
|
||||||
} else {
|
} else {
|
||||||
// Get input text from user (interactive mode)
|
// Get input text from user (interactive mode)
|
||||||
if (!is_pipe_mode) {
|
if (is_interactive_mode) {
|
||||||
printf("\nText input options:\n");
|
printf("\nText input options:\n");
|
||||||
printf(" 1. Type text directly\n");
|
printf(" 1. Type text directly\n");
|
||||||
printf(" 2. Use text editor\n");
|
printf(" 2. Use text editor\n");
|
||||||
printf("Enter choice (1-2): ");
|
printf("Enter choice (1-2): ");
|
||||||
}
|
}
|
||||||
|
|
||||||
char input_choice[10] = "1"; // Default to direct input in pipe mode
|
char input_choice[10] = "1"; // Default to direct input in non-interactive mode
|
||||||
if (!is_pipe_mode) {
|
if (is_interactive_mode) {
|
||||||
if (!fgets(input_choice, sizeof(input_choice), stdin)) {
|
if (!fgets(input_choice, sizeof(input_choice), stdin)) {
|
||||||
printf("Error: Failed to read input\n");
|
printf("Error: Failed to read input\n");
|
||||||
free(pad_chksum);
|
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
|
// Use text editor
|
||||||
if (launch_text_editor(NULL, text_buffer, sizeof(text_buffer)) != 0) {
|
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("Falling back to direct text input.\n");
|
||||||
printf("Enter text to encrypt: ");
|
printf("Enter text to encrypt: ");
|
||||||
}
|
}
|
||||||
@@ -1363,7 +1347,7 @@ int encrypt_text(const char* pad_identifier, const char* input_text) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Direct text input
|
// Direct text input
|
||||||
if (!is_pipe_mode) {
|
if (is_interactive_mode) {
|
||||||
printf("Enter text to encrypt: ");
|
printf("Enter text to encrypt: ");
|
||||||
fflush(stdout);
|
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) {
|
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
|
(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);
|
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");
|
strcpy(*ascii_output, "-----BEGIN OTP MESSAGE-----\n");
|
||||||
|
|
||||||
char temp_line[256];
|
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);
|
strcat(*ascii_output, temp_line);
|
||||||
|
|
||||||
snprintf(temp_line, sizeof(temp_line), "Pad-ChkSum: %s\n", chksum);
|
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) {
|
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("Built for testing entropy system\n");
|
||||||
printf("Usage:\n");
|
printf("Usage:\n");
|
||||||
printf(" %s - Interactive mode\n", program_name);
|
printf(" %s - Interactive mode\n", program_name);
|
||||||
|
|||||||
Reference in New Issue
Block a user