Compare commits

...

3 Commits

12 changed files with 52 additions and 56 deletions

View File

@@ -289,6 +289,10 @@ build_project() {
fi
fi
# Clean up object files after successful build
print_status "Cleaning up object files..."
rm -f src/*.o
# Create Gitea release with binaries
if [ -f "$HOME/.gitea_token" ]; then
create_gitea_release "$NEW_VERSION"

1
otp Symbolic link
View File

@@ -0,0 +1 @@
./build/otp-x86_64

View File

@@ -5,7 +5,7 @@
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include "otp.h"
#include "main.h"
#define PROGRESS_UPDATE_INTERVAL (64 * 1024 * 1024) // 64MB intervals

View File

@@ -16,7 +16,7 @@
#include <fcntl.h>
#include <math.h>
#include "nostr_chacha20.h"
#include "otp.h"
#include "main.h"
// In-place pad entropy addition using Chacha20 or direct XOR

View File

@@ -15,7 +15,7 @@
#include <termios.h>
#include <fcntl.h>
#include <math.h>
#include "otp.h"
#include "main.h"
int main(int argc, char* argv[]) {
// Initialize terminal dimensions first

View File

@@ -1,12 +1,12 @@
#ifndef OTP_H
#define OTP_H
#ifndef MAIN_H
#define MAIN_H
////////////////////////////////////////////////////////////////////////////////
// OTP CIPHER - FUNCTION PROTOTYPES HEADER
// OTP CIPHER - MAIN HEADER FILE
// One Time Pad Implementation v0.2.109
//
// This header file contains all function prototypes extracted from otp.c
// Organized by functional categories for better maintainability
// This header file contains all function prototypes and type definitions
// for the OTP Cipher project
////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
@@ -335,4 +335,4 @@ char* select_pad_interactive(const char* title, const char* prompt, pad_filter_t
// Help and usage display
void print_usage(const char* program_name);
#endif // OTP_H
#endif // MAIN_H

View File

@@ -1,35 +0,0 @@
#define _POSIX_C_SOURCE 200809L
#define _DEFAULT_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
#include <sys/ioctl.h>
#include <dirent.h>
#include <time.h>
#include <ctype.h>
#include <termios.h>
#include <fcntl.h>
#include <math.h>
#include "nostr_chacha20.h"
#include "otp.h"
#define MAX_INPUT_SIZE 4096
#define MAX_LINE_LENGTH 1024
#define MAX_HASH_LENGTH 65
#define PROGRESS_UPDATE_INTERVAL (64 * 1024 * 1024) // 64MB intervals
#define DEFAULT_PADS_DIR "pads"
#define FILES_DIR "files"
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// GLOBAL VARIABLES
///////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
char current_pads_dir[512] = DEFAULT_PADS_DIR;

View File

@@ -16,7 +16,7 @@
#include <fcntl.h>
#include <math.h>
#include <errno.h>
#include "otp.h"
#include "main.h"
// Extracted pad management functions from otp.c
@@ -89,7 +89,10 @@ int generate_pad(uint64_t size_bytes, int display_progress) {
const char* pads_dir = get_current_pads_dir();
struct statvfs stat;
if (statvfs(pads_dir, &stat) == 0) {
uint64_t available_bytes = stat.f_bavail * stat.f_frsize;
// Use f_bfree (total free blocks) instead of f_bavail (available to non-root)
// This gives the actual free space on the filesystem, which is more accurate
// for removable media and user-owned directories
uint64_t available_bytes = stat.f_bfree * stat.f_frsize;
double available_gb = (double)available_bytes / (1024.0 * 1024.0 * 1024.0);
double required_gb = (double)size_bytes / (1024.0 * 1024.0 * 1024.0);
@@ -233,7 +236,25 @@ int read_state_offset(const char* pad_chksum, uint64_t* offset) {
const char* pads_dir = get_current_pads_dir();
snprintf(state_filename, sizeof(state_filename), "%s/%s.state", pads_dir, pad_chksum);
FILE* state_file = fopen(state_filename, "rb");
FILE* state_file = fopen(state_filename, "r");
if (!state_file) {
*offset = 0;
return 0;
}
// Try to read as text format first (new format)
char line[128];
if (fgets(line, sizeof(line), state_file)) {
// Check if it's text format (starts with "offset=")
if (strncmp(line, "offset=", 7) == 0) {
*offset = strtoull(line + 7, NULL, 10);
fclose(state_file);
return 0;
}
// Not text format, try binary format (legacy)
fclose(state_file);
state_file = fopen(state_filename, "rb");
if (!state_file) {
*offset = 0;
return 0;
@@ -244,8 +265,12 @@ int read_state_offset(const char* pad_chksum, uint64_t* offset) {
*offset = 0;
return 0;
}
fclose(state_file);
return 0;
}
fclose(state_file);
*offset = 0;
return 0;
}
@@ -254,12 +279,13 @@ int write_state_offset(const char* pad_chksum, uint64_t offset) {
const char* pads_dir = get_current_pads_dir();
snprintf(state_filename, sizeof(state_filename), "%s/%s.state", pads_dir, pad_chksum);
FILE* state_file = fopen(state_filename, "wb");
FILE* state_file = fopen(state_filename, "w");
if (!state_file) {
return 1;
}
if (fwrite(&offset, sizeof(uint64_t), 1, state_file) != 1) {
// Write in text format for human readability
if (fprintf(state_file, "offset=%lu\n", offset) < 0) {
fclose(state_file);
return 1;
}

View File

@@ -1,6 +1,6 @@
#include <string.h>
#include <stdlib.h>
#include "otp.h"
#include "main.h"
// Global state variables
static char current_pads_dir[512] = DEFAULT_PADS_DIR;

View File

@@ -17,7 +17,7 @@
#include <math.h>
#include <errno.h>
#include "nostr_chacha20.h"
#include "otp.h"
#include "main.h"
// Basic TrueRNG entropy collection function
int collect_truerng_entropy(unsigned char* entropy_buffer, size_t target_bytes, size_t* collected_bytes, int display_progress) {

View File

@@ -15,7 +15,7 @@
#include <termios.h>
#include <fcntl.h>
#include <math.h>
#include "otp.h"
#include "main.h"
// Initialize terminal dimensions
void init_terminal_dimensions(void) {

View File

@@ -15,7 +15,7 @@
#include <termios.h>
#include <fcntl.h>
#include <math.h>
#include "otp.h"
#include "main.h"
// Global variables for preferences
static char default_pad_path[1024] = "";