Version v0.2.18 - Remove original filename from binary .otp file format - simplify file structure

This commit is contained in:
2025-08-10 15:05:36 -04:00
parent 268758a21b
commit 0cdf6e7804

45
otp.c
View File

@@ -1445,16 +1445,6 @@ int encrypt_file(const char* pad_identifier, const char* input_file, const char*
// Pad offset: 8 bytes
fwrite(&current_offset, sizeof(uint64_t), 1, output_fp);
// Original filename length and name
const char* base_filename = strrchr(input_file, '/');
if (base_filename) {
base_filename++; // Skip the '/'
} else {
base_filename = input_file;
}
uint16_t filename_len = strlen(base_filename);
fwrite(&filename_len, sizeof(uint16_t), 1, output_fp);
fwrite(base_filename, 1, filename_len, output_fp);
// File mode: 4 bytes
uint32_t file_mode = input_stat.st_mode;
@@ -1527,7 +1517,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
uint16_t version;
unsigned char pad_chksum_bin[32];
uint64_t pad_offset;
uint16_t filename_len;
uint32_t file_mode;
uint64_t file_size;
@@ -1535,7 +1524,8 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
fread(&version, sizeof(uint16_t), 1, input_fp) != 1 ||
fread(pad_chksum_bin, 1, 32, input_fp) != 32 ||
fread(&pad_offset, sizeof(uint64_t), 1, input_fp) != 1 ||
fread(&filename_len, sizeof(uint16_t), 1, input_fp) != 1) {
fread(&file_mode, sizeof(uint32_t), 1, input_fp) != 1 ||
fread(&file_size, sizeof(uint64_t), 1, input_fp) != 1) {
printf("Error: Cannot read binary header\n");
fclose(input_fp);
return 1;
@@ -1547,25 +1537,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
return 1;
}
// Read original filename
char* original_filename = malloc(filename_len + 1);
if (fread(original_filename, 1, filename_len, input_fp) != filename_len) {
printf("Error: Cannot read original filename\n");
free(original_filename);
fclose(input_fp);
return 1;
}
original_filename[filename_len] = '\0';
// Read remaining header
if (fread(&file_mode, sizeof(uint32_t), 1, input_fp) != 1 ||
fread(&file_size, sizeof(uint64_t), 1, input_fp) != 1) {
printf("Error: Cannot read file metadata\n");
free(original_filename);
fclose(input_fp);
return 1;
}
// Convert binary checksum to hex
char pad_chksum_hex[65];
for (int i = 0; i < 32; i++) {
@@ -1574,7 +1545,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
pad_chksum_hex[64] = '\0';
printf("Decrypting binary file...\n");
printf("Original filename: %s\n", original_filename);
printf("File size: %lu bytes\n", file_size);
// Check if we have the required pad
@@ -1586,7 +1556,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
printf("Error: Required pad not found: %s\n", pad_chksum_hex);
printf("Available pads:\n");
list_available_pads();
free(original_filename);
fclose(input_fp);
return 1;
}
@@ -1594,8 +1563,7 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
// Determine output filename
char default_output[512];
if (output_file == NULL) {
strncpy(default_output, original_filename, sizeof(default_output) - 1);
default_output[sizeof(default_output) - 1] = '\0';
snprintf(default_output, sizeof(default_output), "decrypted.bin");
output_file = default_output;
}
@@ -1603,7 +1571,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
unsigned char* encrypted_data = malloc(file_size);
if (fread(encrypted_data, 1, file_size, input_fp) != file_size) {
printf("Error: Cannot read encrypted data\n");
free(original_filename);
free(encrypted_data);
fclose(input_fp);
return 1;
@@ -1614,14 +1581,12 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
FILE* pad_file = fopen(pad_path, "rb");
if (!pad_file) {
printf("Error: Cannot open pad file\n");
free(original_filename);
free(encrypted_data);
return 1;
}
if (fseek(pad_file, pad_offset, SEEK_SET) != 0) {
printf("Error: Cannot seek to offset in pad file\n");
free(original_filename);
free(encrypted_data);
fclose(pad_file);
return 1;
@@ -1630,7 +1595,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
unsigned char* pad_data = malloc(file_size);
if (fread(pad_data, 1, file_size, pad_file) != file_size) {
printf("Error: Cannot read pad data\n");
free(original_filename);
free(encrypted_data);
free(pad_data);
fclose(pad_file);
@@ -1647,7 +1611,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
FILE* output_fp = fopen(output_file, "wb");
if (!output_fp) {
printf("Error: Cannot create output file %s\n", output_file);
free(original_filename);
free(encrypted_data);
free(pad_data);
return 1;
@@ -1655,7 +1618,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
if (fwrite(encrypted_data, 1, file_size, output_fp) != file_size) {
printf("Error: Cannot write decrypted data\n");
free(original_filename);
free(encrypted_data);
free(pad_data);
fclose(output_fp);
@@ -1672,7 +1634,6 @@ int decrypt_binary_file(FILE* input_fp, const char* output_file) {
printf("Restored permissions and metadata\n");
// Cleanup
free(original_filename);
free(encrypted_data);
free(pad_data);