diff --git a/otp.c b/otp.c index cabb92c..d24394e 100644 --- a/otp.c +++ b/otp.c @@ -62,19 +62,19 @@ void simple_entropy_mix(unsigned char* urandom_buffer, size_t buffer_size, // Directory management int ensure_pads_directory(void); -void get_pad_path(const char* hash, char* pad_path, char* state_path); +void get_pad_path(const char* chksum, char* pad_path, char* state_path); // Utility functions uint64_t parse_size_string(const char* size_str); char* find_pad_by_prefix(const char* prefix); int list_available_pads(void); -int show_pad_info(const char* hash); +int show_pad_info(const char* chksum); int get_user_choice(int min, int max); void show_progress(uint64_t current, uint64_t total, time_t start_time); // File operations -int read_state_offset(const char* pad_hash, uint64_t* offset); -int write_state_offset(const char* pad_hash, uint64_t offset); +int read_state_offset(const char* pad_chksum, uint64_t* offset); +int write_state_offset(const char* pad_chksum, uint64_t offset); int calculate_checksum(const char* filename, char* checksum_hex); void xor_checksum_256(const unsigned char* data, size_t len, unsigned char checksum[32]); char* custom_base64_encode(const unsigned char* input, int length); @@ -123,10 +123,10 @@ int interactive_mode(void) { char input[MAX_HASH_LENGTH]; if (fgets(input, sizeof(input), stdin)) { input[strcspn(input, "\n")] = 0; - char* hash = find_pad_by_prefix(input); - if (hash) { - show_pad_info(hash); - free(hash); + char* chksum = find_pad_by_prefix(input); + if (chksum) { + show_pad_info(chksum); + free(chksum); } } break; @@ -162,14 +162,14 @@ int command_line_mode(int argc, char* argv[]) { } else if (strcmp(argv[1], "encrypt") == 0) { if (argc != 3) { - printf("Usage: %s encrypt \n", argv[0]); + printf("Usage: %s encrypt \n", argv[0]); return 1; } return encrypt_text(argv[2]); } else if (strcmp(argv[1], "decrypt") == 0) { if (argc != 3) { - printf("Usage: %s decrypt \n", argv[0]); + printf("Usage: %s decrypt \n", argv[0]); return 1; } return decrypt_text(argv[2]); @@ -191,7 +191,7 @@ void show_main_menu(void) { printf("\033[4mL\033[0mist available pads\n"); printf("\033[4mS\033[0mhow pad information\n"); printf("E\033[4mx\033[0mit\n"); - printf("\nSelect option (G/E/D/L/S/X): "); + printf("\nSelect option: "); } int handle_generate_menu(void) { @@ -242,7 +242,7 @@ int handle_encrypt_menu(void) { return 1; } - printf("\nEnter pad selection (number, hash, or prefix): "); + printf("\nEnter pad selection (number, chksum, or prefix): "); char input[MAX_HASH_LENGTH]; if (!fgets(input, sizeof(input), stdin)) { printf("Error: Failed to read input\n"); @@ -255,7 +255,7 @@ int handle_encrypt_menu(void) { int handle_decrypt_menu(void) { printf("\n=== Decrypt Message ===\n"); - return decrypt_text(NULL); // No pad selection needed - hash comes from message + return decrypt_text(NULL); // No pad selection needed - chksum comes from message } uint64_t parse_size_string(const char* size_str) { @@ -316,7 +316,7 @@ char* find_pad_by_prefix(const char* prefix) { int current = 0; rewinddir(dir); while ((entry = readdir(dir)) != NULL && match_count == 0) { - if (strstr(entry->d_name, ".pad") && strlen(entry->d_name) == 68) { // 64 char hash + ".pad" + if (strstr(entry->d_name, ".pad") && strlen(entry->d_name) == 68) { // 64 char chksum + ".pad" current++; if (current == selection) { matches[match_count] = malloc(65); @@ -383,9 +383,9 @@ int list_available_pads(void) { while ((entry = readdir(dir)) != NULL) { if (strstr(entry->d_name, ".pad") && strlen(entry->d_name) == 68) { count++; - char hash[65]; - strncpy(hash, entry->d_name, 64); - hash[64] = '\0'; + char chksum[65]; + strncpy(chksum, entry->d_name, 64); + chksum[64] = '\0'; // Get pad file size char full_path[300]; // Increased buffer size to accommodate longer paths @@ -394,7 +394,7 @@ int list_available_pads(void) { if (stat(full_path, &st) == 0) { // Get used bytes from state uint64_t used_bytes; - read_state_offset(hash, &used_bytes); + read_state_offset(chksum, &used_bytes); // Format sizes char size_str[32], used_str[32]; @@ -424,7 +424,7 @@ int list_available_pads(void) { // Calculate percentage double percentage = (double)used_bytes / st.st_size * 100.0; - printf("%-4d %-20.16s %-12s %-12s %.1f%%\n", count, hash, size_str, used_str, percentage); + printf("%-4d %-20.16s %-12s %-12s %.1f%%\n", count, chksum, size_str, used_str, percentage); } } } @@ -438,24 +438,24 @@ int list_available_pads(void) { return count; } -int show_pad_info(const char* hash) { +int show_pad_info(const char* chksum) { char pad_filename[MAX_HASH_LENGTH + 10]; char state_filename[MAX_HASH_LENGTH + 10]; - snprintf(pad_filename, sizeof(pad_filename), "%s.pad", hash); - snprintf(state_filename, sizeof(state_filename), "%s.state", hash); + snprintf(pad_filename, sizeof(pad_filename), "%s.pad", chksum); + snprintf(state_filename, sizeof(state_filename), "%s.state", chksum); struct stat st; if (stat(pad_filename, &st) != 0) { - printf("Pad not found: %s\n", hash); + printf("Pad not found: %s\n", chksum); return 1; } uint64_t used_bytes; - read_state_offset(hash, &used_bytes); + read_state_offset(chksum, &used_bytes); printf("=== Pad Information ===\n"); - printf("Hash: %s\n", hash); + printf("Hash: %s\n", chksum); printf("File: %s\n", pad_filename); double size_gb = (double)st.st_size / (1024.0 * 1024.0 * 1024.0); @@ -505,7 +505,7 @@ int generate_pad(uint64_t size_bytes, int display_progress) { char temp_filename[32]; char pad_filename[MAX_HASH_LENGTH + 10]; char state_filename[MAX_HASH_LENGTH + 10]; - char hash_hex[MAX_HASH_LENGTH]; + char chksum_hex[MAX_HASH_LENGTH]; // Create temporary filename snprintf(temp_filename, sizeof(temp_filename), "temp_%ld.pad", time(NULL)); @@ -569,18 +569,18 @@ int generate_pad(uint64_t size_bytes, int display_progress) { fclose(pad_file); // Calculate XOR checksum of the pad file - if (calculate_checksum(temp_filename, hash_hex) != 0) { + if (calculate_checksum(temp_filename, chksum_hex) != 0) { printf("Error: Cannot calculate pad checksum\n"); unlink(temp_filename); return 1; } - // Rename file to its hash - snprintf(pad_filename, sizeof(pad_filename), "%s.pad", hash_hex); - snprintf(state_filename, sizeof(state_filename), "%s.state", hash_hex); + // Rename file to its chksum + snprintf(pad_filename, sizeof(pad_filename), "%s.pad", chksum_hex); + snprintf(state_filename, sizeof(state_filename), "%s.state", chksum_hex); if (rename(temp_filename, pad_filename) != 0) { - printf("Error: Cannot rename pad file to hash-based name\n"); + printf("Error: Cannot rename pad file to chksum-based name\n"); unlink(temp_filename); return 1; } @@ -591,7 +591,7 @@ int generate_pad(uint64_t size_bytes, int display_progress) { } // Initialize state file with offset 0 - if (write_state_offset(hash_hex, 0) != 0) { + if (write_state_offset(chksum_hex, 0) != 0) { printf("Error: Failed to create state file\n"); unlink(pad_filename); return 1; @@ -599,7 +599,7 @@ int generate_pad(uint64_t size_bytes, int display_progress) { double size_gb = (double)size_bytes / (1024.0 * 1024.0 * 1024.0); printf("Generated pad: %s (%.2f GB)\n", pad_filename, size_gb); - printf("Pad hash: %s\n", hash_hex); + printf("Pad chksum: %s\n", chksum_hex); printf("State file: %s\n", state_filename); printf("Pad file set to read-only\n"); @@ -615,7 +615,7 @@ int generate_pad_with_entropy(uint64_t size_bytes, int display_progress, int use char temp_filename[64]; char pad_path[MAX_HASH_LENGTH + 20]; char state_path[MAX_HASH_LENGTH + 20]; - char hash_hex[MAX_HASH_LENGTH]; + char chksum_hex[MAX_HASH_LENGTH]; // Create temporary filename snprintf(temp_filename, sizeof(temp_filename), "temp_%ld.pad", time(NULL)); @@ -753,14 +753,14 @@ int generate_pad_with_entropy(uint64_t size_bytes, int display_progress, int use fclose(pad_file); // Calculate XOR checksum of the pad file - if (calculate_checksum(temp_filename, hash_hex) != 0) { + if (calculate_checksum(temp_filename, chksum_hex) != 0) { printf("Error: Cannot calculate pad checksum\n"); unlink(temp_filename); return 1; } // Get final paths in pads directory - get_pad_path(hash_hex, pad_path, state_path); + get_pad_path(chksum_hex, pad_path, state_path); if (rename(temp_filename, pad_path) != 0) { printf("Error: Cannot move pad file to pads directory\n"); @@ -787,7 +787,7 @@ int generate_pad_with_entropy(uint64_t size_bytes, int display_progress, int use double size_gb = (double)size_bytes / (1024.0 * 1024.0 * 1024.0); printf("Generated pad: %s (%.2f GB)\n", pad_path, size_gb); - printf("Pad checksum: %s\n", hash_hex); + printf("Pad checksum: %s\n", chksum_hex); printf("State file: %s\n", state_path); if (use_keyboard_entropy) { printf("Enhanced with keyboard entropy!\n"); @@ -798,30 +798,30 @@ int generate_pad_with_entropy(uint64_t size_bytes, int display_progress, int use } int encrypt_text(const char* pad_identifier) { - char* pad_hash = find_pad_by_prefix(pad_identifier); - if (!pad_hash) { + char* pad_chksum = find_pad_by_prefix(pad_identifier); + if (!pad_chksum) { return 1; } char input_text[MAX_INPUT_SIZE]; - char hash_hex[MAX_HASH_LENGTH]; + char chksum_hex[MAX_HASH_LENGTH]; uint64_t current_offset; char pad_path[MAX_HASH_LENGTH + 20]; char state_path[MAX_HASH_LENGTH + 20]; - get_pad_path(pad_hash, pad_path, state_path); + get_pad_path(pad_chksum, pad_path, state_path); // Check if pad file exists if (access(pad_path, R_OK) != 0) { printf("Error: Pad file %s not found\n", pad_path); - free(pad_hash); + free(pad_chksum); return 1; } // Read current offset - if (read_state_offset(pad_hash, ¤t_offset) != 0) { + if (read_state_offset(pad_chksum, ¤t_offset) != 0) { printf("Error: Cannot read state file\n"); - free(pad_hash); + free(pad_chksum); return 1; } @@ -829,15 +829,15 @@ int encrypt_text(const char* pad_identifier) { if (current_offset < 32) { printf("Warning: State offset below reserved area, adjusting to 32\n"); current_offset = 32; - if (write_state_offset(pad_hash, current_offset) != 0) { + if (write_state_offset(pad_chksum, current_offset) != 0) { printf("Warning: Failed to update state file\n"); } } // Calculate XOR checksum of pad file - if (calculate_checksum(pad_path, hash_hex) != 0) { + if (calculate_checksum(pad_path, chksum_hex) != 0) { printf("Error: Cannot calculate pad checksum\n"); - free(pad_hash); + free(pad_chksum); return 1; } @@ -847,7 +847,7 @@ int encrypt_text(const char* pad_identifier) { if (fgets(input_text, sizeof(input_text), stdin) == NULL) { printf("Error: Failed to read input\n"); - free(pad_hash); + free(pad_chksum); return 1; } @@ -860,7 +860,7 @@ int encrypt_text(const char* pad_identifier) { if (input_len == 0) { printf("Error: No input provided\n"); - free(pad_hash); + free(pad_chksum); return 1; } @@ -868,7 +868,7 @@ int encrypt_text(const char* pad_identifier) { struct stat pad_stat; if (stat(pad_path, &pad_stat) != 0) { printf("Error: Cannot get pad file size\n"); - free(pad_hash); + free(pad_chksum); return 1; } @@ -876,7 +876,7 @@ int encrypt_text(const char* pad_identifier) { printf("Error: Not enough pad space remaining\n"); printf("Need: %lu bytes, Available: %lu bytes\n", input_len, (uint64_t)pad_stat.st_size - current_offset); - free(pad_hash); + free(pad_chksum); return 1; } @@ -884,14 +884,14 @@ int encrypt_text(const char* pad_identifier) { FILE* pad_file = fopen(pad_path, "rb"); if (!pad_file) { printf("Error: Cannot open pad file\n"); - free(pad_hash); + free(pad_chksum); return 1; } if (fseek(pad_file, current_offset, SEEK_SET) != 0) { printf("Error: Cannot seek to offset in pad file\n"); fclose(pad_file); - free(pad_hash); + free(pad_chksum); return 1; } @@ -900,7 +900,7 @@ int encrypt_text(const char* pad_identifier) { printf("Error: Cannot read pad data\n"); free(pad_data); fclose(pad_file); - free(pad_hash); + free(pad_chksum); return 1; } fclose(pad_file); @@ -915,14 +915,14 @@ int encrypt_text(const char* pad_identifier) { char* base64_cipher = custom_base64_encode(ciphertext, input_len); // Update state offset - if (write_state_offset(pad_hash, current_offset + input_len) != 0) { + if (write_state_offset(pad_chksum, current_offset + input_len) != 0) { printf("Warning: Failed to update state file\n"); } // Output in ASCII armor format printf("\n-----BEGIN OTP MESSAGE-----\n"); printf("Version: %s\n", get_version()); - printf("Pad-Hash: %s\n", hash_hex); + printf("Pad-Hash: %s\n", chksum_hex); printf("Pad-Offset: %lu\n", current_offset); printf("\n"); @@ -938,18 +938,18 @@ int encrypt_text(const char* pad_identifier) { free(pad_data); free(ciphertext); free(base64_cipher); - free(pad_hash); + free(pad_chksum); return 0; } int decrypt_text(const char* pad_identifier) { - // For command line mode, pad_identifier is ignored - we'll get the hash from the message + // For command line mode, pad_identifier is ignored - we'll get the chksum from the message (void)pad_identifier; // Suppress unused parameter warning char line[MAX_LINE_LENGTH]; - char stored_hash[MAX_HASH_LENGTH]; - char current_hash[MAX_HASH_LENGTH]; + char stored_chksum[MAX_HASH_LENGTH]; + char current_chksum[MAX_HASH_LENGTH]; uint64_t pad_offset; char base64_data[MAX_INPUT_SIZE * 2] = {0}; int in_data_section = 0; @@ -973,8 +973,8 @@ int decrypt_text(const char* pad_identifier) { if (!found_begin) continue; if (strncmp(line, "Pad-Hash: ", 10) == 0) { - strncpy(stored_hash, line + 10, 64); - stored_hash[64] = '\0'; + strncpy(stored_chksum, line + 10, 64); + stored_chksum[64] = '\0'; } else if (strncmp(line, "Pad-Offset: ", 12) == 0) { pad_offset = strtoull(line + 12, NULL, 10); @@ -992,29 +992,29 @@ int decrypt_text(const char* pad_identifier) { return 1; } - // Now we have the pad hash from the message, construct filename + // Now we have the pad chksum from the message, construct filename char pad_path[MAX_HASH_LENGTH + 20]; char state_path[MAX_HASH_LENGTH + 20]; - get_pad_path(stored_hash, pad_path, state_path); + get_pad_path(stored_chksum, pad_path, state_path); // Check if we have this pad if (access(pad_path, R_OK) != 0) { - printf("Error: Required pad not found: %s\n", stored_hash); + printf("Error: Required pad not found: %s\n", stored_chksum); printf("Available pads:\n"); list_available_pads(); return 1; } // Verify pad integrity - if (calculate_checksum(pad_path, current_hash) != 0) { + if (calculate_checksum(pad_path, current_chksum) != 0) { printf("Error: Cannot calculate current pad checksum\n"); return 1; } - if (strcmp(stored_hash, current_hash) != 0) { + if (strcmp(stored_chksum, current_chksum) != 0) { printf("Warning: Pad integrity check failed!\n"); - printf("Expected: %s\n", stored_hash); - printf("Current: %s\n", current_hash); + printf("Expected: %s\n", stored_chksum); + printf("Current: %s\n", current_chksum); printf("Continue anyway? (y/N): "); fflush(stdout); @@ -1078,9 +1078,9 @@ int decrypt_text(const char* pad_identifier) { return 0; } -int read_state_offset(const char* pad_hash, uint64_t* offset) { +int read_state_offset(const char* pad_chksum, uint64_t* offset) { char state_filename[MAX_HASH_LENGTH + 20]; - snprintf(state_filename, sizeof(state_filename), "%s/%s.state", PADS_DIR, pad_hash); + snprintf(state_filename, sizeof(state_filename), "%s/%s.state", PADS_DIR, pad_chksum); FILE* state_file = fopen(state_filename, "rb"); if (!state_file) { @@ -1098,9 +1098,9 @@ int read_state_offset(const char* pad_hash, uint64_t* offset) { return 0; } -int write_state_offset(const char* pad_hash, uint64_t offset) { +int write_state_offset(const char* pad_chksum, uint64_t offset) { char state_filename[MAX_HASH_LENGTH + 20]; - snprintf(state_filename, sizeof(state_filename), "%s/%s.state", PADS_DIR, pad_hash); + snprintf(state_filename, sizeof(state_filename), "%s/%s.state", PADS_DIR, pad_chksum); FILE* state_file = fopen(state_filename, "wb"); if (!state_file) { @@ -1249,9 +1249,9 @@ int ensure_pads_directory(void) { return 0; } -void get_pad_path(const char* hash, char* pad_path, char* state_path) { - snprintf(pad_path, MAX_HASH_LENGTH + 20, "%s/%s.pad", PADS_DIR, hash); - snprintf(state_path, MAX_HASH_LENGTH + 20, "%s/%s.state", PADS_DIR, hash); +void get_pad_path(const char* chksum, char* pad_path, char* state_path) { + snprintf(pad_path, MAX_HASH_LENGTH + 20, "%s/%s.pad", PADS_DIR, chksum); + snprintf(state_path, MAX_HASH_LENGTH + 20, "%s/%s.state", PADS_DIR, chksum); } @@ -1351,5 +1351,5 @@ void print_usage(const char* program_name) { printf(" %s decrypt - Decrypt message\n", program_name); printf(" %s list - List available pads\n", program_name); printf("\nSize examples: 1GB, 5TB, 512MB, 2048 (bytes)\n"); - printf("Pad selection: Full hash, prefix, or number from list\n"); + printf("Pad selection: Full chksum, prefix, or number from list\n"); }