Version v0.2.89 - Add default pad support for -e option
This commit is contained in:
70
otp.c
70
otp.c
@@ -244,13 +244,71 @@ int command_line_mode(int argc, char* argv[]) {
|
|||||||
return generate_pad_with_entropy(size, 1, 0); // No keyboard entropy for command line
|
return generate_pad_with_entropy(size, 1, 0); // No keyboard entropy for command line
|
||||||
}
|
}
|
||||||
else if (strcmp(argv[1], "encrypt") == 0 || strcmp(argv[1], "-e") == 0) {
|
else if (strcmp(argv[1], "encrypt") == 0 || strcmp(argv[1], "-e") == 0) {
|
||||||
if (argc < 3 || 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;
|
||||||
}
|
}
|
||||||
// Pass text if provided, otherwise NULL for interactive mode
|
|
||||||
const char* text = (argc == 4) ? argv[3] : NULL;
|
// Check if pad was specified or use default
|
||||||
return encrypt_text(argv[2], text);
|
const char* pad_identifier = NULL;
|
||||||
|
const char* text = NULL;
|
||||||
|
|
||||||
|
if (argc == 2) {
|
||||||
|
// Just -e, use default pad, no text (interactive)
|
||||||
|
pad_identifier = NULL;
|
||||||
|
text = NULL;
|
||||||
|
} else if (argc == 3) {
|
||||||
|
// Could be -e <pad> or -e <text> (using default pad)
|
||||||
|
// Check if default pad is available to determine interpretation
|
||||||
|
char* default_pad = get_default_pad_path();
|
||||||
|
if (default_pad) {
|
||||||
|
// Default pad available, treat argument as text
|
||||||
|
pad_identifier = NULL;
|
||||||
|
text = argv[2];
|
||||||
|
free(default_pad);
|
||||||
|
} else {
|
||||||
|
// No default pad, treat as pad identifier
|
||||||
|
pad_identifier = argv[2];
|
||||||
|
text = NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// argc == 4: -e <pad> <text>
|
||||||
|
pad_identifier = argv[2];
|
||||||
|
text = argv[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
// If pad_identifier is NULL, we need to use default pad
|
||||||
|
if (pad_identifier == NULL) {
|
||||||
|
char* default_pad = get_default_pad_path();
|
||||||
|
if (default_pad) {
|
||||||
|
// Extract checksum from default pad path
|
||||||
|
char* filename = strrchr(default_pad, '/');
|
||||||
|
if (!filename) filename = default_pad;
|
||||||
|
else filename++; // Skip the '/'
|
||||||
|
|
||||||
|
// Extract checksum (remove .pad extension)
|
||||||
|
if (strlen(filename) >= 68 && strstr(filename, ".pad")) {
|
||||||
|
static char default_checksum[65];
|
||||||
|
strncpy(default_checksum, filename, 64);
|
||||||
|
default_checksum[64] = '\0';
|
||||||
|
pad_identifier = default_checksum;
|
||||||
|
}
|
||||||
|
free(default_pad);
|
||||||
|
|
||||||
|
// Call encrypt_text and then comment about using default pad
|
||||||
|
int result = encrypt_text(pad_identifier, text);
|
||||||
|
if (result == 0) {
|
||||||
|
printf("# Used default pad: %.16s...\n", pad_identifier);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
printf("Error: No default pad configured. Specify pad explicitly or configure default pad.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Explicit pad specified, normal operation
|
||||||
|
return encrypt_text(pad_identifier, text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (strcmp(argv[1], "decrypt") == 0 || strcmp(argv[1], "-d") == 0) {
|
else if (strcmp(argv[1], "decrypt") == 0 || strcmp(argv[1], "-d") == 0) {
|
||||||
if (argc == 2) {
|
if (argc == 2) {
|
||||||
@@ -3893,7 +3951,7 @@ void print_usage(const char* program_name) {
|
|||||||
printf("Usage:\n");
|
printf("Usage:\n");
|
||||||
printf(" %s - Interactive mode\n", program_name);
|
printf(" %s - Interactive mode\n", program_name);
|
||||||
printf(" %s generate|-g <size> - Generate new pad\n", program_name);
|
printf(" %s generate|-g <size> - Generate new pad\n", program_name);
|
||||||
printf(" %s encrypt|-e <pad_checksum_prefix> [text] - Encrypt text\n", program_name);
|
printf(" %s encrypt|-e [pad_checksum_prefix] [text] - Encrypt text\n", program_name);
|
||||||
printf(" %s decrypt|-d [encrypted_message] - Decrypt message\n", program_name);
|
printf(" %s decrypt|-d [encrypted_message] - Decrypt message\n", program_name);
|
||||||
printf(" %s -f <file> <pad_prefix> [-a] [-o <out>] - Encrypt file\n", program_name);
|
printf(" %s -f <file> <pad_prefix> [-a] [-o <out>] - Encrypt file\n", program_name);
|
||||||
printf(" %s list|-l - List available pads\n", program_name);
|
printf(" %s list|-l - List available pads\n", program_name);
|
||||||
|
|||||||
Reference in New Issue
Block a user