diff --git a/.gitignore b/.gitignore index 87ba8f4..d7680e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,26 @@ -otp +# Build artifacts +build/ +*.o +src/*.o + +# Runtime directories pads/ files/ + +# Personal files Gemini.md TropicOfCancer-HenryMiller.txt .gitea_token true_rng/ Trash/ -# Auto-generated files (none currently) + +# Test binaries +debug +test_swiftrng +test_swiftrng_debug +test_swiftrng_detailed +test_truerng + +# Temporary files +*.pad +*.state diff --git a/Makefile b/Makefile index b5b7a6f..031e5b3 100644 --- a/Makefile +++ b/Makefile @@ -1,29 +1,32 @@ CC = gcc -CFLAGS = -Wall -Wextra -std=c99 -Iinclude +CFLAGS = -Wall -Wextra -std=c99 -Isrc LIBS = -lm LIBS_STATIC = -static -lm -TARGET = otp -SOURCES = $(wildcard src/*.c) nostr_chacha20.c otp.c +ARCH = $(shell uname -m) +TARGET = build/otp-$(ARCH) +SOURCES = $(wildcard src/*.c) OBJS = $(SOURCES:.c=.o) # Default build target $(TARGET): $(OBJS) + @mkdir -p build $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LIBS) # Static linking target static: $(OBJS) + @mkdir -p build $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LIBS_STATIC) %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ clean: - rm -f $(TARGET) $(OBJS) *.pad *.state + rm -f $(OBJS) src/*.o build/otp-* *.pad *.state install: - sudo cp $(TARGET) /usr/local/bin/ + sudo cp $(TARGET) /usr/local/bin/otp uninstall: - sudo rm -f /usr/local/bin/$(TARGET) + sudo rm -f /usr/local/bin/otp .PHONY: clean install uninstall static diff --git a/build.sh b/build.sh index 1addf13..5f6116f 100755 --- a/build.sh +++ b/build.sh @@ -148,18 +148,18 @@ update_source_version() { print_status "Updating version strings in source code..." - # Replace hardcoded version strings in otp.c with the current git tag - if [ -f "otp.c" ]; then + # Replace hardcoded version strings in src/otp.c with the current git tag + if [ -f "src/otp.c" ]; then # Update main menu version - sed -i "s/OTP v[0-9]\+\.[0-9]\+\.[0-9]\+/OTP $NEW_VERSION/g" otp.c + sed -i "s/OTP v[0-9]\+\.[0-9]\+\.[0-9]\+/OTP $NEW_VERSION/g" src/otp.c # Update ASCII output version - sed -i "s/Version: v[0-9]\+\.[0-9]\+\.[0-9]\+/Version: $NEW_VERSION/g" otp.c + sed -i "s/Version: v[0-9]\+\.[0-9]\+\.[0-9]\+/Version: $NEW_VERSION/g" src/otp.c # Update usage/help text version - sed -i "s/Implementation v[0-9]\+\.[0-9]\+\.[0-9]\+/Implementation $NEW_VERSION/g" otp.c + sed -i "s/Implementation v[0-9]\+\.[0-9]\+\.[0-9]\+/Implementation $NEW_VERSION/g" src/otp.c - print_success "Updated version strings in otp.c to $NEW_VERSION" + print_success "Updated version strings in src/otp.c to $NEW_VERSION" else - print_warning "otp.c not found - skipping version string updates" + print_warning "src/otp.c not found - skipping version string updates" fi } @@ -235,16 +235,16 @@ create_gitea_release() { if echo "$response" | grep -q '"id"'; then print_success "Created release $version" - # Upload binaries with descriptive names - upload_release_asset "$api_url" "$token" "$version" "otp-x86_64" "otp-${version}-linux-x86_64" - upload_release_asset "$api_url" "$token" "$version" "otp-arm64" "otp-${version}-linux-arm64" + # Upload binaries with descriptive names from build directory + upload_release_asset "$api_url" "$token" "$version" "build/otp-x86_64" "otp-${version}-linux-x86_64" + upload_release_asset "$api_url" "$token" "$version" "build/otp-arm64" "otp-${version}-linux-arm64" else print_warning "Release may already exist or creation failed" print_status "Response: $response" # Try to upload to existing release anyway - upload_release_asset "$api_url" "$token" "$version" "otp-x86_64" "otp-${version}-linux-x86_64" - upload_release_asset "$api_url" "$token" "$version" "otp-arm64" "otp-${version}-linux-arm64" + upload_release_asset "$api_url" "$token" "$version" "build/otp-x86_64" "otp-${version}-linux-x86_64" + upload_release_asset "$api_url" "$token" "$version" "build/otp-arm64" "otp-${version}-linux-arm64" fi } @@ -259,9 +259,8 @@ build_project() { # Build x86_64 only print_status "Building OTP project for x86_64..." - make CC=gcc + make CC=gcc ARCH=x86_64 if [ $? -eq 0 ]; then - mv otp otp-x86_64 print_success "x86_64 build completed successfully" else print_error "x86_64 build failed" @@ -271,9 +270,8 @@ build_project() { # Build both architectures print_status "Building OTP project for x86_64..." make clean - make CC=gcc + make CC=gcc ARCH=x86_64 if [ $? -eq 0 ]; then - mv otp otp-x86_64 print_success "x86_64 build completed successfully" else print_error "x86_64 build failed" @@ -282,9 +280,8 @@ build_project() { print_status "Building OTP project for ARM64/AArch64..." make clean - make CC=aarch64-linux-gnu-gcc + make CC=aarch64-linux-gnu-gcc ARCH=arm64 if [ $? -eq 0 ]; then - mv otp otp-arm64 print_success "ARM64/AArch64 build completed successfully" else print_error "ARM64/AArch64 build failed" @@ -306,8 +303,8 @@ build_project() { clean_project() { print_status "Cleaning build artifacts..." make clean - # Remove cross-compiled binaries - rm -f otp-x86_64 otp-arm64 + # Remove build directory + rm -rf build print_success "Clean completed" } @@ -362,8 +359,8 @@ case "$COMMAND" in echo " uninstall - Remove from system" echo "" echo "Build Output:" - echo " otp-x86_64 - Native x86_64 binary" - echo " otp-arm64 - ARM64/AArch64 binary for Raspberry Pi (if cross-compiler available)" + echo " build/otp-x86_64 - Native x86_64 binary" + echo " build/otp-arm64 - ARM64/AArch64 binary for Raspberry Pi (if cross-compiler available)" echo "" echo "Gitea Integration:" echo " - Automatically creates releases with binaries if ~/.gitea_token exists" diff --git a/otp.h b/otp.h deleted file mode 100644 index 0f11ddf..0000000 --- a/otp.h +++ /dev/null @@ -1,329 +0,0 @@ -#ifndef OTP_H -#define OTP_H - -//////////////////////////////////////////////////////////////////////////////// -// OTP CIPHER - FUNCTION PROTOTYPES HEADER -// 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 -//////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Constants -#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" -#define MAX_ENTROPY_BUFFER (4 * 1024 * 1024) // 4MB entropy buffer for large operations - -//////////////////////////////////////////////////////////////////////////////// -// TYPE DEFINITIONS -//////////////////////////////////////////////////////////////////////////////// - -// Decrypt operation modes for universal decrypt function -typedef enum { - DECRYPT_MODE_INTERACTIVE, // Interactive text decryption with prompts - DECRYPT_MODE_SILENT, // Silent text decryption (no prompts/labels) - DECRYPT_MODE_FILE_TO_TEXT, // File to text output with prompts - DECRYPT_MODE_FILE_TO_FILE // File to file output (binary) -} decrypt_mode_t; - -// Pad filter types for selection functions -typedef enum { - PAD_FILTER_ALL, // Show all pads - PAD_FILTER_UNUSED_ONLY // Show only unused pads (0% usage) -} pad_filter_type_t; - -// Enhanced entropy system state structure -typedef struct { - size_t target_bytes; // Target entropy to collect - size_t collected_bytes; // Bytes collected so far - size_t unique_keys; // Number of unique keys pressed - double collection_start_time; // Start timestamp - double last_keypress_time; // Last keypress timestamp - unsigned char quality_score; // Entropy quality (0-100) - int auto_complete_enabled; // Allow auto-complete at minimum - unsigned char key_histogram[256]; // Track key frequency -} entropy_collection_state_t; - -//////////////////////////////////////////////////////////////////////////////// -// CORE APPLICATION FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Main application entry points -int main(int argc, char* argv[]); -int interactive_mode(void); -int command_line_mode(int argc, char* argv[]); -int pipe_mode(int argc, char* argv[], const char* piped_text); - -//////////////////////////////////////////////////////////////////////////////// -// INPUT/OUTPUT DETECTION FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Stdin detection functions -int has_stdin_data(void); -char* read_stdin_text(void); - -//////////////////////////////////////////////////////////////////////////////// -// PREFERENCES MANAGEMENT FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Configuration and preferences handling -int load_preferences(void); -int save_preferences(void); -char* get_preference(const char* key); -int set_preference(const char* key, const char* value); -char* get_default_pad_path(void); -int set_default_pad_path(const char* pad_path); - -//////////////////////////////////////////////////////////////////////////////// -// HARDWARE DETECTION FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// OTP thumb drive detection function -int detect_otp_thumb_drive(char* otp_drive_path, size_t path_size); - -//////////////////////////////////////////////////////////////////////////////// -// USB DRIVE MANAGEMENT FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////////// -// EXTERNAL TOOL INTEGRATION FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Editor and file manager functions -char* get_preferred_editor(void); -char* get_preferred_file_manager(void); -int launch_text_editor(const char* initial_content, char* result_buffer, size_t buffer_size); -int launch_file_manager(const char* start_directory, char* selected_file, size_t buffer_size); - -//////////////////////////////////////////////////////////////////////////////// -// CORE CRYPTOGRAPHIC OPERATIONS -//////////////////////////////////////////////////////////////////////////////// - -// Primary encryption/decryption functions -int generate_pad(uint64_t size_bytes, int show_progress); -int encrypt_text(const char* pad_identifier, const char* input_text); -int decrypt_text(const char* pad_identifier, const char* encrypted_message); -int encrypt_file(const char* pad_identifier, const char* input_file, const char* output_file, int ascii_armor); -int decrypt_file(const char* input_file, const char* output_file); -int decrypt_binary_file(FILE* input_fp, const char* output_file); -int decrypt_ascii_file(const char* input_file, const char* output_file); - -//////////////////////////////////////////////////////////////////////////////// -// ENHANCED ENTROPY SYSTEM FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Entropy source types -typedef enum { - ENTROPY_SOURCE_KEYBOARD = 1, - ENTROPY_SOURCE_DICE = 2, - ENTROPY_SOURCE_TRUERNG = 3, - ENTROPY_SOURCE_FILE = 4 -} entropy_source_t; - -// Terminal control for entropy collection -int setup_raw_terminal(struct termios* original_termios); -void restore_terminal(struct termios* original_termios); - -// Entropy collection and feedback -int collect_entropy_with_feedback(unsigned char* entropy_buffer, size_t target_bytes, - size_t* collected_bytes, int allow_early_exit); -void display_entropy_progress(const entropy_collection_state_t* state); -void draw_progress_bar(double percentage, int width); -void draw_quality_bar(double quality, int width, const char* label); - -// TrueRNG Device Constants (updated to match otp.c implementation) -#define TRUERNG_VID "04D8" -#define TRUERNG_PID "F5FE" -#define TRUERNGPRO_VID "16D0" -#define TRUERNGPRO_PID "0AA0" -#define TRUERNGPROV2_VID "04D8" -#define TRUERNGPROV2_PID "EBB5" - -// SwiftRNG Device Constants (same VID/PID as TrueRNG devices) -#define SWIFT_RNG_VID "04D8" -#define SWIFT_RNG_PID "F5FE" -#define SWIFT_RNG_PRO_VID "16D0" -#define SWIFT_RNG_PRO_PID "0AA0" -#define SWIFT_RNG_PRO_V2_VID "04D8" -#define SWIFT_RNG_PRO_V2_PID "EBB5" - -// TrueRNG/SwiftRNG Device Type enumeration -typedef enum { - TRUERNG_ORIGINAL = 1, - TRUERNG_PRO = 2, - TRUERNG_PRO_V2 = 3, - SWIFT_RNG = 4, - SWIFT_RNG_PRO = 5, - SWIFT_RNG_PRO_V2 = 6 -} truerng_device_type_t; - -// Hardware RNG device information structure -typedef struct { - char port_path[256]; // Device port path (e.g., /dev/ttyUSB0) - truerng_device_type_t device_type; // Device type identifier - char friendly_name[64]; // Human-readable device name - int is_working; // 1 if device passes basic test, 0 otherwise -} hardware_rng_device_t; - -// Hardware RNG device detection and selection functions -int detect_all_hardware_rng_devices(hardware_rng_device_t* devices, int max_devices, int* num_devices_found); -int test_hardware_rng_device(const hardware_rng_device_t* device); -int select_hardware_rng_device_interactive(hardware_rng_device_t* devices, int num_devices, hardware_rng_device_t* selected_device); -int find_truerng_port(char* port_path, size_t port_path_size, truerng_device_type_t* device_type); // Legacy function for backward compatibility - -// TrueRNG entropy collection functions (updated to match implementation) -int setup_truerng_serial_port(const char* port_path); -int collect_truerng_entropy(unsigned char* entropy_buffer, size_t target_bytes, size_t* collected_bytes, int display_progress); -int collect_truerng_entropy_from_device(const hardware_rng_device_t* device, unsigned char* entropy_buffer, - size_t target_bytes, size_t* collected_bytes, int display_progress); -int collect_truerng_entropy_streaming_from_device(const hardware_rng_device_t* device, const char* pad_chksum, - size_t total_bytes, int display_progress, int entropy_mode); -const char* get_truerng_device_name(truerng_device_type_t device_type); -int read_usb_device_info(const char* port_name, char* vid, char* pid); - -// Dice entropy collection functions (updated to match implementation) -int collect_dice_entropy(unsigned char* entropy_buffer, size_t target_bytes, size_t* collected_bytes, int display_progress); - -// Unified entropy collection interface (updated to match implementation) -int collect_entropy_by_source(entropy_source_t source, unsigned char* entropy_buffer, size_t target_bytes, size_t* collected_bytes, int display_progress); - -// Entropy quality calculation -double calculate_timing_quality(const entropy_collection_state_t* state); -double calculate_variety_quality(const entropy_collection_state_t* state); -unsigned char calculate_overall_quality(const entropy_collection_state_t* state); -double get_precise_time(void); - -// Entropy processing and application -int derive_chacha20_params(const unsigned char* entropy_data, size_t entropy_size, - unsigned char key[32], unsigned char nonce[12]); -int add_entropy_to_pad(const char* pad_chksum, const unsigned char* entropy_data, - size_t entropy_size, int show_progress); -int add_entropy_direct_xor(const char* pad_chksum, const unsigned char* entropy_data, - size_t entropy_size, uint64_t pad_size, int display_progress); -int add_entropy_chacha20(const char* pad_chksum, const unsigned char* entropy_data, - size_t entropy_size, uint64_t pad_size, int display_progress); -int handle_add_entropy_to_pad(const char* pad_chksum); - -// Enhanced entropy system helper functions -int update_pad_checksum_after_entropy(const char* old_chksum, char* new_chksum); -int rename_pad_files_safely(const char* old_chksum, const char* new_chksum); -int is_pad_unused(const char* pad_chksum); - -//////////////////////////////////////////////////////////////////////////////// -// DIRECTORY MANAGEMENT FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Directory handling and path management -int ensure_pads_directory(void); -void get_pad_path(const char* chksum, char* pad_path, char* state_path); -const char* get_files_directory(void); -void get_default_file_path(const char* filename, char* result_path, size_t result_size); -void get_directory_display(const char* file_path, char* result, size_t result_size); - -//////////////////////////////////////////////////////////////////////////////// -// UTILITY FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// General utility and helper functions -uint64_t parse_size_string(const char* size_str); -char* find_pad_by_prefix(const char* prefix); -int show_pad_info(const char* chksum); -void show_progress(uint64_t current, uint64_t total, time_t start_time); - -//////////////////////////////////////////////////////////////////////////////// -// FILE OPERATIONS -//////////////////////////////////////////////////////////////////////////////// - -// File state and checksum operations -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); -int calculate_checksum_with_progress(const char* filename, char* checksum_hex, int display_progress, uint64_t file_size); - -//////////////////////////////////////////////////////////////////////////////// -// UNIVERSAL CORE FUNCTIONS FOR CODE CONSOLIDATION -//////////////////////////////////////////////////////////////////////////////// - -// Consolidated cryptographic operations -int universal_xor_operation(const unsigned char* data, size_t data_len, - const unsigned char* pad_data, unsigned char* result); -int parse_ascii_message(const char* message, char* chksum, uint64_t* offset, char* base64_data); -int load_pad_data(const char* pad_chksum, uint64_t offset, size_t length, unsigned char** pad_data); -int generate_ascii_armor(const char* chksum, uint64_t offset, const unsigned char* encrypted_data, - size_t data_length, char** ascii_output); -int validate_pad_integrity(const char* pad_path, const char* expected_chksum); - -// Universal decrypt function - consolidates all decrypt operations -int universal_decrypt(const char* input_data, const char* output_target, decrypt_mode_t mode); - -//////////////////////////////////////////////////////////////////////////////// -// BASE64 ENCODING FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Custom base64 implementation -char* custom_base64_encode(const unsigned char* input, int length); -unsigned char* custom_base64_decode(const char* input, int* output_length); - -//////////////////////////////////////////////////////////////////////////////// -// TERMINAL UI FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Terminal dimension and UI functions -void init_terminal_dimensions(void); -void print_centered_header(const char* text, int pause_before_clear); - -//////////////////////////////////////////////////////////////////////////////// -// MENU SYSTEM FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Interactive menu interface functions -void show_main_menu(void); -int handle_generate_menu(void); -int handle_encrypt_menu(void); -int handle_decrypt_menu(void); -int handle_pads_menu(void); -int handle_text_encrypt(void); -int handle_file_encrypt(void); -int handle_verify_pad(const char* pad_chksum); -int handle_delete_pad(const char* pad_chksum); - -//////////////////////////////////////////////////////////////////////////////// -// ENHANCED INPUT FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Advanced input handling -int get_filename_with_default(const char* prompt, const char* default_path, char* result, size_t result_size); - -//////////////////////////////////////////////////////////////////////////////// -// PAD SELECTION FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Unified pad selection interface -char* select_pad_interactive(const char* title, const char* prompt, pad_filter_type_t filter_type, int allow_cancel); - -//////////////////////////////////////////////////////////////////////////////// -// USAGE AND HELP FUNCTIONS -//////////////////////////////////////////////////////////////////////////////// - -// Help and usage display -void print_usage(const char* program_name); - -#endif // OTP_H \ No newline at end of file diff --git a/src/crypto.c b/src/crypto.c index 5f454f0..fbdcd07 100644 --- a/src/crypto.c +++ b/src/crypto.c @@ -5,7 +5,7 @@ #include #include #include -#include "../include/otp.h" +#include "otp.h" #define PROGRESS_UPDATE_INTERVAL (64 * 1024 * 1024) // 64MB intervals diff --git a/src/entropy.c b/src/entropy.c index fa70998..2462f70 100644 --- a/src/entropy.c +++ b/src/entropy.c @@ -15,8 +15,8 @@ #include #include #include -#include "../nostr_chacha20.h" -#include "../include/otp.h" +#include "nostr_chacha20.h" +#include "otp.h" // In-place pad entropy addition using Chacha20 or direct XOR diff --git a/src/main.c b/src/main.c index 345a555..95af937 100644 --- a/src/main.c +++ b/src/main.c @@ -15,7 +15,7 @@ #include #include #include -#include "../include/otp.h" +#include "otp.h" int main(int argc, char* argv[]) { // Initialize terminal dimensions first diff --git a/nostr_chacha20.c b/src/nostr_chacha20.c similarity index 100% rename from nostr_chacha20.c rename to src/nostr_chacha20.c diff --git a/nostr_chacha20.h b/src/nostr_chacha20.h similarity index 100% rename from nostr_chacha20.h rename to src/nostr_chacha20.h diff --git a/otp.c b/src/otp.c similarity index 100% rename from otp.c rename to src/otp.c diff --git a/include/otp.h b/src/otp.h similarity index 100% rename from include/otp.h rename to src/otp.h diff --git a/src/pads.c b/src/pads.c index cece9c9..e31ed3c 100644 --- a/src/pads.c +++ b/src/pads.c @@ -16,7 +16,7 @@ #include #include #include -#include "../include/otp.h" +#include "otp.h" // Extracted pad management functions from otp.c diff --git a/src/state.c b/src/state.c index bd660d8..b46494f 100644 --- a/src/state.c +++ b/src/state.c @@ -1,6 +1,6 @@ #include #include -#include "../include/otp.h" +#include "otp.h" // Global state variables static char current_pads_dir[512] = DEFAULT_PADS_DIR; diff --git a/src/trng.c b/src/trng.c index 3a50833..c5e28f9 100644 --- a/src/trng.c +++ b/src/trng.c @@ -16,8 +16,8 @@ #include #include #include -#include "../nostr_chacha20.h" -#include "../include/otp.h" +#include "nostr_chacha20.h" +#include "otp.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) { diff --git a/src/ui.c b/src/ui.c index d41f49c..df2779f 100644 --- a/src/ui.c +++ b/src/ui.c @@ -15,7 +15,7 @@ #include #include #include -#include "../include/otp.h" +#include "otp.h" // Initialize terminal dimensions void init_terminal_dimensions(void) { diff --git a/src/util.c b/src/util.c index 3977333..173d25e 100644 --- a/src/util.c +++ b/src/util.c @@ -15,7 +15,7 @@ #include #include #include -#include "../include/otp.h" +#include "otp.h" // Global variables for preferences static char default_pad_path[1024] = ""; diff --git a/test_swiftrng b/test_swiftrng deleted file mode 100755 index 8cc209f..0000000 Binary files a/test_swiftrng and /dev/null differ diff --git a/test_swiftrng_debug b/test_swiftrng_debug deleted file mode 100755 index 54aa0a2..0000000 Binary files a/test_swiftrng_debug and /dev/null differ diff --git a/test_swiftrng_detailed b/test_swiftrng_detailed deleted file mode 100755 index ca1709e..0000000 Binary files a/test_swiftrng_detailed and /dev/null differ diff --git a/test_truerng b/test_truerng deleted file mode 100755 index 4b47902..0000000 Binary files a/test_truerng and /dev/null differ diff --git a/temp_device_test.c b/tests/temp_device_test.c similarity index 100% rename from temp_device_test.c rename to tests/temp_device_test.c diff --git a/test.sh b/tests/test.sh similarity index 100% rename from test.sh rename to tests/test.sh diff --git a/test_truerng.c b/tests/test_truerng.c similarity index 100% rename from test_truerng.c rename to tests/test_truerng.c